From aa6fa9cc685b8e350c2daf731bc076f0644ef998 Mon Sep 17 00:00:00 2001
From: rudu <40572253+anon1892@users.noreply.github.com>
Date: Fri, 12 Jan 2024 20:38:57 +0100
Subject: [PATCH 1/8] Allow running with Python 3.11
---
poetry.lock | 8 +--
pyproject.toml | 2 +-
requirements.txt | 152 +++++++++++++++++++++++------------------------
3 files changed, 81 insertions(+), 81 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 65e50450..81580fc3 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -15,7 +15,7 @@ optional = false
python-versions = ">=3.8"
[package.dependencies]
-exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
+exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.12\""}
idna = ">=2.8"
sniffio = ">=1.1"
@@ -57,7 +57,7 @@ click = ">=8.0.0"
mypy-extensions = ">=0.4.3"
pathspec = ">=0.9.0"
platformdirs = ">=2"
-tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
+tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.12.0a7\""}
typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
[package.extras]
@@ -148,7 +148,7 @@ optional = false
python-versions = ">=3.8"
[package.dependencies]
-tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""}
+tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.12.0a6\" and extra == \"toml\""}
[package.extras]
toml = ["tomli"]
@@ -384,7 +384,7 @@ python-versions = ">=3.8"
[package.dependencies]
mypy-extensions = ">=1.0.0"
-tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.12\""}
typing-extensions = ">=4.1.0"
[package.extras]
diff --git a/pyproject.toml b/pyproject.toml
index 0c22de84..88b16667 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -9,7 +9,7 @@ homepage = "https://openandroidinstaller.org"
include = ["openandroidinstaller/bin/*", "openandroidinstaller/bin/*/*"]
[tool.poetry.dependencies]
-python = "<3.11,>=3.9"
+python = "<3.12,>=3.9"
click = "^8.1.3"
flet = "^0.7.4"
black = "^22.8.0"
diff --git a/requirements.txt b/requirements.txt
index db0a1ce7..e53720f6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,13 +1,13 @@
-altgraph==0.17.4 ; python_version >= "3.9" and python_version < "3.11" \
+altgraph==0.17.4 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406 \
--hash=sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff
-anyio==4.0.0 ; python_version >= "3.9" and python_version < "3.11" \
+anyio==4.0.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f \
--hash=sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a
-bandit==1.7.5 ; python_version >= "3.9" and python_version < "3.11" \
+bandit==1.7.5 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549 \
--hash=sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e
-black==22.12.0 ; python_version >= "3.9" and python_version < "3.11" \
+black==22.12.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320 \
--hash=sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351 \
--hash=sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350 \
@@ -20,7 +20,7 @@ black==22.12.0 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d \
--hash=sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2 \
--hash=sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f
-brotli==1.1.0 ; python_version >= "3.9" and python_version < "3.11" and platform_python_implementation == "CPython" \
+brotli==1.1.0 ; python_version >= "3.9" and python_version < "3.12" and platform_python_implementation == "CPython" \
--hash=sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208 \
--hash=sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48 \
--hash=sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354 \
@@ -104,7 +104,7 @@ brotli==1.1.0 ; python_version >= "3.9" and python_version < "3.11" and platform
--hash=sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596 \
--hash=sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2 \
--hash=sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064
-brotlicffi==1.1.0.0 ; python_version >= "3.9" and python_version < "3.11" and platform_python_implementation == "PyPy" \
+brotlicffi==1.1.0.0 ; python_version >= "3.9" and python_version < "3.12" and platform_python_implementation == "PyPy" \
--hash=sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b \
--hash=sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171 \
--hash=sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb \
@@ -132,10 +132,10 @@ brotlicffi==1.1.0.0 ; python_version >= "3.9" and python_version < "3.11" and pl
--hash=sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d \
--hash=sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808 \
--hash=sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14
-certifi==2023.7.22 ; python_version >= "3.9" and python_version < "3.11" \
+certifi==2023.7.22 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \
--hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9
-cffi==1.16.0 ; python_version >= "3.9" and python_version < "3.11" and platform_python_implementation == "PyPy" \
+cffi==1.16.0 ; python_version >= "3.9" and python_version < "3.12" and platform_python_implementation == "PyPy" \
--hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \
--hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \
--hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \
@@ -188,7 +188,7 @@ cffi==1.16.0 ; python_version >= "3.9" and python_version < "3.11" and platform_
--hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \
--hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \
--hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357
-charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "3.11" \
+charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843 \
--hash=sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786 \
--hash=sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e \
@@ -279,16 +279,16 @@ charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "3.11"
--hash=sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e \
--hash=sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e \
--hash=sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8
-click==8.1.7 ; python_version >= "3.9" and python_version < "3.11" \
+click==8.1.7 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
--hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
-colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.11" and (platform_system == "Windows" or sys_platform == "win32") \
+colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.12" and (platform_system == "Windows" or sys_platform == "win32") \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
-contextlib2==21.6.0 ; python_version >= "3.9" and python_version < "3.11" \
+contextlib2==21.6.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f \
--hash=sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869
-coverage[toml]==7.3.2 ; python_version >= "3.9" and python_version < "3.11" \
+coverage[toml]==7.3.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1 \
--hash=sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63 \
--hash=sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9 \
@@ -341,13 +341,13 @@ coverage[toml]==7.3.2 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738 \
--hash=sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a \
--hash=sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4
-exceptiongroup==1.1.3 ; python_version >= "3.9" and python_version < "3.11" \
+exceptiongroup==1.1.3 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9 \
--hash=sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3
-flet-core==0.7.4 ; python_version >= "3.9" and python_version < "3.11" \
+flet-core==0.7.4 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:f161bba1d6221ab7b0e06c03f8c52ecd03e60e7ed5fc69a8701a6ba2ab1b08dc \
--hash=sha256:fa208e8cf1a64613a57c497526a9cb6eb46d153bed61f5ebb9518baf56d15c52
-flet==0.7.4 ; python_version >= "3.9" and python_version < "3.11" \
+flet==0.7.4 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:005eb2656672f938065799b17d2cc6f7f8af767f8fed7658437453978380221a \
--hash=sha256:192ebd5f6a6717c693e47a5c632de949b45935d37fca543d85763ff454edebd0 \
--hash=sha256:77024ccbea20ab6c734002fc3617b12d6eea9bc555e3e9fedf37eb0da4c05e00 \
@@ -358,25 +358,25 @@ flet==0.7.4 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:d182626579b8f8edbd31d054740761862761568090614d7a972e4a3fdc8f3b95 \
--hash=sha256:d5056777371895c38e32bfb947be2a1ee97aedaf0b9cf75f2dcdad225aeaf095 \
--hash=sha256:ffdd02df1d16027111a3d97d874cae06fc7c9df792fc73c96cb58a1eb226f92e
-gitdb==4.0.10 ; python_version >= "3.9" and python_version < "3.11" \
+gitdb==4.0.10 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a \
--hash=sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7
-gitpython==3.1.37 ; python_version >= "3.9" and python_version < "3.11" \
+gitpython==3.1.37 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33 \
--hash=sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54
-h11==0.14.0 ; python_version >= "3.9" and python_version < "3.11" \
+h11==0.14.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
--hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761
-httpcore==0.16.3 ; python_version >= "3.9" and python_version < "3.11" \
+httpcore==0.16.3 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb \
--hash=sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0
-httpx==0.23.3 ; python_version >= "3.9" and python_version < "3.11" \
+httpx==0.23.3 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9 \
--hash=sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6
-idna==3.4 ; python_version >= "3.9" and python_version < "3.11" \
+idna==3.4 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \
--hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2
-inflate64==0.3.1 ; python_version >= "3.9" and python_version < "3.11" \
+inflate64==0.3.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:08c3b03514d4b849901762a32a45eeba7fd5d784fec698eca6975f41cca33672 \
--hash=sha256:094ef56a87c7b7398d93af7bfe7f24f830f24b6e55b77426f6516cef43e05460 \
--hash=sha256:09dd0f8d6dee0da467c264dbd9bca8b33f9c915860fc3385f2a633640a65bd10 \
@@ -446,31 +446,31 @@ inflate64==0.3.1 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:f39b57974db0e85897fff40518da420f4c4012b73515ca6f415a472228fea288 \
--hash=sha256:fd04764d0bb830414788cae897d082bf6ad92324e571a5511bd7e1de4a0cdc67 \
--hash=sha256:fde3f85864c84badb26f42d95639360e627fd09c529a76c46a06dbd7a5735c51
-iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "3.11" \
+iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
--hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
-isort==5.12.0 ; python_version >= "3.9" and python_version < "3.11" \
+isort==5.12.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \
--hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6
-loguru==0.6.0 ; python_version >= "3.9" and python_version < "3.11" \
+loguru==0.6.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c \
--hash=sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3
-macholib==1.16.3 ; python_version >= "3.9" and python_version < "3.11" and sys_platform == "darwin" \
+macholib==1.16.3 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "darwin" \
--hash=sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30 \
--hash=sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c
-markdown-it-py==3.0.0 ; python_version >= "3.9" and python_version < "3.11" \
+markdown-it-py==3.0.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \
--hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb
-mdurl==0.1.2 ; python_version >= "3.9" and python_version < "3.11" \
+mdurl==0.1.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
-multivolumefile==0.2.3 ; python_version >= "3.9" and python_version < "3.11" \
+multivolumefile==0.2.3 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:237f4353b60af1703087cf7725755a1f6fcaeeea48421e1896940cd1c920d678 \
--hash=sha256:a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6
-mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "3.11" \
+mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \
--hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782
-mypy==1.6.0 ; python_version >= "3.9" and python_version < "3.11" \
+mypy==1.6.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:091f53ff88cb093dcc33c29eee522c087a438df65eb92acd371161c1f4380ff0 \
--hash=sha256:1a69db3018b87b3e6e9dd28970f983ea6c933800c9edf8c503c3135b3274d5ad \
--hash=sha256:24f3de8b9e7021cd794ad9dfbf2e9fe3f069ff5e28cb57af6f873ffec1cb0425 \
@@ -498,22 +498,22 @@ mypy==1.6.0 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:eb7ff4007865833c470a601498ba30462b7374342580e2346bf7884557e40531 \
--hash=sha256:f8598307150b5722854f035d2e70a1ad9cc3c72d392c34fffd8c66d888c90f17 \
--hash=sha256:fea451a3125bf0bfe716e5d7ad4b92033c471e4b5b3e154c67525539d14dc15a
-oauthlib==3.2.2 ; python_version >= "3.9" and python_version < "3.11" \
+oauthlib==3.2.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \
--hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918
-packaging==23.2 ; python_version >= "3.9" and python_version < "3.11" \
+packaging==23.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \
--hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7
-pathspec==0.11.2 ; python_version >= "3.9" and python_version < "3.11" \
+pathspec==0.11.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20 \
--hash=sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3
-pbr==5.11.1 ; python_version >= "3.9" and python_version < "3.11" \
+pbr==5.11.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b \
--hash=sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3
-pefile==2023.2.7 ; python_version >= "3.9" and python_version < "3.11" and sys_platform == "win32" \
+pefile==2023.2.7 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "win32" \
--hash=sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc \
--hash=sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6
-pillow==10.0.1 ; python_version >= "3.9" and python_version < "3.11" \
+pillow==10.0.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff \
--hash=sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f \
--hash=sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21 \
@@ -568,13 +568,13 @@ pillow==10.0.1 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4 \
--hash=sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68 \
--hash=sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1
-platformdirs==3.11.0 ; python_version >= "3.9" and python_version < "3.11" \
+platformdirs==3.11.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \
--hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e
-pluggy==1.3.0 ; python_version >= "3.9" and python_version < "3.11" \
+pluggy==1.3.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \
--hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7
-psutil==5.9.5 ; python_version >= "3.9" and python_version < "3.11" and sys_platform != "cygwin" \
+psutil==5.9.5 ; python_version >= "3.9" and python_version < "3.12" and sys_platform != "cygwin" \
--hash=sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d \
--hash=sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217 \
--hash=sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4 \
@@ -589,10 +589,10 @@ psutil==5.9.5 ; python_version >= "3.9" and python_version < "3.11" and sys_plat
--hash=sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f \
--hash=sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30 \
--hash=sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48
-py7zr==0.20.6 ; python_version >= "3.9" and python_version < "3.11" \
+py7zr==0.20.6 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:c7cfb7183fb8f48038f1036a116ca89dc8bd57979d05b75567f00e88a5afe698 \
--hash=sha256:d036dee11fce69ad8d4fa86025ccfc4a3511ec27ee1c6b5bd8d6759313dbd077
-pybcj==1.0.1 ; python_version >= "3.9" and python_version < "3.11" \
+pybcj==1.0.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:023082fd677f67ebd36fe96322a4a45ac33a2b340d49010d88e1867c76744c50 \
--hash=sha256:05fad9a905772774aacc96cb174571ac1f5afa80b9f54c6ec414d369865d305c \
--hash=sha256:09872b32edad4e3653d5b357b244d267ca58fe52d4e1dd3cdff816d3bb9d9f7c \
@@ -671,10 +671,10 @@ pybcj==1.0.1 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:f8576a1dcf445ef064bf8c3b2cdc1d6353e41cb4b366329946883e285dcbcec0 \
--hash=sha256:fa787b414c4dc6b6cd75338fac18a7dbb53a09443dd863020a2d2bda76940ca6 \
--hash=sha256:fda423836d7d69cba6a6f99e7a34c2e5fe3621e5e945cd25ea9ba60a96223254
-pycparser==2.21 ; python_version >= "3.9" and python_version < "3.11" and platform_python_implementation == "PyPy" \
+pycparser==2.21 ; python_version >= "3.9" and python_version < "3.12" and platform_python_implementation == "PyPy" \
--hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
--hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
-pycryptodomex==3.19.0 ; python_version >= "3.9" and python_version < "3.11" \
+pycryptodomex==3.19.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:09c9401dc06fb3d94cb1ec23b4ea067a25d1f4c6b7b118ff5631d0b5daaab3cc \
--hash=sha256:0b2f1982c5bc311f0aab8c293524b861b485d76f7c9ab2c3ac9a25b6f7655975 \
--hash=sha256:136b284e9246b4ccf4f752d435c80f2c44fc2321c198505de1d43a95a3453b3c \
@@ -707,13 +707,13 @@ pycryptodomex==3.19.0 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:eb2fc0ec241bf5e5ef56c8fbec4a2634d631e4c4f616a59b567947a0f35ad83c \
--hash=sha256:edbe083c299835de7e02c8aa0885cb904a75087d35e7bab75ebe5ed336e8c3e2 \
--hash=sha256:ff64fd720def623bf64d8776f8d0deada1cc1bf1ec3c1f9d6f5bb5bd098d034f
-pygments==2.16.1 ; python_version >= "3.9" and python_version < "3.11" \
+pygments==2.16.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \
--hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29
-pyinstaller-hooks-contrib==2023.9 ; python_version >= "3.9" and python_version < "3.11" \
+pyinstaller-hooks-contrib==2023.9 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:76084b5988e3957a9df169d2a935d65500136967e710ddebf57263f1a909cd80 \
--hash=sha256:f34f4c6807210025c8073ebe665f422a3aa2ac5f4c7ebf4c2a26cc77bebf63b5
-pyinstaller==5.13.2 ; python_version >= "3.9" and python_version < "3.11" \
+pyinstaller==5.13.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f \
--hash=sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6 \
--hash=sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d \
@@ -726,7 +726,7 @@ pyinstaller==5.13.2 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8 \
--hash=sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2 \
--hash=sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4
-pyppmd==1.0.0 ; python_version >= "3.9" and python_version < "3.11" \
+pyppmd==1.0.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:024f714ebb8ddf59dae164adc3c220c24555d470f4adb5bd022abc50298cfff3 \
--hash=sha256:05950d8a39fd9bf6c64572d69a6dd0a1af3fadf8d4a2a0bb62f5b04c0a618300 \
--hash=sha256:075c9bd297e3b0a87dd7aeabca7fee668218acbe69ecc1c6511064558de8840f \
@@ -805,22 +805,22 @@ pyppmd==1.0.0 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:f7a1b08612627d5280ef2dad1fadb0b1a10c70df0c484f9091eff5fab5e4c84e \
--hash=sha256:f8dbe3076fe20c4d65cb1d1b51eeb17a1c177402b83100017a55daad888e198e \
--hash=sha256:f9a3782f5accab4186d68c86defc61fcc7d0146e9cdc5b54e18656852c71db16
-pytest-cov==4.1.0 ; python_version >= "3.9" and python_version < "3.11" \
+pytest-cov==4.1.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \
--hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a
-pytest-mock==3.11.1 ; python_version >= "3.9" and python_version < "3.11" \
+pytest-mock==3.11.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \
--hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f
-pytest-subprocess==1.5.0 ; python_version >= "3.9" and python_version < "3.11" \
+pytest-subprocess==1.5.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:d7693b96f588f39b84c7b2b5c04287459246dfae6be1dd4098937a728ad4fbe3 \
--hash=sha256:dfd75b10af6800a89a9b758f2e2eceff9de082a27bd1388521271b6e8bde298b
-pytest==7.4.2 ; python_version >= "3.9" and python_version < "3.11" \
+pytest==7.4.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002 \
--hash=sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069
-pywin32-ctypes==0.2.2 ; python_version >= "3.9" and python_version < "3.11" and sys_platform == "win32" \
+pywin32-ctypes==0.2.2 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "win32" \
--hash=sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60 \
--hash=sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7
-pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "3.11" \
+pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \
--hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \
--hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \
@@ -861,7 +861,7 @@ pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \
--hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
--hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
-pyzstd==0.15.9 ; python_version >= "3.9" and python_version < "3.11" \
+pyzstd==0.15.9 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:00c188704141c709da96cc4a79f058d51f5318e839d6f904c7cc9badcf78e98e \
--hash=sha256:013321ddaff083b24e43a8b06303446771978343b488ed73adf56c70a46e2783 \
--hash=sha256:0a4334e972109bdd17fb40dbdd9fcca6137648cab416fca505a2dcd186f50533 \
@@ -967,7 +967,7 @@ pyzstd==0.15.9 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:f7cfc683d320402d61205a196ace77f15dcfd16b5771f8b9ffaf406868c98e78 \
--hash=sha256:f9c5fc29a5b9d61a8f0a3494172107e0e6cf23d0cb800d6285c6722ba7fc3535 \
--hash=sha256:fc92a718bccb8ce5c9eb63fca743c38f3fa4c4e47f58f0c4ada51b2474668184
-regex==2022.10.31 ; python_version >= "3.9" and python_version < "3.11" \
+regex==2022.10.31 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad \
--hash=sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4 \
--hash=sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd \
@@ -1056,19 +1056,19 @@ regex==2022.10.31 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185 \
--hash=sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8 \
--hash=sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5
-repath==0.9.0 ; python_version >= "3.9" and python_version < "3.11" \
+repath==0.9.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:8292139bac6a0e43fd9d70605d4e8daeb25d46672e484ed31a24c7ce0aef0fb7 \
--hash=sha256:ee079d6c91faeb843274d22d8f786094ee01316ecfe293a1eb6546312bb6a318
-requests==2.31.0 ; python_version >= "3.9" and python_version < "3.11" \
+requests==2.31.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
-rfc3986[idna2008]==1.5.0 ; python_version >= "3.9" and python_version < "3.11" \
+rfc3986[idna2008]==1.5.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835 \
--hash=sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97
-rich==13.6.0 ; python_version >= "3.9" and python_version < "3.11" \
+rich==13.6.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245 \
--hash=sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef
-ruff==0.0.25 ; python_version >= "3.9" and python_version < "3.11" \
+ruff==0.0.25 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:00383f785841f2c04d9eb281d316fd74e0b4f9171b641bd20fab98273b39c097 \
--hash=sha256:0f7b52bffa9201e4d68576634908e931a05304d434e798bfb1a5bec0dfa0474c \
--hash=sha256:196714934f0c902ef4d1bf2fad8dd60a23c03a1077dad8ecd9a4ce9c3dc10937 \
@@ -1085,37 +1085,37 @@ ruff==0.0.25 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:e774538075e7f3d1e3d4ea4f18d8d50e5964fd2c7fff54ddf39010b10ee1b49f \
--hash=sha256:f50842b5ea74e9a2e286bc83a9c4ff54a5c7439238843b46998d07838d7f4cd0 \
--hash=sha256:fa4df41b5a9622661402766015588663176f6c4b8abf403b739eec3f058fac2b
-schema==0.7.5 ; python_version >= "3.9" and python_version < "3.11" \
+schema==0.7.5 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197 \
--hash=sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c
-setuptools==68.2.2 ; python_version >= "3.9" and python_version < "3.11" \
+setuptools==68.2.2 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \
--hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a
-six==1.16.0 ; python_version >= "3.9" and python_version < "3.11" \
+six==1.16.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
-smmap==5.0.1 ; python_version >= "3.9" and python_version < "3.11" \
+smmap==5.0.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62 \
--hash=sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da
-sniffio==1.3.0 ; python_version >= "3.9" and python_version < "3.11" \
+sniffio==1.3.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \
--hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384
-stevedore==5.1.0 ; python_version >= "3.9" and python_version < "3.11" \
+stevedore==5.1.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d \
--hash=sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c
-texttable==1.7.0 ; python_version >= "3.9" and python_version < "3.11" \
+texttable==1.7.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638 \
--hash=sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917
-tomli==2.0.1 ; python_version >= "3.9" and python_version < "3.11" \
+tomli==2.0.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
-typing-extensions==4.8.0 ; python_version >= "3.9" and python_version < "3.11" \
+typing-extensions==4.8.0 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
-urllib3==2.0.6 ; python_version >= "3.9" and python_version < "3.11" \
+urllib3==2.0.6 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2 \
--hash=sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564
-watchdog==2.3.1 ; python_version >= "3.9" and python_version < "3.11" \
+watchdog==2.3.1 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190 \
--hash=sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43 \
--hash=sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d \
@@ -1144,10 +1144,10 @@ watchdog==2.3.1 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906 \
--hash=sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b \
--hash=sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f
-websocket-client==1.6.4 ; python_version >= "3.9" and python_version < "3.11" \
+websocket-client==1.6.4 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24 \
--hash=sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df
-websockets==10.4 ; python_version >= "3.9" and python_version < "3.11" \
+websockets==10.4 ; python_version >= "3.9" and python_version < "3.12" \
--hash=sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41 \
--hash=sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96 \
--hash=sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4 \
@@ -1217,6 +1217,6 @@ websockets==10.4 ; python_version >= "3.9" and python_version < "3.11" \
--hash=sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f \
--hash=sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106 \
--hash=sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f
-win32-setctime==1.1.0 ; python_version >= "3.9" and python_version < "3.11" and sys_platform == "win32" \
+win32-setctime==1.1.0 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "win32" \
--hash=sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2 \
--hash=sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad
From 5b8981707d5691e911a22f818460a20c35c0c0f7 Mon Sep 17 00:00:00 2001
From: rudu <40572253+anon1892@users.noreply.github.com>
Date: Sat, 13 Jan 2024 09:38:15 +0100
Subject: [PATCH 2/8] Use gettext almost everywhere
---
openandroidinstaller/app_state.py | 9 +--
openandroidinstaller/openandroidinstaller.py | 16 +++--
openandroidinstaller/translations.py | 26 +++++++
openandroidinstaller/views/addon_view.py | 35 ++++-----
.../views/install_addons_view.py | 18 ++---
openandroidinstaller/views/install_view.py | 21 +++---
.../views/requirements_view.py | 43 +++++------
openandroidinstaller/views/select_view.py | 71 ++++++++++---------
openandroidinstaller/views/start_view.py | 43 +++++------
openandroidinstaller/views/step_view.py | 15 ++--
openandroidinstaller/views/success_view.py | 5 +-
openandroidinstaller/views/welcome_view.py | 18 ++---
12 files changed, 180 insertions(+), 140 deletions(-)
create mode 100644 openandroidinstaller/translations.py
diff --git a/openandroidinstaller/app_state.py b/openandroidinstaller/app_state.py
index 22d2722f..aad4973b 100644
--- a/openandroidinstaller/app_state.py
+++ b/openandroidinstaller/app_state.py
@@ -19,6 +19,7 @@
from loguru import logger
from installer_config import _load_config, Step
+from translations import _
class AppState:
@@ -94,9 +95,9 @@ def toggle_flash_unlock_bootloader(self):
else:
self.steps = [
Step(
- title="Boot custom recovery",
+ title=_("Boot custom recovery"),
type="confirm_button",
- content="If you already flashed TWRP, boot into it by pressing 'Confirm and run'. Otherwise restart the process. Once your phone screen looks like the picture on the left, continue.",
+ content=_("If you already flashed TWRP, boot into it by pressing 'Confirm and run'. Otherwise restart the process. Once your phone screen looks like the picture on the left, continue."),
command="adb_reboot_recovery",
img="twrp-start.jpeg",
)
@@ -116,9 +117,9 @@ def toggle_flash_recovery(self):
logger.info("Skipping flashing recovery.")
self.steps = [
Step(
- title="Boot custom recovery",
+ title=_("Boot custom recovery"),
type="call_button",
- content="If you already flashed TWRP, boot into it by pressing 'Confirm and run'. Otherwise restart the process. Once your phone screen looks like the picture on the left, continue.",
+ content=_("If you already flashed TWRP, boot into it by pressing 'Confirm and run'. Otherwise restart the process. Once your phone screen looks like the picture on the left, continue."),
command="adb_reboot_recovery",
img="twrp-start.jpeg",
)
diff --git a/openandroidinstaller/openandroidinstaller.py b/openandroidinstaller/openandroidinstaller.py
index ae783429..f44d6061 100644
--- a/openandroidinstaller/openandroidinstaller.py
+++ b/openandroidinstaller/openandroidinstaller.py
@@ -54,6 +54,8 @@
InstallAddonsView,
)
from tooling import run_command
+from translations import _
+
# VERSION number
VERSION = "0.5.1-beta"
@@ -249,29 +251,29 @@ def main(page: Page, test: bool = False, test_config: str = "sargo"):
),
),
padding=15,
- tooltip="Frequently asked questions and encountered issues.",
+ tooltip=_("Frequently asked questions and encountered issues."),
),
Container(
content=ElevatedButton(
icon=icons.FEEDBACK_OUTLINED,
- text="Give feedback",
+ text=_("Give feedback"),
on_click=lambda _: webbrowser.open(
"https://openandroidinstaller.org/feedback.html"
),
),
padding=15,
- tooltip="Give feedback about your experience with OpenAndroidInstaller",
+ tooltip=_("Give feedback about your experience with OpenAndroidInstaller"),
),
Container(
content=ElevatedButton(
icon=icons.BUG_REPORT_OUTLINED,
- text="Report a bug",
+ text=_("Report a bug"),
on_click=lambda _: webbrowser.open(
"https://github.com/openandroidinstaller-dev/openandroidinstaller/issues"
),
),
padding=15,
- tooltip="Report an issue on github",
+ tooltip=_("Report an issue on github"),
),
],
)
@@ -285,10 +287,10 @@ def close_banner(e):
bgcolor=colors.AMBER_100,
leading=Icon(icons.WARNING_AMBER_ROUNDED, color=colors.AMBER, size=40),
content=Text(
- "These instructions only work if you follow every section and step precisely. Do not continue after something fails!"
+ _("These instructions only work if you follow every section and step precisely. Do not continue after something fails!")
),
actions=[
- TextButton("I understand", on_click=close_banner),
+ TextButton(_("I understand"), on_click=close_banner),
],
)
page.banner.open = True
diff --git a/openandroidinstaller/translations.py b/openandroidinstaller/translations.py
new file mode 100644
index 00000000..84f6b070
--- /dev/null
+++ b/openandroidinstaller/translations.py
@@ -0,0 +1,26 @@
+"""File to import to manage translations."""
+
+# This file is part of OpenAndroidInstaller.
+# OpenAndroidInstaller is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License as published by the Free Software Foundation,
+# either version 3 of the License, or (at your option) any later version.
+
+# OpenAndroidInstaller is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License along with OpenAndroidInstaller.
+# If not, see ."""
+# Author: Tobias Sterbak
+
+import os
+import gettext
+
+
+# Initialize localization
+# TODO : Automaticaly check user locale and if available, use it.
+fr = gettext.translation('base', localedir='../locales', languages=['fr'])
+fr.install()
+_ = fr.gettext # French
+#os.environ['LANGUAGE']='fr'
+#_ = gettext.gettext
diff --git a/openandroidinstaller/views/addon_view.py b/openandroidinstaller/views/addon_view.py
index 5999e5b9..4240a173 100644
--- a/openandroidinstaller/views/addon_view.py
+++ b/openandroidinstaller/views/addon_view.py
@@ -40,6 +40,7 @@
from views import BaseView
from app_state import AppState
from widgets import get_title, confirm_button
+from translations import _
class AddonsView(BaseView):
@@ -55,8 +56,8 @@ def build(self):
# dialog box to explain OS images and recovery
self.dlg_explain_addons = AlertDialog(
modal=True,
- title=Text("What kind of addons are supported?"),
- content=Markdown(
+ title=Text(_("What kind of addons are supported?")),
+ content=Markdown(_(
"""## Google Apps:
There are different packages of Google Apps available. Most notable
- [MindTheGapps](https://wiki.lineageos.org/gapps#downloads) and
@@ -79,10 +80,10 @@ def build(self):
F-Droid is an installable catalogue of libre software apps for Android. The F-Droid client app makes it easy to browse, install, and keep track of updates on your device.
You can get the zip file to install this addon here: [https://f-droid.org/en/packages/org.fdroid.fdroid.privileged.ota](https://f-droid.org/en/packages/org.fdroid.fdroid.privileged.ota).
-""",
+"""),
),
actions=[
- TextButton("Close", on_click=self.close_close_explain_addons_dlg),
+ TextButton(_("Close"), on_click=self.close_close_explain_addons_dlg),
],
actions_alignment="end",
shape=CountinuosRectangleBorder(radius=0),
@@ -90,7 +91,7 @@ def build(self):
# initialize file pickers
self.pick_addons_dialog = FilePicker(on_result=self.pick_addons_result)
- self.selected_addons = Text("Selected addons: ")
+ self.selected_addons = Text(_("Selected addons: "))
# initialize and manage button state.
# wrap the call to the next step in a call to boot fastboot
@@ -104,18 +105,18 @@ def build(self):
# create help/info button to show the help dialog
info_button = OutlinedButton(
- "What kind of addons?",
+ _("What kind of addons?"),
on_click=self.open_explain_addons_dlg,
expand=True,
icon=icons.HELP_OUTLINE_OUTLINED,
icon_color=colors.DEEP_ORANGE_500,
- tooltip="Get more details on what addons are supported.",
+ tooltip=_("Get more details on what addons are supported."),
)
# add title
self.right_view_header.controls.append(
get_title(
- "You can select additional addons to install.",
+ _("You can select additional addons to install."),
info_button=info_button,
step_indicator_img="steps-header-select.png",
)
@@ -128,11 +129,11 @@ def build(self):
self.right_view.controls.append(
Column(
[
- Text("Here you can download the F-Droid App-Store:"),
+ Text(_("Here you can download the F-Droid App-Store:")),
Row(
[
ElevatedButton(
- "Download F-Droid App-Store",
+ _("Download F-Droid App-Store"),
icon=icons.DOWNLOAD_OUTLINED,
on_click=lambda _: webbrowser.open(
"https://f-droid.org/en/packages/org.fdroid.fdroid.privileged.ota/"
@@ -142,12 +143,12 @@ def build(self):
]
),
Text(
- "Here you can find instructions on how to download the right Google apps for your device."
+ _("Here you can find instructions on how to download the right Google apps for your device.")
),
Row(
[
ElevatedButton(
- "Download Google Apps",
+ _("Download Google Apps"),
icon=icons.DOWNLOAD_OUTLINED,
on_click=lambda _: webbrowser.open(
"https://wiki.lineageos.org/gapps#downloads"
@@ -156,11 +157,11 @@ def build(self):
),
]
),
- Text("Here you can download MicroG:"),
+ Text(_("Here you can download MicroG:")),
Row(
[
ElevatedButton(
- "Download MicroG",
+ _("Download MicroG"),
icon=icons.DOWNLOAD_OUTLINED,
on_click=lambda _: webbrowser.open(
"https://github.com/FriendlyNeighborhoodShane/MinMicroG-abuse-CI/releases"
@@ -176,7 +177,7 @@ def build(self):
# attach the controls for uploading addons
self.right_view.controls.extend(
[
- Text("Select addons:", style="titleSmall"),
+ Text(_("Select addons:"), style="titleSmall"),
# Markdown(
# f"""
# The image file should look something like `lineage-19.1-20221101-nightly-{self.state.config.metadata.get('devicecode')}-signed.zip`."""
@@ -184,7 +185,7 @@ def build(self):
Row(
[
FilledButton(
- "Pick the addons you want to install",
+ _("Pick the addons you want to install"),
icon=icons.UPLOAD_FILE,
on_click=lambda _: self.pick_addons_dialog.pick_files(
allow_multiple=True,
@@ -225,7 +226,7 @@ def pick_addons_result(self, e: FilePickerResultEvent):
self.state.addon_paths = self.addon_paths
logger.info(f"Selected addons: {self.addon_paths}")
else:
- logger.info("No addons selected.")
+ logger.info(_("No addons selected."))
# check if the addons works with the device and show the filename in different colors accordingly
# update
self.selected_addons.update()
diff --git a/openandroidinstaller/views/install_addons_view.py b/openandroidinstaller/views/install_addons_view.py
index bdc54840..0dd6ed25 100644
--- a/openandroidinstaller/views/install_addons_view.py
+++ b/openandroidinstaller/views/install_addons_view.py
@@ -41,6 +41,8 @@
TerminalBox,
ProgressIndicator,
)
+from translations import _
+
class InstallAddonsView(BaseView):
@@ -73,7 +75,7 @@ def check_advanced_switch(e):
self.right_view.update()
self.advanced_switch = Switch(
- label="Advanced output",
+ label=_("Advanced output"),
on_change=check_advanced_switch,
disabled=False,
)
@@ -87,18 +89,18 @@ def check_advanced_switch(e):
# main controls
self.right_view_header.controls = [
get_title(
- "Install Addons",
+ _("Install Addons"),
step_indicator_img="steps-header-install.png",
)
]
self.right_view.controls = [
Markdown(
- """In the next steps, you flash the selected Addons.
+ _("""In the next steps, you flash the selected Addons.
Confirm to install.
This might take a while. At the end your phone will boot into the new OS.
-"""
+""")
)
]
# basic view
@@ -107,7 +109,7 @@ def check_advanced_switch(e):
self.confirm_button.disabled = True
# button to run the installation process
self.install_button = ElevatedButton(
- "Confirm and install addons",
+ _("Confirm and install addons"),
on_click=self.run_install_addons,
expand=True,
icon=icons.DIRECTIONS_RUN_OUTLINED,
@@ -133,9 +135,9 @@ def check_advanced_switch(e):
self.right_view.controls.append(
Row(
[
- Text("Do you want to skip?"),
+ Text(_("Do you want to skip?")),
ElevatedButton(
- "Skip",
+ _("Skip"),
on_click=self.on_confirm,
icon=icons.NEXT_PLAN_OUTLINED,
expand=True,
@@ -200,7 +202,7 @@ def run_install_addons(self, e):
# enable call button to retry
self.install_button.disabled = False
# also remove the last error text if it happened
- self.error_text.value = "Installation failed! Try again or make sure everything is setup correctly."
+ self.error_text.value = _("Installation failed! Try again or make sure everything is setup correctly.")
else:
sleep(4) # wait to make sure everything is fine
self.progress_indicator.set_progress_bar(100)
diff --git a/openandroidinstaller/views/install_view.py b/openandroidinstaller/views/install_view.py
index 6e8c7b4d..82eb6330 100644
--- a/openandroidinstaller/views/install_view.py
+++ b/openandroidinstaller/views/install_view.py
@@ -40,6 +40,7 @@
TerminalBox,
ProgressIndicator,
)
+from translations import _
class InstallView(BaseView):
@@ -70,7 +71,7 @@ def check_advanced_switch(e):
self.right_view.update()
self.advanced_switch = Switch(
- label="Advanced output",
+ label=_("Advanced output"),
on_change=check_advanced_switch,
disabled=False,
)
@@ -88,7 +89,7 @@ def check_addons_switch(e):
self.state.install_addons = False
self.install_addons_switch = Switch(
- label="Install addons",
+ label=_("Install addons"),
on_change=check_addons_switch,
disabled=False,
)
@@ -101,13 +102,13 @@ def check_addons_switch(e):
# main controls
self.right_view_header.controls = [
get_title(
- "Install OS",
+ _("Install OS"),
step_indicator_img="steps-header-install.png",
)
]
self.right_view.controls = [
Markdown(
- """In the next steps, you finally flash the selected OS image.
+ _("""In the next steps, you finally flash the selected OS image.
Connect your device with your computer with the USB-Cable. This step will format your phone and wipe all the data.
It will also remove encryption and delete all files stored in the internal storage.
@@ -122,7 +123,7 @@ def check_addons_switch(e):
#### **Warning:**
Don't try to add addons like Google Apps if your OS ROM already has Google Apps or microG included! Otherwise your system will break!
-"""
+""")
)
]
# basic view
@@ -131,7 +132,7 @@ def check_addons_switch(e):
self.confirm_button.disabled = True
# button to run the installation process
self.install_button = ElevatedButton(
- "Confirm and install",
+ _("Confirm and install"),
on_click=self.run_install,
expand=True,
icon=icons.DIRECTIONS_RUN_OUTLINED,
@@ -157,9 +158,9 @@ def check_addons_switch(e):
self.right_view.controls.append(
Row(
[
- Text("Do you want to skip?"),
+ Text(_("Do you want to skip?")),
ElevatedButton(
- "Skip",
+ _("Skip"),
on_click=self.on_confirm,
icon=icons.NEXT_PLAN_OUTLINED,
expand=True,
@@ -178,7 +179,7 @@ def run_install(self, e):
# disable the call button while the command is running
self.install_button.disabled = True
self.install_addons_switch.disabled = True
- self.error_text.value = "Please be patient, it may take a few minutes."
+ self.error_text.value = _("Please be patient, it may take a few minutes.")
self.error_text.color = colors.GREEN
# reset the progress indicators
self.progress_indicator.clear()
@@ -208,7 +209,7 @@ def run_install(self, e):
# enable call button to retry
self.install_button.disabled = False
# also remove the last error text if it happened
- self.error_text.value = "Installation failed! Try again or make sure everything is setup correctly."
+ self.error_text.value = _("Installation failed! Try again or make sure everything is setup correctly.")
self.error_text.color = colors.RED
else:
sleep(5) # wait to make sure everything is fine
diff --git a/openandroidinstaller/views/requirements_view.py b/openandroidinstaller/views/requirements_view.py
index 05f7f2e8..ec34f5c6 100644
--- a/openandroidinstaller/views/requirements_view.py
+++ b/openandroidinstaller/views/requirements_view.py
@@ -38,6 +38,7 @@
from views import BaseView
from app_state import AppState
from widgets import get_title
+from translations import _
class RequirementsView(BaseView):
@@ -64,7 +65,7 @@ def init_visuals(
self.checkbox_cards = []
# continue button
self.continue_button = ElevatedButton(
- "Continue",
+ _("Continue"),
on_click=self.on_confirm,
icon=icons.NEXT_PLAN_OUTLINED,
disabled=True,
@@ -72,7 +73,7 @@ def init_visuals(
)
# back button
self.back_button = ElevatedButton(
- "Back",
+ _("Back"),
on_click=self.on_back,
icon=icons.ARROW_BACK,
expand=True,
@@ -81,9 +82,9 @@ def init_visuals(
# dialog to explain howto find the android and firmware version
self.dlg_howto_find_versions = AlertDialog(
modal=True,
- title=Text("Where to find the current Android and/or firmware version?"),
+ title=Text(_("Where to find the current Android and/or firmware version?")),
content=Markdown(
- """
+ _("""
## Find your current Android Version
Scroll down on the Settings screen and look for an "About phone", "About tablet", or "System" option.
You'll usually find this at the very bottom of the main Settings screen, under System, but depending
@@ -94,10 +95,10 @@ def init_visuals(
## Find your current device firmware version
On the same screen you find the "Android version" you can also find the Firmware Version.
-On some devices, the build version is basically the firmware version.""",
+On some devices, the build version is basically the firmware version."""),
),
actions=[
- TextButton("Close", on_click=self.close_find_version_dlg),
+ TextButton(_("Close"), on_click=self.close_find_version_dlg),
],
actions_alignment="end",
shape=CountinuosRectangleBorder(radius=0),
@@ -108,25 +109,25 @@ def build(self):
# create help/info button to show the help dialog
info_button = OutlinedButton(
- "How to Find the version",
+ _("How to Find the version"),
on_click=self.open_find_version_dlg,
expand=False,
icon=icons.HELP_OUTLINE_OUTLINED,
icon_color=colors.DEEP_ORANGE_500,
- tooltip="How to find the firmware and android version of your device.",
+ tooltip=_("How to find the firmware and android version of your device."),
)
# build up the main view
self.right_view_header.controls = [
get_title(
- "Check the Requirements",
+ _("Check the Requirements"),
step_indicator_img="steps-header-requirements.png",
),
]
self.right_view.controls.extend(
[
Text(
- "Before continuing you need to check some requirements to progress. Please read the instructions and check the boxes if everything is fine."
+ _("Before continuing you need to check some requirements to progress. Please read the instructions and check the boxes if everything is fine.")
),
Divider(),
]
@@ -139,7 +140,7 @@ def build(self):
required_android_version = self.state.config.requirements.get("android")
if required_android_version:
android_checkbox = Checkbox(
- label="The required android version is installed. (Or I know the risk of continuing)",
+ label=_("The required android version is installed. (Or I know the risk of continuing)"),
on_change=self.enable_continue_button,
)
android_version_check = Card(
@@ -178,7 +179,7 @@ def build(self):
)
if required_firmware_version:
firmware_checkbox = Checkbox(
- label="The required firmware version is installed. (Or I know the risk of continuing)",
+ label=_("The required firmware version is installed. (Or I know the risk of continuing)"),
on_change=self.enable_continue_button,
)
firmware_version_check = Card(
@@ -234,7 +235,7 @@ def build(self):
def get_battery_check(self):
"""Get checkbox and card for default requirements: battery level."""
battery_checkbox = Checkbox(
- label="The battery level is over 80%.",
+ label=_("The battery level is over 80%."),
on_change=self.enable_continue_button,
)
battery_check_card = Card(
@@ -242,10 +243,10 @@ def get_battery_check(self):
content=Column(
[
Markdown(
- """
+ _("""
#### Battery level over 80%
Before continuing make sure your device battery level is above 80%.
- """
+ """)
),
battery_checkbox,
]
@@ -258,7 +259,7 @@ def get_battery_check(self):
def get_boot_stock_check(self):
"""Get checkbox and card for default requirements: boot stock once."""
boot_stock_checkbox = Checkbox(
- label="Booted the stock OS at least once.",
+ label=_("Booted the stock OS at least once."),
on_change=self.enable_continue_button,
)
boot_stock_check_card = Card(
@@ -266,11 +267,11 @@ def get_boot_stock_check(self):
content=Column(
[
Markdown(
- """
+ _("""
#### Boot your device with the stock OS at least once and check every functionality.
Make sure that you can send and receive SMS and place and receive calls (also via WiFi and LTE, if available),
otherwise it won\'t work on your custom ROM either! Additionally, some devices require that VoLTE/VoWiFi be utilized once on stock to provision IMS.
- """
+ """)
),
boot_stock_checkbox,
]
@@ -283,7 +284,7 @@ def get_boot_stock_check(self):
def get_lock_check(self):
"""Get the checkbox and card for the default requirement: disable lock code and fingerprint."""
lock_checkbox = Checkbox(
- label="No lock code or fingerprint lock enabled.",
+ label=_("No lock code or fingerprint lock enabled."),
on_change=self.enable_continue_button,
)
lock_check_card = Card(
@@ -291,9 +292,9 @@ def get_lock_check(self):
content=Column(
[
Markdown(
- """
+ _("""
#### Disable all device lock codes and fingerprint locks.
- """
+ """)
),
lock_checkbox,
]
diff --git a/openandroidinstaller/views/select_view.py b/openandroidinstaller/views/select_view.py
index d5937870..82f3dfef 100644
--- a/openandroidinstaller/views/select_view.py
+++ b/openandroidinstaller/views/select_view.py
@@ -47,6 +47,7 @@
recovery_works_with_device,
image_sdk_level,
)
+from translations import _
class SelectFilesView(BaseView):
@@ -69,9 +70,9 @@ def init_visuals(
# dialog box to explain OS images and recovery
self.dlg_explain_images = AlertDialog(
modal=True,
- title=Text("What is an OS image and recovery and why do I need it?"),
+ title=Text(_("What is an OS image and recovery and why do I need it?")),
content=Markdown(
- """## OS image or ROM
+ _("""## OS image or ROM
An operating system (OS) is system software that manages computer hardware,
software resources, and provides common services for computer programs.
Popular, custom operating systems for mobile devices based on Android are
@@ -89,10 +90,10 @@ def init_visuals(
This custom software can include smaller modifications like rooting your device or even
replacing the firmware of the device with a completely custom ROM.
-OpenAndroidInstaller works with the [TWRP recovery project](https://twrp.me/about).""",
+OpenAndroidInstaller works with the [TWRP recovery project](https://twrp.me/about)."""),
),
actions=[
- TextButton("Close", on_click=self.close_close_explain_images_dlg),
+ TextButton(_("Close"), on_click=self.close_close_explain_images_dlg),
],
actions_alignment="end",
shape=CountinuosRectangleBorder(radius=0),
@@ -110,8 +111,8 @@ def init_visuals(
on_result=self.pick_vendor_boot_result
)
- self.selected_image = Text("Selected image: ")
- self.selected_recovery = Text("Selected recovery: ")
+ self.selected_image = Text(_("Selected image: "))
+ self.selected_recovery = Text(_("Selected recovery: "))
self.selected_dtbo = Checkbox(
fill_color=colors.RED, value=None, disabled=True, tristate=True
)
@@ -129,7 +130,7 @@ def init_visuals(
self.confirm_button = confirm_button(self.on_confirm)
self.confirm_button.disabled = True
self.continue_eitherway_button = confirm_button(
- self.on_confirm, "Continue without additional images"
+ self.on_confirm, _("Continue without additional images")
)
self.continue_eitherway_button.disabled = True
self.pick_recovery_dialog.on_result = self.enable_button_if_ready
@@ -140,7 +141,7 @@ def init_visuals(
self.pick_vendor_boot_dialog.on_result = self.enable_button_if_ready
# back button
self.back_button = ElevatedButton(
- "Back",
+ _("Back"),
on_click=self.on_back,
icon=icons.ARROW_BACK,
expand=True,
@@ -168,18 +169,18 @@ def build(self):
# create help/info button to show the help dialog for the image and recovery selection
explain_images_button = OutlinedButton(
- "What is this?",
+ _("What is this?"),
on_click=self.open_explain_images_dlg,
expand=True,
icon=icons.HELP_OUTLINE_OUTLINED,
icon_color=colors.DEEP_ORANGE_500,
- tooltip="Get more details on custom operating system images and recoveries.",
+ tooltip=_("Get more details on custom operating system images and recoveries."),
)
# add title
self.right_view_header.controls.append(
get_title(
- "Now pick an OS image and a recovery file:",
+ _("Now pick an OS image and a recovery file:"),
info_button=explain_images_button,
step_indicator_img="steps-header-select.png",
)
@@ -196,7 +197,7 @@ def build(self):
self.right_view.controls.extend(
[
Text(
- "Important notes for your device",
+ _("Important notes for your device"),
style="titleSmall",
color=colors.RED,
weight="bold",
@@ -213,12 +214,12 @@ def build(self):
Column(
[
Text(
- "You can bring your own image and recovery or you download the officially supported image file for your device here:"
+ _("You can bring your own image and recovery or you download the officially supported image file for your device here:")
),
Row(
[
ElevatedButton(
- "Download LineageOS image",
+ _("Download LineageOS image"),
icon=icons.DOWNLOAD_OUTLINED,
on_click=lambda _: webbrowser.open(
self.download_link
@@ -226,7 +227,7 @@ def build(self):
expand=True,
),
ElevatedButton(
- "Download TWRP recovery",
+ _("Download TWRP recovery"),
icon=icons.DOWNLOAD_OUTLINED,
on_click=lambda _: webbrowser.open(
twrp_download_link
@@ -242,7 +243,7 @@ def build(self):
# attach the controls for uploading image and recovery
self.right_view.controls.extend(
[
- Text("Select an OS image:", style="titleSmall"),
+ Text(_("Select an OS image:"), style="titleSmall"),
Markdown(
f"""
The image file should look something like `lineage-19.1-20221101-nightly-{self.state.config.device_code}-signed.zip`."""
@@ -250,7 +251,7 @@ def build(self):
Row(
[
FilledButton(
- "Pick OS image",
+ _("Pick OS image"),
icon=icons.UPLOAD_FILE,
on_click=lambda _: self.pick_image_dialog.pick_files(
allow_multiple=False,
@@ -268,7 +269,7 @@ def build(self):
if self.state.flash_recovery:
self.right_view.controls.extend(
[
- Text("Select a TWRP recovery image:", style="titleSmall"),
+ Text(_("Select a TWRP recovery image:"), style="titleSmall"),
Markdown(
f"""
The recovery image should look something like `twrp-3.7.0_12-0-{self.state.config.device_code}.img`.
@@ -279,7 +280,7 @@ def build(self):
Row(
[
FilledButton(
- "Pick TWRP recovery file",
+ _("Pick TWRP recovery file"),
icon=icons.UPLOAD_FILE,
on_click=lambda _: self.pick_recovery_dialog.pick_files(
allow_multiple=False,
@@ -324,13 +325,13 @@ def get_notes(self) -> str:
brand = self.state.config.metadata.get("brand", "")
if brand in ["xiaomi", "poco"]:
notes.append(
- "- If something goes wrong, you can reinstall MiUI here:\n \n"
+ _("- If something goes wrong, you can reinstall MiUI here:\n \n")
)
# this should be used as little as possible!
if self.state.config.metadata.get("untested", False):
notes.append(
- "- **This device has not been tested with OpenAndroidInstaller yet.** The installation can go wrong. You may have to finish the installation process with command line. If you test, please report the result on GitHub."
+ _("- **This device has not been tested with OpenAndroidInstaller yet.** The installation can go wrong. You may have to finish the installation process with command line. If you test, please report the result on GitHub.")
)
notes.extend(
@@ -343,7 +344,7 @@ def toggle_additional_image_selection(self):
# dialogue box to explain additional required images
self.dlg_explain_additional_images = AlertDialog(
modal=True,
- title=Text("Why do I need additional images and where do I get them?"),
+ title=Text(_("Why do I need additional images and where do I get them?")),
content=Markdown(
f"""## About additional images
Some devices require additional images to be flashed before the recovery and OS image can be flashed.
@@ -371,7 +372,7 @@ def toggle_additional_image_selection(self):
),
actions=[
TextButton(
- "Close", on_click=self.close_close_explain_additional_images_dlg
+ _("Close"), on_click=self.close_close_explain_additional_images_dlg
),
],
actions_alignment="end",
@@ -380,12 +381,12 @@ def toggle_additional_image_selection(self):
# create help/info button to show the help dialog for the image and recovery selection
explain_additional_images_button = OutlinedButton(
- "Why do I need this and where do I get it?",
+ _("Why do I need this and where do I get it?"),
on_click=self.open_explain_additional_images_dlg,
expand=True,
icon=icons.HELP_OUTLINE_OUTLINED,
icon_color=colors.DEEP_ORANGE_500,
- tooltip="Get more details on additional images and download links.",
+ tooltip=_("Get more details on additional images and download links."),
)
# attach the controls for uploading others partitions, like dtbo, vbmeta & super_empty
@@ -396,16 +397,16 @@ def toggle_additional_image_selection(self):
Row(
[
Text(
- "Select required additional images:", style="titleSmall"
+ _("Select required additional images:"), style="titleSmall"
),
explain_additional_images_button,
]
),
Markdown(
- """
+ _("""
Your selected device and ROM requires flashing of additional partitions. Please select the required images below.
-Make sure the file is for **your exact phone model!**""",
+Make sure the file is for **your exact phone model!**"""),
),
]
)
@@ -416,7 +417,7 @@ def toggle_additional_image_selection(self):
Row(
[
FilledButton(
- "Pick `dtbo.img` image",
+ _("Pick `dtbo.img` image"),
icon=icons.UPLOAD_FILE,
on_click=lambda _: self.pick_dtbo_dialog.pick_files(
allow_multiple=False,
@@ -437,7 +438,7 @@ def toggle_additional_image_selection(self):
Row(
[
FilledButton(
- "Pick `vbmeta.img` image",
+ _("Pick `vbmeta.img` image"),
icon=icons.UPLOAD_FILE,
on_click=lambda _: self.pick_vbmeta_dialog.pick_files(
allow_multiple=False,
@@ -458,7 +459,7 @@ def toggle_additional_image_selection(self):
Row(
[
FilledButton(
- "Pick `super_empty.img` image",
+ _("Pick `super_empty.img` image"),
icon=icons.UPLOAD_FILE,
on_click=lambda _: self.pick_super_empty_dialog.pick_files(
allow_multiple=False,
@@ -479,7 +480,7 @@ def toggle_additional_image_selection(self):
Row(
[
FilledButton(
- "Pick `vendor_boot.img` image",
+ _("Pick `vendor_boot.img` image"),
icon=icons.UPLOAD_FILE,
on_click=lambda _: self.pick_vendor_boot_dialog.pick_files(
allow_multiple=False,
@@ -670,7 +671,7 @@ def enable_button_if_ready(self, e):
)
self.info_field.controls = [
Text(
- "Image and/or recovery don't work with the device. Make sure you use a TWRP-based recovery.",
+ _("Image and/or recovery don't work with the device. Make sure you use a TWRP-based recovery."),
color=colors.RED,
weight="bold",
)
@@ -700,7 +701,7 @@ def enable_button_if_ready(self, e):
)
self.info_field.controls = [
Text(
- "Some additional images don't match or are missing. Please select the right ones.",
+ _("Some additional images don't match or are missing. Please select the right ones."),
color=colors.RED,
weight="bold",
)
@@ -727,7 +728,7 @@ def enable_button_if_ready(self, e):
)
self.info_field.controls = [
Text(
- "Image doesn't work with the device.",
+ _("Image doesn't work with the device."),
color=colors.RED,
weight="bold",
)
diff --git a/openandroidinstaller/views/start_view.py b/openandroidinstaller/views/start_view.py
index f7333429..0d596e7b 100644
--- a/openandroidinstaller/views/start_view.py
+++ b/openandroidinstaller/views/start_view.py
@@ -40,6 +40,7 @@
from app_state import AppState
from widgets import get_title
from tooling import search_device
+from translations import _
class StartView(BaseView):
@@ -60,14 +61,14 @@ def init_visuals(
):
"""Initialize the stateful visual elements of the view."""
self.continue_button = ElevatedButton(
- "Continue",
+ _("Continue"),
on_click=self.on_confirm,
icon=icons.NEXT_PLAN_OUTLINED,
disabled=True,
expand=True,
)
self.back_button = ElevatedButton(
- "Back",
+ _("Back"),
on_click=self.on_back,
icon=icons.ARROW_BACK,
expand=True,
@@ -76,9 +77,9 @@ def init_visuals(
# dialog box to help with developer options
self.dlg_help_developer_options = AlertDialog(
modal=True,
- title=Text("How to enable developer options and OEM unlocking"),
+ title=Text(_("How to enable developer options and OEM unlocking")),
content=Markdown(
- """
+ _("""
To do this,
- **tap seven times on the build number** in the 'System'- or 'About the phone'-Menu in Settings. You can also use the phones own search to look for `build number`.
- Then go back to the main menu and look for **'developer options'**. You can also search for it in your phone.
@@ -86,7 +87,7 @@ def init_visuals(
- If your phone is already connected to your PC, a pop-up might appear. **Allow USB debugging in the pop-up on your phone.**
Now you are ready to continue.
-"""
+""")
),
actions=[
TextButton("Close", on_click=self.close_developer_options_dlg),
@@ -101,7 +102,7 @@ def check_bootloader_unlocked(e):
self.state.toggle_flash_unlock_bootloader()
self.bootloader_switch = Switch(
- label="Bootloader is already unlocked.",
+ label=_("Bootloader is already unlocked."),
on_change=check_bootloader_unlocked,
disabled=True,
inactive_thumb_color=colors.YELLOW,
@@ -114,7 +115,7 @@ def check_recovery_already_flashed(e):
self.state.toggle_flash_recovery()
self.recovery_switch = Switch(
- label="Custom recovery is already flashed.",
+ label=_("Custom recovery is already flashed."),
on_change=check_recovery_already_flashed,
disabled=True,
inactive_thumb_color=colors.YELLOW,
@@ -124,7 +125,7 @@ def check_recovery_already_flashed(e):
# inform the user about the device detection
self.device_name = Text("", weight="bold")
self.device_detection_infobox = Row(
- [Text("Detected device:"), self.device_name]
+ [Text(_("Detected device:")), self.device_name]
)
self.device_request_row = Row([], alignment="center")
self.device_infobox = Column(
@@ -141,7 +142,7 @@ def build(self):
self.right_view_header.controls.extend(
[
get_title(
- "Get the phone ready",
+ _("Get the phone ready"),
step_indicator_img="steps-header-get-ready.png",
)
]
@@ -149,27 +150,27 @@ def build(self):
self.right_view.controls.extend(
[
Markdown(
- """
+ _("""
To get started you need to
- **enable developer options** on your device
- and then **enable USB debugging** and **OEM unlocking** in the developer options.
- """
+ """)
),
Row(
[
OutlinedButton(
- "How do I enable developer options?",
+ _("How do I enable developer options?"),
on_click=self.open_developer_options_dlg,
expand=True,
icon=icons.HELP_OUTLINE_OUTLINED,
icon_color=colors.DEEP_ORANGE_500,
- tooltip="Get help to enable developer options and OEM unlocking.",
+ tooltip=_("Get help to enable developer options and OEM unlocking."),
)
]
),
Divider(),
Markdown(
- """
+ _("""
Now
- **connect your device to this computer via USB** and
- **allow USB debugging in the pop-up on your phone**.
@@ -177,25 +178,25 @@ def build(self):
- Then **press the button 'Search device'**.
When everything works correctly you should see your device name here and you can continue.
- """
+ """)
),
Divider(),
Markdown(
- """
+ _("""
If you **already unlocked the bootloader** of your device or already **flashed a custom recovery**, please toggle the respective switch below, to skip the procedure.
If you don't know what this means, you most likely don't need to do anything and you can just continue.
- """
+ """)
),
self.device_infobox,
Row(
[
self.back_button,
FilledButton(
- "Search for device",
+ _("Search for device"),
on_click=self.search_devices_clicked,
icon=icons.DEVICES_OTHER_OUTLINED,
expand=True,
- tooltip="Search for a connected device.",
+ tooltip=_("Search for a connected device."),
),
self.continue_button,
],
@@ -238,7 +239,7 @@ def search_devices_clicked(self, e):
else:
logger.info("No device detected! Connect to USB and try again.")
self.device_name.value = (
- "No device detected! Connect to USB and try again."
+ _("No device detected! Connect to USB and try again.")
)
self.device_name.color = colors.RED
@@ -279,7 +280,7 @@ def search_devices_clicked(self, e):
request_url = f"https://github.com/openandroidinstaller-dev/openandroidinstaller/issues/new?labels=device&template=device-support-request.yaml&title=Add support for `{device_code}`"
self.device_request_row.controls.append(
ElevatedButton(
- "Request support for this device",
+ _("Request support for this device"),
icon=icons.PHONELINK_SETUP_OUTLINED,
on_click=lambda _: webbrowser.open(request_url),
)
diff --git a/openandroidinstaller/views/step_view.py b/openandroidinstaller/views/step_view.py
index b64a78c2..65e32be1 100644
--- a/openandroidinstaller/views/step_view.py
+++ b/openandroidinstaller/views/step_view.py
@@ -65,6 +65,7 @@
TerminalBox,
ProgressIndicator,
)
+from translations import _
class StepView(BaseView):
@@ -80,7 +81,7 @@ def __init__(
# text input
self.inputtext = TextField(
- hint_text="your unlock code", expand=False
+ hint_text=_("your unlock code"), expand=False
) # textfield for the unlock code
def build(self):
@@ -102,7 +103,7 @@ def check_advanced_switch(e):
self.right_view.update()
self.advanced_switch = Switch(
- label="Advanced output",
+ label=_("Advanced output"),
on_change=check_advanced_switch,
disabled=False,
value=self.state.advanced,
@@ -115,8 +116,8 @@ def check_advanced_switch(e):
# main controls
steps_indicator_img_lookup = {
- "Unlock the bootloader": "steps-header-unlock.png",
- "Boot custom recovery": "steps-header-recovery.png",
+ _("Unlock the bootloader"): "steps-header-unlock.png",
+ _("Boot custom recovery"): "steps-header-recovery.png",
}
self.right_view_header.controls = [
get_title(
@@ -171,7 +172,7 @@ def check_advanced_switch(e):
)
elif self.step.type == "link_button_with_confirm":
self.right_view.controls.extend(
- [Row([link_button(self.step.link, "Open Link"), self.confirm_button])]
+ [Row([link_button(self.step.link, _("Open Link")), self.confirm_button])]
)
elif self.step.type != "text":
@@ -183,9 +184,9 @@ def check_advanced_switch(e):
self.right_view.controls.append(
Row(
[
- Text("Do you want to skip?"),
+ Text(_("Do you want to skip?")),
ElevatedButton(
- "Skip",
+ _("Skip"),
on_click=self.on_confirm,
icon=icons.NEXT_PLAN_OUTLINED,
expand=True,
diff --git a/openandroidinstaller/views/success_view.py b/openandroidinstaller/views/success_view.py
index e1bd6af8..e4cbccfb 100644
--- a/openandroidinstaller/views/success_view.py
+++ b/openandroidinstaller/views/success_view.py
@@ -26,6 +26,7 @@
from views import BaseView
from app_state import AppState
from widgets import get_title
+from translations import _
class SuccessView(BaseView):
@@ -42,13 +43,13 @@ def close_window(e):
# right view header
self.right_view_header.controls = [
- get_title("Installation completed successfully!"),
+ get_title(_("Installation completed successfully!")),
]
# right view main part
contribute_link = "https://openandroidinstaller.org/#contribute"
self.right_view.controls = [
Text(
- "Now your devices boots into the new OS. Have fun with it!",
+ _("Now your devices boots into the new OS. Have fun with it!"),
style="titleSmall",
),
Markdown(
diff --git a/openandroidinstaller/views/welcome_view.py b/openandroidinstaller/views/welcome_view.py
index a3560ea7..4a2fec38 100644
--- a/openandroidinstaller/views/welcome_view.py
+++ b/openandroidinstaller/views/welcome_view.py
@@ -30,6 +30,8 @@
from views import BaseView
from app_state import AppState
from widgets import get_title
+from translations import _
+
class WelcomeView(BaseView):
@@ -48,7 +50,7 @@ def init_visuals(
):
"""Initialize the stateful visual elements of the view."""
self.continue_button = ElevatedButton(
- "Let's start!",
+ _("Let's start!"),
on_click=self.on_confirm,
icon=icons.NEXT_PLAN_OUTLINED,
disabled=False,
@@ -60,36 +62,36 @@ def build(self):
# build up the main view
self.right_view_header.controls.extend(
- [get_title("Welcome to the OpenAndroidInstaller!")]
+ [get_title(_("Welcome to the OpenAndroidInstaller!"))]
)
self.right_view.controls.extend(
[
Text(
- "Great that you want to install alternative, open source Android operating systems!"
+ _("Great that you want to install alternative, open source Android operating systems!")
),
Text(
- "We will walk you through the installation process nice and easy."
+ _("We will walk you through the installation process nice and easy.")
),
Markdown(
- """
+ _("""
The following steps are performed in this tool:
- First, we help you to **get your device ready** for the installation process.
- Next, you can **select the operating system** you want to install (with guidance).
- Then, we guide you though the process of **unlocking the bootloader** (if necessary). If you don't know what that means, it will be explained later.
- As a next step, the **operation system is installed**. At this point you can also **select to install additional software** ("addons") like Google Apps.
- Finally your device starts your new operating system.
- """
+ """)
),
Divider(),
Markdown(
- """
+ _("""
Before you continue, make sure
- your devices is on the latest system update.
- you have a backup of all your important data, since this procedure will **erase all data from the phone**.
- to not store the backup on the phone!
Please note, that vendor specific back-ups will most likely not work on LineageOS!
- """
+ """)
),
Divider(),
Row(
From d45010892d8435960e566295adf966ccd724bdf7 Mon Sep 17 00:00:00 2001
From: rudu <40572253+anon1892@users.noreply.github.com>
Date: Sat, 13 Jan 2024 13:13:27 +0100
Subject: [PATCH 3/8] Use gettext everywhere? (except config files)
---
openandroidinstaller/openandroidinstaller.py | 2 +-
openandroidinstaller/translations.py | 2 +-
.../views/install_addons_view.py | 2 +-
openandroidinstaller/views/requirements_view.py | 12 ++++++------
openandroidinstaller/views/select_view.py | 16 ++++++++--------
openandroidinstaller/views/start_view.py | 2 +-
openandroidinstaller/views/step_view.py | 2 +-
openandroidinstaller/views/success_view.py | 4 ++--
openandroidinstaller/widgets.py | 6 +++---
9 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/openandroidinstaller/openandroidinstaller.py b/openandroidinstaller/openandroidinstaller.py
index f44d6061..022c0517 100644
--- a/openandroidinstaller/openandroidinstaller.py
+++ b/openandroidinstaller/openandroidinstaller.py
@@ -237,7 +237,7 @@ def main(page: Page, test: bool = False, test_config: str = "sargo"):
toolbar_height=72,
elevation=0,
title=Text(
- f"OpenAndroidInstaller version {VERSION}"
+ _("OpenAndroidInstaller version {version}").format(version=VERSION)
), # , style="displaySmall"),
center_title=False,
bgcolor="#00d886",
diff --git a/openandroidinstaller/translations.py b/openandroidinstaller/translations.py
index 84f6b070..7afdfc68 100644
--- a/openandroidinstaller/translations.py
+++ b/openandroidinstaller/translations.py
@@ -19,7 +19,7 @@
# Initialize localization
# TODO : Automaticaly check user locale and if available, use it.
-fr = gettext.translation('base', localedir='../locales', languages=['fr'])
+fr = gettext.translation('base', localedir='locales', languages=['fr'])
fr.install()
_ = fr.gettext # French
#os.environ['LANGUAGE']='fr'
diff --git a/openandroidinstaller/views/install_addons_view.py b/openandroidinstaller/views/install_addons_view.py
index 0dd6ed25..9e75f22a 100644
--- a/openandroidinstaller/views/install_addons_view.py
+++ b/openandroidinstaller/views/install_addons_view.py
@@ -167,7 +167,7 @@ def run_install_addons(self, e):
# reset the progress indicators
self.progress_indicator.clear()
# inform about the currently installed addon
- self.addon_info_text.value = f"{addon_num + 1}/{len(self.state.addon_paths)}: Installing {Path(addon_path).name} ..."
+ self.addon_info_text.value = f"{addon_num + 1}/{len(self.state.addon_paths)}: " + _("Installing") + f"{Path(addon_path).name} ..."
self.right_view.update()
# install one addon at the time
diff --git a/openandroidinstaller/views/requirements_view.py b/openandroidinstaller/views/requirements_view.py
index ec34f5c6..7b77fd50 100644
--- a/openandroidinstaller/views/requirements_view.py
+++ b/openandroidinstaller/views/requirements_view.py
@@ -150,7 +150,7 @@ def build(self):
Row(
[
Text(
- f"Android Version {required_android_version}:",
+ _("Android Version {required_android_version}:").format(required_android_version=required_android_version),
style="titleSmall",
),
info_button,
@@ -158,11 +158,11 @@ def build(self):
alignment="spaceBetween",
),
Markdown(
- f"""Before following these instructions please ensure that the device is currently using Android {required_android_version} firmware.
+ _("""Before following these instructions please ensure that the device is currently using Android {required_android_version} firmware.
If the vendor provided multiple updates for that version, e.g. security updates, make sure you are on the latest!
If your current installation is newer or older than Android {required_android_version}, please upgrade or downgrade to the required
version before proceeding (guides can be found on the internet!).
- """
+ """).format(required_android_version=required_android_version)
),
android_checkbox,
]
@@ -189,7 +189,7 @@ def build(self):
Row(
[
Text(
- f"Firmware Version {required_firmware_version}:",
+ _("Firmware Version {required_firmware_version}:").format(required_firmware_version=required_firmware_version),
style="titleSmall",
),
info_button,
@@ -197,10 +197,10 @@ def build(self):
alignment="spaceBetween",
),
Markdown(
- f"""Before following these instructions please ensure that the device is on firmware version {required_firmware_version}.
+ _("""Before following these instructions please ensure that the device is on firmware version {required_firmware_version}.
To discern this, you can run the command `adb shell getprop ro.build.display.id` on the stock ROM.
If the device is not on the specified version, please follow the instructions below to install it.
- """
+ """).format(required_firmware_version=required_firmware_version)
),
firmware_checkbox,
]
diff --git a/openandroidinstaller/views/select_view.py b/openandroidinstaller/views/select_view.py
index 82f3dfef..5cdf9e7f 100644
--- a/openandroidinstaller/views/select_view.py
+++ b/openandroidinstaller/views/select_view.py
@@ -245,8 +245,8 @@ def build(self):
[
Text(_("Select an OS image:"), style="titleSmall"),
Markdown(
- f"""
-The image file should look something like `lineage-19.1-20221101-nightly-{self.state.config.device_code}-signed.zip`."""
+ _("""
+The image file should look something like `lineage-19.1-20221101-nightly-{device_code}-signed.zip`.""").format(device_code=self.state.config.device_code)
),
Row(
[
@@ -271,10 +271,10 @@ def build(self):
[
Text(_("Select a TWRP recovery image:"), style="titleSmall"),
Markdown(
- f"""
-The recovery image should look something like `twrp-3.7.0_12-0-{self.state.config.device_code}.img`.
+ _("""
+The recovery image should look something like `twrp-3.7.0_12-0-{device_code}.img`.
-**Note:** This tool **only supports TWRP recoveries**.""",
+**Note:** This tool **only supports TWRP recoveries**.""").format(device_code=self.state.config.device_code),
extension_set="gitHubFlavored",
),
Row(
@@ -346,7 +346,7 @@ def toggle_additional_image_selection(self):
modal=True,
title=Text(_("Why do I need additional images and where do I get them?")),
content=Markdown(
- f"""## About additional images
+ _("""## About additional images
Some devices require additional images to be flashed before the recovery and OS image can be flashed.
Not all images explained below are required for all devices. The installer will tell you which images are required for your device.
@@ -365,9 +365,9 @@ def toggle_additional_image_selection(self):
The `vendor_boot.img` is a partition image that contains the vendor boot image.
## Where do I get these images?
-You can download the required images for your device from the [LineageOS downloads page](https://download.lineageos.org/devices/{self.state.config.device_code}/builds).
+You can download the required images for your device from the [LineageOS downloads page](https://download.lineageos.org/devices/{device_code}/builds).
If this download page does not contain the required images, you can try to find them on the [XDA developers forum](https://xdaforums.com).
- """,
+ """).format(device_code=self.state.config.device_code),
auto_follow_links=True,
),
actions=[
diff --git a/openandroidinstaller/views/start_view.py b/openandroidinstaller/views/start_view.py
index 0d596e7b..334bc836 100644
--- a/openandroidinstaller/views/start_view.py
+++ b/openandroidinstaller/views/start_view.py
@@ -274,7 +274,7 @@ def search_devices_clicked(self, e):
f"Device with code '{device_code}' is not supported or the config is corrupted. Please check the logs for more information."
)
self.device_name.value = (
- f"Device with code '{device_code}' is not supported yet."
+ _("Device with code '{device_code}' is not supported yet.").format(device_code=device_code)
)
# add request support for device button
request_url = f"https://github.com/openandroidinstaller-dev/openandroidinstaller/issues/new?labels=device&template=device-support-request.yaml&title=Add support for `{device_code}`"
diff --git a/openandroidinstaller/views/step_view.py b/openandroidinstaller/views/step_view.py
index 65e32be1..e5349a22 100644
--- a/openandroidinstaller/views/step_view.py
+++ b/openandroidinstaller/views/step_view.py
@@ -281,7 +281,7 @@ def call_to_phone(self, e, command: str):
# enable call button to retry
self.call_button.disabled = False
# also remove the last error text if it happened
- self.error_text.value = f"Command {command} failed! Try again or make sure everything is setup correctly."
+ self.error_text.value = _("Command {command} failed! Try again or make sure everything is setup correctly.").format(command=command)
else:
sleep(5) # wait to make sure everything is fine
logger.success(f"Command {command} run successfully. Allow to continue.")
diff --git a/openandroidinstaller/views/success_view.py b/openandroidinstaller/views/success_view.py
index e4cbccfb..b6eb8597 100644
--- a/openandroidinstaller/views/success_view.py
+++ b/openandroidinstaller/views/success_view.py
@@ -53,13 +53,13 @@ def close_window(e):
style="titleSmall",
),
Markdown(
- f"""
+ _("""
If you liked the tool, help spread the word and **share it with people** who might want to use it.
Also, you can consider contributing to make it better. There are a lot of different ways how you can help!
[How to contribute]({contribute_link})
-""",
+""").format(contribute_link=contribute_link),
),
Row(
[
diff --git a/openandroidinstaller/widgets.py b/openandroidinstaller/widgets.py
index e4400c5a..22530ad7 100644
--- a/openandroidinstaller/widgets.py
+++ b/openandroidinstaller/widgets.py
@@ -195,7 +195,7 @@ def get_title(
Image(
src=f"/imgs/{step_indicator_img}",
fit="fitWidth",
- tooltip=f"Current step: {title}",
+ tooltip=_("Current step: {title}").format(title=title),
width=600,
),
content,
@@ -213,7 +213,7 @@ def get_title(
def confirm_button(
- confirm_func: Callable, confirm_text: str = "Continue"
+ confirm_func: Callable, confirm_text: str = _("Continue")
) -> ElevatedButton:
"""Get a button, that calls a given function when clicked."""
return ElevatedButton(
@@ -225,7 +225,7 @@ def confirm_button(
def call_button(
- call_func: Callable, command: str, confirm_text: str = "Confirm and run"
+ call_func: Callable, command: str, confirm_text: str = _("Confirm and run")
) -> ElevatedButton:
"""Get a button, that calls a given function with given command when clicked."""
return ElevatedButton(
From 70ce0fc9404ce40259cca7cf1270c5ec80c6c00d Mon Sep 17 00:00:00 2001
From: rudu <40572253+anon1892@users.noreply.github.com>
Date: Sat, 13 Jan 2024 16:24:56 +0100
Subject: [PATCH 4/8] Automaticaly test if user locale is available
---
openandroidinstaller/translations.py | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/openandroidinstaller/translations.py b/openandroidinstaller/translations.py
index 7afdfc68..1b49a3b4 100644
--- a/openandroidinstaller/translations.py
+++ b/openandroidinstaller/translations.py
@@ -1,4 +1,4 @@
-"""File to import to manage translations."""
+"""File that manages translations."""
# This file is part of OpenAndroidInstaller.
# OpenAndroidInstaller is free software: you can redistribute it and/or modify it under the terms of
@@ -13,14 +13,16 @@
# If not, see ."""
# Author: Tobias Sterbak
-import os
+import locale
import gettext
+from loguru import logger
-# Initialize localization
-# TODO : Automaticaly check user locale and if available, use it.
-fr = gettext.translation('base', localedir='locales', languages=['fr'])
-fr.install()
-_ = fr.gettext # French
-#os.environ['LANGUAGE']='fr'
-#_ = gettext.gettext
+# Initialize localization with user locale if available
+try:
+ lang = gettext.translation('base', localedir='locales', languages=[locale.getlocale()[0]])
+except FileNotFoundError:
+ logger.info("User locale not available, fallback to english")
+ lang = gettext.translation('base', localedir='locales', languages=['en'])
+lang.install()
+_ = lang.gettext
From 92855be1bf09e9f94e3b2be4b2c082efd8d2d077 Mon Sep 17 00:00:00 2001
From: rudu <40572253+anon1892@users.noreply.github.com>
Date: Sat, 13 Jan 2024 17:51:01 +0100
Subject: [PATCH 5/8] French translation (except config files)
---
locales/base.pot | 806 ++++++++++++++++++++++++
locales/en/LC_MESSAGES/base.po | 48 ++
locales/fr/LC_MESSAGES/base.mo | Bin 0 -> 32427 bytes
locales/fr/LC_MESSAGES/base.po | 1057 ++++++++++++++++++++++++++++++++
4 files changed, 1911 insertions(+)
create mode 100644 locales/base.pot
create mode 100644 locales/en/LC_MESSAGES/base.po
create mode 100644 locales/fr/LC_MESSAGES/base.mo
create mode 100644 locales/fr/LC_MESSAGES/base.po
diff --git a/locales/base.pot b/locales/base.pot
new file mode 100644
index 00000000..634f5f09
--- /dev/null
+++ b/locales/base.pot
@@ -0,0 +1,806 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-13 15:00+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: openandroidinstaller/app_state.py:98 openandroidinstaller/app_state.py:120
+#: openandroidinstaller/views/step_view.py:120
+msgid "Boot custom recovery"
+msgstr ""
+
+#: openandroidinstaller/app_state.py:100 openandroidinstaller/app_state.py:122
+msgid ""
+"If you already flashed TWRP, boot into it by pressing 'Confirm and run'. "
+"Otherwise restart the process. Once your phone screen looks like the picture "
+"on the left, continue."
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:240
+#, python-brace-format
+msgid "OpenAndroidInstaller version {version}"
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:254
+msgid "Frequently asked questions and encountered issues."
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:259
+msgid "Give feedback"
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:265
+msgid "Give feedback about your experience with OpenAndroidInstaller"
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:270
+msgid "Report a bug"
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:276
+msgid "Report an issue on github"
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:290
+msgid ""
+"These instructions only work if you follow every section and step precisely. "
+"Do not continue after something fails!"
+msgstr ""
+
+#: openandroidinstaller/openandroidinstaller.py:293
+msgid "I understand"
+msgstr ""
+
+#: openandroidinstaller/widgets.py:198
+#, python-brace-format
+msgid "Current step: {title}"
+msgstr ""
+
+#: openandroidinstaller/widgets.py:216
+#: openandroidinstaller/views/requirements_view.py:68
+#: openandroidinstaller/views/start_view.py:64
+msgid "Continue"
+msgstr ""
+
+#: openandroidinstaller/widgets.py:228
+msgid "Confirm and run"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:59
+msgid "What kind of addons are supported?"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:61
+msgid ""
+"## Google Apps:\n"
+"There are different packages of Google Apps available. Most notable\n"
+"- [MindTheGapps](https://wiki.lineageos.org/gapps#downloads) and \n"
+"- [NikGApps](https://nikgapps.com).\n"
+"\n"
+"These packages are only dependent on your OS version and processor "
+"architecture, which can be found on each device specific info page.\n"
+"Filenames on MindTheGApps are of the format `MindTheGapps--"
+"-_.zip` (with Android 12L being 12.1)\n"
+"and NikGApps are of the format `NikGapps---"
+"--signed.zip`.\n"
+"\n"
+"NikGApps come in different flavours ranging from minimal Google support "
+"(core) to the full experience (full).\n"
+"\n"
+"## MicroG\n"
+"\n"
+"The [MicroG](https://microg.org) project offers a free-as-in-freedom re-"
+"implementation of Google's proprietary Android user space apps and "
+"libraries.\n"
+"\n"
+"The recommended way to install MicroG is to use the zip file provided here:\n"
+"- [https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases]"
+"(https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases).\n"
+"\n"
+"## F-Droid Appstore\n"
+"\n"
+"F-Droid is an installable catalogue of libre software apps for Android. The "
+"F-Droid client app makes it easy to browse, install, and keep track of "
+"updates on your device.\n"
+"You can get the zip file to install this addon here: [https://f-droid.org/en/"
+"packages/org.fdroid.fdroid.privileged.ota](https://f-droid.org/en/packages/"
+"org.fdroid.fdroid.privileged.ota).\n"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:86
+#: openandroidinstaller/views/requirements_view.py:101
+#: openandroidinstaller/views/select_view.py:96
+#: openandroidinstaller/views/select_view.py:375
+msgid "Close"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:94
+msgid "Selected addons: "
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:108
+msgid "What kind of addons?"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:113
+msgid "Get more details on what addons are supported."
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:119
+msgid "You can select additional addons to install."
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:132
+msgid "Here you can download the F-Droid App-Store:"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:136
+msgid "Download F-Droid App-Store"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:146
+msgid ""
+"Here you can find instructions on how to download the right Google apps for "
+"your device."
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:151
+msgid "Download Google Apps"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:160
+msgid "Here you can download MicroG:"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:164
+msgid "Download MicroG"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:180
+msgid "Select addons:"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:188
+msgid "Pick the addons you want to install"
+msgstr ""
+
+#: openandroidinstaller/views/addon_view.py:229
+msgid "No addons selected."
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:78
+#: openandroidinstaller/views/install_view.py:74
+#: openandroidinstaller/views/step_view.py:106
+msgid "Advanced output"
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:92
+msgid "Install Addons"
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:98
+msgid ""
+"In the next steps, you flash the selected Addons.\n"
+"\n"
+"Confirm to install.\n"
+"\n"
+"This might take a while. At the end your phone will boot into the new OS.\n"
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:112
+msgid "Confirm and install addons"
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:138
+#: openandroidinstaller/views/install_view.py:161
+#: openandroidinstaller/views/step_view.py:187
+msgid "Do you want to skip?"
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:140
+#: openandroidinstaller/views/install_view.py:163
+#: openandroidinstaller/views/step_view.py:189
+msgid "Skip"
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:170
+msgid "Installing"
+msgstr ""
+
+#: openandroidinstaller/views/install_addons_view.py:205
+#: openandroidinstaller/views/install_view.py:212
+msgid ""
+"Installation failed! Try again or make sure everything is setup correctly."
+msgstr ""
+
+#: openandroidinstaller/views/install_view.py:92
+msgid "Install addons"
+msgstr ""
+
+#: openandroidinstaller/views/install_view.py:105
+msgid "Install OS"
+msgstr ""
+
+#: openandroidinstaller/views/install_view.py:111
+msgid ""
+"In the next steps, you finally flash the selected OS image.\n"
+" \n"
+"Connect your device with your computer with the USB-Cable. This step will "
+"format your phone and wipe all the data.\n"
+"It will also remove encryption and delete all files stored in the internal "
+"storage.\n"
+"Then the OS image will be installed. Confirm to install.\n"
+"\n"
+"This might take a while. At the end your phone will boot into the new OS.\n"
+" \n"
+"#### **Install addons:**\n"
+"If you want to install any addons like Google Apps, microG or F-droid, use "
+"the toggle below **before** starting the install process!\n"
+"After the installation you'll be taken through the process. Note, that this "
+"process is still somewhat experimental and using ROMs with\n"
+"included Google Apps (like PixelExperience) or microG (lineageOS for microG) "
+"is recommended.\n"
+"\n"
+"#### **Warning:**\n"
+"Don't try to add addons like Google Apps if your OS ROM already has Google "
+"Apps or microG included! Otherwise your system will break!\n"
+msgstr ""
+
+#: openandroidinstaller/views/install_view.py:135
+msgid "Confirm and install"
+msgstr ""
+
+#: openandroidinstaller/views/install_view.py:182
+msgid "Please be patient, it may take a few minutes."
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:76
+#: openandroidinstaller/views/select_view.py:144
+#: openandroidinstaller/views/start_view.py:71
+msgid "Back"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:85
+msgid "Where to find the current Android and/or firmware version?"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:87
+msgid ""
+"\n"
+"## Find your current Android Version\n"
+"Scroll down on the Settings screen and look for an \"About phone\", \"About "
+"tablet\", or \"System\" option.\n"
+"You'll usually find this at the very bottom of the main Settings screen, "
+"under System, but depending\n"
+"on your phone it could be different. If you do find a specific option for "
+"System, you can usually\n"
+"find the \"About Phone\" underneath that.\n"
+"\n"
+"On the resulting screen, look for \"Android version\" to find the version of "
+"Android installed on your device.\n"
+"\n"
+"## Find your current device firmware version\n"
+"On the same screen you find the \"Android version\" you can also find the "
+"Firmware Version.\n"
+"On some devices, the build version is basically the firmware version."
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:112
+msgid "How to Find the version"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:117
+msgid "How to find the firmware and android version of your device."
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:123
+msgid "Check the Requirements"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:130
+msgid ""
+"Before continuing you need to check some requirements to progress. Please "
+"read the instructions and check the boxes if everything is fine."
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:143
+msgid ""
+"The required android version is installed. (Or I know the risk of continuing)"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:153
+#, python-brace-format
+msgid "Android Version {required_android_version}:"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:161
+#, python-brace-format
+msgid ""
+"Before following these instructions please ensure that the device is "
+"currently using Android {required_android_version} firmware.\n"
+"If the vendor provided multiple updates for that version, e.g. security "
+"updates, make sure you are on the latest!\n"
+"If your current installation is newer or older than Android "
+"{required_android_version}, please upgrade or downgrade to the required\n"
+"version before proceeding (guides can be found on the internet!).\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:182
+msgid ""
+"The required firmware version is installed. (Or I know the risk of "
+"continuing)"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:192
+#, python-brace-format
+msgid "Firmware Version {required_firmware_version}:"
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:200
+#, python-brace-format
+msgid ""
+"Before following these instructions please ensure that the device is on "
+"firmware version {required_firmware_version}.\n"
+"To discern this, you can run the command `adb shell getprop ro.build.display."
+"id` on the stock ROM.\n"
+"If the device is not on the specified version, please follow the "
+"instructions below to install it.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:238
+msgid "The battery level is over 80%."
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:246
+msgid ""
+"\n"
+"#### Battery level over 80%\n"
+"Before continuing make sure your device battery level is above 80%.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:262
+msgid "Booted the stock OS at least once."
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:270
+msgid ""
+"\n"
+"#### Boot your device with the stock OS at least once and check every "
+"functionality.\n"
+"Make sure that you can send and receive SMS and place and receive calls "
+"(also via WiFi and LTE, if available),\n"
+"otherwise it won't work on your custom ROM either! Additionally, some "
+"devices require that VoLTE/VoWiFi be utilized once on stock to provision "
+"IMS.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:287
+msgid "No lock code or fingerprint lock enabled."
+msgstr ""
+
+#: openandroidinstaller/views/requirements_view.py:295
+msgid ""
+"\n"
+"#### Disable all device lock codes and fingerprint locks.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:73
+msgid "What is an OS image and recovery and why do I need it?"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:75
+msgid ""
+"## OS image or ROM\n"
+"An operating system (OS) is system software that manages computer hardware,\n"
+"software resources, and provides common services for computer programs. \n"
+"Popular, custom operating systems for mobile devices based on Android are \n"
+"- [LineageOS](https://lineageos.org)\n"
+"- [/e/OS](https://e.foundation/e-os) or\n"
+"- [LineageOS for microG](https://lineage.microg.org)\n"
+"- and many others.\n"
+"\n"
+"Often, the related OS images are called 'ROM'. 'ROM' stands for *R*ead-"
+"*o*nly *m*emory,\n"
+"which is a type of non-volatile memory used in computers for storing "
+"software that is\n"
+"rarely changed during the life of the system, also known as firmware.\n"
+"\n"
+"## Recovery Image\n"
+"A custom recovery is used for installing custom software on your device.\n"
+"This custom software can include smaller modifications like rooting your "
+"device or even\n"
+"replacing the firmware of the device with a completely custom ROM.\n"
+"\n"
+"OpenAndroidInstaller works with the [TWRP recovery project](https://twrp.me/"
+"about)."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:114
+msgid "Selected image: "
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:115
+msgid "Selected recovery: "
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:133
+msgid "Continue without additional images"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:172
+msgid "What is this?"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:177
+msgid "Get more details on custom operating system images and recoveries."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:183
+msgid "Now pick an OS image and a recovery file:"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:200
+msgid "Important notes for your device"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:217
+msgid ""
+"You can bring your own image and recovery or you download the officially "
+"supported image file for your device here:"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:222
+msgid "Download LineageOS image"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:230
+msgid "Download TWRP recovery"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:246
+msgid "Select an OS image:"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:248
+#, python-brace-format
+msgid ""
+"\n"
+"The image file should look something like `lineage-19.1-20221101-nightly-"
+"{device_code}-signed.zip`."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:254
+msgid "Pick OS image"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:272
+msgid "Select a TWRP recovery image:"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:274
+#, python-brace-format
+msgid ""
+"\n"
+"The recovery image should look something like `twrp-3.7.0_12-0-{device_code}."
+"img`.\n"
+"\n"
+"**Note:** This tool **only supports TWRP recoveries**."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:283
+msgid "Pick TWRP recovery file"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:328
+msgid ""
+"- If something goes wrong, you can reinstall MiUI here:\n"
+" \n"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:334
+msgid ""
+"- **This device has not been tested with OpenAndroidInstaller yet.** The "
+"installation can go wrong. You may have to finish the installation process "
+"with command line. If you test, please report the result on GitHub."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:347
+msgid "Why do I need additional images and where do I get them?"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:349
+#, python-brace-format
+msgid ""
+"## About additional images\n"
+"Some devices require additional images to be flashed before the recovery and "
+"OS image can be flashed.\n"
+"Not all images explained below are required for all devices. The installer "
+"will tell you which images are required for your device.\n"
+"\n"
+"### dtbo.img\n"
+"The `dtbo.img` is a partition image that contains the device tree overlay.\n"
+"\n"
+"### vbmeta.img\n"
+"The `vbmeta.img` is a partition image that contains the verified boot "
+"metadata.\n"
+"This is required to prevent issues with the verified boot process.\n"
+"\n"
+"### super_empty.img\n"
+"The `super_empty.img` is used to wipe the super partition. This is required "
+"to\n"
+"prevent issues with the super partition when flashing a new ROM.\n"
+"\n"
+"### vendor_boot.img\n"
+"The `vendor_boot.img` is a partition image that contains the vendor boot "
+"image.\n"
+"\n"
+"## Where do I get these images?\n"
+"You can download the required images for your device from the [LineageOS "
+"downloads page](https://download.lineageos.org/devices/{device_code}/"
+"builds).\n"
+"If this download page does not contain the required images, you can try to "
+"find them on the [XDA developers forum](https://xdaforums.com).\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:384
+msgid "Why do I need this and where do I get it?"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:389
+msgid "Get more details on additional images and download links."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:400
+msgid "Select required additional images:"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:406
+msgid ""
+"\n"
+"Your selected device and ROM requires flashing of additional partitions. "
+"Please select the required images below.\n"
+"\n"
+"Make sure the file is for **your exact phone model!**"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:420
+msgid "Pick `dtbo.img` image"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:441
+msgid "Pick `vbmeta.img` image"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:462
+msgid "Pick `super_empty.img` image"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:483
+msgid "Pick `vendor_boot.img` image"
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:674
+msgid ""
+"Image and/or recovery don't work with the device. Make sure you use a TWRP-"
+"based recovery."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:704
+msgid ""
+"Some additional images don't match or are missing. Please select the right "
+"ones."
+msgstr ""
+
+#: openandroidinstaller/views/select_view.py:731
+msgid "Image doesn't work with the device."
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:80
+msgid "How to enable developer options and OEM unlocking"
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:82
+msgid ""
+"\n"
+"To do this, \n"
+"- **tap seven times on the build number** in the 'System'- or 'About the "
+"phone'-Menu in Settings. You can also use the phones own search to look for "
+"`build number`. \n"
+"- Then go back to the main menu and look for **'developer options'**. You "
+"can also search for it in your phone.\n"
+"- When you are in developer options, **toggle OEM unlocking and USB-"
+"Debugging**.\n"
+"- If your phone is already connected to your PC, a pop-up might appear. "
+"**Allow USB debugging in the pop-up on your phone.**\n"
+"\n"
+"Now you are ready to continue.\n"
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:105
+msgid "Bootloader is already unlocked."
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:118
+msgid "Custom recovery is already flashed."
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:128
+msgid "Detected device:"
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:145
+msgid "Get the phone ready"
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:153
+msgid ""
+"\n"
+"To get started you need to \n"
+"- **enable developer options** on your device\n"
+"- and then **enable USB debugging** and **OEM unlocking** in the developer "
+"options.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:162
+msgid "How do I enable developer options?"
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:167
+msgid "Get help to enable developer options and OEM unlocking."
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:173
+msgid ""
+"\n"
+"Now \n"
+"- **connect your device to this computer via USB** and\n"
+"- **allow USB debugging in the pop-up on your phone**.\n"
+"- You might also need to **activate \"data transfer\"** in the connection "
+"settings.\n"
+"- Then **press the button 'Search device'**.\n"
+"\n"
+"When everything works correctly you should see your device name here and you "
+"can continue.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:185
+msgid ""
+"\n"
+"If you **already unlocked the bootloader** of your device or already "
+"**flashed a custom recovery**, please toggle the respective switch below, to "
+"skip the procedure.\n"
+"If you don't know what this means, you most likely don't need to do anything "
+"and you can just continue.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:195
+msgid "Search for device"
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:199
+msgid "Search for a connected device."
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:242
+msgid "No device detected! Connect to USB and try again."
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:277
+#, python-brace-format
+msgid "Device with code '{device_code}' is not supported yet."
+msgstr ""
+
+#: openandroidinstaller/views/start_view.py:283
+msgid "Request support for this device"
+msgstr ""
+
+#: openandroidinstaller/views/step_view.py:84
+msgid "your unlock code"
+msgstr ""
+
+#: openandroidinstaller/views/step_view.py:119
+msgid "Unlock the bootloader"
+msgstr ""
+
+#: openandroidinstaller/views/step_view.py:175
+msgid "Open Link"
+msgstr ""
+
+#: openandroidinstaller/views/step_view.py:284
+#, python-brace-format
+msgid ""
+"Command {command} failed! Try again or make sure everything is setup "
+"correctly."
+msgstr ""
+
+#: openandroidinstaller/views/success_view.py:46
+msgid "Installation completed successfully!"
+msgstr ""
+
+#: openandroidinstaller/views/success_view.py:52
+msgid "Now your devices boots into the new OS. Have fun with it!"
+msgstr ""
+
+#: openandroidinstaller/views/success_view.py:56
+#, python-brace-format
+msgid ""
+"\n"
+"If you liked the tool, help spread the word and **share it with people** who "
+"might want to use it.\n"
+"\n"
+"Also, you can consider contributing to make it better. There are a lot of "
+"different ways how you can help!\n"
+"\n"
+"[How to contribute]({contribute_link})\n"
+msgstr ""
+
+#: openandroidinstaller/views/welcome_view.py:53
+msgid "Let's start!"
+msgstr ""
+
+#: openandroidinstaller/views/welcome_view.py:65
+msgid "Welcome to the OpenAndroidInstaller!"
+msgstr ""
+
+#: openandroidinstaller/views/welcome_view.py:70
+msgid ""
+"Great that you want to install alternative, open source Android operating "
+"systems!"
+msgstr ""
+
+#: openandroidinstaller/views/welcome_view.py:73
+msgid "We will walk you through the installation process nice and easy."
+msgstr ""
+
+#: openandroidinstaller/views/welcome_view.py:76
+msgid ""
+"\n"
+"The following steps are performed in this tool:\n"
+"- First, we help you to **get your device ready** for the installation "
+"process.\n"
+"- Next, you can **select the operating system** you want to install (with "
+"guidance).\n"
+"- Then, we guide you though the process of **unlocking the bootloader** (if "
+"necessary). If you don't know what that means, it will be explained later.\n"
+"- As a next step, the **operation system is installed**. At this point you "
+"can also **select to install additional software** (\"addons\") like Google "
+"Apps.\n"
+"- Finally your device starts your new operating system.\n"
+" "
+msgstr ""
+
+#: openandroidinstaller/views/welcome_view.py:87
+msgid ""
+"\n"
+"Before you continue, make sure\n"
+"- your devices is on the latest system update.\n"
+"- you have a backup of all your important data, since this procedure will "
+"**erase all data from the phone**.\n"
+"- to not store the backup on the phone! \n"
+"\n"
+"Please note, that vendor specific back-ups will most likely not work on "
+"LineageOS!\n"
+" "
+msgstr ""
diff --git a/locales/en/LC_MESSAGES/base.po b/locales/en/LC_MESSAGES/base.po
new file mode 100644
index 00000000..1e028722
--- /dev/null
+++ b/locales/en/LC_MESSAGES/base.po
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-12 21:05+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: openandroidinstaller.py:258
+msgid "Frequently asked questions and encountered issues."
+msgstr ""
+
+#: openandroidinstaller.py:263
+msgid "Give feedback"
+msgstr ""
+
+#: openandroidinstaller.py:269
+msgid "Give feedback about your experience with OpenAndroidInstaller"
+msgstr ""
+
+#: openandroidinstaller.py:274
+msgid "Report a bug"
+msgstr ""
+
+#: openandroidinstaller.py:280
+msgid "Report an issue on github"
+msgstr ""
+
+#: openandroidinstaller.py:294
+msgid ""
+"These instructions only work if you follow every section and step precisely. "
+"Do not continue after something fails!"
+msgstr ""
+
+#: openandroidinstaller.py:297
+msgid "I understand"
+msgstr ""
diff --git a/locales/fr/LC_MESSAGES/base.mo b/locales/fr/LC_MESSAGES/base.mo
new file mode 100644
index 0000000000000000000000000000000000000000..94875a7fc661450ece5ac07c083bc8bf2f313d18
GIT binary patch
literal 32427
zcmd6weQYG>ecvaxV>|2D*zvm^4^K^ax8^Q&avIBwEQz`|QRW@b$J5EOV(XT>LvnPx
zJL{QU@_4qIwlUJWN#7FKhFhR8P^8wmb%QoRUiyN>AW#@6S~m&M0Bzd1FMl~`8#FCo
z_XX+a`+J^eUY4XJ+bIx2dq2+X%=7Yle|xBZ|Av=+CgSIleBR0D|GYGcz6ku?SMU!%
zw_8#4%P)zd1K^13dtVbp$@fIj-vVCZ`em<+qBXA9f$so*_VrQpP4550?~kIVx&FIv
zh@z{!|EeE|q5=1R{LNAH)4;C)-@yILZ;7H`;QHp2@&kG(94{t@u+d~X!J
z?cGuIRo3(ye=3T8hwndqI*L9D?45}sri^|a_#WWbfV>v{Z{S}7M(rs2E$07e;C0}~
zmZFFyM8DXHqEo=H0vS5`eIQGTUe%2vri)GiH-M*sZv@^3vXtm&fST`%z*ho)1*ma;
z1NbK3e*)eE{1y-tMDJRTq8|lzftoh~YMeX%`ZK_{a{VRX>wt$qt>d?WEGha1@IK&M
z?~S7O0Y3cLOUj@Dk_#c6wzy|#=pu^x=
z|4#uSL39_$BhgoY4*>rV_-f$2?~S6r2mAo=BfxI}wa*Jb;_#OOe+l}08u+u^fAIb&
zdM)rbfv`;Ub$|W)Ku8$vcz!=n^X~xP2Al%L7k>r#
zgTTKJ{C?oS01A)42h{%lFHq}!HOLYkW1yZp2Yfy7aiG5628u850Ivdn0;qBS74S0f
zzX7iRKLF7R;LiZH{^-FddKmC#pz!ttQ2g{sp!WNVK+XFVp!n-Q1KC>iEg&e4e&ivC
zzY$R5eh#<P;?y#%SV3=2Z&J
zt{(y31H1`*FYr_T{;vYx!u7ufz76B(d&Urz}rArJoO#vp8{U_
zgwspE4SbmEKLCo)&VJI-{RZ$&Tz?)YI{X6gt-yZ+d=&VHK;i9yXOVH>ZQ$pCUj|+R
zUidR^{eKzwJzNWy;YaIQ2LHPNEMERh_-(~svE}k-gWt4Y@wR@}`Q-MS<8S?{{ol_=awOUg`E2pI
z!RP&aUc%>-VZpSSb*i2deprC-JSm`t_j=tuIX
zpUZp-J|E@tPCoj1AD;mq$q*tdaW(q_h}QIv|LFi9=ku0u132}+KLdOzpO^V-f$!t9
z%x6az{3Lu(&1R!!y1~yI9f*3s_wo_H)qmc_#RvGj+}}I{{1BfH@`?F~e?P|OCLh>8
zdIz5?d~WlJTKC)&Urfh?_#m6*aetQQ$#@#Cjt6;`4&ob0UZmN$wb{?J;V>R#`{Otp
z$J5;;-b|*`bi7lULYMTt>>&ZSl_Umr>bthrZR}BSjQRAdH-DTyyX}8tdaG1=KVm1^m
zJt~(fJe~@KVCy2psd(y_Bog?W!bNy49T!uOmkdNE+vgzJOZy449ZP8UExXJ|`@Osz
zGAym=jgmlMZL_vD&mrZ)0v3A1qPE0~Vc;8X16_?=WQ^)&E|!dpTeB1zg#AGAtzMD#
zjSIBV`Q>%Rw(RGT-gGLS7$$qkFwS^CzW?4IYCV#`g9(HkgVmW3JL=tHA2V*&aKa?@
z*TrXBjG-aAt+@6RX3Mf^~%q15CJ+=nDb)Wg6Slfl4})`NC?3AVP4OtYOG
z$gXiwh^X7Cc)vi#`nzc7VYbgUv$(jGP8`YtZo6TX1LNsi<7_|Pmp~Z_MoDjsk`XV|
zG2osZC)!CSJ>MH2@I0zQ9A=z@C_ck#gBpPoYAT_^jZo^)G0n2!QoNfCC(uCXvUP%I
zC(iA5u`3lT>67A^BpF)=bNjnlJW6+Vxi2naJu?$hboMIB)Gc0`0fknivTV|9d5T@r
zf_dK58{=+alass~Uq^ajGkuT{w9$5D+?eE`h<8C!*risy&}u#PDEAnw96b5x=}%M_
zPY=`at!K})qSh6jgHhXUz8piR2HhFJ@ZQfxlNpPNrI#Mxe1v_1S$hrkX9Vsc-&?bt
z9c=2^K&hgz$-(E8XBIb;UJlPW1GOlrY(1f8O^G`uk?<5?3U8@DMWBSrV%HprB54|#
zu}r9=M~$!h74M+U=dBNgR`55F-~&==R=1PdZ+zxeqFYnk&g|h70@w<0eDVS+8WQg6Fj`QaO940kheT+#xpSW*4ir+fK_EbMsY0&78)n!E`LN
zmmi#|d1|s}b=gM&c-c3BL;YfylG_+j6dtZBER$lx5O^tCNY5
z;bMxb;J7Ofwh;F&pB9=hXVv>h=+V?t6+@*Xlsu-B;XR|8vo2T6v9$D9d=nv;HRzmu
zfA?(XzI*Sx@9f!o&vwQVyx~FT6HX?cmMwm^Q=~g!vU?|;+{7Uh*9Ns7yV;&^qUnA<
z>Abi5zV5wGpS`bhZ*%BwI@-C3*tOeNFmEeh>bk-Ju{+$6jloGVo5<`I@%1OJT@4eb
zNdawGi>Y+!p(UrOrag2r@{5*9N4OEtRZQpH&hc!tWhTt)i$&+yFLo59EV?kpSX6%e
zV&`%)o=E~j0Mw12L;$3pjr!8v<dnb~`ZuLiO3
zW~2#amddx=?L{boO+*-dL{dmmHCN)Nm9QfMtk{^wbgCHNbeb5~jM7*P)*NvOTzjj$
zapAHz{Sr#81@+xIAJn&WWXA_hxpQXZRs{#ZD`019Z4p<`Eg^Lir|rF3pG-hgmpNCz
zJ^RpYw_9eD!d{%G0tPE3Yb+scXyU^{^lY#pEFI5mY+mOPB*1$xi!ItQKTm7_P)F9o
zzt%8jyrL)C?FQDk>-p=*9LLG*lM-;JcUi8R+J=>X?w#)&ZJp1q>J3?T9eUiAZgJH*jmS
z7UzXE*O%$%hf=8K;3ICi;7#0LsuQ7;=*npoNm})M7t&A7qxPd!D&F>G++FTin=$X(
zf?}|P&;=chD4CZ&O`K7RnBL#E3TV-WE!_R}EcVzv#hnwn<;WNiwDw#%WL9QkSL5uoczT
zAO;>0ni7ps6f@YPjB=Y}lUjwOINF
zHkL1Mg7%OSTxKYgM^oTrI=~}UQxa?r5<9L^MYK}yrLD!mckn0IHc=XZvU2PGPGdr
z;VS#ljV~+uWiwLpXz-^llUrn{OFdkzYBl@mt#l4`J9^@tfY;)T>0pg;CB1b?j#~Bh
zIK5?0`>klH(7s%p)@-he%SB4Uf@MLsAzYRgk*f2eC0#`zl1}lx$syo7n?efuFC)vT
z5t3dRtW>doI^IT*K}xrE5uZ;%h-&(n05tPBB(()rb=9}Sr?Yi^8s!Q_SaBF+8
z^FVz)Tq;5G;L{Jtr+U!*K=1ea_u{knt)r@CpU&RbJ$t65%>}$2H@m)bGb6)$SiqxG
z9$AvDq2Y_-4S3qXx&&XC-HKQIz-YYQ*dkBM!Hm)|(l-p;gIbYu8J{M?OU?vmYjpfF0*o)GWXLbIO!dQDx~Ldqr0X3?;u+EQ8O2hWa?J`ow$b;UUeQU%
z9sN2WBa|l{l1jq_$8YLlvy!nFk@!3#_k{*W;sT=4s!IG=e$XfjqKD~L-s3?+30sz|
z>4+f*C}45`+Es|w+=68XxEUN+{CXEJFyS5%+rXk&g_}oh18*xd18l_B6ThQpJQPE<%V9T<$<)v2nAjulk0^z?ytY=N7Vn!o$A!49vhofCN4o~gmJ#0+e
zx|&U9!(P4=5|Q&ObZ?HbEd|QnY!Z>lX<_&vZc^ovgVG>ZNNgD1GkRz_S>D*J9!R>|
z(%dH3%Sk80q-1$xFk?K^88sc^$L-d12``DcK-)oV$$d%s#`ZKByDSD$hJLO*XQ%L0
zGvMYTBwFk`pr~k!FCovPeXULAveVAmin80Ib~4KHgQb>thNZEl2e@wV@i-fI_A=%W
zu15Bpl!v9K0`A?Ql0{j8l8i?0v}mEAl#lMCC}78!RJk6LK^mspHi>?B+ycc_T2hXO
zP@92$X~`+zYd)hKugTYHtp);@F$7#^i_<2(aB41}kS=zg88Y~QF)l|C|RcTHJhI4Mv8^a1NTeV1=Df@
zw^ZX*c?2@q;KxpWkW2~3>rs`nUqTqEjr}|u@3<_*2n%F273Vajg-Zi^%DA_XTP6D3
ze3Edny9A+3`)NUC1p$=GXbXR?q$-iUlujSTM6oZt+$!6(Bj?tZQ@OA?o{CjZvF4Aj
zd29DTuywc7UN(Zlu2AZ9cy6Ze!B(_7*i)VpB{7?#yCP4OP(P195uE&|*@7(8)85~E
zb|rcQvk)CES;91BhQbvQt!(NCl51er+H{-Jwjt0j3lG{%KC^D8Ok>jAlozQVLPSfJQ)!+
zdA4{&wP=g5ypBiFsY=ewr2&;F+uRd(I=dF0b{PRhNm5~OQ{t>GV@=>=3+p|n
zcwHqzp{l}Tu4MzEEZM`etz&H)tHISSVN~z$>?Z5cxnWi$(K)XLDa@HVd^X;u!k-Kl;_HM1
zy&bi~z-3jxLsP=3e^Fj5>sCybjYT=r51#3dyQi!jb&AGUP*K-b#wvd?U9G;KBiX>{
zobN4CnPnyZ1PRJv@+@~71>rhMd`7SvoyYd|Wq2H&SGXZBFW3bHYq62pSkx%u1Ruxo
zrVLYbJ~I{!wJMd8AL6FZ#RTu3*rBtj;Gz1emQ<*2md>9`?^Iv7Xs5bvSm5a5Tt`gJ
zHXM&f{bDM?=ma&&}>_F~9}$QILmVKdIZ=>=onzb@0M*dyaJ+eFanduU#%u?L1pi2B1&;9&g3wCo;-u^m
z>9Iuu4~t4lGdI8OVj+4|d8?oSOAI<*SvlcbZSe?O&OK}yw}u*nZYu9X{&E@(lw0-O
zvvL{W8cv*Cbt82ESnBd5zIn(VVPr~^PRn`S8t$L;;!%bRZ-k6tWnAQ|csD7iZu!NH
zm9DvVItyGPtbh<3RH@e+RvD!GPih(~NwxzoRvs|klC0`tUH75P7Q68VcycXLJfuRa
zDRS?I^0l%)whYI2zVlIKIq&fsPo|cx3ub7TY~!LThidiy$l??2kH|cTzyVk<`>{&b
z-BTs5>N47;(lb5VTgSzvA;RhUp_R8iaWI|<-AX7(A1K!_8?8ATTNcE<*@jAlIkd2;
zlgF7i>j^;bgt)(HDqCRpNOOp7&1S=Vxfs9PtqO|gl$cSj1^q2EfriH?z#URNM3twqcU-5Om
zP`mBCQDQoihY+v&T`HVZgtpLHCGBubPYEN3%Vd#H@$|etLiT<6#dQh
zwl~UdRZ$bY+2~dE9@#)o?#GjqK!$**)GZpVS6KzAs1cV>H!Iy}NM9JW?sKd!8s&{@9`
zdB{;Vv*&4HMHH|uhl-_~vB}EOLJ(DQ_jfYfe7?)-w$?H26geDW
zO-dGBE8%1vl#*U^TktXaG};djx-l`QB2m9wSlJ9^m57uwBRY88`l@Y*l5UqDh@S9`
zV?WotAJJ=WubIapBtL+QyZZ(}JDL#ZEftJTluUI@hxmYGWInYa~|GhR``rVss^b^1|x1&gG2`
zEgX+-tXy7u&qp?{TxhM6%j#TLpEc>zEMJK)KEA#lUs=6;A%5V(<<+(IhgZ*^zjk4B
z^FbaR@66CWo$E<&v=XncUb*zRR`S65`oqIiwaV%l#$n8UkFwC^waXW(<)7`|D|dyu
z7SmFDTA>bcd%A3$yg#PeQBGRx1CL+7*tx%Y&bNVgE|4Kn5_KiMe=D8Ry^afa9VZl%
z7w=^>Ta|iZu;@i2rps+cGLkA1|J)(C7!%$RE6~H$8y!B!OZ3X{qP;#nygNL+>jFYD
zFC^LN+2F0=qC3`h>hRB6$v!JM=r(hQ-VUD|C8xTr8`+E;zAffXymNSWe0VqSxw3!U
zS1Z5o?L<7tUSP_1dqAlHe@y_Wex1I9b6qjgX19fCFzjq@j<5kk?aM{|Vn~^6*
zhhIV)sV^nY4u8$9r@k6JQ;rhovE-g}h{{>|;oY5pruy@>S(lw_PkA2!Oom;XpG>s6
z?Nq5dd=7eY&aO6F?QLTJ##fxlpQ2Y6E=JJ1v`qy0W3NN
zcqSMCO3y`hz$S{rf1DdpScJ2b48VhsX9A-oDG?4yj(F^*L4h=fZid_bh}!wXyHH*@
za?Du{MV$r~wo0m)4=PfTrT+zEp@T8#6Xx=q0tf7AF8T%U*b2pN@RUSgn;f=mot~w<5Dn5IgTy2pvbUc{1j~3`7yR!=bpbwfvlXG>#eU
zxC@wqCXOQRTpWyp^owj6M=6IAFc3yRriz*LH?x6V2+n09=0nq
z4r$Qz@Hw<7eqkb}e@2@Mm{nJ}F@edr7_8`l`yKi^jMr<7MFI>|!(rudItl1xmKH)f
zlvP&X@U9)E+v|}CkwwjEJTp`T_AEz11=SR@>rc0pjGguqUnJu^*-0sq9^TaiwWVoy
zN3}a=q?D>~GGV!+ax?H2;;9qDtk$?-ySJ5dA?at^dzddY?%{LN)W&0u(pp9-Qfx&N
zmvx1vgj+XcYcs7OwB3g0&w%tg>9rYEc!Lv3>ZYkxupi}%md@i1^i1$%bR-W}RzxB>
zXS>>}vt_J4?Z{4u`HX!*ni4;V2wIs_7MPrJjYe+CzIKUQDngo&?j@M90jEcokWEJ7
zK|CNmm}gr`0V>1e-pXW8ZTPSPDGR4kbULr5SexjI%4Hbu_0kdBJkI~6t%T;bI~`jI
zxCD9X79<^J%8CPG287o8%|!J?K|DRmtv8=zx*
zjO=7zjS2)m>YhPpF&i{C3}ccBBH1__ZRH8;fJJ(TUsTCwu&A}>u}wCF5zJ+2XUl7M#JvMonG1y!Pf
zLka;b9;Fr(%pWYQ7vO&vq|0#nogd!SajhFckIs3u?RJGAxkQ9Js2f02PRsH-x@tSiOqY_g!l*gVA`0`pE$_jpDO3_VMx8s*3RU6zOYuA_+!`^9$a_RCHvVlGHTfL*jZkX4ngK9M;~nAavMaMq{y?H~gO+6;E5ky9;xe2}K!-5S*$;&RxEXby6Srz}
zE_mj9l5D%oZh;e!)^Jkx?0GB_B|2#7Kig
z4YM$pcf2)vH5A@L(41XT-*HDRLau%8#2)geBOoUo
zcEkv{+^S_Ekrb_{|hNr*
zt&~rc3Pp@5`)a8c&Dp|_dAS>FRQ-9Remd#RZo5Fi&TVlN>pML4h_1rAyof`O=QOup
zszoS8g2!(GJ=jxv8s%s#>j)my-w|Kg;ykIC>I9?`%ii|~B}*>+mUVWz)>sT(Q8^Ll
zuX@71uAUHQ7n{}W2YePVw5rAtTfZ_%I`A@gG}5QTeaYbHIYm2``1Aw2EVMiuN%D@y
zahFC6wFVuLl;Uy+B+Vq$R#YBjY%ZlbCt0A)jyooKWO=rpla5K6D^#XborY8r1XmWl
z3`N~Ehz7+h?ZEVl_nuW`ICJd@-kg1WXB;_Lr?gY(&})e=#Rm`-8$}Z
zLog_nmiBBb9izgLtafNnRVs@>sZY;}>|W{VmuDe;5KMPQJy$HkHCE@RLl~PTq3e8R
zJ+A>QePP*VQji%v3YL2HNf>W*swf)&Bv@}zaOL=OliT@sdv5aE8Nr{MT$7hux`7G{
z=@4r@PET>DPt2tePH$|gEJA6Ozh%VnK~KF<>@u~uV@Y`^0b)!L^~dyT{@IeOp2BK~
zim~M6jN(|aweu~*U?w{1GX?v-d_(}nd+J~lw4w@s#Dx=;CS^Qlu9_kf&nOtvl+;@B
zC*!yzo7{qDB@Z)IanS~wa!-^U(}uibQX;OKc6Q^_i^`webAD_^7v-Ln!U(Yfl+;F44m@{aboyge}aq&Rs4g}$9TP!z)4I49ue^2
z)cWPOxp~CblS7On>q@nnft0+X(0OMMCdN5v)m?En=;Kollazy?2V1v)di
z9;}a3la_TLBg0=vOK^3VBBThED|FvldL0yDfDKQL5CB#h>JN081bZu|cst}iwWj0_
z?E@kHMp@`DdQl{Fb*Sp(B(K1XLklB!IfX>pOMB#B%zjhjl0>R_z>ZNmEBWG%Q9dRO
zB$pLeQD;z)wIcGa3_=@xrs~vLZ|*c@bj@;G(Q#$XfIrX|%G(wiYhUJ8ySzj_B{7t!
znqsIQeuNf%SC`UPeUu|yo%*H>Ea?`1%eY#B684OOlC|7#IFVVl0U!=SY}3}6Xpyq8
zHWXuFE4jTe0<8K5CA}`k`BsafyrE1Id&GFwm!V))DQzVJ(Ig3FCSw*Aahj~fChf_+
z)aq8USIG3Z3TYI>L=e~b
z=8HTTSt(WY3{vCIr?^Z}r4@-~tS(JU8?igYt?AbBqHL8^mj1qdo^w0+4_iZ
z%om8u%#@0v^Jgf-b#&fWBh1APx;I*{xka^x6|Yp$5vpKFugEr0-3cg9zj1yXmVpk+q5DiHnlG3_DRC=KGETH!S@HS9nic1H
zqv-?7!@H2j>V^E73G@=i36q+~4@K9F$<_Hsb3LdyDRS|l$&u&hA`TZC&Oa3@TuIfD
zG53f+=y_x{fq|`vR2}%lA_o=sJc=RuPHvzG9-MOxbD+*cGLxVShEfYl
z5p8Ud7_zo1$u;>$=RQ`|fa6OEVmD9-wW>Nnw;as$Izx$=b}H1ggN&I=&Nn&8jipFj
z?Ge1@)RCi{VGdN3BghW6`>$T^o|(vl`}-#n1EHNfK4Y`t=d2zD(UcVi24^@BTh|lOIfS
zah80(a6U`nQ=t}OHLb36r4x!51dQ+z2GRNgdo3Vf1Qp`Ki}{*hn4pS
zX&Gfzyc42^ZuFSE9P30F6p?vd&=7W_`?#TA{h?M`7I44slxJ9-btv`zqLX~cXg)>0
z={h7OLc*JQ8J2d#E2Zamu1k2hi1{FPRJyh9PS~6(^Gggu0|3A7^k!ttiS)g(xr6!j
z%CjcK%Q%U=TIxn(*RnWl`VG(HI9kU?Dt^@%GC!7dFhS5srD|%%H~XqaQU0VJqnmVA
z0YSZM|CcIwR;rE>Eq?$Az$O>1~T
zc1-q!UM$D-{P}p!-cHStS8$4U=-b~fQ&$s_v)aVn(p2+vxdY~RFW1Qj6G{m-dM5WW
z)TA%A`6?QN)H<@@zOv;M>XD0A9@Y%f{CF;LR25@GbEM@W91=MlLn=e*F7KXqTV+!g
zqn8NN8Z5Z=_ylWl@Pi0`xw_yH90@R_%b668=>D7Bg
zRL#`gxayI`Kvk1VR=t1cO{Ta=`2!fK%&==#r5Evbio@qrD+&s*CCh@sJW?y;k2Igf4i{SO25hZt3u&=bd>^3}SWVkDU$@eHJ1MY8aov$5!U1=Gb9B$Xy95s9G9;i)3*
zaceCwki9a0Y6?@j&*^ynltj7Y1@bi3)jlT{WE)h7;LPuf)Jx`;n?7prYC|PiBJ{hJ
zuUc_#Mn3sF6}E8H_XuWdU(|5YxLe<$OpsH?jzuX*9Nx90=fcsiULcr*EOTcztPfP2
z<0_1It%tlB&aKsE_wFALPg5MU)mdMKtWtH~aGKel#crHj>s
zivVHA=R(jhip~c}Coo9edtpyUPY1;239*D|vocxme65MeRp1&G3(0RSM@+DH!%jv8
z??zL*Uc=frCu!Swbwtba9T)MLr_3?t*qz5pv^~RB#Cp}kdfjRM!xn_*Ub20>Vj`wLqA5zqfPgM3;`7_eWC|f6f
z!)OwcxLhdtWPe;567nbYkVObwMxD{MV{e-e=90$zfhOO2BvJK$OxMh|8k7TH=r3Kl
zF2*{uqZHMhet5U~y7Ji?2(VQJe=@pIi}fnzRlKM4L!BA!up5<;8%%uU84F~Njd9Dq
z72bLNS=Zbgjpb-H*Fu+RLk;VjHJ9T+1Jq7sxurHDZIyoJ+*?UB8VSVPu@nB#NJ;kE
zG~N^tcG)@YbxKi3`G7$Yyb^l9YCq4cEF1ooca7$kyr|uW_ZrIJZ4hY-^eIF?CAc
zElJy?LSK0TvwU`@F=p)u-V2Q?E;)J7a}Zr?3CVV0s}XEy3D{y=pZs~*b?gI&woz5G
z$Yd<^jB~83nFMDy}QI$kO-3LWyoumuOX_js2hV@!TlF-A+DK1SPmw{d+
zti5aaQ#y0V-^pwk)XL>BbH-nhLlctwhC0%u#}$<@G#{EN?a;vw`}mBGuz99eqiZdg
zqL1baJV^KZ;TLuAlitmT8bg2tOJnG+((lKmS-?_|csc&=QP)A!$j3Ys)!W8!ib86v
zD)V5BTpBW&TJTtVrp74`MOWb@Tee&=lNGSq=rWasG{=m^Nv<=WDXYEPYaBgcr`Aze
zdu_3Lsh(gdJy+-OC_AKbNmIEneb7_piu|0Ds^O>-m;-K=dkF7kmo&XM-*v|UO%U=P(f, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-13 15:00+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: Francais\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: openandroidinstaller/app_state.py:98 openandroidinstaller/app_state.py:120
+#: openandroidinstaller/views/step_view.py:120
+msgid "Boot custom recovery"
+msgstr "Démarrer le recovery"
+
+#: openandroidinstaller/app_state.py:100 openandroidinstaller/app_state.py:122
+msgid ""
+"If you already flashed TWRP, boot into it by pressing 'Confirm and run'. "
+"Otherwise restart the process. Once your phone screen looks like the picture "
+"on the left, continue."
+msgstr ""
+"Si vous avez déjà flashé TWRP, pressez 'Confirmer et exécuter' pour le lancer"
+"Sinon, recommencez le processus. Une fois que l'écran du téléphone ressemble à "
+"l'image à gauche, continuez."
+
+#: openandroidinstaller/openandroidinstaller.py:240
+#, python-brace-format
+msgid "OpenAndroidInstaller version {version}"
+msgstr "OpenAndroidInstaller version {version}"
+
+#: openandroidinstaller/openandroidinstaller.py:254
+msgid "Frequently asked questions and encountered issues."
+msgstr "Questions fréquemment posées et problèmes rencontrés"
+
+#: openandroidinstaller/openandroidinstaller.py:259
+msgid "Give feedback"
+msgstr "Donnez votre avis"
+
+#: openandroidinstaller/openandroidinstaller.py:265
+msgid "Give feedback about your experience with OpenAndroidInstaller"
+msgstr "Donnez votre avis à propos de votre expérience avec OpenAndroidInstaller"
+
+#: openandroidinstaller/openandroidinstaller.py:270
+msgid "Report a bug"
+msgstr "Rapporter un problème"
+
+#: openandroidinstaller/openandroidinstaller.py:276
+msgid "Report an issue on github"
+msgstr "Rapporter un problème sur GitHub"
+
+#: openandroidinstaller/openandroidinstaller.py:290
+msgid ""
+"These instructions only work if you follow every section and step precisely. "
+"Do not continue after something fails!"
+msgstr ""
+"Ces instructions ne fonctionnent que si vous suivez précisément chaque étape. "
+"Ne continuez pas si quelque chose n'a pas marché !"
+
+#: openandroidinstaller/openandroidinstaller.py:293
+msgid "I understand"
+msgstr "Je comprends"
+
+#: openandroidinstaller/widgets.py:198
+#, python-brace-format
+msgid "Current step: {title}"
+msgstr "Étape actuelle : {title}"
+
+#: openandroidinstaller/widgets.py:216
+#: openandroidinstaller/views/requirements_view.py:68
+#: openandroidinstaller/views/start_view.py:64
+msgid "Continue"
+msgstr "Continuer"
+
+#: openandroidinstaller/widgets.py:228
+msgid "Confirm and run"
+msgstr "Confirmer et exécuter"
+
+#: openandroidinstaller/views/addon_view.py:59
+msgid "What kind of addons are supported?"
+msgstr "Quels types d'extensions sont supportés ?"
+
+#: openandroidinstaller/views/addon_view.py:61
+msgid ""
+"## Google Apps:\n"
+"There are different packages of Google Apps available. Most notable\n"
+"- [MindTheGapps](https://wiki.lineageos.org/gapps#downloads) and \n"
+"- [NikGApps](https://nikgapps.com).\n"
+"\n"
+"These packages are only dependent on your OS version and processor "
+"architecture, which can be found on each device specific info page.\n"
+"Filenames on MindTheGApps are of the format `MindTheGapps--"
+"-_.zip` (with Android 12L being 12.1)\n"
+"and NikGApps are of the format `NikGapps---"
+"--signed.zip`.\n"
+"\n"
+"NikGApps come in different flavours ranging from minimal Google support "
+"(core) to the full experience (full).\n"
+"\n"
+"## MicroG\n"
+"\n"
+"The [MicroG](https://microg.org) project offers a free-as-in-freedom re-"
+"implementation of Google's proprietary Android user space apps and "
+"libraries.\n"
+"\n"
+"The recommended way to install MicroG is to use the zip file provided here:\n"
+"- [https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases]"
+"(https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases).\n"
+"\n"
+"## F-Droid Appstore\n"
+"\n"
+"F-Droid is an installable catalogue of libre software apps for Android. The "
+"F-Droid client app makes it easy to browse, install, and keep track of "
+"updates on your device.\n"
+"You can get the zip file to install this addon here: [https://f-droid.org/en/"
+"packages/org.fdroid.fdroid.privileged.ota](https://f-droid.org/en/packages/"
+"org.fdroid.fdroid.privileged.ota).\n"
+msgstr ""
+"## Les applications Google :\n"
+"Il y a plusieurs paquets contenant les applications Google. Les principaux sont :\n"
+"- [MindTheGapps](https://wiki.lineageos.org/gapps#downloads) et \n"
+"- [NikGApps](https://nikgapps.com).\n"
+"\n"
+"Ces paquets sont seulement dépendants de votre système d'exploitation et de l'architecture "
+"du processeur, qui peut être trouvée dans les paramètres de l'appareil.\n"
+"Le nom des fichiers de MindTheGApps sont du type `MindTheGapps--"
+"-_.zip` (sachant que Android 12L est 12.1)\n"
+"et les fichiers NikGApps sont du type `NikGapps---"
+"--signed.zip`.\n"
+"\n"
+"NikGApps est disponible avec différentes saveurs, allant d'un support minimal (core) "
+"à l'expérience complète (full).\n"
+"\n"
+"## MicroG\n"
+"\n"
+"Le projet [MicroG](https://microg.org) offre une implémentation libre "
+"des librairies propriétaires de Google.\n"
+"\n"
+"La manière recommandée d'installer MicroG est d'utiliser le zip fourni ici :\n"
+"- [https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases]"
+"(https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases).\n"
+"\n"
+"## Magasin d'applications F-Droid\n"
+"\n"
+"F-Droid est un magasin d'applications libres pour Android. Le client "
+"F-Droid rend facile la recherche, installation et mise à jour des applications libres "
+"de votre appareil.\n"
+"Pour des mises à jour automatiques, vous pouvez installer ce fichier zip : [https://f-droid.org/fr/"
+"packages/org.fdroid.fdroid.privileged.ota](https://f-droid.org/fr/packages/"
+"org.fdroid.fdroid.privileged.ota).\n"
+
+#: openandroidinstaller/views/addon_view.py:86
+#: openandroidinstaller/views/requirements_view.py:101
+#: openandroidinstaller/views/select_view.py:96
+#: openandroidinstaller/views/select_view.py:375
+msgid "Close"
+msgstr "Fermer"
+
+#: openandroidinstaller/views/addon_view.py:94
+msgid "Selected addons: "
+msgstr "Extensions sélectionnées : "
+
+#: openandroidinstaller/views/addon_view.py:108
+msgid "What kind of addons?"
+msgstr "Quel type d'extensions ?"
+
+#: openandroidinstaller/views/addon_view.py:113
+msgid "Get more details on what addons are supported."
+msgstr "Obtenir plus de détails sur les types d'extensions supportées."
+
+#: openandroidinstaller/views/addon_view.py:119
+msgid "You can select additional addons to install."
+msgstr "Vous pouvez sélectionner des extensions supplémentaires à installer."
+
+#: openandroidinstaller/views/addon_view.py:132
+msgid "Here you can download the F-Droid App-Store:"
+msgstr "Vous pouvez télécharger le magasin d'application F-Droid ici : "
+
+#: openandroidinstaller/views/addon_view.py:136
+msgid "Download F-Droid App-Store"
+msgstr "Télécharger le magasin d'applications F-Droid"
+
+#: openandroidinstaller/views/addon_view.py:146
+msgid ""
+"Here you can find instructions on how to download the right Google apps for "
+"your device."
+msgstr ""
+"Vous trouverez ici les instructions permettant de télécharger le bon paquet "
+"d'applications Google pour votre appareil."
+
+#: openandroidinstaller/views/addon_view.py:151
+msgid "Download Google Apps"
+msgstr "Télécharger les applications Google"
+
+#: openandroidinstaller/views/addon_view.py:160
+msgid "Here you can download MicroG:"
+msgstr "Vous pouvez télécharger MicroG ici : "
+
+#: openandroidinstaller/views/addon_view.py:164
+msgid "Download MicroG"
+msgstr "Télécharger MicroG"
+
+#: openandroidinstaller/views/addon_view.py:180
+msgid "Select addons:"
+msgstr "Extensions sélectionnées : "
+
+#: openandroidinstaller/views/addon_view.py:188
+msgid "Pick the addons you want to install"
+msgstr "Sélectionnez les extensions que vous voulez installer"
+
+#: openandroidinstaller/views/addon_view.py:229
+msgid "No addons selected."
+msgstr "Aucune extension sélectionnée."
+
+#: openandroidinstaller/views/install_addons_view.py:78
+#: openandroidinstaller/views/install_view.py:74
+#: openandroidinstaller/views/step_view.py:106
+msgid "Advanced output"
+msgstr "Journaux détaillés"
+
+#: openandroidinstaller/views/install_addons_view.py:92
+msgid "Install Addons"
+msgstr "Installer des extensions"
+
+#: openandroidinstaller/views/install_addons_view.py:98
+msgid ""
+"In the next steps, you flash the selected Addons.\n"
+"\n"
+"Confirm to install.\n"
+"\n"
+"This might take a while. At the end your phone will boot into the new OS.\n"
+msgstr ""
+"Dans les étapes suivantes, vous allez flasher les extensions sélectionnées.\n"
+"\n"
+"Confirmez pour installer.\n"
+"\n"
+"Cela peut prendre du temps. À la fin du processus, votre téléphone va démarrer sur le nouveau système.\n"
+
+#: openandroidinstaller/views/install_addons_view.py:112
+msgid "Confirm and install addons"
+msgstr "Confirmer et installer les extensions"
+
+#: openandroidinstaller/views/install_addons_view.py:138
+#: openandroidinstaller/views/install_view.py:161
+#: openandroidinstaller/views/step_view.py:187
+msgid "Do you want to skip?"
+msgstr "Voulez-vous ignorer ?"
+
+#: openandroidinstaller/views/install_addons_view.py:140
+#: openandroidinstaller/views/install_view.py:163
+#: openandroidinstaller/views/step_view.py:189
+msgid "Skip"
+msgstr "Ignorer"
+
+#: openandroidinstaller/views/install_addons_view.py:170
+msgid "Installing"
+msgstr "Installation"
+
+#: openandroidinstaller/views/install_addons_view.py:205
+#: openandroidinstaller/views/install_view.py:212
+msgid ""
+"Installation failed! Try again or make sure everything is setup correctly."
+msgstr ""
+"L'installation a échouée ! Essayez à nouveau ou soyez sûr que tout est paramétré correctement."
+
+#: openandroidinstaller/views/install_view.py:92
+msgid "Install addons"
+msgstr "Installer les extensions"
+
+#: openandroidinstaller/views/install_view.py:105
+msgid "Install OS"
+msgstr "Installer le système"
+
+#: openandroidinstaller/views/install_view.py:111
+msgid ""
+"In the next steps, you finally flash the selected OS image.\n"
+" \n"
+"Connect your device with your computer with the USB-Cable. This step will "
+"format your phone and wipe all the data.\n"
+"It will also remove encryption and delete all files stored in the internal "
+"storage.\n"
+"Then the OS image will be installed. Confirm to install.\n"
+"\n"
+"This might take a while. At the end your phone will boot into the new OS.\n"
+" \n"
+"#### **Install addons:**\n"
+"If you want to install any addons like Google Apps, microG or F-droid, use "
+"the toggle below **before** starting the install process!\n"
+"After the installation you'll be taken through the process. Note, that this "
+"process is still somewhat experimental and using ROMs with\n"
+"included Google Apps (like PixelExperience) or microG (lineageOS for microG) "
+"is recommended.\n"
+"\n"
+"#### **Warning:**\n"
+"Don't try to add addons like Google Apps if your OS ROM already has Google "
+"Apps or microG included! Otherwise your system will break!\n"
+msgstr ""
+"Dans les étapes suivantes, vous allez enfin installer le système sélectionné.\n"
+" \n"
+"Connctez votre appareil à votre ordinateur avec un cable USB. Cette étape va "
+"formater votre téléphone et supprimer toutes vos données.\n"
+"Cela va également désactiver le chiffrement et supprimer tous les fichiers "
+"sauvegardés dans le stockage interne.\n"
+"Ensuite, le système va être installé. Confirmez pour installer.\n"
+"\n"
+"Cela peut prendre du temps. À la fin, votre téléphone va démarrer sur le nouveau système.\n"
+" \n"
+"#### **Installation des extensions :**\n"
+"Si vous voulez installer des extensions comme les Google Play Services, microG ou F-Droid, "
+"utilisez le bouton ci-dessous **avant** de commencer le processus d'installation !\n"
+"Le processus d'installation des extensions a lieu après l'installation du système. "
+"Notez que ce processus est encore expérimental, et utiliser des ROM possèdant déjà \n"
+"les applications Google (comme PixelExperience) ou microG (comme lineageOS for microG) "
+"est recommandé.\n"
+"\n"
+"#### **Attention:**\n"
+"Ne tentez pas d'installer des extensions comme les applications Google si la ROM "
+"les contient déjà , ou microG ! Sinon, le système va casser !\n"
+
+#: openandroidinstaller/views/install_view.py:135
+msgid "Confirm and install"
+msgstr "Confirmer et installer"
+
+#: openandroidinstaller/views/install_view.py:182
+msgid "Please be patient, it may take a few minutes."
+msgstr "Merci de patienter, cela peut prendre quelques minutes."
+
+#: openandroidinstaller/views/requirements_view.py:76
+#: openandroidinstaller/views/select_view.py:144
+#: openandroidinstaller/views/start_view.py:71
+msgid "Back"
+msgstr "Retour"
+
+#: openandroidinstaller/views/requirements_view.py:85
+msgid "Where to find the current Android and/or firmware version?"
+msgstr "Où trouver la version d'Android actuelle et/ou la version du firmware ?"
+
+#: openandroidinstaller/views/requirements_view.py:87
+msgid ""
+"\n"
+"## Find your current Android Version\n"
+"Scroll down on the Settings screen and look for an \"About phone\", \"About "
+"tablet\", or \"System\" option.\n"
+"You'll usually find this at the very bottom of the main Settings screen, "
+"under System, but depending\n"
+"on your phone it could be different. If you do find a specific option for "
+"System, you can usually\n"
+"find the \"About Phone\" underneath that.\n"
+"\n"
+"On the resulting screen, look for \"Android version\" to find the version of "
+"Android installed on your device.\n"
+"\n"
+"## Find your current device firmware version\n"
+"On the same screen you find the \"Android version\" you can also find the "
+"Firmware Version.\n"
+"On some devices, the build version is basically the firmware version."
+msgstr ""
+"\n"
+"## Trouver votre version d'Android actuelle\n"
+"Allez dans les paramètres de votre téléphone et cherchez l'option"
+"\"À propos\" ou \"Système\".\n"
+"Vous trouvez généralement cette option tout en haut ou tout en bas, mais cela dépend"
+"des marques. Une fois que vous l'avez trouvé, cliquer dessus et cherchez "
+"la section \"Version d'Android\".\n"
+"\n"
+"## Trouver la version du firmware actuel\n"
+"Sur la même page où vous avez trouvé la version d'Android, "
+"vous trouverez également la version du firmware / micrologiciel.\n"
+"Sur certain modèles, la version du firmware est la version de build / base."
+
+#: openandroidinstaller/views/requirements_view.py:112
+msgid "How to Find the version"
+msgstr "Comment trouver la version"
+
+#: openandroidinstaller/views/requirements_view.py:117
+msgid "How to find the firmware and android version of your device."
+msgstr "Comment trouver la version d'Android et di firmware de votre appareil."
+
+#: openandroidinstaller/views/requirements_view.py:123
+msgid "Check the Requirements"
+msgstr "Vérifier les conditions"
+
+#: openandroidinstaller/views/requirements_view.py:130
+msgid ""
+"Before continuing you need to check some requirements to progress. Please "
+"read the instructions and check the boxes if everything is fine."
+msgstr ""
+"Avant de continuer, vous devez vérifier quelques conditions. Merci "
+"de lire les instructions et cocher les cases si tout est bon."
+
+#: openandroidinstaller/views/requirements_view.py:143
+msgid ""
+"The required android version is installed. (Or I know the risk of continuing)"
+msgstr ""
+"La version d'Android requise est installée. (Ou vous connaissez le risque encouru)"
+
+#: openandroidinstaller/views/requirements_view.py:153
+#, python-brace-format
+msgid "Android Version {required_android_version}:"
+msgstr "Version d'Android {required_android_version}"
+
+#: openandroidinstaller/views/requirements_view.py:161
+#, python-brace-format
+msgid ""
+"Before following these instructions please ensure that the device is "
+"currently using Android {required_android_version} firmware.\n"
+"If the vendor provided multiple updates for that version, e.g. security "
+"updates, make sure you are on the latest!\n"
+"If your current installation is newer or older than Android "
+"{required_android_version}, please upgrade or downgrade to the required\n"
+"version before proceeding (guides can be found on the internet!).\n"
+" "
+msgstr ""
+"Avant de suivre ces instructions, soyez sur que votre appareil est actuellement "
+"sous Android {required_android_version}.\n"
+"Si le fournisseur a proposé des mises à jour, soyez sur la plus récente !\n"
+"Si votre installation est plus vieille ou plus récente que "
+"Android {required_android_version}, installez la version requise avant de continuer (des tutoriels "
+"peuvent être trouvés sur internet).\n"
+" "
+
+#: openandroidinstaller/views/requirements_view.py:182
+msgid ""
+"The required firmware version is installed. (Or I know the risk of "
+"continuing)"
+msgstr ""
+"La version du firmware requise est installée. (Ou vousconnaissez le risque encouru)"
+
+#: openandroidinstaller/views/requirements_view.py:192
+#, python-brace-format
+msgid "Firmware Version {required_firmware_version}:"
+msgstr "Firmware en version {required_firmware_version}"
+
+#: openandroidinstaller/views/requirements_view.py:200
+#, python-brace-format
+msgid ""
+"Before following these instructions please ensure that the device is on "
+"firmware version {required_firmware_version}.\n"
+"To discern this, you can run the command `adb shell getprop ro.build.display."
+"id` on the stock ROM.\n"
+"If the device is not on the specified version, please follow the "
+"instructions below to install it.\n"
+" "
+msgstr ""
+"Avant de continuer ces instructions, soyez sûr que votre appareil a "
+"un firmware sous la version {required_firmware_version}.\n"
+"Pour être sûr, lancez la commande `adb shell getprop ro.build.display."
+"id` sur votre téléphone sous le système du fabricant.\n"
+"Si l'appareil n'est pas sur la version spécifiée, "
+"merci de suivre les instructions ci-dessous pour l'installer.\n"
+" "
+
+#: openandroidinstaller/views/requirements_view.py:238
+msgid "The battery level is over 80%."
+msgstr "Le niveau de batterie est supérieur à 80%."
+
+#: openandroidinstaller/views/requirements_view.py:246
+msgid ""
+"\n"
+"#### Battery level over 80%\n"
+"Before continuing make sure your device battery level is above 80%.\n"
+" "
+msgstr ""
+"\n"
+"#### Niveau de batterie supérieur à 80%\n"
+"avant de continuer, soyez sûr que la batterie de l'appareil a "
+"un niveau supérieur à 80%.\n"
+" "
+
+#: openandroidinstaller/views/requirements_view.py:262
+msgid "Booted the stock OS at least once."
+msgstr "Le système d'origine a été démarré au moins une fois."
+
+#: openandroidinstaller/views/requirements_view.py:270
+msgid ""
+"\n"
+"#### Boot your device with the stock OS at least once and check every "
+"functionality.\n"
+"Make sure that you can send and receive SMS and place and receive calls "
+"(also via WiFi and LTE, if available),\n"
+"otherwise it won't work on your custom ROM either! Additionally, some "
+"devices require that VoLTE/VoWiFi be utilized once on stock to provision "
+"IMS.\n"
+" "
+msgstr ""
+"\n"
+"#### Démarrez votre appareil sur le système d'origine au moins une fois et vérifiez que "
+"toutes les fonctionnalités fonctionnent.\n"
+"Vérifiez que vous pouvez envoyer et recevoir des SMS et passer des appels "
+"(aussi en VoLTE et VoWiFi si disponible),\n"
+"sinon, cela ne fonctionnera pas non plus sur le nouveau système ! Aussi, "
+"certains appareils nécessitent que VoLTE/VoWiFi soient utilisés au moins une fois sur le système d'origine "
+"pour l'approvisionnement IMS.\n"
+" "
+
+#: openandroidinstaller/views/requirements_view.py:287
+msgid "No lock code or fingerprint lock enabled."
+msgstr "Aucun code de déverouillage ou empreinte digitale activée"
+
+#: openandroidinstaller/views/requirements_view.py:295
+msgid ""
+"\n"
+"#### Disable all device lock codes and fingerprint locks.\n"
+" "
+msgstr ""
+"\n"
+"#### Désactiver tous les codes de dévérouillage et empreinte digitale.\n"
+" "
+
+#: openandroidinstaller/views/select_view.py:73
+msgid "What is an OS image and recovery and why do I need it?"
+msgstr "Qu'est-ce qu'une image système, un recovery et à quoi ça sert ?"
+
+#: openandroidinstaller/views/select_view.py:75
+msgid ""
+"## OS image or ROM\n"
+"An operating system (OS) is system software that manages computer hardware,\n"
+"software resources, and provides common services for computer programs. \n"
+"Popular, custom operating systems for mobile devices based on Android are \n"
+"- [LineageOS](https://lineageos.org)\n"
+"- [/e/OS](https://e.foundation/e-os) or\n"
+"- [LineageOS for microG](https://lineage.microg.org)\n"
+"- and many others.\n"
+"\n"
+"Often, the related OS images are called 'ROM'. 'ROM' stands for *R*ead-"
+"*o*nly *m*emory,\n"
+"which is a type of non-volatile memory used in computers for storing "
+"software that is\n"
+"rarely changed during the life of the system, also known as firmware.\n"
+"\n"
+"## Recovery Image\n"
+"A custom recovery is used for installing custom software on your device.\n"
+"This custom software can include smaller modifications like rooting your "
+"device or even\n"
+"replacing the firmware of the device with a completely custom ROM.\n"
+"\n"
+"OpenAndroidInstaller works with the [TWRP recovery project](https://twrp.me/"
+"about)."
+msgstr ""
+"## Image système ou ROM\n"
+"Un système d'exploitation (OS en anglais) est un logiciel qui gère le matériel de l'appareil,"
+"les ressources, et fournis les logiciels de base.\n"
+"Parmi les ROM les plus populaires basées sur Android, citons \n"
+"- [LineageOS](https://lineageos.org)\n"
+"- [/e/OS](https://e.foundation/e-os) or\n"
+"- [LineageOS for microG](https://lineage.microg.org)\n"
+"- et bien d'autres.\n"
+"\n"
+"Souvent, les images système associées sont appelées 'ROM', pour *R*ead-"
+"*o*nly *m*emory, qui est un type de mémoire non volatile utilisée en informatique "
+"pour stocker les logiciels qui ne sont pas souvent changés durant la vie "
+"de l'appareil, aussi appelé firmware.\n"
+"\n"
+"## Image recovery\n"
+"Un recovery personnalisé est utilisé pour installer des systèmes altrnatifs sur "
+"votre appareil. Ce logiciel permet de rooter l'appareil et remplacer le firmware "
+"avec un système complètement nouveau.\n"
+"\n"
+"OpenAndroidInstaller fonctionne avec le recovery [TWRP](https://twrp.me/"
+"about)."
+
+#: openandroidinstaller/views/select_view.py:114
+msgid "Selected image: "
+msgstr "Image sélectionnée : "
+
+#: openandroidinstaller/views/select_view.py:115
+msgid "Selected recovery: "
+msgstr "Recovery sélectionné : "
+
+#: openandroidinstaller/views/select_view.py:133
+msgid "Continue without additional images"
+msgstr "Continuer sans images additionnelles"
+
+#: openandroidinstaller/views/select_view.py:172
+msgid "What is this?"
+msgstr "Qu'est-ce que c'est ?"
+
+#: openandroidinstaller/views/select_view.py:177
+msgid "Get more details on custom operating system images and recoveries."
+msgstr "Obtenir plus de détails sur les images système et les recoveries"
+
+#: openandroidinstaller/views/select_view.py:183
+msgid "Now pick an OS image and a recovery file:"
+msgstr "Sélectionnez maintenant une image système et un recovery : "
+
+#: openandroidinstaller/views/select_view.py:200
+msgid "Important notes for your device"
+msgstr "Notes importantes pour votre appreil"
+
+#: openandroidinstaller/views/select_view.py:217
+msgid ""
+"You can bring your own image and recovery or you download the officially "
+"supported image file for your device here:"
+msgstr ""
+"Vous pouvez utiliser votre propre image système et recovery, ou vous pouvez "
+"télécharger l'image officiellement supportée pour votre appareil ici : "
+
+#: openandroidinstaller/views/select_view.py:222
+msgid "Download LineageOS image"
+msgstr "Télécharger l'image de LineageOS"
+
+#: openandroidinstaller/views/select_view.py:230
+msgid "Download TWRP recovery"
+msgstr "Télécharger le recovery TWRP"
+
+#: openandroidinstaller/views/select_view.py:246
+msgid "Select an OS image:"
+msgstr "Sélectionnez une image système : "
+
+#: openandroidinstaller/views/select_view.py:248
+#, python-brace-format
+msgid ""
+"\n"
+"The image file should look something like `lineage-19.1-20221101-nightly-"
+"{device_code}-signed.zip`."
+msgstr ""
+"\n"
+"Le nom de l'image doit ressembler à `lineage-19.1-20221101-nightly-"
+"{device_code}-signed.zip`."
+
+#: openandroidinstaller/views/select_view.py:254
+msgid "Pick OS image"
+msgstr "Sélectionner l'image système"
+
+#: openandroidinstaller/views/select_view.py:272
+msgid "Select a TWRP recovery image:"
+msgstr "Sélectionner un recovery"
+
+#: openandroidinstaller/views/select_view.py:274
+#, python-brace-format
+msgid ""
+"\n"
+"The recovery image should look something like `twrp-3.7.0_12-0-{device_code}."
+"img`.\n"
+"\n"
+"**Note:** This tool **only supports TWRP recoveries**."
+msgstr ""
+"\n"
+"Le nom du recovery doit ressembler à `twrp-3.7.0_12-0-{device_code}."
+"img`.\n"
+"\n"
+"**Note : ** OpenAndroidInstaller ne supporte **que le recovery TWRP**."
+
+#: openandroidinstaller/views/select_view.py:283
+msgid "Pick TWRP recovery file"
+msgstr "Sélectionner le fichier de TWRP"
+
+#: openandroidinstaller/views/select_view.py:328
+msgid ""
+"- If something goes wrong, you can reinstall MiUI here:\n"
+" \n"
+msgstr ""
+"- Si quelque chose se passe mal, vous pouvez réinstaller MiUI ici :\n"
+" \n"
+
+#: openandroidinstaller/views/select_view.py:334
+msgid ""
+"- **This device has not been tested with OpenAndroidInstaller yet.** The "
+"installation can go wrong. You may have to finish the installation process "
+"with command line. If you test, please report the result on GitHub."
+msgstr ""
+"- **Cet appareil n'a pas encore été testé avec OpenAndroidInstaller.** "
+"L'installation peut échouer, et vous devrez peut être terminer l'installation "
+"en lignes de commandes. Si vous testez, merci de le signaler sur GitHub."
+
+#: openandroidinstaller/views/select_view.py:347
+msgid "Why do I need additional images and where do I get them?"
+msgstr "Pourquoi des images additionnelles et comment les obtenir ?"
+
+#: openandroidinstaller/views/select_view.py:349
+#, python-brace-format
+msgid ""
+"## About additional images\n"
+"Some devices require additional images to be flashed before the recovery and "
+"OS image can be flashed.\n"
+"Not all images explained below are required for all devices. The installer "
+"will tell you which images are required for your device.\n"
+"\n"
+"### dtbo.img\n"
+"The `dtbo.img` is a partition image that contains the device tree overlay.\n"
+"\n"
+"### vbmeta.img\n"
+"The `vbmeta.img` is a partition image that contains the verified boot "
+"metadata.\n"
+"This is required to prevent issues with the verified boot process.\n"
+"\n"
+"### super_empty.img\n"
+"The `super_empty.img` is used to wipe the super partition. This is required "
+"to\n"
+"prevent issues with the super partition when flashing a new ROM.\n"
+"\n"
+"### vendor_boot.img\n"
+"The `vendor_boot.img` is a partition image that contains the vendor boot "
+"image.\n"
+"\n"
+"## Where do I get these images?\n"
+"You can download the required images for your device from the [LineageOS "
+"downloads page](https://download.lineageos.org/devices/{device_code}/"
+"builds).\n"
+"If this download page does not contain the required images, you can try to "
+"find them on the [XDA developers forum](https://xdaforums.com).\n"
+" "
+msgstr ""
+"## À propis des images additionnelles \n"
+"Certains appareils nécessitent des images additionnelles devant être flashées avant "
+"le recovery et le système. Elles ne sont pas toutes requises pour tous les appareils, "
+"l'installateur ne va demander que celles requises par votre appareil.\n"
+"\n"
+"### dtbo.img\n"
+"La partition `dtbo.img` contient l'arborescence de l'appareil.\n"
+"\n"
+"### vbmeta.img\n"
+"La partition `vbmeta.img` contient les métadonnées associées au dispositif verified boot.\n"
+"Cela est requis pour éviter les problèmes avec le dispositif verified boot.\n"
+"\n"
+"### super_empty.img\n"
+"Le fichier `super_empty.img` est utilisé pour vider la partition `super`. "
+"Cela est nécessaire pour éviter les problèmes avec la partition `super` lors de l'installation "
+"d'un nouveau système.\n"
+"\n"
+"### vendor_boot.img\n"
+"La partition `vendor_boot.img` contient l'image vendor boot.\n"
+"\n"
+"## Où trouver ces images ?\n"
+"Vous pouvez trouver les images requises pour votre appareil sur le site de "
+"[LineageOS](https://download.lineageos.org/devices/{device_code}/"
+"builds).\n"
+"Si cette page ne les contient pas, cherchez sur le forum de développeurs "
+"[XDA developers forum](https://xdaforums.com).\n"
+" "
+
+#: openandroidinstaller/views/select_view.py:384
+msgid "Why do I need this and where do I get it?"
+msgstr "Pourquoi avoir besoin de cela et comment l'obtenir ?"
+
+#: openandroidinstaller/views/select_view.py:389
+msgid "Get more details on additional images and download links."
+msgstr "Obtenir plus de détails sur les images additionnelles et les liens de téléchargement."
+
+#: openandroidinstaller/views/select_view.py:400
+msgid "Select required additional images:"
+msgstr "Sélectionnez les images additionnelles requises : "
+
+#: openandroidinstaller/views/select_view.py:406
+msgid ""
+"\n"
+"Your selected device and ROM requires flashing of additional partitions. "
+"Please select the required images below.\n"
+"\n"
+"Make sure the file is for **your exact phone model!**"
+msgstr ""
+"\n"
+"Le système sélectionné requiert des partitions additionnelles. "
+"Merci de sélectionner les images ci-dessous.\n"
+"\n"
+"Soyez sûr que les fichiers sont pour **votre modèle exact !**"
+
+#: openandroidinstaller/views/select_view.py:420
+msgid "Pick `dtbo.img` image"
+msgstr "Sélectionner l'image `dtbo.img`"
+
+#: openandroidinstaller/views/select_view.py:441
+msgid "Pick `vbmeta.img` image"
+msgstr "Sélectionner l'image `vbmeta.img`"
+
+#: openandroidinstaller/views/select_view.py:462
+msgid "Pick `super_empty.img` image"
+msgstr "Sélectionner l'image `super_empty.img`"
+
+#: openandroidinstaller/views/select_view.py:483
+msgid "Pick `vendor_boot.img` image"
+msgstr "Sélectionner l'image `vendor_boot.img`"
+
+#: openandroidinstaller/views/select_view.py:674
+msgid ""
+"Image and/or recovery don't work with the device. Make sure you use a TWRP-"
+"based recovery."
+msgstr ""
+"L'image système et/ou le recovery ne fonctionnent pas pour votre appareil. "
+"Soyez sûr que le recovery est basé sur TWRP."
+
+
+#: openandroidinstaller/views/select_view.py:704
+msgid ""
+"Some additional images don't match or are missing. Please select the right "
+"ones."
+msgstr ""
+"Au moins une image additionnelle ne correspond pas ou est manquante. Merci "
+"de sélectionner les bonnes."
+
+#: openandroidinstaller/views/select_view.py:731
+msgid "Image doesn't work with the device."
+msgstr "L'image ne correspond pas avec l'appareil."
+
+#: openandroidinstaller/views/start_view.py:80
+msgid "How to enable developer options and OEM unlocking"
+msgstr "Comment activer les options développeur et le déverouillage OEM ?"
+
+#: openandroidinstaller/views/start_view.py:82
+msgid ""
+"\n"
+"To do this, \n"
+"- **tap seven times on the build number** in the 'System'- or 'About the "
+"phone'-Menu in Settings. You can also use the phones own search to look for "
+"`build number`. \n"
+"- Then go back to the main menu and look for **'developer options'**. You "
+"can also search for it in your phone.\n"
+"- When you are in developer options, **toggle OEM unlocking and USB-"
+"Debugging**.\n"
+"- If your phone is already connected to your PC, a pop-up might appear. "
+"**Allow USB debugging in the pop-up on your phone.**\n"
+"\n"
+"Now you are ready to continue.\n"
+msgstr ""
+"\n"
+"Pour faire cela, \n"
+"- **tappez sept fois sur le numéro de build** dans le menu 'Système' ou 'À propos' "
+"dans les paramètres. Vous pouvez également chercher 'numéro de build' dans les paramètres.\n"
+"- Ensuite, retournez sur le menu précédent et cherchez **options développeurs**. "
+"Vous pouvez également utiliser la fonctionnalité recherche.\n"
+"- Lorsque vous êtes dans les options développeurs, sélectionnez **déverouillage OEM** et **Débogage USB**.\n"
+"- Si l'appareil est déjà branché au PC, une fenêtre peut apparaitre. "
+"**Autorisez le débogage USB.**\n"
+"\n"
+"Vous pouvez maintenant continuer.\n"
+
+#: openandroidinstaller/views/start_view.py:105
+msgid "Bootloader is already unlocked."
+msgstr "Le bootloader est déjà dévérouillé."
+
+#: openandroidinstaller/views/start_view.py:118
+msgid "Custom recovery is already flashed."
+msgstr "Un recovery alternatif est déjà flashé."
+
+#: openandroidinstaller/views/start_view.py:128
+msgid "Detected device:"
+msgstr "Appareil détecté : "
+
+#: openandroidinstaller/views/start_view.py:145
+msgid "Get the phone ready"
+msgstr "Préparer l'appareil"
+
+#: openandroidinstaller/views/start_view.py:153
+msgid ""
+"\n"
+"To get started you need to \n"
+"- **enable developer options** on your device\n"
+"- and then **enable USB debugging** and **OEM unlocking** in the developer "
+"options.\n"
+" "
+msgstr ""
+"\n"
+"Pour commencer vous devez \n"
+"- **activer les options développeur** sur votre appareil\n"
+"- puis activer le **débogage USB** et le **déverouillage OEM** dans les options développeur.\n"
+" "
+
+#: openandroidinstaller/views/start_view.py:162
+msgid "How do I enable developer options?"
+msgstr "Comment activer les options développeur ?"
+
+#: openandroidinstaller/views/start_view.py:167
+msgid "Get help to enable developer options and OEM unlocking."
+msgstr "Obtenir de l'aide pour activer les options développeur et le débogage USB."
+
+#: openandroidinstaller/views/start_view.py:173
+msgid ""
+"\n"
+"Now \n"
+"- **connect your device to this computer via USB** and\n"
+"- **allow USB debugging in the pop-up on your phone**.\n"
+"- You might also need to **activate \"data transfer\"** in the connection "
+"settings.\n"
+"- Then **press the button 'Search device'**.\n"
+"\n"
+"When everything works correctly you should see your device name here and you "
+"can continue.\n"
+" "
+msgstr ""
+"\n"
+"Maintenant, \n"
+"- **connectez votre appareil à ce PC via USB** et\n"
+"- **activez le débogage USB sur votre appareil** (une fenêtre doit apparaitre).\n"
+"- Vous pouvez également avoir besoin d'**activer le transfert de données** dans les paramètres de connection USB.\n"
+"- Ensuite, **cliquez sur le bouton 'Chercher l'appareil'**.\n"
+"\n"
+"Lorsque tout fonctionne correctement, vous devez voir le nom de votre appareil, "
+"puis vous pouvez continuer.\n"
+" "
+
+#: openandroidinstaller/views/start_view.py:185
+msgid ""
+"\n"
+"If you **already unlocked the bootloader** of your device or already "
+"**flashed a custom recovery**, please toggle the respective switch below, to "
+"skip the procedure.\n"
+"If you don't know what this means, you most likely don't need to do anything "
+"and you can just continue.\n"
+" "
+msgstr ""
+"\n"
+"Si vous avez **déjà dévérouillé le bootloader** de l'appareil ou "
+"**déjà flashé un recovery**, sélectionnez les options ci-dessous pour "
+"sauter ces étapes.\n"
+"Si vous ne savez pas ce que cela veut dire, nous ne devez probablement pas "
+"cocher ces options et pouvez juste continuer.\n"
+" "
+
+#: openandroidinstaller/views/start_view.py:195
+msgid "Search for device"
+msgstr "Chercher l'appareil"
+
+#: openandroidinstaller/views/start_view.py:199
+msgid "Search for a connected device."
+msgstr "Chercher un appareil connecté"
+
+#: openandroidinstaller/views/start_view.py:242
+msgid "No device detected! Connect to USB and try again."
+msgstr "Aucun appareil détecté ! Connectez-le en USB et essayez à nouveau."
+
+#: openandroidinstaller/views/start_view.py:277
+#, python-brace-format
+msgid "Device with code '{device_code}' is not supported yet."
+msgstr "L'appareil '{device_code}' n'est pas encore supporté."
+
+#: openandroidinstaller/views/start_view.py:283
+msgid "Request support for this device"
+msgstr "Demander le support pour cet appareil"
+
+#: openandroidinstaller/views/step_view.py:84
+msgid "your unlock code"
+msgstr "Votre code de dévérouillage"
+
+#: openandroidinstaller/views/step_view.py:119
+msgid "Unlock the bootloader"
+msgstr "Dévérouiller le bootloader"
+
+#: openandroidinstaller/views/step_view.py:175
+msgid "Open Link"
+msgstr "Ouvrir le lien"
+
+#: openandroidinstaller/views/step_view.py:284
+#, python-brace-format
+msgid ""
+"Command {command} failed! Try again or make sure everything is setup "
+"correctly."
+msgstr ""
+"La commande {command} a échouée ! Essayez à nouveau et vérifiez que tout "
+"est configuré correctement."
+
+#: openandroidinstaller/views/success_view.py:46
+msgid "Installation completed successfully!"
+msgstr "L'installation a réussi !"
+
+#: openandroidinstaller/views/success_view.py:52
+msgid "Now your devices boots into the new OS. Have fun with it!"
+msgstr "Votre appareil démarre maintenant sur le nouveau système. Amusez-vous bien !"
+
+#: openandroidinstaller/views/success_view.py:56
+#, python-brace-format
+msgid ""
+"\n"
+"If you liked the tool, help spread the word and **share it with people** who "
+"might want to use it.\n"
+"\n"
+"Also, you can consider contributing to make it better. There are a lot of "
+"different ways how you can help!\n"
+"\n"
+"[How to contribute]({contribute_link})\n"
+msgstr ""
+"\n"
+"Si vous avez aimé OpenAndroidInstaller, aidez-nous à le diffuser "
+"et **partagez-le** Ã des gens qui pourraient l'utiliser.\n"
+"\n"
+"Aussi, vous pouvez contribuer pour le rendre meilleur. Il y a de nombreuses "
+"façons d'aider !\n"
+"\n"
+"[Comment contribuer]({contribute_link})\n"
+
+#: openandroidinstaller/views/welcome_view.py:53
+msgid "Let's start!"
+msgstr "C'est parti !"
+
+#: openandroidinstaller/views/welcome_view.py:65
+msgid "Welcome to the OpenAndroidInstaller!"
+msgstr "Bienvenur sur OpenAndroidInstaller !"
+
+#: openandroidinstaller/views/welcome_view.py:70
+msgid ""
+"Great that you want to install alternative, open source Android operating "
+"systems!"
+msgstr ""
+"C'est très bien que vous vouliez installer un système alternatif Android "
+"open source sur votre appareil !"
+
+#: openandroidinstaller/views/welcome_view.py:73
+msgid "We will walk you through the installation process nice and easy."
+msgstr "Nous vous accompagnons tout au long du processus d'installation."
+
+#: openandroidinstaller/views/welcome_view.py:76
+msgid ""
+"\n"
+"The following steps are performed in this tool:\n"
+"- First, we help you to **get your device ready** for the installation "
+"process.\n"
+"- Next, you can **select the operating system** you want to install (with "
+"guidance).\n"
+"- Then, we guide you though the process of **unlocking the bootloader** (if "
+"necessary). If you don't know what that means, it will be explained later.\n"
+"- As a next step, the **operation system is installed**. At this point you "
+"can also **select to install additional software** (\"addons\") like Google "
+"Apps.\n"
+"- Finally your device starts your new operating system.\n"
+" "
+msgstr ""
+"\n"
+"Les étapes suivantes sont effectées par cet outil :\n"
+"- Premièrement, nous vous aidons à **préparer votre appareil** pour l'installation.\n"
+"- Ensuite, vous pouvez **sélectionner le système** que vous voulez installer (avec de l'aide).\n"
+"- Puis, nous vous guidons pour le processus de **dévérouillage du bootloader** (si nécessaire). "
+"Si vous ne comprennez pas de quoi il s'agit, nous vous l'expliquerons plus tard.\n"
+"- Enfin, le **système d'exploitation est installé**. Vous pourrez également "
+"**installer des extensions** (addons) comme les Google Play Services.\n"
+"- Pour finir, votre appareil démarre sur le nouveau système..\n"
+" "
+
+#: openandroidinstaller/views/welcome_view.py:87
+msgid ""
+"\n"
+"Before you continue, make sure\n"
+"- your devices is on the latest system update.\n"
+"- you have a backup of all your important data, since this procedure will "
+"**erase all data from the phone**.\n"
+"- to not store the backup on the phone! \n"
+"\n"
+"Please note, that vendor specific back-ups will most likely not work on "
+"LineageOS!\n"
+" "
+msgstr ""
+"\n"
+"Avant de continuer, soyez sûr que\n"
+"- votre appareil est sur la dernière mise à jour système.\n"
+"- vous avez une sauvegarde de toutes les données importantes, puisque "
+"la procédure va **supprimer toutes les données du téléphone**.\n"
+"- vous n'avez pas enregistré la sauvegarde sur votre téléphone !\n"
+"\n"
+"Notez que les sauvegardes spécifiques au fabriquant ne vont très certainement "
+"pas fonctionner sur LineageOS.\n"
+" "
From 0b7868627b9fd4cba7ed9320a4a0b864f2a24610 Mon Sep 17 00:00:00 2001
From: rudu <40572253+anon1892@users.noreply.github.com>
Date: Sun, 14 Jan 2024 12:51:00 +0100
Subject: [PATCH 6/8] Fix typos
---
locales/fr/LC_MESSAGES/base.po | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/locales/fr/LC_MESSAGES/base.po b/locales/fr/LC_MESSAGES/base.po
index a6d74f56..617a2789 100644
--- a/locales/fr/LC_MESSAGES/base.po
+++ b/locales/fr/LC_MESSAGES/base.po
@@ -367,7 +367,7 @@ msgstr ""
"## Trouver votre version d'Android actuelle\n"
"Allez dans les paramètres de votre téléphone et cherchez l'option"
"\"À propos\" ou \"Système\".\n"
-"Vous trouvez généralement cette option tout en haut ou tout en bas, mais cela dépend"
+"Vous trouvez généralement cette option tout en haut ou tout en bas, mais cela dépend "
"des marques. Une fois que vous l'avez trouvé, cliquer dessus et cherchez "
"la section \"Version d'Android\".\n"
"\n"
@@ -858,7 +858,7 @@ msgid ""
" "
msgstr ""
"\n"
-"Pour commencer vous devez \n"
+"Pour commencer vous devez : \n"
"- **activer les options développeur** sur votre appareil\n"
"- puis activer le **débogage USB** et le **déverouillage OEM** dans les options développeur.\n"
" "
@@ -886,7 +886,7 @@ msgid ""
" "
msgstr ""
"\n"
-"Maintenant, \n"
+"Maintenant : \n"
"- **connectez votre appareil à ce PC via USB** et\n"
"- **activez le débogage USB sur votre appareil** (une fenêtre doit apparaitre).\n"
"- Vous pouvez également avoir besoin d'**activer le transfert de données** dans les paramètres de connection USB.\n"
@@ -991,7 +991,7 @@ msgstr "C'est parti !"
#: openandroidinstaller/views/welcome_view.py:65
msgid "Welcome to the OpenAndroidInstaller!"
-msgstr "Bienvenur sur OpenAndroidInstaller !"
+msgstr "Bienvenue sur OpenAndroidInstaller !"
#: openandroidinstaller/views/welcome_view.py:70
msgid ""
@@ -1029,7 +1029,7 @@ msgstr ""
"Si vous ne comprennez pas de quoi il s'agit, nous vous l'expliquerons plus tard.\n"
"- Enfin, le **système d'exploitation est installé**. Vous pourrez également "
"**installer des extensions** (addons) comme les Google Play Services.\n"
-"- Pour finir, votre appareil démarre sur le nouveau système..\n"
+"- Pour finir, votre appareil démarre sur le nouveau système.\n"
" "
#: openandroidinstaller/views/welcome_view.py:87
@@ -1046,7 +1046,7 @@ msgid ""
" "
msgstr ""
"\n"
-"Avant de continuer, soyez sûr que\n"
+"Avant de continuer, soyez sûr que :\n"
"- votre appareil est sur la dernière mise à jour système.\n"
"- vous avez une sauvegarde de toutes les données importantes, puisque "
"la procédure va **supprimer toutes les données du téléphone**.\n"
From bf6089c631c5cf8e0229d141aea2486db2549b57 Mon Sep 17 00:00:00 2001
From: Tobias Sterbak
Date: Wed, 7 Feb 2024 12:35:34 +0000
Subject: [PATCH 7/8] Align dependencies
---
poetry.lock | 2153 ++++++++++++++++++++++++++++++++++++++++++++++
requirements.txt | 1030 ++++++++++++++++++++++
2 files changed, 3183 insertions(+)
diff --git a/poetry.lock b/poetry.lock
index e69de29b..7f7ce774 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -0,0 +1,2153 @@
+# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
+
+[[package]]
+name = "altgraph"
+version = "0.17.4"
+description = "Python graph (network) package"
+optional = false
+python-versions = "*"
+files = [
+ {file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"},
+ {file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"},
+]
+
+[[package]]
+name = "anyio"
+version = "4.2.0"
+description = "High level compatibility layer for multiple asynchronous event loop implementations"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"},
+ {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"},
+]
+
+[package.dependencies]
+idna = ">=2.8"
+sniffio = ">=1.1"
+
+[package.extras]
+doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
+test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
+trio = ["trio (>=0.23)"]
+
+[[package]]
+name = "bandit"
+version = "1.7.7"
+description = "Security oriented static analyser for python code."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "bandit-1.7.7-py3-none-any.whl", hash = "sha256:17e60786a7ea3c9ec84569fd5aee09936d116cb0cb43151023258340dbffb7ed"},
+ {file = "bandit-1.7.7.tar.gz", hash = "sha256:527906bec6088cb499aae31bc962864b4e77569e9d529ee51df3a93b4b8ab28a"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""}
+PyYAML = ">=5.3.1"
+rich = "*"
+stevedore = ">=1.20.0"
+
+[package.extras]
+baseline = ["GitPython (>=3.1.30)"]
+test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)"]
+toml = ["tomli (>=1.1.0)"]
+yaml = ["PyYAML"]
+
+[[package]]
+name = "black"
+version = "22.12.0"
+description = "The uncompromising code formatter."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"},
+ {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"},
+ {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"},
+ {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"},
+ {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"},
+ {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"},
+ {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"},
+ {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"},
+ {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"},
+ {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"},
+ {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"},
+ {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"},
+]
+
+[package.dependencies]
+click = ">=8.0.0"
+mypy-extensions = ">=0.4.3"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
+[[package]]
+name = "brotli"
+version = "1.1.0"
+description = "Python bindings for the Brotli compression library"
+optional = false
+python-versions = "*"
+files = [
+ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"},
+ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"},
+ {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"},
+ {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"},
+ {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"},
+ {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"},
+ {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"},
+ {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"},
+ {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"},
+ {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"},
+ {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"},
+ {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"},
+ {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"},
+ {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"},
+ {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"},
+ {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"},
+ {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"},
+ {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"},
+ {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"},
+ {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"},
+ {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"},
+ {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"},
+ {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"},
+ {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"},
+ {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"},
+ {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"},
+ {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"},
+ {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"},
+ {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"},
+ {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"},
+ {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"},
+ {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"},
+ {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"},
+ {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"},
+ {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"},
+ {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"},
+ {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"},
+ {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"},
+ {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"},
+ {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"},
+ {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"},
+]
+
+[[package]]
+name = "brotlicffi"
+version = "1.1.0.0"
+description = "Python CFFI bindings to the Brotli library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"},
+ {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"},
+ {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"},
+ {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"},
+ {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"},
+ {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"},
+ {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"},
+]
+
+[package.dependencies]
+cffi = ">=1.0.0"
+
+[[package]]
+name = "certifi"
+version = "2024.2.2"
+description = "Python package for providing Mozilla's CA Bundle."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
+ {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
+]
+
+[[package]]
+name = "cffi"
+version = "1.16.0"
+description = "Foreign Function Interface for Python calling C code."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
+ {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
+ {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
+ {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
+ {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
+ {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
+ {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
+ {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
+ {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
+ {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
+ {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
+ {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
+ {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
+ {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
+ {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
+]
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "cfgv"
+version = "3.4.0"
+description = "Validate configuration and produce human readable error messages."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"},
+ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.3.2"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
+ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
+]
+
+[[package]]
+name = "click"
+version = "8.1.7"
+description = "Composable command line interface toolkit"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+ {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "contextlib2"
+version = "21.6.0"
+description = "Backports and enhancements for the contextlib module"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f"},
+ {file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"},
+]
+
+[[package]]
+name = "coverage"
+version = "7.4.1"
+description = "Code coverage measurement for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"},
+ {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"},
+ {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"},
+ {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"},
+ {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"},
+ {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"},
+ {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"},
+ {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"},
+ {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"},
+ {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"},
+ {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"},
+ {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"},
+ {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"},
+ {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"},
+ {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"},
+ {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"},
+ {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"},
+ {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"},
+ {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"},
+ {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"},
+ {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"},
+ {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"},
+ {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"},
+ {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"},
+ {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"},
+ {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"},
+ {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"},
+ {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"},
+ {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"},
+ {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"},
+ {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"},
+ {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"},
+ {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"},
+ {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"},
+ {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"},
+ {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"},
+ {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"},
+ {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"},
+ {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"},
+ {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"},
+ {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"},
+ {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"},
+ {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"},
+ {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"},
+ {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"},
+ {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"},
+ {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"},
+ {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"},
+ {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"},
+ {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"},
+ {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"},
+ {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"},
+]
+
+[package.extras]
+toml = ["tomli"]
+
+[[package]]
+name = "distlib"
+version = "0.3.8"
+description = "Distribution utilities"
+optional = false
+python-versions = "*"
+files = [
+ {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"},
+ {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"},
+]
+
+[[package]]
+name = "filelock"
+version = "3.13.1"
+description = "A platform independent file lock."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"},
+ {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"},
+]
+
+[package.extras]
+docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"]
+testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"]
+typing = ["typing-extensions (>=4.8)"]
+
+[[package]]
+name = "flet"
+version = "0.7.4"
+description = "Flet for Python - easily build interactive multi-platform apps in Python"
+optional = false
+python-versions = ">=3.7,<4.0"
+files = [
+ {file = "flet-0.7.4-py3-none-any.whl", hash = "sha256:aa2ea96d883810b1be1d0b3b7ccbab7e159848b1b17ecd4884d27f6e87e44561"},
+ {file = "flet-0.7.4-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:d182626579b8f8edbd31d054740761862761568090614d7a972e4a3fdc8f3b95"},
+ {file = "flet-0.7.4-py3-none-macosx_12_0_arm64.whl", hash = "sha256:005eb2656672f938065799b17d2cc6f7f8af767f8fed7658437453978380221a"},
+ {file = "flet-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffdd02df1d16027111a3d97d874cae06fc7c9df792fc73c96cb58a1eb226f92e"},
+ {file = "flet-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77024ccbea20ab6c734002fc3617b12d6eea9bc555e3e9fedf37eb0da4c05e00"},
+ {file = "flet-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cb258d439f30e40db24347c38f7b85ca1ec44decd63f44848c724e28f86ab42"},
+ {file = "flet-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:192ebd5f6a6717c693e47a5c632de949b45935d37fca543d85763ff454edebd0"},
+ {file = "flet-0.7.4-py3-none-win32.whl", hash = "sha256:beb3cd75bafc53ff0f7468ee51901467040f7daf427dcb54ef5e600dbb82c228"},
+ {file = "flet-0.7.4-py3-none-win_amd64.whl", hash = "sha256:d5056777371895c38e32bfb947be2a1ee97aedaf0b9cf75f2dcdad225aeaf095"},
+ {file = "flet-0.7.4.tar.gz", hash = "sha256:bc53e337ee7023282d3f4df9a1d00e49d17d3d07ba797cfa089f50d1df12705a"},
+]
+
+[package.dependencies]
+flet-core = "0.7.4"
+httpx = ">=0.23.3,<0.24.0"
+oauthlib = ">=3.2.2,<4.0.0"
+packaging = ">=23.0,<24.0"
+watchdog = ">=2.2.1,<3.0.0"
+websocket-client = ">=1.4.2,<2.0.0"
+websockets = ">=10.4,<11.0"
+
+[[package]]
+name = "flet-core"
+version = "0.7.4"
+description = "Flet core library"
+optional = false
+python-versions = ">=3.7,<4.0"
+files = [
+ {file = "flet_core-0.7.4-py3-none-any.whl", hash = "sha256:fa208e8cf1a64613a57c497526a9cb6eb46d153bed61f5ebb9518baf56d15c52"},
+ {file = "flet_core-0.7.4.tar.gz", hash = "sha256:f161bba1d6221ab7b0e06c03f8c52ecd03e60e7ed5fc69a8701a6ba2ab1b08dc"},
+]
+
+[package.dependencies]
+repath = ">=0.9.0,<0.10.0"
+
+[[package]]
+name = "h11"
+version = "0.14.0"
+description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
+ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
+]
+
+[[package]]
+name = "httpcore"
+version = "0.16.3"
+description = "A minimal low-level HTTP client."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"},
+ {file = "httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"},
+]
+
+[package.dependencies]
+anyio = ">=3.0,<5.0"
+certifi = "*"
+h11 = ">=0.13,<0.15"
+sniffio = "==1.*"
+
+[package.extras]
+http2 = ["h2 (>=3,<5)"]
+socks = ["socksio (==1.*)"]
+
+[[package]]
+name = "httpx"
+version = "0.23.3"
+description = "The next generation HTTP client."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "httpx-0.23.3-py3-none-any.whl", hash = "sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6"},
+ {file = "httpx-0.23.3.tar.gz", hash = "sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9"},
+]
+
+[package.dependencies]
+certifi = "*"
+httpcore = ">=0.15.0,<0.17.0"
+rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]}
+sniffio = "*"
+
+[package.extras]
+brotli = ["brotli", "brotlicffi"]
+cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<13)"]
+http2 = ["h2 (>=3,<5)"]
+socks = ["socksio (==1.*)"]
+
+[[package]]
+name = "identify"
+version = "2.5.33"
+description = "File identification library for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"},
+ {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"},
+]
+
+[package.extras]
+license = ["ukkonen"]
+
+[[package]]
+name = "idna"
+version = "3.6"
+description = "Internationalized Domain Names in Applications (IDNA)"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
+ {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
+]
+
+[[package]]
+name = "inflate64"
+version = "1.0.0"
+description = "deflate64 compression/decompression library"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "inflate64-1.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a90c0bdf4a7ecddd8a64cc977181810036e35807f56b0bcacee9abb0fcfd18dc"},
+ {file = "inflate64-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:57fe7c14aebf1c5a74fc3b70d355be1280a011521a76aa3895486e62454f4242"},
+ {file = "inflate64-1.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d90730165f471d61a1a694a5e354f3ffa938227e8dcecb62d5d728e8069cee94"},
+ {file = "inflate64-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543f400201f5c101141af3c79c82059e1aa6ef4f1584a7f1fa035fb2e465097f"},
+ {file = "inflate64-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ceca14f7ec19fb44b047f56c50efb7521b389d222bba2b0a10286a0caeb03fa"},
+ {file = "inflate64-1.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b559937a42f0c175b4d2dfc7eb53b97bdc87efa9add15ed5549c6abc1e89d02f"},
+ {file = "inflate64-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5ff8bd2a562343fcbc4eea26fdc368904a3b5f6bb8262344274d3d74a1de15bb"},
+ {file = "inflate64-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:0fe481f31695d35a433c3044ac8fd5d9f5069aaad03a0c04b570eb258ce655aa"},
+ {file = "inflate64-1.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a45f6979ad5874d4d4898c2fc770b136e61b96b850118fdaec5a5af1b9123a"},
+ {file = "inflate64-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:022ca1cc928e7365a05f7371ff06af143c6c667144965e2cf9a9236a2ae1c291"},
+ {file = "inflate64-1.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46792ecf3565d64fd2c519b0a780c03a57e195613c9954ef94e739a057b3fd06"},
+ {file = "inflate64-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a70ea2e456c15f7aa7c74b8ab8f20b4f8940ec657604c9f0a9de3342f280fff"},
+ {file = "inflate64-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e243ea9bd36a035059f2365bd6d156ff59717fbafb0255cb0c75bf151bf6904"},
+ {file = "inflate64-1.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4dc392dec1cd11cacda3d2637214ca45e38202e8a4f31d4a4e566d6e90625fc4"},
+ {file = "inflate64-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8b402a50eda7ee75f342fc346d33a41bca58edc222a4b17f9be0db1daed459fa"},
+ {file = "inflate64-1.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:f5924499dc8800928c0ee4580fa8eb4ffa880b2cce4431537d0390e503a9c9ee"},
+ {file = "inflate64-1.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0c644bf7208e20825ca3bbb5fb1f7f495cfcb49eb01a5f67338796d44a42f2bf"},
+ {file = "inflate64-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9964a4eaf26a9d36f82a1d9b12c28e35800dd3d99eb340453ed12ac90c2976a8"},
+ {file = "inflate64-1.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2cccded63865640d03253897be7232b2bbac295fe43914c61f86a57aa23bb61d"},
+ {file = "inflate64-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d491f104fb3701926ebd82b8c9250dfba0ddcab584504e26f1e4adb26730378d"},
+ {file = "inflate64-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ebad4a6cd2a2c1d81be0b09d4006479f3b258803c49a9224ef8ca0b649072fa"},
+ {file = "inflate64-1.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6823b2c0cff3a8159140f3b17ec64fb8ec0e663b45a6593618ecdde8aeecb5b2"},
+ {file = "inflate64-1.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:228d504239d27958e71fc77e3119a6ac4528127df38468a0c95a5bd3927204b8"},
+ {file = "inflate64-1.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae2572e06bcfe15e3bbf77d4e4a6d6c55e2a70d6abceaaf60c5c3653ddb96dfd"},
+ {file = "inflate64-1.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c10ca61212a753bbce6d341e7cfa779c161b839281f1f9fdc15cf1f324ce7c5b"},
+ {file = "inflate64-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a982dc93920f9450da4d4f25c5e5c1288ef053b1d618cedc91adb67e035e35f5"},
+ {file = "inflate64-1.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ca0310b2c55bc40394c5371db2a22f705fd594226cc09432e1eb04d3aed83930"},
+ {file = "inflate64-1.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e95044ae55a161144445527a2efad550851fecc699066423d24b2634a6a83710"},
+ {file = "inflate64-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34de6902c39d9225459583d5034182d371fc694bc3cfd6c0fc89aa62e9809faf"},
+ {file = "inflate64-1.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ebafbd813213dc470719cd0a2bcb53aab89d9059f4e75386048b4c4dcdb2fd99"},
+ {file = "inflate64-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75448c7b414dadaeeb11dab9f75e022aa1e0ee19b00f570e9f58e933603d71ac"},
+ {file = "inflate64-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:2be4e01c1b04761874cb44b35b6103ca5846bc36c18fc3ff5e8cbcd8bfc15e9f"},
+ {file = "inflate64-1.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bf2981b95c1f26242bb084d9a07f3feb0cfe3d6d0a8d90f42389803bc1252c4a"},
+ {file = "inflate64-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9373ccf0661cc72ac84a0ad622634144da5ce7d57c9572ed0723d67a149feed2"},
+ {file = "inflate64-1.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e4650c6f65011ec57cf5cd96b92d5b7c6f59e502930c86eb8227c93cf02dc270"},
+ {file = "inflate64-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a475e8822f1a74c873e60b8f270773757ade024097ca39e43402d47c049c67d4"},
+ {file = "inflate64-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4367480733ac8daf368f6fc704b7c9db85521ee745eb5bd443f4b97d2051acc"},
+ {file = "inflate64-1.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c5775c91f94f5eced9160fb0af12a09f3e030194f91a6a46e706a79350bd056"},
+ {file = "inflate64-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d76d205b844d78ce04768060084ef20e64dcc63a3e9166674f857acaf4d140ed"},
+ {file = "inflate64-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:92f0dc6af0e8e97324981178dc442956cbff1247a56d1e201af8d865244653f8"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f79542478e49e471e8b23556700e6f688a40dc93e9a746f77a546c13251b59b1"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a270be6b10cde01258c0097a663a307c62d12c78eb8f62f8e29f205335942c9"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1616a87ff04f583e9558cc247ec0b72a30d540ee0c17cc77823be175c0ec92f0"},
+ {file = "inflate64-1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:137ca6b315f0157a786c3a755a09395ca69aed8bcf42ad3437cb349f5ebc86d2"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8140942d1614bdeb5a9ddd7559348c5c77f884a42424aef7ccf149ccfb93aa08"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fe3f9051338bb7d07b5e7d88420d666b5109f33ae39aa55ecd1a053c0f22b1b"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36342338e957c790fc630d4afcdcc3926beb2ecaea0b302336079e8fa37e57a0"},
+ {file = "inflate64-1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:9b65cc701ef33ab20dbfd1d64088ffd89a8c265b356d2c21ba0ec565661645ef"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dd6d3e7d47df43210a995fd1f5989602b64de3f2a17cf4cbff553518b3577fd4"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f033b2879696b855200cde5ca4e293132c7499df790acb2c0dacb336d5e83b1"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f816d1c8a0593375c289e285c96deaee9c2d8742cb0edbd26ee05588a9ae657"},
+ {file = "inflate64-1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1facd35319b6a391ee4c3d709c7c650bcada8cd7141d86cd8c2257287f45e6e6"},
+ {file = "inflate64-1.0.0.tar.gz", hash = "sha256:3278827b803cf006a1df251f3e13374c7d26db779e5a33329cc11789b804bc2d"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8", "flake8-black", "flake8-deprecated", "isort (>=5.0.3)", "mypy (>=0.940)", "mypy-extensions (>=0.4.1)", "pygments", "readme-renderer", "twine"]
+docs = ["docutils", "sphinx (>=5.0)"]
+test = ["pyannotate", "pytest"]
+
+[[package]]
+name = "iniconfig"
+version = "2.0.0"
+description = "brain-dead simple config-ini parsing"
+optional = false
+python-versions = ">=3.7"
+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 = "isort"
+version = "5.13.2"
+description = "A Python utility / library to sort Python imports."
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
+ {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
+]
+
+[package.extras]
+colors = ["colorama (>=0.4.6)"]
+
+[[package]]
+name = "loguru"
+version = "0.6.0"
+description = "Python logging made (stupidly) simple"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"},
+ {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""}
+win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""}
+
+[package.extras]
+dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "isort (>=5.1.1)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.9.0)"]
+
+[[package]]
+name = "macholib"
+version = "1.16.3"
+description = "Mach-O header analysis and editing"
+optional = false
+python-versions = "*"
+files = [
+ {file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"},
+ {file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"},
+]
+
+[package.dependencies]
+altgraph = ">=0.17"
+
+[[package]]
+name = "markdown-it-py"
+version = "3.0.0"
+description = "Python port of markdown-it. Markdown parsing, done right!"
+optional = false
+python-versions = ">=3.8"
+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.dependencies]
+mdurl = ">=0.1,<1.0"
+
+[package.extras]
+benchmarking = ["psutil", "pytest", "pytest-benchmark"]
+code-style = ["pre-commit (>=3.0,<4.0)"]
+compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
+linkify = ["linkify-it-py (>=1,<3)"]
+plugins = ["mdit-py-plugins"]
+profiling = ["gprof2dot"]
+rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
+testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "mdurl"
+version = "0.1.2"
+description = "Markdown URL utilities"
+optional = false
+python-versions = ">=3.7"
+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 = "multivolumefile"
+version = "0.2.3"
+description = "multi volume file wrapper library"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "multivolumefile-0.2.3-py3-none-any.whl", hash = "sha256:237f4353b60af1703087cf7725755a1f6fcaeeea48421e1896940cd1c920d678"},
+ {file = "multivolumefile-0.2.3.tar.gz", hash = "sha256:a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8", "flake8-black", "isort (>=5.0.3)", "pygments", "readme-renderer", "twine"]
+test = ["coverage[toml] (>=5.2)", "coveralls (>=2.1.1)", "hypothesis", "pyannotate", "pytest", "pytest-cov"]
+type = ["mypy", "mypy-extensions"]
+
+[[package]]
+name = "mypy"
+version = "1.8.0"
+description = "Optional static typing for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"},
+ {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"},
+ {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"},
+ {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"},
+ {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"},
+ {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"},
+ {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"},
+ {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"},
+ {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"},
+ {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"},
+ {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"},
+ {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"},
+ {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"},
+ {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"},
+ {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"},
+ {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"},
+ {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"},
+ {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"},
+ {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"},
+ {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"},
+ {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"},
+ {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"},
+ {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"},
+ {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"},
+ {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"},
+ {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"},
+ {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"},
+]
+
+[package.dependencies]
+mypy-extensions = ">=1.0.0"
+typing-extensions = ">=4.1.0"
+
+[package.extras]
+dmypy = ["psutil (>=4.0)"]
+install-types = ["pip"]
+mypyc = ["setuptools (>=50)"]
+reports = ["lxml"]
+
+[[package]]
+name = "mypy-extensions"
+version = "1.0.0"
+description = "Type system extensions for programs checked with the mypy type checker."
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
+ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
+]
+
+[[package]]
+name = "nodeenv"
+version = "1.8.0"
+description = "Node.js virtual environment builder"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
+files = [
+ {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"},
+ {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"},
+]
+
+[package.dependencies]
+setuptools = "*"
+
+[[package]]
+name = "oauthlib"
+version = "3.2.2"
+description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"},
+ {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"},
+]
+
+[package.extras]
+rsa = ["cryptography (>=3.0.0)"]
+signals = ["blinker (>=1.4.0)"]
+signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
+
+[[package]]
+name = "packaging"
+version = "23.2"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
+ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
+]
+
+[[package]]
+name = "pathspec"
+version = "0.12.1"
+description = "Utility library for gitignore style pattern matching of file paths."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
+ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
+]
+
+[[package]]
+name = "pbr"
+version = "6.0.0"
+description = "Python Build Reasonableness"
+optional = false
+python-versions = ">=2.6"
+files = [
+ {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"},
+ {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"},
+]
+
+[[package]]
+name = "pefile"
+version = "2023.2.7"
+description = "Python PE parsing module"
+optional = false
+python-versions = ">=3.6.0"
+files = [
+ {file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"},
+ {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"},
+]
+
+[[package]]
+name = "pillow"
+version = "10.2.0"
+description = "Python Imaging Library (Fork)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"},
+ {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"},
+ {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"},
+ {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"},
+ {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"},
+ {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"},
+ {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"},
+ {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"},
+ {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"},
+ {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"},
+ {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"},
+ {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"},
+ {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"},
+ {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"},
+ {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"},
+ {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"},
+ {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"},
+ {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"},
+ {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"},
+ {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"},
+ {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"},
+ {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"},
+ {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"},
+ {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"},
+ {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"},
+ {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"},
+ {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"},
+ {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"},
+ {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"},
+ {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"},
+ {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"},
+ {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"},
+ {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"},
+ {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"},
+ {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"},
+ {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"},
+ {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"},
+ {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"},
+ {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"},
+ {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"},
+ {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"},
+ {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"},
+ {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"},
+ {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"},
+ {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"},
+ {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"},
+ {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"},
+ {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"},
+ {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"},
+ {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"},
+ {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"},
+ {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"},
+ {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"},
+ {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"},
+ {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"},
+ {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"},
+ {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"},
+ {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"},
+ {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"},
+ {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"},
+ {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"},
+ {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"},
+ {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"},
+ {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"},
+ {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"},
+ {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"},
+ {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"},
+ {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"},
+]
+
+[package.extras]
+docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
+fpx = ["olefile"]
+mic = ["olefile"]
+tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
+typing = ["typing-extensions"]
+xmp = ["defusedxml"]
+
+[[package]]
+name = "platformdirs"
+version = "4.2.0"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"},
+ {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"},
+]
+
+[package.extras]
+docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
+
+[[package]]
+name = "pluggy"
+version = "1.4.0"
+description = "plugin and hook calling mechanisms for python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"},
+ {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"},
+]
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "pre-commit"
+version = "3.6.0"
+description = "A framework for managing and maintaining multi-language pre-commit hooks."
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"},
+ {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"},
+]
+
+[package.dependencies]
+cfgv = ">=2.0.0"
+identify = ">=1.0.0"
+nodeenv = ">=0.11.1"
+pyyaml = ">=5.1"
+virtualenv = ">=20.10.0"
+
+[[package]]
+name = "psutil"
+version = "5.9.8"
+description = "Cross-platform lib for process and system monitoring in Python."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+files = [
+ {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"},
+ {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"},
+ {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"},
+ {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"},
+ {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"},
+ {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"},
+ {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"},
+ {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"},
+ {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"},
+ {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"},
+ {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"},
+ {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"},
+ {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"},
+ {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"},
+ {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"},
+ {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"},
+]
+
+[package.extras]
+test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
+
+[[package]]
+name = "py7zr"
+version = "0.20.8"
+description = "Pure python 7-zip library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "py7zr-0.20.8-py3-none-any.whl", hash = "sha256:c74d957a0d32a2368854d1721b4ca20e614ea116d733352a115ca1c789b2c42e"},
+ {file = "py7zr-0.20.8.tar.gz", hash = "sha256:2a6b0db0441e63a2dd74cbd18f5d9ae7e08dc0e54685aa486361d0db6a0b4f78"},
+]
+
+[package.dependencies]
+brotli = {version = ">=1.1.0", markers = "platform_python_implementation == \"CPython\""}
+brotlicffi = {version = ">=1.1.0.0", markers = "platform_python_implementation == \"PyPy\""}
+inflate64 = ">=1.0.0,<1.1.0"
+multivolumefile = ">=0.2.3"
+psutil = {version = "*", markers = "sys_platform != \"cygwin\""}
+pybcj = ">=1.0.0,<1.1.0"
+pycryptodomex = ">=3.16.0"
+pyppmd = ">=1.1.0,<1.2.0"
+pyzstd = ">=0.15.9"
+texttable = "*"
+
+[package.extras]
+check = ["black (>=23.1.0)", "check-manifest", "flake8 (<7)", "flake8-black (>=0.3.6)", "flake8-deprecated", "flake8-isort", "isort (>=5.0.3)", "lxml", "mypy (>=0.940)", "mypy-extensions (>=0.4.1)", "pygments", "readme-renderer", "twine", "types-psutil"]
+debug = ["pytest", "pytest-leaks", "pytest-profiling"]
+docs = ["docutils", "sphinx (>=5.0)", "sphinx-a4doc", "sphinx-py3doc-enhanced-theme"]
+test = ["coverage[toml] (>=5.2)", "coveralls (>=2.1.1)", "py-cpuinfo", "pyannotate", "pytest", "pytest-benchmark", "pytest-cov", "pytest-remotedata", "pytest-timeout"]
+test-compat = ["libarchive-c"]
+
+[[package]]
+name = "pybcj"
+version = "1.0.2"
+description = "bcj filter library"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pybcj-1.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7bff28d97e47047d69a4ac6bf59adda738cf1d00adde8819117fdb65d966bdbc"},
+ {file = "pybcj-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:198e0b4768b4025eb3309273d7e81dc53834b9a50092be6e0d9b3983cfd35c35"},
+ {file = "pybcj-1.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa26415b4a118ea790de9d38f244312f2510a9bb5c65e560184d241a6f391a2d"},
+ {file = "pybcj-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fabb2be57e4ca28ea36c13146cdf97d73abd27c51741923fc6ba1e8cd33e255c"},
+ {file = "pybcj-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d6d613bae6f27678d5e44e89d61018779726aa6aa950c516d33a04b8af8c59"},
+ {file = "pybcj-1.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ffae79ef8a1ea81ea2748ad7b7ad9b882aa88ddf65ce90f9e944df639eccc61"},
+ {file = "pybcj-1.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdb4d8ff5cba3e0bd1adee7d20dbb2b4d80cb31ac04d6ea1cd06cfc02d2ecd0d"},
+ {file = "pybcj-1.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a29be917fbc99eca204b08407e0971e0205bfdad4b74ec915930675f352b669d"},
+ {file = "pybcj-1.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a2562ebe5a0abec4da0229f8abb5e90ee97b178f19762eb925c1159be36828b3"},
+ {file = "pybcj-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af19bc61ded933001cd68f004ae2042bf1a78eb498a3c685ebd655fa1be90dbe"},
+ {file = "pybcj-1.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3f4a447800850aba7724a2274ea0a4800724520c1caf38f7d0dabf2f89a5e15"},
+ {file = "pybcj-1.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1c8af7a4761d2b1b531864d84113948daa0c4245775c63bd9874cb955f4662"},
+ {file = "pybcj-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8007371f6f2b462f5aa05d5c2135d0a1bcf5b7bdd9bd15d86c730f588d10b7d3"},
+ {file = "pybcj-1.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1079ca63ff8da5c936b76863690e0bd2489e8d4e0a3a340e032095dae805dd91"},
+ {file = "pybcj-1.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e9a785eb26884429d9b9f6326e68c3638828c83bf6d42d2463c97ad5385caff2"},
+ {file = "pybcj-1.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:9ea46e2d45469d13b7f25b08efcdb140220bab1ac5a850db0954591715b8caaa"},
+ {file = "pybcj-1.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:21b5f2460629167340403d359289a173e0729ce8e84e3ce99462009d5d5e01a4"},
+ {file = "pybcj-1.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2940fb85730b9869254559c491cd83cf777e56c76a8a60df60e4be4f2a4248d7"},
+ {file = "pybcj-1.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f40f3243139d675f43793a4e35c410c370f7b91ccae74e70c8b2f4877869f90e"},
+ {file = "pybcj-1.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c2b3e60b65c7ac73e44335934e1e122da8d56db87840984601b3c5dc0ae4c19"},
+ {file = "pybcj-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:746550dc7b5af4d04bb5fa4d065f18d39c925bcb5dee30db75747cd9a58bb6e8"},
+ {file = "pybcj-1.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8ce9b62b6aaa5b08773be8a919ecc4e865396c969f982b685eeca6e80c82abb7"},
+ {file = "pybcj-1.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:493eab2b1f6f546730a6de0c5ceb75ce16f3767154e8ae30e2b70d41b928b7d2"},
+ {file = "pybcj-1.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:ef55b96b7f2ed823e0b924de902065ec42ade856366c287dbb073fabd6b90ec1"},
+ {file = "pybcj-1.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ed5b3dd9c209fe7b90990dee4ef21870dca39db1cd326553c314ee1b321c1cc"},
+ {file = "pybcj-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22a94885723f8362d4cb468e68910eef92d3e2b1293de82b8eacb4198ef6655f"},
+ {file = "pybcj-1.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b8f9368036c9e658d8e3b3534086d298a5349c864542b34657cbe57c260daa49"},
+ {file = "pybcj-1.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87108181c7a6ac4d3fc1e4551cab5db5eea7f9fdca611175243234cd94bcc59b"},
+ {file = "pybcj-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db57f26b8c0162cfddb52b869efb1741b8c5e67fc536994f743074985f714c55"},
+ {file = "pybcj-1.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bdf5bcac4f1da36ad43567ea6f6ef404347658dbbe417c87cdb1699f327d6337"},
+ {file = "pybcj-1.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c3171bb95c9b45cbcad25589e1ae4f4ca4ea99dc1724c4e0671eb6b9055514e"},
+ {file = "pybcj-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:f9a2585e0da9cf343ea27421995b881736a1eb604a7c1d4ca74126af94c3d4a8"},
+ {file = "pybcj-1.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fdb7cd8271471a5979d84915c1ee57eea7e0a69c893225fc418db66883b0e2a7"},
+ {file = "pybcj-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e96ae14062bdcddc3197300e6ee4efa6fbc6749be917db934eac66d0daaecb68"},
+ {file = "pybcj-1.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a54ebdc8423ba99d75372708a882fcfc3b14d9d52cf195295ad53e5a47dab37f"},
+ {file = "pybcj-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3602be737c6e9553c45ae89e6b0e556f64f34dabf27d5260317d1824d31b79d3"},
+ {file = "pybcj-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63dd2ca52a48841f561bfec0fa3f208d375b0a8dcd3d7b236459e683ae29221d"},
+ {file = "pybcj-1.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8204a714029784b1a08a3d790430d80b423b68615c5b1e67aabca5bd5419b77d"},
+ {file = "pybcj-1.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fde2376b180ae2620c102fbc3ef06638d306feae83964aaa5051ecbdda54845a"},
+ {file = "pybcj-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:3b8d7810fb587adbffba025330cf212d9bbed8f29559656d05cb6609673f306a"},
+ {file = "pybcj-1.0.2.tar.gz", hash = "sha256:c7f5bef7f47723c53420e377bc64d2553843bee8bcac5f0ad076ab1524780018"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8 (<5)", "flake8-black", "flake8-colors", "flake8-isort", "flake8-pyi", "flake8-typing-imports", "mypy (>=0.812)", "mypy-extensions (>=0.4.3)", "pygments", "readme-renderer"]
+test = ["coverage[toml] (>=5.2)", "hypothesis", "pytest (>=6.0)", "pytest-cov"]
+
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
+
+[[package]]
+name = "pycryptodomex"
+version = "3.20.0"
+description = "Cryptographic library for Python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+ {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"},
+ {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"},
+ {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"},
+ {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"},
+ {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"},
+ {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"},
+ {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"},
+ {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"},
+ {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"},
+ {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"},
+ {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"},
+ {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"},
+ {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"},
+ {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"},
+]
+
+[[package]]
+name = "pygments"
+version = "2.17.2"
+description = "Pygments is a syntax highlighting package written in Python."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
+ {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
+]
+
+[package.extras]
+plugins = ["importlib-metadata"]
+windows-terminal = ["colorama (>=0.4.6)"]
+
+[[package]]
+name = "pyinstaller"
+version = "5.13.2"
+description = "PyInstaller bundles a Python application and all its dependencies into a single package."
+optional = false
+python-versions = "<3.13,>=3.7"
+files = [
+ {file = "pyinstaller-5.13.2-py3-none-macosx_10_13_universal2.whl", hash = "sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f"},
+ {file = "pyinstaller-5.13.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8f6dd0e797ae7efdd79226f78f35eb6a4981db16c13325e962a83395c0ec7420"},
+ {file = "pyinstaller-5.13.2-py3-none-manylinux2014_i686.whl", hash = "sha256:65133ed89467edb2862036b35d7c5ebd381670412e1e4361215e289c786dd4e6"},
+ {file = "pyinstaller-5.13.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:7d51734423685ab2a4324ab2981d9781b203dcae42839161a9ee98bfeaabdade"},
+ {file = "pyinstaller-5.13.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d"},
+ {file = "pyinstaller-5.13.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8"},
+ {file = "pyinstaller-5.13.2-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:aadafb6f213549a5906829bb252e586e2cf72a7fbdb5731810695e6516f0ab30"},
+ {file = "pyinstaller-5.13.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:b2e1c7f5cceb5e9800927ddd51acf9cc78fbaa9e79e822c48b0ee52d9ce3c892"},
+ {file = "pyinstaller-5.13.2-py3-none-win32.whl", hash = "sha256:421cd24f26144f19b66d3868b49ed673176765f92fa9f7914cd2158d25b6d17e"},
+ {file = "pyinstaller-5.13.2-py3-none-win_amd64.whl", hash = "sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4"},
+ {file = "pyinstaller-5.13.2-py3-none-win_arm64.whl", hash = "sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6"},
+ {file = "pyinstaller-5.13.2.tar.gz", hash = "sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2"},
+]
+
+[package.dependencies]
+altgraph = "*"
+macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""}
+pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""}
+pyinstaller-hooks-contrib = ">=2021.4"
+pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""}
+setuptools = ">=42.0.0"
+
+[package.extras]
+encryption = ["tinyaes (>=1.0.0)"]
+hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"]
+
+[[package]]
+name = "pyinstaller-hooks-contrib"
+version = "2024.0"
+description = "Community maintained hooks for PyInstaller"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pyinstaller-hooks-contrib-2024.0.tar.gz", hash = "sha256:a7118c1a5c9788595e5c43ad058a7a5b7b6d59e1eceb42362f6ec1f0b61986b0"},
+ {file = "pyinstaller_hooks_contrib-2024.0-py2.py3-none-any.whl", hash = "sha256:469b5690df53223e2e8abffb2e44d6ee596e7d79d4b1eed9465123b67439875a"},
+]
+
+[package.dependencies]
+packaging = ">=22.0"
+setuptools = ">=42.0.0"
+
+[[package]]
+name = "pyppmd"
+version = "1.1.0"
+description = "PPMd compression/decompression library"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pyppmd-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5cd428715413fe55abf79dc9fc54924ba7e518053e1fc0cbdf80d0d99cf1442"},
+ {file = "pyppmd-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e96cc43f44b7658be2ea764e7fa99c94cb89164dbb7cdf209178effc2168319"},
+ {file = "pyppmd-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dd20142869094bceef5ab0b160f4fff790ad1f612313a1e3393a51fc3ba5d57e"},
+ {file = "pyppmd-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4f9b51e45c11e805e74ea6f6355e98a6423b5bbd92f45aceee24761bdc3d3b8"},
+ {file = "pyppmd-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:459f85e928fb968d0e34fb6191fd8c4e710012d7d884fa2b317b2e11faac7c59"},
+ {file = "pyppmd-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f73cf2aaf60477eef17f5497d14b6099d8be9748390ad2b83d1c88214d050c05"},
+ {file = "pyppmd-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2ea3ae0e92c0b5345cd3a4e145e01bbd79c2d95355481ea5d833b5c0cb202a2d"},
+ {file = "pyppmd-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:775172c740133c0162a01c1a5443d0e312246881cdd6834421b644d89a634b91"},
+ {file = "pyppmd-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:14421030f1d46f69829698bdd960698a3b3df0925e3c470e82cfcdd4446b7bc1"},
+ {file = "pyppmd-1.1.0-cp310-cp310-win32.whl", hash = "sha256:b691264f9962532aca3bba5be848b6370e596d0a2ca722c86df388be08d0568a"},
+ {file = "pyppmd-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:216b0d969a3f06e35fbfef979706d987d105fcb1e37b0b1324f01ee143719c4a"},
+ {file = "pyppmd-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1f8c51044ee4df1b004b10bf6b3c92f95ea86cfe1111210d303dca44a56e4282"},
+ {file = "pyppmd-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac25b3a13d1ac9b8f0bde46952e10848adc79d932f2b548a6491ef8825ae0045"},
+ {file = "pyppmd-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8d3003eebe6aabe22ba744a38a146ed58a25633420d5da882b049342b7c8036"},
+ {file = "pyppmd-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c520656bc12100aa6388df27dd7ac738577f38bf43f4a4bea78e1861e579ea5"},
+ {file = "pyppmd-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c2a3e807028159a705951f5cb5d005f94caed11d0984e59cc50506de543e22d"},
+ {file = "pyppmd-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8a2447e69444703e2b273247bfcd4b540ec601780eff07da16344c62d2993d"},
+ {file = "pyppmd-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b9e0c8053e69cad6a92a0889b3324f567afc75475b4f54727de553ac4fc85780"},
+ {file = "pyppmd-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5938d256e8d2a2853dc3af8bb58ae6b4a775c46fc891dbe1826a0b3ceb624031"},
+ {file = "pyppmd-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1ce5822d8bea920856232ccfb3c26b56b28b6846ea1b0eb3d5cb9592a026649e"},
+ {file = "pyppmd-1.1.0-cp311-cp311-win32.whl", hash = "sha256:2a9e894750f2a52b03e3bc0d7cf004d96c3475a59b1af7e797d808d7d29c9ffe"},
+ {file = "pyppmd-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:969555c72e72fe2b4dd944127521a8f2211caddb5df452bbc2506b5adfac539e"},
+ {file = "pyppmd-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9d6ef8fd818884e914bc209f7961c9400a4da50d178bba25efcef89f09ec9169"},
+ {file = "pyppmd-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95f28e2ecf3a9656bd7e766aaa1162b6872b575627f18715f8b046e8617c124a"},
+ {file = "pyppmd-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f3557ea65ee417abcdf5f49d35df00bb9f6f252639cae57aeefcd0dd596133"},
+ {file = "pyppmd-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e84b25d088d7727d50218f57f92127cdb839acd6ec3de670b6680a4cf0b2d2a"},
+ {file = "pyppmd-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99ed42891986dac8c2ecf52bddfb777900233d867aa18849dbba6f3335600466"},
+ {file = "pyppmd-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6fe69b82634488ada75ba07efb90cd5866fa3d64a2c12932b6e8ae207a14e5f"},
+ {file = "pyppmd-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:60981ffde1fe6ade750b690b35318c41a1160a8505597fda2c39a74409671217"},
+ {file = "pyppmd-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46e8240315476f57aac23d71e6de003e122b65feba7c68f4cc46a089a82a7cd4"},
+ {file = "pyppmd-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0308e2e76ecb4c878a18c2d7a7c61dbca89b4ef138f65d5f5ead139154dcdea"},
+ {file = "pyppmd-1.1.0-cp312-cp312-win32.whl", hash = "sha256:b4fa4c27dc1314d019d921f2aa19e17f99250557e7569eeb70e180558f46af74"},
+ {file = "pyppmd-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c269d21e15f4175df27cf00296476097af76941f948734c642d7fb6e85b9b3b9"},
+ {file = "pyppmd-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a04ef5fd59818b035855723af85ce008c8191d31216706ffcbeedc505efca269"},
+ {file = "pyppmd-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e3ebcf5f95142268afa5cc46457d9dab2d29a3ccfd020a1129dd9d6bd021be1"},
+ {file = "pyppmd-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4ad046a9525d1f52e93bc642a4cec0bf344a3ba1a15923e424e7a50f8ca003d8"},
+ {file = "pyppmd-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:169e5023c86ed1f7587961900f58aa78ad8a3d59de1e488a2228b5ba3de52402"},
+ {file = "pyppmd-1.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baf798e76edd9da975cc536f943756a1b1755eb8ed87371f86f76d7c16e8d034"},
+ {file = "pyppmd-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63be8c068879194c1e7548d0c57f54a4d305ba204cd0c7499b678f0aee893ef"},
+ {file = "pyppmd-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5fc178a3c21af78858acbac9782fca6a927267694c452e0882c55fec6e78319"},
+ {file = "pyppmd-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:28a1ab1ef0a31adce9b4c837b7b9acb01ce8f1f702ff3ff884f03d21c2f6b9bb"},
+ {file = "pyppmd-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5fef43bfe98ada0a608adf03b2d205e071259027ab50523954c42eef7adcef67"},
+ {file = "pyppmd-1.1.0-cp38-cp38-win32.whl", hash = "sha256:6b980902797eab821299a1c9f42fa78eff2826a6b0b0f6bde8a621f9765ffd55"},
+ {file = "pyppmd-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:80cde69013f357483abe0c3ff30c55dc5e6b4f72b068f91792ce282c51dc0bff"},
+ {file = "pyppmd-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aeea1bf585c6b8771fa43a6abd704da92f8a46a6d0020953af15d7f3c82e48c"},
+ {file = "pyppmd-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7759bdb137694d4ab0cfa5ff2c75c212d90714c7da93544694f68001a0c38e12"},
+ {file = "pyppmd-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:db64a4fe956a2e700a737a1d019f526e6ccece217c163b28b354a43464cc495b"},
+ {file = "pyppmd-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f788ae8f5a9e79cd777b7969d3401b2a2b87f47abe306c2a03baca30595e9bd"},
+ {file = "pyppmd-1.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:324a178935c140210fca2043c688b77e79281da8172d2379a06e094f41735851"},
+ {file = "pyppmd-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:363030bbcb7902fb9eeb59ffc262581ca5dd7790ba950328242fd2491c54d99b"},
+ {file = "pyppmd-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:31b882584f86440b0ff7906385c9f9d9853e5799197abaafdae2245f87d03f01"},
+ {file = "pyppmd-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b991b4501492ec3380b605fe30bee0b61480d305e98519d81c2a658b2de01593"},
+ {file = "pyppmd-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6108044d943b826f97a9e79201242f61392d6c1fadba463b2069c4e6bc961e1"},
+ {file = "pyppmd-1.1.0-cp39-cp39-win32.whl", hash = "sha256:c45ce2968b7762d2cacf622b0a8f260295c6444e0883fd21a21017e3eaef16ed"},
+ {file = "pyppmd-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:f5289f32ab4ec5f96a95da51309abd1769f928b0bff62047b3bc25c878c16ccb"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ad5da9f7592158e6b6b51d7cd15e536d8b23afbb4d22cba4e5744c7e0a3548b1"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc6543e7d12ef0a1466d291d655e3d6bca59c7336dbb53b62ccdd407822fb52b"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5e4008a45910e3c8c227f6f240de67eb14454c015dc3d8060fc41e230f395d3"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9301fa39d1fb0ed09a10b4c5d7f0074113e96a1ead16ba7310bedf95f7ef660c"},
+ {file = "pyppmd-1.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:59521a3c6028da0cb5780ba16880047b00163432a6b975da2f6123adfc1b0be8"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d7ec02f1778dd68547e497625d66d7858ce10ea199146eb1d80ee23ba42954be"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f062ca743f9b99fe88d417b4d351af9b4ff1a7cbd3d765c058bb97de976d57f1"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088e326b180a0469ac936849f5e1e5320118c22c9d9e673e9c8551153b839c84"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:897fa9ab5ff588a1000b8682835c5acf219329aa2bbfec478100e57d1204eeab"},
+ {file = "pyppmd-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3af4338cc48cd59ee213af61d936419774a0f8600b9aa2013cd1917b108424f0"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cce8cd2d4ceebe2dbf41db6dfebe4c2e621314b3af8a2df2cba5eb5fa277f122"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62e57927dbcb91fb6290a41cd83743b91b9d85858efb16a0dd34fac208ee1c6b"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:435317949a6f35e54cdf08e0af6916ace427351e7664ac1593980114668f0aaa"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f66b0d0e32b8fb8707f1d2552f13edfc2917e8ed0bdf4d62e2ce190d2c70834"},
+ {file = "pyppmd-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:650a663a591e06fb8096c213f4070b158981c8c3bf9c166ce7e4c360873f2750"},
+ {file = "pyppmd-1.1.0.tar.gz", hash = "sha256:1d38ce2e4b7eb84b53bc8a52380b94f66ba6c39328b8800b30c2b5bf31693973"},
+]
+
+[package.extras]
+check = ["check-manifest", "flake8 (<5)", "flake8-black", "flake8-isort", "isort (>=5.0.3)", "mypy (>=0.812)", "mypy-extensions (>=0.4.3)", "pygments", "readme-renderer"]
+docs = ["sphinx (>=2.3)", "sphinx-rtd-theme"]
+fuzzer = ["atheris", "hypothesis"]
+test = ["coverage[toml] (>=5.2)", "hypothesis", "pytest (>=6.0)", "pytest-benchmark", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "pytest"
+version = "7.4.4"
+description = "pytest: simple powerful testing with Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"},
+ {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+iniconfig = "*"
+packaging = "*"
+pluggy = ">=0.12,<2.0"
+
+[package.extras]
+testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
+
+[[package]]
+name = "pytest-cov"
+version = "4.1.0"
+description = "Pytest plugin for measuring coverage."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"},
+ {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"},
+]
+
+[package.dependencies]
+coverage = {version = ">=5.2.1", extras = ["toml"]}
+pytest = ">=4.6"
+
+[package.extras]
+testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"]
+
+[[package]]
+name = "pytest-mock"
+version = "3.12.0"
+description = "Thin-wrapper around the mock package for easier use with pytest"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"},
+ {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"},
+]
+
+[package.dependencies]
+pytest = ">=5.0"
+
+[package.extras]
+dev = ["pre-commit", "pytest-asyncio", "tox"]
+
+[[package]]
+name = "pytest-subprocess"
+version = "1.5.0"
+description = "A plugin to fake subprocess for pytest"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pytest-subprocess-1.5.0.tar.gz", hash = "sha256:d7693b96f588f39b84c7b2b5c04287459246dfae6be1dd4098937a728ad4fbe3"},
+ {file = "pytest_subprocess-1.5.0-py3-none-any.whl", hash = "sha256:dfd75b10af6800a89a9b758f2e2eceff9de082a27bd1388521271b6e8bde298b"},
+]
+
+[package.dependencies]
+pytest = ">=4.0.0"
+
+[package.extras]
+dev = ["changelogd", "nox"]
+docs = ["changelogd", "furo", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-napoleon"]
+test = ["Pygments (>=2.0)", "anyio", "coverage", "docutils (>=0.12)", "pytest (>=4.0)", "pytest-asyncio (>=0.15.1)", "pytest-rerunfailures"]
+
+[[package]]
+name = "pywin32-ctypes"
+version = "0.2.2"
+description = "A (partial) reimplementation of pywin32 using ctypes/cffi"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"},
+ {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"},
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.1"
+description = "YAML parser and emitter for Python"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+ {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+ {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+ {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
+ {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
+ {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+ {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
+ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+]
+
+[[package]]
+name = "pyzstd"
+version = "0.15.9"
+description = "Python bindings to Zstandard (zstd) compression library, the API style is similar to Python's bz2/lzma/zlib modules."
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "pyzstd-0.15.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:209a92fbe892bd69cde58ffcb4861468e2c3c2d0626763e16e122bb55cb1fb1a"},
+ {file = "pyzstd-0.15.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f6d8a881b50bb2015e9bdba5edb0331e85d41ff44ab33cde551047480b98d748"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdc09de97b1b3f6c3d87fec04d6fe29dd4fefe6b354ad2d822fc369b8aa0942b"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1b81cc86b69ff530d45e735ed479e14704999f534ad28a39f04be4a8fe2b91f"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fb00c706d0b59c53124f982bd84b7d46866a8ea2a7670aaaa1ab4dbe6001b50"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606b2452d78f0f731566d392f8d83cd012c2ffadb2cb2e2903fdd360c1faac8a"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23695dabdfd5081beab25754dc0105b42fbd2085a7c293901bcb45045969c5ec"},
+ {file = "pyzstd-0.15.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74455bd918e7bc9883e3178a1a8fe796308670f0ee4488c80a0d9514e13807a1"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6128cb653d011f3781554b70ce1f1f388cd516820fbaf8fd03ee245ecaa48349"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a708b9e6ff1826504940beb6b5c2c9dfd4e3b55c16ab88a4572f5b9dbb64cc56"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:1b9cda5314982d64c856f9298be0d9bf69fbff0ca514d1651037616354b473ff"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:f7cfc683d320402d61205a196ace77f15dcfd16b5771f8b9ffaf406868c98e78"},
+ {file = "pyzstd-0.15.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f0fe2ef7ebc6e9b347585e414c4fefd32270ba8bdf9eb82496f3030cbdca465"},
+ {file = "pyzstd-0.15.9-cp310-cp310-win32.whl", hash = "sha256:e8f75e839ee253af60b03d9957182fdd069dfaebb62b4e999bd74016f4e120bb"},
+ {file = "pyzstd-0.15.9-cp310-cp310-win_amd64.whl", hash = "sha256:77294f0f797c97a46ffb3daff1fe097c9d5aa9f96867333978e6791286963e50"},
+ {file = "pyzstd-0.15.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:afef9eb882cf3b395eef9c85b737a4acd09528975e6a5d9faedf28874ca65f52"},
+ {file = "pyzstd-0.15.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44a7d4586f02b630658298c089ff755e74d0677b93c71e09d33dd35bdd4987a"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cbf212253abd65e6451acdfb608adafe98ad8f05462fb9a054ddab816545caa"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5819d502dacd54114c30bc24efcb76e723b93f8f528be70851056a396a792c46"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50ccbaafee80b4f1c5c55bbe07f80871b9b8fe3499bf7357dde2c23fb1c2ac0e"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c420878726d677da7484f6021dbe7e1f9345a791b155de632c6ce36678fb621"},
+ {file = "pyzstd-0.15.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14121a4d95070f54bdc9a80dab1dd8fd9093907a1e687926447ca69b5b40a4d5"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:00c188704141c709da96cc4a79f058d51f5318e839d6f904c7cc9badcf78e98e"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:836f1d85a4b5d3689d455aeb1dc6c42acb96aaf8e5282825c00ccf2545ad5630"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:91453ce9476363d777b2ea2e9c6dccecd2073cf35697e048de2e8d47e1f36c7c"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c249741b10eb714578d765487b767e0e7fcc2ac84a299209a6073566e730dbea"},
+ {file = "pyzstd-0.15.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:542808d88464d538f5d2c6b48b545a7fe15f0d20c7fa703b469d039a08c9fa10"},
+ {file = "pyzstd-0.15.9-cp311-cp311-win32.whl", hash = "sha256:e79babb67b415aa54abb213897ceaa011515a5f3e146a2a97f4e6486b9743af4"},
+ {file = "pyzstd-0.15.9-cp311-cp311-win_amd64.whl", hash = "sha256:ef3399e0544b46d31c2a8ff14ae1fb3c3571ae1153bbbc5ddf0d242c67bde624"},
+ {file = "pyzstd-0.15.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:418e9a676cc7ce00edd2fd044ee063c8639fd8cd6897ffda395a152cdc66ec97"},
+ {file = "pyzstd-0.15.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:52dcae42f32f7a25c6b90bd479f3d04902700e3214e8fffe1bfe70053eb35ccb"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c36dbbf71480f1fffeaeca901adb31e0c7d59270a239eca63fe26e4647b7aca8"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfa981cedd54bb8862d9033440a0afac38845db89e7099ceeb4f4d064dffd2f8"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:937f118fdd7a23654886634f650d6502a2dd12c8a8e2bf14beb2fa5fa95058bf"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:922f1bb8ef80c42a2fca297ba0b03442c143a9a1f717e83db79f190514888803"},
+ {file = "pyzstd-0.15.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78c38850af6b990e8ec1bc87b48f73ed5cc633f4baaa7bbc78f9b2f4449cf081"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5453ebe42a2c7462fa532fd03cbf64e5c6baf5508b3089736c78444148d3c593"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:da070933d4bcfcbf58472da12ffa77c9fbc90efb39e21a9b74eb04b5af4b412a"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:c8d1966e38c220d5940f8cb6303651af261f0bcfce77218a030b1a24ec986e2f"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:145ca5ed6240af2cbfc09faa50aada8aacf1e2928ed6dd9da1d6b8ebe39cdc4c"},
+ {file = "pyzstd-0.15.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9638d40ec02a5b194a4c98a5b6e36cdfde4e9d6b721ae6167ef8e57d2e69002f"},
+ {file = "pyzstd-0.15.9-cp312-cp312-win32.whl", hash = "sha256:f73821d429bfbb04645b80ec491ab05b35078f031f9fa3273fbf9027d1406233"},
+ {file = "pyzstd-0.15.9-cp312-cp312-win_amd64.whl", hash = "sha256:02c95d7109052c985b7d90dac6f6010bc0630227f15aec16302162107137bdbc"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6a8d43a0c294918e3afb7e4b1d8c04d2e4c3ea9ddf05475fdaf366c7e5b3a6"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aed5fc86d0bfc5f16e871cbb35ec93df61476d7fde4c1c6081015a075ecfbc1"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f9eb97fb6fd4551ff9d5012b4fcee9abeea9c8af6b9e3ebc3c76cc2bd0a43a7"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fd7cf79949174d1018b896638f88aea1ff2a969f87a6199ea23b25b506e26c5"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51607d7d44f94a364ef0e3ccf9a92390def0faf6e7572eef082f15c657b5d03a"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4358dd80b315c82d760b44c6df7857c9c898d04e7b0c14abb0eb3692354e9379"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:013321ddaff083b24e43a8b06303446771978343b488ed73adf56c70a46e2783"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4ed01beb31d5177456ec2c4b66591a0df83dbc72df29f05f40502bfefe47bbe4"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:69f12ce4866a3725138e97f22f2c4cb21d3ae18cd422906cd57ed12a9ffd86c5"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:305c232462dbe80d0ee5ec91b1b0ec9153ec6ba6393d5348741af5d30b07ef52"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:9e1097d8b57f64878a3f176f4cd6b9a1bbe9fb2d236f1a85a4357722626d8f25"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6c456882baab2a48a5bfabe458a557af25d0768ff29acbe200461e84c0f697d5"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-win32.whl", hash = "sha256:97e05f66c5847e6889594508298d78ddb84a0115e9234d598415dc5a06d3a4a7"},
+ {file = "pyzstd-0.15.9-cp36-cp36m-win_amd64.whl", hash = "sha256:87a1a4ca93da414f3b6da8131e61aca6d48a4e837fb0b1cbde05ae9d13332317"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:20f2dd56d46441cd9277077060c34c0b9ce3469412665ea5ccd506dd2708d994"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9c5fc29a5b9d61a8f0a3494172107e0e6cf23d0cb800d6285c6722ba7fc3535"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f281cc2f096530c339f122e0d9866545f5592dd9bffe0fade565c2771130a45"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2dd39e12f7467a7422ce50711524759d4d22016714cbae6a7096b954bc2fa32"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d3a1b6fa71a0ae7abc320d9db91b5a96a71eef1dbee0d62a6232b71c97af962"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c31f6dd5bd60688d51487a3f5e2ae29ed1948926e44d7a2316b193b083f80d5d"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dcb2172ca8b62f82af9d1f8db80c21c64c5ba3991935caefde88bb378f0afb51"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f66790e4b2dcfcabc0aa54dd89317ea5671cabf06aa93cbef7cbdd4d2fdb7ee3"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:960ab83a977a44284c4ffab2820ccd6c9b332571a3d622fefa4b29b0a5de72b0"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:12668ceb8329aaa908b4d907d3a77bb748ff28b309c3b105c995a8715d535d2b"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:441078bfd3b508597415338af667c3575980364f1286eedde58291558b9c2832"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:866ba6ce85f337fa1677516217b6f10fc25e19acb6e17a501d5822e66396bdd5"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-win32.whl", hash = "sha256:b4de7741d542a477387299bf9450e8be3e768c352d6b3438254eb02af1e59462"},
+ {file = "pyzstd-0.15.9-cp37-cp37m-win_amd64.whl", hash = "sha256:d0929302d187bfeca335b7f710f774f1b2ea3f610b2a80e8a1ac2da216cd9766"},
+ {file = "pyzstd-0.15.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c46e77c2ad614a0399503dc675d72436cbf6332a20d49a0e5bad03058d6cbfad"},
+ {file = "pyzstd-0.15.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e789e19095b818f7126180b4387c0f01700c3ad2378a4e7649b2ddf4bf47ffbc"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9596aeb8c71192f4fba1ca25cec420da195219398d2df811d5082559efd9561f"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f72f310b10b730cddfb654006ae497e7706c81e6a7642d3da7fd2439df7d88d"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a60ee6836599363a24367cf780ad45446b07eba49ec72d19bad761d5414aca7"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aff1b469187f6c789cdf17cd95c9b24e87396dc86953b1cf38b9a05cea873c80"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d9ec8634ab0cbfbcff535ac07555ebdae0282ad66762f0471fad11c16181e33"},
+ {file = "pyzstd-0.15.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc92a718bccb8ce5c9eb63fca743c38f3fa4c4e47f58f0c4ada51b2474668184"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f2839c13e486e4a23b19b1d2dc4624565cec6c228bbf803c066be1106515966b"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:346f835e368e1051f8ea187ad9b49759cf6249c9ebf2f2a3861e435a568104b8"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:5345c7a697327e2fa7c37534bb2968ea84595d8ec7fc8c4a60216ec1be6e65bd"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:49c57ae18f138a4b66480b2364fe6a0f2345ada919e93fc729c95c6b17ec73a4"},
+ {file = "pyzstd-0.15.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2919afd114fd12309ed2f831ef6e95730ebf13c2a92d258ad055769d00ef4d7a"},
+ {file = "pyzstd-0.15.9-cp38-cp38-win32.whl", hash = "sha256:370b34a7c2f9c53cee494028daa5a7264690e1756a89c3855fd0be5ad298ec30"},
+ {file = "pyzstd-0.15.9-cp38-cp38-win_amd64.whl", hash = "sha256:7ac886e04f253960ae82e38ded8352085c61d78de99412d178a94ecf475b5e5f"},
+ {file = "pyzstd-0.15.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:250dad90140a6faea4cef555f339b6ceaad5cf03ed1127b8d06de214ff0db2e7"},
+ {file = "pyzstd-0.15.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5b517fbbc5d223fc36041673e7c2a0d3a82be6a5464a5f0599069330b76f97d"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ac634753f6d26cba503cea7bb5b350aec7c5366f44fa68c79e9c90be9fd0ebc"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2ae8993f3863632d31ca8921c8a5dc9ecc5551c7b88895cefb5a26d17643391"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7452ae7e6d80e697d78d3f56d1b4d2a350286eea229afb35f55ab88b934b6acd"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae3d0575721a372c20130681bfaf873225fd9e1c290b7d56b7e0c14f413318f6"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29e452caaf0de9cc17319225921d8c28cdc7a879948e990ff1e7735e7f976517"},
+ {file = "pyzstd-0.15.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c41e5457f4de5d38a270bc44619873589bbe6fe251225deec583ed20199df0f3"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f169e166774587227255f6ffe71f5b3303ea73cde0e2c6d52e53b9e12c03d787"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:639935b5b3d9ed3911493504581254b76cb578279302f7f340924ac5bfca4090"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e4e00c1600022b47ef0e9e1f893cb0c2322209ec6c1581a3e3f63ed78330ddf0"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d7ddbf234c9adc72189bb552d830e9a0c2c4401b5baf7b003eacd5c552ddcc00"},
+ {file = "pyzstd-0.15.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3351ad2feb51dcbb936defd47cab00d6f114214f224636503ed08298f30164c9"},
+ {file = "pyzstd-0.15.9-cp39-cp39-win32.whl", hash = "sha256:3bc0e7e2cccf78e562ab416daf68448b6552a5b6450a1ff3e15cabfc19254883"},
+ {file = "pyzstd-0.15.9-cp39-cp39-win_amd64.whl", hash = "sha256:40bdb468281a5cd525e2e990b97344f0974e0589bd1b395501c25471fcd7edda"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9589cb79d4e401630481755c92b072aa7ba5505ec81dec865ef43932ec037e4"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a26df749589d898cd3253d2139eb85b867ddffc49286059c8bdb3cb9ce9b545"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9934277abdddf9c733267e4dcc4886de8a3302d28f390237d447e215e8ce47d"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca19213785f864781848e0216cba07e97f563f60a50bbc7885b54461d8c64873"},
+ {file = "pyzstd-0.15.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:84aa6eecba967bdac167451501dcaceec548d8b8c4ca7fa41ceda4dbfc279297"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:47c2a4c319300c381f194274203f47b12c433e1fd86b90ecdc7fb258c630f93b"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86e0e65e205793b337d62d9764700dfd02b5f83b01e26ad345736e7ac0554ebd"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64564f4c175c5bb8e744de5816d69ee0b940e472160a5e665f30adc412b694f3"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dca286c6c1ca5febf13f5f2ae7e8aa7536e49bd07f4232796651a43ff741ceca"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a594795ef89bd83297c860ff585f2d25580ce9805eb9cc44c831d311e7f1951a"},
+ {file = "pyzstd-0.15.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:4a0dcb32ac4d1d67a77ae6a2d60ea0921af7e682b3427202d8acb8e86642391c"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a90b901ccfd24b028faea19c927ff03f3cfefe82ba0b931fbb8da4ef0664911b"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f60f01884350aec24e7a68f3ad089151b7a636490203c41a1a7c8e0cddd9b8"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1d8b58f00137ccbe8b828a5ede92be3f0115cef75e6bed88d4d0bd1e7a0b1fc"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2b093a74b10232c70b5d29814fcee6544bb6f30e2d922d26db9ab4b4cd00c04"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1dbe76b6d8fe75f6dbec24793fc07b1d1ae9464de9941138d5b9668f7670e6b0"},
+ {file = "pyzstd-0.15.9-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6b9af8d62c087354abd071e01d9445ea51b31779c8a4a0d5c14ee12caee3d18f"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a4f786f1b1ab39a0908db04ebe5b2c7cbc6f1ce07a27d3a12eb980bffd7fea7d"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cffaab46f9e04856dc3daa6097bfb3d3bea0b1771237e869c57b13f3dcc2c238"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4334e972109bdd17fb40dbdd9fcca6137648cab416fca505a2dcd186f50533"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73877eebbdcb8259cf0099665f8c8274d4273b361371405a611fb6bd9f4d64f6"},
+ {file = "pyzstd-0.15.9-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:289e25871fe232d2482c0985a75a1faa7c92e10a6c3e3914d165f62d005d0aa6"},
+ {file = "pyzstd-0.15.9.tar.gz", hash = "sha256:cbfdde6c5768ffa5d2f14127bbc1d7c3c2d03c0ceaeb0736946197e06275ccc7"},
+]
+
+[[package]]
+name = "regex"
+version = "2022.10.31"
+description = "Alternative regular expression module, to replace re."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "regex-2022.10.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f"},
+ {file = "regex-2022.10.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9"},
+ {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b"},
+ {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57"},
+ {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4"},
+ {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001"},
+ {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90"},
+ {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144"},
+ {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc"},
+ {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66"},
+ {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af"},
+ {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc"},
+ {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66"},
+ {file = "regex-2022.10.31-cp310-cp310-win32.whl", hash = "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1"},
+ {file = "regex-2022.10.31-cp310-cp310-win_amd64.whl", hash = "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5"},
+ {file = "regex-2022.10.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe"},
+ {file = "regex-2022.10.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542"},
+ {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7"},
+ {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e"},
+ {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c"},
+ {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1"},
+ {file = "regex-2022.10.31-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4"},
+ {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f"},
+ {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5"},
+ {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c"},
+ {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c"},
+ {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7"},
+ {file = "regex-2022.10.31-cp311-cp311-win32.whl", hash = "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af"},
+ {file = "regex-2022.10.31-cp311-cp311-win_amd64.whl", hash = "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61"},
+ {file = "regex-2022.10.31-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd"},
+ {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b"},
+ {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81"},
+ {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c"},
+ {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54"},
+ {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5"},
+ {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443"},
+ {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742"},
+ {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e"},
+ {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa"},
+ {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e"},
+ {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4"},
+ {file = "regex-2022.10.31-cp36-cp36m-win32.whl", hash = "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066"},
+ {file = "regex-2022.10.31-cp36-cp36m-win_amd64.whl", hash = "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6"},
+ {file = "regex-2022.10.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8"},
+ {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783"},
+ {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347"},
+ {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93"},
+ {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6"},
+ {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11"},
+ {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec"},
+ {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9"},
+ {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1"},
+ {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8"},
+ {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5"},
+ {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95"},
+ {file = "regex-2022.10.31-cp37-cp37m-win32.whl", hash = "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394"},
+ {file = "regex-2022.10.31-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0"},
+ {file = "regex-2022.10.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d"},
+ {file = "regex-2022.10.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8"},
+ {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad"},
+ {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee"},
+ {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714"},
+ {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e"},
+ {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6"},
+ {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318"},
+ {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff"},
+ {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a"},
+ {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73"},
+ {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d"},
+ {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c"},
+ {file = "regex-2022.10.31-cp38-cp38-win32.whl", hash = "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc"},
+ {file = "regex-2022.10.31-cp38-cp38-win_amd64.whl", hash = "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453"},
+ {file = "regex-2022.10.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49"},
+ {file = "regex-2022.10.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b"},
+ {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc"},
+ {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244"},
+ {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690"},
+ {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185"},
+ {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7"},
+ {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4"},
+ {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5"},
+ {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1"},
+ {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8"},
+ {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8"},
+ {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892"},
+ {file = "regex-2022.10.31-cp39-cp39-win32.whl", hash = "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1"},
+ {file = "regex-2022.10.31-cp39-cp39-win_amd64.whl", hash = "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692"},
+ {file = "regex-2022.10.31.tar.gz", hash = "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83"},
+]
+
+[[package]]
+name = "repath"
+version = "0.9.0"
+description = "Generate regular expressions form ExpressJS path patterns"
+optional = false
+python-versions = "*"
+files = [
+ {file = "repath-0.9.0-py3-none-any.whl", hash = "sha256:ee079d6c91faeb843274d22d8f786094ee01316ecfe293a1eb6546312bb6a318"},
+ {file = "repath-0.9.0.tar.gz", hash = "sha256:8292139bac6a0e43fd9d70605d4e8daeb25d46672e484ed31a24c7ce0aef0fb7"},
+]
+
+[package.dependencies]
+six = ">=1.9.0"
+
+[[package]]
+name = "requests"
+version = "2.31.0"
+description = "Python HTTP for Humans."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+]
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = ">=2,<4"
+idna = ">=2.5,<4"
+urllib3 = ">=1.21.1,<3"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+
+[[package]]
+name = "rfc3986"
+version = "1.5.0"
+description = "Validating URI References per RFC 3986"
+optional = false
+python-versions = "*"
+files = [
+ {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
+ {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
+]
+
+[package.dependencies]
+idna = {version = "*", optional = true, markers = "extra == \"idna2008\""}
+
+[package.extras]
+idna2008 = ["idna"]
+
+[[package]]
+name = "rich"
+version = "13.7.0"
+description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"},
+ {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"},
+]
+
+[package.dependencies]
+markdown-it-py = ">=2.2.0"
+pygments = ">=2.13.0,<3.0.0"
+
+[package.extras]
+jupyter = ["ipywidgets (>=7.5.1,<9)"]
+
+[[package]]
+name = "ruff"
+version = "0.2.1"
+description = "An extremely fast Python linter and code formatter, written in Rust."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:dd81b911d28925e7e8b323e8d06951554655021df8dd4ac3045d7212ac4ba080"},
+ {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dc586724a95b7d980aa17f671e173df00f0a2eef23f8babbeee663229a938fec"},
+ {file = "ruff-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c92db7101ef5bfc18e96777ed7bc7c822d545fa5977e90a585accac43d22f18a"},
+ {file = "ruff-0.2.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13471684694d41ae0f1e8e3a7497e14cd57ccb7dd72ae08d56a159d6c9c3e30e"},
+ {file = "ruff-0.2.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a11567e20ea39d1f51aebd778685582d4c56ccb082c1161ffc10f79bebe6df35"},
+ {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:00a818e2db63659570403e44383ab03c529c2b9678ba4ba6c105af7854008105"},
+ {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be60592f9d218b52f03384d1325efa9d3b41e4c4d55ea022cd548547cc42cd2b"},
+ {file = "ruff-0.2.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbd2288890b88e8aab4499e55148805b58ec711053588cc2f0196a44f6e3d855"},
+ {file = "ruff-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ef052283da7dec1987bba8d8733051c2325654641dfe5877a4022108098683"},
+ {file = "ruff-0.2.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7022d66366d6fded4ba3889f73cd791c2d5621b2ccf34befc752cb0df70f5fad"},
+ {file = "ruff-0.2.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0a725823cb2a3f08ee743a534cb6935727d9e47409e4ad72c10a3faf042ad5ba"},
+ {file = "ruff-0.2.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0034d5b6323e6e8fe91b2a1e55b02d92d0b582d2953a2b37a67a2d7dedbb7acc"},
+ {file = "ruff-0.2.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e5cb5526d69bb9143c2e4d2a115d08ffca3d8e0fddc84925a7b54931c96f5c02"},
+ {file = "ruff-0.2.1-py3-none-win32.whl", hash = "sha256:6b95ac9ce49b4fb390634d46d6ece32ace3acdd52814671ccaf20b7f60adb232"},
+ {file = "ruff-0.2.1-py3-none-win_amd64.whl", hash = "sha256:e3affdcbc2afb6f5bd0eb3130139ceedc5e3f28d206fe49f63073cb9e65988e0"},
+ {file = "ruff-0.2.1-py3-none-win_arm64.whl", hash = "sha256:efababa8e12330aa94a53e90a81eb6e2d55f348bc2e71adbf17d9cad23c03ee6"},
+ {file = "ruff-0.2.1.tar.gz", hash = "sha256:3b42b5d8677cd0c72b99fcaf068ffc62abb5a19e71b4a3b9cfa50658a0af02f1"},
+]
+
+[[package]]
+name = "schema"
+version = "0.7.5"
+description = "Simple data validation library"
+optional = false
+python-versions = "*"
+files = [
+ {file = "schema-0.7.5-py2.py3-none-any.whl", hash = "sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c"},
+ {file = "schema-0.7.5.tar.gz", hash = "sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197"},
+]
+
+[package.dependencies]
+contextlib2 = ">=0.5.5"
+
+[[package]]
+name = "setuptools"
+version = "69.0.3"
+description = "Easily download, build, install, upgrade, and uninstall Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"},
+ {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"},
+]
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+
+[[package]]
+name = "sniffio"
+version = "1.3.0"
+description = "Sniff out which async library your code is running under"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
+ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"},
+]
+
+[[package]]
+name = "stevedore"
+version = "5.1.0"
+description = "Manage dynamic plugins for Python applications"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"},
+ {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"},
+]
+
+[package.dependencies]
+pbr = ">=2.0.0,<2.1.0 || >2.1.0"
+
+[[package]]
+name = "texttable"
+version = "1.7.0"
+description = "module to create simple ASCII tables"
+optional = false
+python-versions = "*"
+files = [
+ {file = "texttable-1.7.0-py2.py3-none-any.whl", hash = "sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917"},
+ {file = "texttable-1.7.0.tar.gz", hash = "sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638"},
+]
+
+[[package]]
+name = "typing-extensions"
+version = "4.9.0"
+description = "Backported and Experimental Type Hints for Python 3.8+"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {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]]
+name = "urllib3"
+version = "2.2.0"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"},
+ {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"},
+]
+
+[package.extras]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+h2 = ["h2 (>=4,<5)"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
+
+[[package]]
+name = "virtualenv"
+version = "20.25.0"
+description = "Virtual Python Environment builder"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"},
+ {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"},
+]
+
+[package.dependencies]
+distlib = ">=0.3.7,<1"
+filelock = ">=3.12.2,<4"
+platformdirs = ">=3.9.1,<5"
+
+[package.extras]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
+test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"]
+
+[[package]]
+name = "watchdog"
+version = "2.3.1"
+description = "Filesystem events monitoring"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697"},
+ {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42"},
+ {file = "watchdog-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565"},
+ {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16"},
+ {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375"},
+ {file = "watchdog-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab"},
+ {file = "watchdog-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c"},
+ {file = "watchdog-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f"},
+ {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44"},
+ {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131"},
+ {file = "watchdog-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b"},
+ {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc"},
+ {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225"},
+ {file = "watchdog-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43"},
+ {file = "watchdog-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5"},
+ {file = "watchdog-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd"},
+ {file = "watchdog-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190"},
+ {file = "watchdog-2.3.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf"},
+ {file = "watchdog-2.3.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d"},
+ {file = "watchdog-2.3.1-py3-none-manylinux2014_i686.whl", hash = "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79"},
+ {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256"},
+ {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad"},
+ {file = "watchdog-2.3.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed"},
+ {file = "watchdog-2.3.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc"},
+ {file = "watchdog-2.3.1-py3-none-win32.whl", hash = "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf"},
+ {file = "watchdog-2.3.1-py3-none-win_amd64.whl", hash = "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb"},
+ {file = "watchdog-2.3.1-py3-none-win_ia64.whl", hash = "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96"},
+ {file = "watchdog-2.3.1.tar.gz", hash = "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906"},
+]
+
+[package.extras]
+watchmedo = ["PyYAML (>=3.10)"]
+
+[[package]]
+name = "websocket-client"
+version = "1.7.0"
+description = "WebSocket client for Python with low level API options"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"},
+ {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"},
+]
+
+[package.extras]
+docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"]
+optional = ["python-socks", "wsaccel"]
+test = ["websockets"]
+
+[[package]]
+name = "websockets"
+version = "10.4"
+description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"},
+ {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"},
+ {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"},
+ {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"},
+ {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"},
+ {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"},
+ {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"},
+ {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"},
+ {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"},
+ {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"},
+ {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"},
+ {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"},
+ {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"},
+ {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"},
+ {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"},
+ {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"},
+ {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"},
+ {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"},
+ {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"},
+ {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"},
+ {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"},
+ {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"},
+ {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"},
+ {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"},
+ {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"},
+ {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"},
+ {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"},
+ {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"},
+ {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"},
+ {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"},
+ {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"},
+ {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"},
+ {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"},
+ {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"},
+ {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"},
+ {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"},
+ {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"},
+ {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"},
+ {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"},
+ {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"},
+ {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"},
+ {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"},
+ {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"},
+ {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"},
+ {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"},
+ {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"},
+ {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"},
+ {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"},
+ {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"},
+ {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"},
+ {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"},
+ {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"},
+ {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"},
+ {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"},
+ {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"},
+ {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"},
+ {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"},
+ {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"},
+ {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"},
+ {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"},
+ {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"},
+ {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"},
+ {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"},
+ {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"},
+ {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"},
+ {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"},
+ {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"},
+ {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"},
+ {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"},
+]
+
+[[package]]
+name = "win32-setctime"
+version = "1.1.0"
+description = "A small Python utility to set file creation time on Windows"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"},
+ {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"},
+]
+
+[package.extras]
+dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
+
+[metadata]
+lock-version = "2.0"
+python-versions = ">=3.11,<3.12"
+content-hash = "a1f6eb04b5670b51922c85e0887db1cc0b6d10a00208c23b3a04808394275e0c"
diff --git a/requirements.txt b/requirements.txt
index e69de29b..0345fcac 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -0,0 +1,1030 @@
+altgraph==0.17.4 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406 \
+ --hash=sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff
+anyio==4.2.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \
+ --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f
+brotli==1.1.0 ; python_version >= "3.11" and python_version < "3.12" and platform_python_implementation == "CPython" \
+ --hash=sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208 \
+ --hash=sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48 \
+ --hash=sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354 \
+ --hash=sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a \
+ --hash=sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128 \
+ --hash=sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c \
+ --hash=sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088 \
+ --hash=sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9 \
+ --hash=sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a \
+ --hash=sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3 \
+ --hash=sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438 \
+ --hash=sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578 \
+ --hash=sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b \
+ --hash=sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b \
+ --hash=sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68 \
+ --hash=sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d \
+ --hash=sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd \
+ --hash=sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409 \
+ --hash=sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da \
+ --hash=sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50 \
+ --hash=sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0 \
+ --hash=sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180 \
+ --hash=sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d \
+ --hash=sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112 \
+ --hash=sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc \
+ --hash=sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265 \
+ --hash=sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327 \
+ --hash=sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95 \
+ --hash=sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd \
+ --hash=sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914 \
+ --hash=sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0 \
+ --hash=sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a \
+ --hash=sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7 \
+ --hash=sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0 \
+ --hash=sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451 \
+ --hash=sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f \
+ --hash=sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e \
+ --hash=sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248 \
+ --hash=sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91 \
+ --hash=sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724 \
+ --hash=sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966 \
+ --hash=sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97 \
+ --hash=sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d \
+ --hash=sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf \
+ --hash=sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac \
+ --hash=sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951 \
+ --hash=sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74 \
+ --hash=sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60 \
+ --hash=sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c \
+ --hash=sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1 \
+ --hash=sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8 \
+ --hash=sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d \
+ --hash=sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc \
+ --hash=sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61 \
+ --hash=sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460 \
+ --hash=sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751 \
+ --hash=sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9 \
+ --hash=sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1 \
+ --hash=sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474 \
+ --hash=sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2 \
+ --hash=sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6 \
+ --hash=sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9 \
+ --hash=sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2 \
+ --hash=sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467 \
+ --hash=sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619 \
+ --hash=sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf \
+ --hash=sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408 \
+ --hash=sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579 \
+ --hash=sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84 \
+ --hash=sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b \
+ --hash=sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59 \
+ --hash=sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752 \
+ --hash=sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80 \
+ --hash=sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0 \
+ --hash=sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2 \
+ --hash=sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3 \
+ --hash=sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64 \
+ --hash=sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643 \
+ --hash=sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e \
+ --hash=sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985 \
+ --hash=sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596 \
+ --hash=sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2 \
+ --hash=sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064
+brotlicffi==1.1.0.0 ; python_version >= "3.11" and python_version < "3.12" and platform_python_implementation == "PyPy" \
+ --hash=sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b \
+ --hash=sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171 \
+ --hash=sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb \
+ --hash=sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979 \
+ --hash=sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33 \
+ --hash=sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca \
+ --hash=sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f \
+ --hash=sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6 \
+ --hash=sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca \
+ --hash=sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112 \
+ --hash=sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391 \
+ --hash=sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8 \
+ --hash=sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0 \
+ --hash=sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35 \
+ --hash=sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820 \
+ --hash=sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838 \
+ --hash=sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613 \
+ --hash=sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5 \
+ --hash=sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851 \
+ --hash=sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814 \
+ --hash=sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc \
+ --hash=sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13 \
+ --hash=sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990 \
+ --hash=sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6 \
+ --hash=sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d \
+ --hash=sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808 \
+ --hash=sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14
+certifi==2024.2.2 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \
+ --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1
+cffi==1.16.0 ; python_version >= "3.11" and python_version < "3.12" and platform_python_implementation == "PyPy" \
+ --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \
+ --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \
+ --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \
+ --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \
+ --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \
+ --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \
+ --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \
+ --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \
+ --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \
+ --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \
+ --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \
+ --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \
+ --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \
+ --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \
+ --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \
+ --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \
+ --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \
+ --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \
+ --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \
+ --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \
+ --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \
+ --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \
+ --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \
+ --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \
+ --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \
+ --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \
+ --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \
+ --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \
+ --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \
+ --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \
+ --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \
+ --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \
+ --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \
+ --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \
+ --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \
+ --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \
+ --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \
+ --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \
+ --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \
+ --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \
+ --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \
+ --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \
+ --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \
+ --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \
+ --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \
+ --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \
+ --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \
+ --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \
+ --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \
+ --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \
+ --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \
+ --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357
+charset-normalizer==3.3.2 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \
+ --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \
+ --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \
+ --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \
+ --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \
+ --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \
+ --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \
+ --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \
+ --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \
+ --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \
+ --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \
+ --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \
+ --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \
+ --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \
+ --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \
+ --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \
+ --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \
+ --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \
+ --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \
+ --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \
+ --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \
+ --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \
+ --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \
+ --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \
+ --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \
+ --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \
+ --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \
+ --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \
+ --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \
+ --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \
+ --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \
+ --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \
+ --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \
+ --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \
+ --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \
+ --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \
+ --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \
+ --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \
+ --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \
+ --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \
+ --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \
+ --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \
+ --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \
+ --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \
+ --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \
+ --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \
+ --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \
+ --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \
+ --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \
+ --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \
+ --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \
+ --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \
+ --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \
+ --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \
+ --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \
+ --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \
+ --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \
+ --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \
+ --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \
+ --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \
+ --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \
+ --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \
+ --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \
+ --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \
+ --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \
+ --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \
+ --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \
+ --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \
+ --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \
+ --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \
+ --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \
+ --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \
+ --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \
+ --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \
+ --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \
+ --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \
+ --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \
+ --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \
+ --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \
+ --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \
+ --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \
+ --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \
+ --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \
+ --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \
+ --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \
+ --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \
+ --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \
+ --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \
+ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
+ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561
+click==8.1.7 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
+ --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
+colorama==0.4.6 ; python_version >= "3.11" and python_version < "3.12" and (platform_system == "Windows" or sys_platform == "win32") \
+ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
+contextlib2==21.6.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f \
+ --hash=sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869
+flet-core==0.7.4 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:f161bba1d6221ab7b0e06c03f8c52ecd03e60e7ed5fc69a8701a6ba2ab1b08dc \
+ --hash=sha256:fa208e8cf1a64613a57c497526a9cb6eb46d153bed61f5ebb9518baf56d15c52
+flet==0.7.4 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:005eb2656672f938065799b17d2cc6f7f8af767f8fed7658437453978380221a \
+ --hash=sha256:192ebd5f6a6717c693e47a5c632de949b45935d37fca543d85763ff454edebd0 \
+ --hash=sha256:77024ccbea20ab6c734002fc3617b12d6eea9bc555e3e9fedf37eb0da4c05e00 \
+ --hash=sha256:7cb258d439f30e40db24347c38f7b85ca1ec44decd63f44848c724e28f86ab42 \
+ --hash=sha256:aa2ea96d883810b1be1d0b3b7ccbab7e159848b1b17ecd4884d27f6e87e44561 \
+ --hash=sha256:bc53e337ee7023282d3f4df9a1d00e49d17d3d07ba797cfa089f50d1df12705a \
+ --hash=sha256:beb3cd75bafc53ff0f7468ee51901467040f7daf427dcb54ef5e600dbb82c228 \
+ --hash=sha256:d182626579b8f8edbd31d054740761862761568090614d7a972e4a3fdc8f3b95 \
+ --hash=sha256:d5056777371895c38e32bfb947be2a1ee97aedaf0b9cf75f2dcdad225aeaf095 \
+ --hash=sha256:ffdd02df1d16027111a3d97d874cae06fc7c9df792fc73c96cb58a1eb226f92e
+h11==0.14.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
+ --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761
+httpcore==0.16.3 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb \
+ --hash=sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0
+httpx==0.23.3 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9 \
+ --hash=sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6
+idna==3.6 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \
+ --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f
+inflate64==1.0.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:022ca1cc928e7365a05f7371ff06af143c6c667144965e2cf9a9236a2ae1c291 \
+ --hash=sha256:0c644bf7208e20825ca3bbb5fb1f7f495cfcb49eb01a5f67338796d44a42f2bf \
+ --hash=sha256:0fe481f31695d35a433c3044ac8fd5d9f5069aaad03a0c04b570eb258ce655aa \
+ --hash=sha256:137ca6b315f0157a786c3a755a09395ca69aed8bcf42ad3437cb349f5ebc86d2 \
+ --hash=sha256:1616a87ff04f583e9558cc247ec0b72a30d540ee0c17cc77823be175c0ec92f0 \
+ --hash=sha256:1facd35319b6a391ee4c3d709c7c650bcada8cd7141d86cd8c2257287f45e6e6 \
+ --hash=sha256:228d504239d27958e71fc77e3119a6ac4528127df38468a0c95a5bd3927204b8 \
+ --hash=sha256:2be4e01c1b04761874cb44b35b6103ca5846bc36c18fc3ff5e8cbcd8bfc15e9f \
+ --hash=sha256:2cccded63865640d03253897be7232b2bbac295fe43914c61f86a57aa23bb61d \
+ --hash=sha256:3278827b803cf006a1df251f3e13374c7d26db779e5a33329cc11789b804bc2d \
+ --hash=sha256:34de6902c39d9225459583d5034182d371fc694bc3cfd6c0fc89aa62e9809faf \
+ --hash=sha256:35a45f6979ad5874d4d4898c2fc770b136e61b96b850118fdaec5a5af1b9123a \
+ --hash=sha256:36342338e957c790fc630d4afcdcc3926beb2ecaea0b302336079e8fa37e57a0 \
+ --hash=sha256:3a70ea2e456c15f7aa7c74b8ab8f20b4f8940ec657604c9f0a9de3342f280fff \
+ --hash=sha256:3e243ea9bd36a035059f2365bd6d156ff59717fbafb0255cb0c75bf151bf6904 \
+ --hash=sha256:46792ecf3565d64fd2c519b0a780c03a57e195613c9954ef94e739a057b3fd06 \
+ --hash=sha256:4dc392dec1cd11cacda3d2637214ca45e38202e8a4f31d4a4e566d6e90625fc4 \
+ --hash=sha256:543f400201f5c101141af3c79c82059e1aa6ef4f1584a7f1fa035fb2e465097f \
+ --hash=sha256:57fe7c14aebf1c5a74fc3b70d355be1280a011521a76aa3895486e62454f4242 \
+ --hash=sha256:5ebad4a6cd2a2c1d81be0b09d4006479f3b258803c49a9224ef8ca0b649072fa \
+ --hash=sha256:5f816d1c8a0593375c289e285c96deaee9c2d8742cb0edbd26ee05588a9ae657 \
+ --hash=sha256:5ff8bd2a562343fcbc4eea26fdc368904a3b5f6bb8262344274d3d74a1de15bb \
+ --hash=sha256:6823b2c0cff3a8159140f3b17ec64fb8ec0e663b45a6593618ecdde8aeecb5b2 \
+ --hash=sha256:6c5775c91f94f5eced9160fb0af12a09f3e030194f91a6a46e706a79350bd056 \
+ --hash=sha256:6ceca14f7ec19fb44b047f56c50efb7521b389d222bba2b0a10286a0caeb03fa \
+ --hash=sha256:75448c7b414dadaeeb11dab9f75e022aa1e0ee19b00f570e9f58e933603d71ac \
+ --hash=sha256:8140942d1614bdeb5a9ddd7559348c5c77f884a42424aef7ccf149ccfb93aa08 \
+ --hash=sha256:8b402a50eda7ee75f342fc346d33a41bca58edc222a4b17f9be0db1daed459fa \
+ --hash=sha256:8f033b2879696b855200cde5ca4e293132c7499df790acb2c0dacb336d5e83b1 \
+ --hash=sha256:92f0dc6af0e8e97324981178dc442956cbff1247a56d1e201af8d865244653f8 \
+ --hash=sha256:9373ccf0661cc72ac84a0ad622634144da5ce7d57c9572ed0723d67a149feed2 \
+ --hash=sha256:9964a4eaf26a9d36f82a1d9b12c28e35800dd3d99eb340453ed12ac90c2976a8 \
+ --hash=sha256:9a270be6b10cde01258c0097a663a307c62d12c78eb8f62f8e29f205335942c9 \
+ --hash=sha256:9b65cc701ef33ab20dbfd1d64088ffd89a8c265b356d2c21ba0ec565661645ef \
+ --hash=sha256:9fe3f9051338bb7d07b5e7d88420d666b5109f33ae39aa55ecd1a053c0f22b1b \
+ --hash=sha256:a475e8822f1a74c873e60b8f270773757ade024097ca39e43402d47c049c67d4 \
+ --hash=sha256:a90c0bdf4a7ecddd8a64cc977181810036e35807f56b0bcacee9abb0fcfd18dc \
+ --hash=sha256:a982dc93920f9450da4d4f25c5e5c1288ef053b1d618cedc91adb67e035e35f5 \
+ --hash=sha256:ae2572e06bcfe15e3bbf77d4e4a6d6c55e2a70d6abceaaf60c5c3653ddb96dfd \
+ --hash=sha256:b559937a42f0c175b4d2dfc7eb53b97bdc87efa9add15ed5549c6abc1e89d02f \
+ --hash=sha256:bf2981b95c1f26242bb084d9a07f3feb0cfe3d6d0a8d90f42389803bc1252c4a \
+ --hash=sha256:c10ca61212a753bbce6d341e7cfa779c161b839281f1f9fdc15cf1f324ce7c5b \
+ --hash=sha256:ca0310b2c55bc40394c5371db2a22f705fd594226cc09432e1eb04d3aed83930 \
+ --hash=sha256:d4367480733ac8daf368f6fc704b7c9db85521ee745eb5bd443f4b97d2051acc \
+ --hash=sha256:d491f104fb3701926ebd82b8c9250dfba0ddcab584504e26f1e4adb26730378d \
+ --hash=sha256:d76d205b844d78ce04768060084ef20e64dcc63a3e9166674f857acaf4d140ed \
+ --hash=sha256:d90730165f471d61a1a694a5e354f3ffa938227e8dcecb62d5d728e8069cee94 \
+ --hash=sha256:dd6d3e7d47df43210a995fd1f5989602b64de3f2a17cf4cbff553518b3577fd4 \
+ --hash=sha256:e4650c6f65011ec57cf5cd96b92d5b7c6f59e502930c86eb8227c93cf02dc270 \
+ --hash=sha256:e95044ae55a161144445527a2efad550851fecc699066423d24b2634a6a83710 \
+ --hash=sha256:ebafbd813213dc470719cd0a2bcb53aab89d9059f4e75386048b4c4dcdb2fd99 \
+ --hash=sha256:f5924499dc8800928c0ee4580fa8eb4ffa880b2cce4431537d0390e503a9c9ee \
+ --hash=sha256:f79542478e49e471e8b23556700e6f688a40dc93e9a746f77a546c13251b59b1
+loguru==0.6.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c \
+ --hash=sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3
+macholib==1.16.3 ; python_version >= "3.11" and python_version < "3.12" and sys_platform == "darwin" \
+ --hash=sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30 \
+ --hash=sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c
+multivolumefile==0.2.3 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:237f4353b60af1703087cf7725755a1f6fcaeeea48421e1896940cd1c920d678 \
+ --hash=sha256:a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6
+oauthlib==3.2.2 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \
+ --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918
+packaging==23.2 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \
+ --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7
+pefile==2023.2.7 ; python_version >= "3.11" and python_version < "3.12" and sys_platform == "win32" \
+ --hash=sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc \
+ --hash=sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6
+pillow==10.2.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8 \
+ --hash=sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39 \
+ --hash=sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac \
+ --hash=sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869 \
+ --hash=sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e \
+ --hash=sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04 \
+ --hash=sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9 \
+ --hash=sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e \
+ --hash=sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe \
+ --hash=sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef \
+ --hash=sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56 \
+ --hash=sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa \
+ --hash=sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f \
+ --hash=sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f \
+ --hash=sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e \
+ --hash=sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a \
+ --hash=sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2 \
+ --hash=sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2 \
+ --hash=sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5 \
+ --hash=sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a \
+ --hash=sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2 \
+ --hash=sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213 \
+ --hash=sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563 \
+ --hash=sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591 \
+ --hash=sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c \
+ --hash=sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2 \
+ --hash=sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb \
+ --hash=sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757 \
+ --hash=sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0 \
+ --hash=sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452 \
+ --hash=sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad \
+ --hash=sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01 \
+ --hash=sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f \
+ --hash=sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5 \
+ --hash=sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61 \
+ --hash=sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e \
+ --hash=sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b \
+ --hash=sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068 \
+ --hash=sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9 \
+ --hash=sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588 \
+ --hash=sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483 \
+ --hash=sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f \
+ --hash=sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67 \
+ --hash=sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7 \
+ --hash=sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311 \
+ --hash=sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6 \
+ --hash=sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72 \
+ --hash=sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6 \
+ --hash=sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129 \
+ --hash=sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13 \
+ --hash=sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67 \
+ --hash=sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c \
+ --hash=sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516 \
+ --hash=sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e \
+ --hash=sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e \
+ --hash=sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364 \
+ --hash=sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023 \
+ --hash=sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1 \
+ --hash=sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04 \
+ --hash=sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d \
+ --hash=sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a \
+ --hash=sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7 \
+ --hash=sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb \
+ --hash=sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4 \
+ --hash=sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e \
+ --hash=sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1 \
+ --hash=sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48 \
+ --hash=sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868
+psutil==5.9.8 ; python_version >= "3.11" and python_version < "3.12" and sys_platform != "cygwin" \
+ --hash=sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d \
+ --hash=sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73 \
+ --hash=sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8 \
+ --hash=sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2 \
+ --hash=sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e \
+ --hash=sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36 \
+ --hash=sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7 \
+ --hash=sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c \
+ --hash=sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee \
+ --hash=sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421 \
+ --hash=sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf \
+ --hash=sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81 \
+ --hash=sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0 \
+ --hash=sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631 \
+ --hash=sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4 \
+ --hash=sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8
+py7zr==0.20.8 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:2a6b0db0441e63a2dd74cbd18f5d9ae7e08dc0e54685aa486361d0db6a0b4f78 \
+ --hash=sha256:c74d957a0d32a2368854d1721b4ca20e614ea116d733352a115ca1c789b2c42e
+pybcj==1.0.2 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:1079ca63ff8da5c936b76863690e0bd2489e8d4e0a3a340e032095dae805dd91 \
+ --hash=sha256:198e0b4768b4025eb3309273d7e81dc53834b9a50092be6e0d9b3983cfd35c35 \
+ --hash=sha256:21b5f2460629167340403d359289a173e0729ce8e84e3ce99462009d5d5e01a4 \
+ --hash=sha256:22a94885723f8362d4cb468e68910eef92d3e2b1293de82b8eacb4198ef6655f \
+ --hash=sha256:2940fb85730b9869254559c491cd83cf777e56c76a8a60df60e4be4f2a4248d7 \
+ --hash=sha256:2ed5b3dd9c209fe7b90990dee4ef21870dca39db1cd326553c314ee1b321c1cc \
+ --hash=sha256:3602be737c6e9553c45ae89e6b0e556f64f34dabf27d5260317d1824d31b79d3 \
+ --hash=sha256:3b8d7810fb587adbffba025330cf212d9bbed8f29559656d05cb6609673f306a \
+ --hash=sha256:3ffae79ef8a1ea81ea2748ad7b7ad9b882aa88ddf65ce90f9e944df639eccc61 \
+ --hash=sha256:493eab2b1f6f546730a6de0c5ceb75ce16f3767154e8ae30e2b70d41b928b7d2 \
+ --hash=sha256:5c3171bb95c9b45cbcad25589e1ae4f4ca4ea99dc1724c4e0671eb6b9055514e \
+ --hash=sha256:63dd2ca52a48841f561bfec0fa3f208d375b0a8dcd3d7b236459e683ae29221d \
+ --hash=sha256:746550dc7b5af4d04bb5fa4d065f18d39c925bcb5dee30db75747cd9a58bb6e8 \
+ --hash=sha256:75d6d613bae6f27678d5e44e89d61018779726aa6aa950c516d33a04b8af8c59 \
+ --hash=sha256:7bff28d97e47047d69a4ac6bf59adda738cf1d00adde8819117fdb65d966bdbc \
+ --hash=sha256:8007371f6f2b462f5aa05d5c2135d0a1bcf5b7bdd9bd15d86c730f588d10b7d3 \
+ --hash=sha256:8204a714029784b1a08a3d790430d80b423b68615c5b1e67aabca5bd5419b77d \
+ --hash=sha256:87108181c7a6ac4d3fc1e4551cab5db5eea7f9fdca611175243234cd94bcc59b \
+ --hash=sha256:8ce9b62b6aaa5b08773be8a919ecc4e865396c969f982b685eeca6e80c82abb7 \
+ --hash=sha256:9c2b3e60b65c7ac73e44335934e1e122da8d56db87840984601b3c5dc0ae4c19 \
+ --hash=sha256:9ea46e2d45469d13b7f25b08efcdb140220bab1ac5a850db0954591715b8caaa \
+ --hash=sha256:a2562ebe5a0abec4da0229f8abb5e90ee97b178f19762eb925c1159be36828b3 \
+ --hash=sha256:a29be917fbc99eca204b08407e0971e0205bfdad4b74ec915930675f352b669d \
+ --hash=sha256:a54ebdc8423ba99d75372708a882fcfc3b14d9d52cf195295ad53e5a47dab37f \
+ --hash=sha256:af19bc61ded933001cd68f004ae2042bf1a78eb498a3c685ebd655fa1be90dbe \
+ --hash=sha256:b8f9368036c9e658d8e3b3534086d298a5349c864542b34657cbe57c260daa49 \
+ --hash=sha256:bdb4d8ff5cba3e0bd1adee7d20dbb2b4d80cb31ac04d6ea1cd06cfc02d2ecd0d \
+ --hash=sha256:bdf5bcac4f1da36ad43567ea6f6ef404347658dbbe417c87cdb1699f327d6337 \
+ --hash=sha256:c7f5bef7f47723c53420e377bc64d2553843bee8bcac5f0ad076ab1524780018 \
+ --hash=sha256:ce1c8af7a4761d2b1b531864d84113948daa0c4245775c63bd9874cb955f4662 \
+ --hash=sha256:db57f26b8c0162cfddb52b869efb1741b8c5e67fc536994f743074985f714c55 \
+ --hash=sha256:e96ae14062bdcddc3197300e6ee4efa6fbc6749be917db934eac66d0daaecb68 \
+ --hash=sha256:e9a785eb26884429d9b9f6326e68c3638828c83bf6d42d2463c97ad5385caff2 \
+ --hash=sha256:ef55b96b7f2ed823e0b924de902065ec42ade856366c287dbb073fabd6b90ec1 \
+ --hash=sha256:f3f4a447800850aba7724a2274ea0a4800724520c1caf38f7d0dabf2f89a5e15 \
+ --hash=sha256:f40f3243139d675f43793a4e35c410c370f7b91ccae74e70c8b2f4877869f90e \
+ --hash=sha256:f9a2585e0da9cf343ea27421995b881736a1eb604a7c1d4ca74126af94c3d4a8 \
+ --hash=sha256:fa26415b4a118ea790de9d38f244312f2510a9bb5c65e560184d241a6f391a2d \
+ --hash=sha256:fabb2be57e4ca28ea36c13146cdf97d73abd27c51741923fc6ba1e8cd33e255c \
+ --hash=sha256:fdb7cd8271471a5979d84915c1ee57eea7e0a69c893225fc418db66883b0e2a7 \
+ --hash=sha256:fde2376b180ae2620c102fbc3ef06638d306feae83964aaa5051ecbdda54845a
+pycparser==2.21 ; python_version >= "3.11" and python_version < "3.12" and platform_python_implementation == "PyPy" \
+ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
+ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
+pycryptodomex==3.20.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1 \
+ --hash=sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305 \
+ --hash=sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c \
+ --hash=sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458 \
+ --hash=sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed \
+ --hash=sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc \
+ --hash=sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c \
+ --hash=sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc \
+ --hash=sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079 \
+ --hash=sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb \
+ --hash=sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa \
+ --hash=sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427 \
+ --hash=sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5 \
+ --hash=sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64 \
+ --hash=sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6 \
+ --hash=sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e \
+ --hash=sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43 \
+ --hash=sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3 \
+ --hash=sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499 \
+ --hash=sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8 \
+ --hash=sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b \
+ --hash=sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623 \
+ --hash=sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7 \
+ --hash=sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc \
+ --hash=sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4 \
+ --hash=sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e \
+ --hash=sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a \
+ --hash=sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781 \
+ --hash=sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794 \
+ --hash=sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea \
+ --hash=sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b \
+ --hash=sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913
+pyinstaller-hooks-contrib==2024.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:469b5690df53223e2e8abffb2e44d6ee596e7d79d4b1eed9465123b67439875a \
+ --hash=sha256:a7118c1a5c9788595e5c43ad058a7a5b7b6d59e1eceb42362f6ec1f0b61986b0
+pyinstaller==5.13.2 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f \
+ --hash=sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6 \
+ --hash=sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d \
+ --hash=sha256:421cd24f26144f19b66d3868b49ed673176765f92fa9f7914cd2158d25b6d17e \
+ --hash=sha256:65133ed89467edb2862036b35d7c5ebd381670412e1e4361215e289c786dd4e6 \
+ --hash=sha256:7d51734423685ab2a4324ab2981d9781b203dcae42839161a9ee98bfeaabdade \
+ --hash=sha256:8f6dd0e797ae7efdd79226f78f35eb6a4981db16c13325e962a83395c0ec7420 \
+ --hash=sha256:aadafb6f213549a5906829bb252e586e2cf72a7fbdb5731810695e6516f0ab30 \
+ --hash=sha256:b2e1c7f5cceb5e9800927ddd51acf9cc78fbaa9e79e822c48b0ee52d9ce3c892 \
+ --hash=sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8 \
+ --hash=sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2 \
+ --hash=sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4
+pyppmd==1.1.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:088e326b180a0469ac936849f5e1e5320118c22c9d9e673e9c8551153b839c84 \
+ --hash=sha256:0e96cc43f44b7658be2ea764e7fa99c94cb89164dbb7cdf209178effc2168319 \
+ --hash=sha256:14421030f1d46f69829698bdd960698a3b3df0925e3c470e82cfcdd4446b7bc1 \
+ --hash=sha256:169e5023c86ed1f7587961900f58aa78ad8a3d59de1e488a2228b5ba3de52402 \
+ --hash=sha256:1ce5822d8bea920856232ccfb3c26b56b28b6846ea1b0eb3d5cb9592a026649e \
+ --hash=sha256:1d38ce2e4b7eb84b53bc8a52380b94f66ba6c39328b8800b30c2b5bf31693973 \
+ --hash=sha256:1e3ebcf5f95142268afa5cc46457d9dab2d29a3ccfd020a1129dd9d6bd021be1 \
+ --hash=sha256:1f8c51044ee4df1b004b10bf6b3c92f95ea86cfe1111210d303dca44a56e4282 \
+ --hash=sha256:216b0d969a3f06e35fbfef979706d987d105fcb1e37b0b1324f01ee143719c4a \
+ --hash=sha256:28a1ab1ef0a31adce9b4c837b7b9acb01ce8f1f702ff3ff884f03d21c2f6b9bb \
+ --hash=sha256:2a9e894750f2a52b03e3bc0d7cf004d96c3475a59b1af7e797d808d7d29c9ffe \
+ --hash=sha256:2aeea1bf585c6b8771fa43a6abd704da92f8a46a6d0020953af15d7f3c82e48c \
+ --hash=sha256:2ea3ae0e92c0b5345cd3a4e145e01bbd79c2d95355481ea5d833b5c0cb202a2d \
+ --hash=sha256:31b882584f86440b0ff7906385c9f9d9853e5799197abaafdae2245f87d03f01 \
+ --hash=sha256:324a178935c140210fca2043c688b77e79281da8172d2379a06e094f41735851 \
+ --hash=sha256:363030bbcb7902fb9eeb59ffc262581ca5dd7790ba950328242fd2491c54d99b \
+ --hash=sha256:37f3557ea65ee417abcdf5f49d35df00bb9f6f252639cae57aeefcd0dd596133 \
+ --hash=sha256:3af4338cc48cd59ee213af61d936419774a0f8600b9aa2013cd1917b108424f0 \
+ --hash=sha256:3f788ae8f5a9e79cd777b7969d3401b2a2b87f47abe306c2a03baca30595e9bd \
+ --hash=sha256:435317949a6f35e54cdf08e0af6916ace427351e7664ac1593980114668f0aaa \
+ --hash=sha256:459f85e928fb968d0e34fb6191fd8c4e710012d7d884fa2b317b2e11faac7c59 \
+ --hash=sha256:46e8240315476f57aac23d71e6de003e122b65feba7c68f4cc46a089a82a7cd4 \
+ --hash=sha256:4ad046a9525d1f52e93bc642a4cec0bf344a3ba1a15923e424e7a50f8ca003d8 \
+ --hash=sha256:4f66b0d0e32b8fb8707f1d2552f13edfc2917e8ed0bdf4d62e2ce190d2c70834 \
+ --hash=sha256:5938d256e8d2a2853dc3af8bb58ae6b4a775c46fc891dbe1826a0b3ceb624031 \
+ --hash=sha256:59521a3c6028da0cb5780ba16880047b00163432a6b975da2f6123adfc1b0be8 \
+ --hash=sha256:5fef43bfe98ada0a608adf03b2d205e071259027ab50523954c42eef7adcef67 \
+ --hash=sha256:60981ffde1fe6ade750b690b35318c41a1160a8505597fda2c39a74409671217 \
+ --hash=sha256:62e57927dbcb91fb6290a41cd83743b91b9d85858efb16a0dd34fac208ee1c6b \
+ --hash=sha256:650a663a591e06fb8096c213f4070b158981c8c3bf9c166ce7e4c360873f2750 \
+ --hash=sha256:6b980902797eab821299a1c9f42fa78eff2826a6b0b0f6bde8a621f9765ffd55 \
+ --hash=sha256:6e84b25d088d7727d50218f57f92127cdb839acd6ec3de670b6680a4cf0b2d2a \
+ --hash=sha256:775172c740133c0162a01c1a5443d0e312246881cdd6834421b644d89a634b91 \
+ --hash=sha256:7759bdb137694d4ab0cfa5ff2c75c212d90714c7da93544694f68001a0c38e12 \
+ --hash=sha256:7c520656bc12100aa6388df27dd7ac738577f38bf43f4a4bea78e1861e579ea5 \
+ --hash=sha256:80cde69013f357483abe0c3ff30c55dc5e6b4f72b068f91792ce282c51dc0bff \
+ --hash=sha256:897fa9ab5ff588a1000b8682835c5acf219329aa2bbfec478100e57d1204eeab \
+ --hash=sha256:8c2a3e807028159a705951f5cb5d005f94caed11d0984e59cc50506de543e22d \
+ --hash=sha256:9301fa39d1fb0ed09a10b4c5d7f0074113e96a1ead16ba7310bedf95f7ef660c \
+ --hash=sha256:95f28e2ecf3a9656bd7e766aaa1162b6872b575627f18715f8b046e8617c124a \
+ --hash=sha256:969555c72e72fe2b4dd944127521a8f2211caddb5df452bbc2506b5adfac539e \
+ --hash=sha256:99ed42891986dac8c2ecf52bddfb777900233d867aa18849dbba6f3335600466 \
+ --hash=sha256:9d6ef8fd818884e914bc209f7961c9400a4da50d178bba25efcef89f09ec9169 \
+ --hash=sha256:a04ef5fd59818b035855723af85ce008c8191d31216706ffcbeedc505efca269 \
+ --hash=sha256:a4f9b51e45c11e805e74ea6f6355e98a6423b5bbd92f45aceee24761bdc3d3b8 \
+ --hash=sha256:a5e4008a45910e3c8c227f6f240de67eb14454c015dc3d8060fc41e230f395d3 \
+ --hash=sha256:ac25b3a13d1ac9b8f0bde46952e10848adc79d932f2b548a6491ef8825ae0045 \
+ --hash=sha256:ad5da9f7592158e6b6b51d7cd15e536d8b23afbb4d22cba4e5744c7e0a3548b1 \
+ --hash=sha256:b4fa4c27dc1314d019d921f2aa19e17f99250557e7569eeb70e180558f46af74 \
+ --hash=sha256:b6108044d943b826f97a9e79201242f61392d6c1fadba463b2069c4e6bc961e1 \
+ --hash=sha256:b691264f9962532aca3bba5be848b6370e596d0a2ca722c86df388be08d0568a \
+ --hash=sha256:b991b4501492ec3380b605fe30bee0b61480d305e98519d81c2a658b2de01593 \
+ --hash=sha256:b9e0c8053e69cad6a92a0889b3324f567afc75475b4f54727de553ac4fc85780 \
+ --hash=sha256:baf798e76edd9da975cc536f943756a1b1755eb8ed87371f86f76d7c16e8d034 \
+ --hash=sha256:bc6543e7d12ef0a1466d291d655e3d6bca59c7336dbb53b62ccdd407822fb52b \
+ --hash=sha256:c0308e2e76ecb4c878a18c2d7a7c61dbca89b4ef138f65d5f5ead139154dcdea \
+ --hash=sha256:c269d21e15f4175df27cf00296476097af76941f948734c642d7fb6e85b9b3b9 \
+ --hash=sha256:c45ce2968b7762d2cacf622b0a8f260295c6444e0883fd21a21017e3eaef16ed \
+ --hash=sha256:c5cd428715413fe55abf79dc9fc54924ba7e518053e1fc0cbdf80d0d99cf1442 \
+ --hash=sha256:c6fe69b82634488ada75ba07efb90cd5866fa3d64a2c12932b6e8ae207a14e5f \
+ --hash=sha256:c8d3003eebe6aabe22ba744a38a146ed58a25633420d5da882b049342b7c8036 \
+ --hash=sha256:cce8cd2d4ceebe2dbf41db6dfebe4c2e621314b3af8a2df2cba5eb5fa277f122 \
+ --hash=sha256:d5fc178a3c21af78858acbac9782fca6a927267694c452e0882c55fec6e78319 \
+ --hash=sha256:d63be8c068879194c1e7548d0c57f54a4d305ba204cd0c7499b678f0aee893ef \
+ --hash=sha256:d7ec02f1778dd68547e497625d66d7858ce10ea199146eb1d80ee23ba42954be \
+ --hash=sha256:db64a4fe956a2e700a737a1d019f526e6ccece217c163b28b354a43464cc495b \
+ --hash=sha256:dd20142869094bceef5ab0b160f4fff790ad1f612313a1e3393a51fc3ba5d57e \
+ --hash=sha256:ec8a2447e69444703e2b273247bfcd4b540ec601780eff07da16344c62d2993d \
+ --hash=sha256:f062ca743f9b99fe88d417b4d351af9b4ff1a7cbd3d765c058bb97de976d57f1 \
+ --hash=sha256:f5289f32ab4ec5f96a95da51309abd1769f928b0bff62047b3bc25c878c16ccb \
+ --hash=sha256:f73cf2aaf60477eef17f5497d14b6099d8be9748390ad2b83d1c88214d050c05
+pywin32-ctypes==0.2.2 ; python_version >= "3.11" and python_version < "3.12" and sys_platform == "win32" \
+ --hash=sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60 \
+ --hash=sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7
+pyyaml==6.0.1 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \
+ --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \
+ --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \
+ --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \
+ --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \
+ --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \
+ --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \
+ --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \
+ --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \
+ --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \
+ --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \
+ --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \
+ --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \
+ --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \
+ --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \
+ --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \
+ --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \
+ --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \
+ --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \
+ --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \
+ --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \
+ --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \
+ --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \
+ --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \
+ --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \
+ --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \
+ --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \
+ --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \
+ --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \
+ --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \
+ --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \
+ --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \
+ --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \
+ --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \
+ --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \
+ --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \
+ --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \
+ --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \
+ --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \
+ --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \
+ --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \
+ --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \
+ --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \
+ --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \
+ --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \
+ --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \
+ --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \
+ --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \
+ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
+ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
+pyzstd==0.15.9 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:00c188704141c709da96cc4a79f058d51f5318e839d6f904c7cc9badcf78e98e \
+ --hash=sha256:013321ddaff083b24e43a8b06303446771978343b488ed73adf56c70a46e2783 \
+ --hash=sha256:02c95d7109052c985b7d90dac6f6010bc0630227f15aec16302162107137bdbc \
+ --hash=sha256:0a4334e972109bdd17fb40dbdd9fcca6137648cab416fca505a2dcd186f50533 \
+ --hash=sha256:12668ceb8329aaa908b4d907d3a77bb748ff28b309c3b105c995a8715d535d2b \
+ --hash=sha256:14121a4d95070f54bdc9a80dab1dd8fd9093907a1e687926447ca69b5b40a4d5 \
+ --hash=sha256:145ca5ed6240af2cbfc09faa50aada8aacf1e2928ed6dd9da1d6b8ebe39cdc4c \
+ --hash=sha256:1b9cda5314982d64c856f9298be0d9bf69fbff0ca514d1651037616354b473ff \
+ --hash=sha256:1cbf212253abd65e6451acdfb608adafe98ad8f05462fb9a054ddab816545caa \
+ --hash=sha256:1dbe76b6d8fe75f6dbec24793fc07b1d1ae9464de9941138d5b9668f7670e6b0 \
+ --hash=sha256:209a92fbe892bd69cde58ffcb4861468e2c3c2d0626763e16e122bb55cb1fb1a \
+ --hash=sha256:20f2dd56d46441cd9277077060c34c0b9ce3469412665ea5ccd506dd2708d994 \
+ --hash=sha256:23695dabdfd5081beab25754dc0105b42fbd2085a7c293901bcb45045969c5ec \
+ --hash=sha256:250dad90140a6faea4cef555f339b6ceaad5cf03ed1127b8d06de214ff0db2e7 \
+ --hash=sha256:289e25871fe232d2482c0985a75a1faa7c92e10a6c3e3914d165f62d005d0aa6 \
+ --hash=sha256:2919afd114fd12309ed2f831ef6e95730ebf13c2a92d258ad055769d00ef4d7a \
+ --hash=sha256:29e452caaf0de9cc17319225921d8c28cdc7a879948e990ff1e7735e7f976517 \
+ --hash=sha256:305c232462dbe80d0ee5ec91b1b0ec9153ec6ba6393d5348741af5d30b07ef52 \
+ --hash=sha256:31f60f01884350aec24e7a68f3ad089151b7a636490203c41a1a7c8e0cddd9b8 \
+ --hash=sha256:3351ad2feb51dcbb936defd47cab00d6f114214f224636503ed08298f30164c9 \
+ --hash=sha256:346f835e368e1051f8ea187ad9b49759cf6249c9ebf2f2a3861e435a568104b8 \
+ --hash=sha256:370b34a7c2f9c53cee494028daa5a7264690e1756a89c3855fd0be5ad298ec30 \
+ --hash=sha256:3a26df749589d898cd3253d2139eb85b867ddffc49286059c8bdb3cb9ce9b545 \
+ --hash=sha256:3bc0e7e2cccf78e562ab416daf68448b6552a5b6450a1ff3e15cabfc19254883 \
+ --hash=sha256:3f0fe2ef7ebc6e9b347585e414c4fefd32270ba8bdf9eb82496f3030cbdca465 \
+ --hash=sha256:3f72f310b10b730cddfb654006ae497e7706c81e6a7642d3da7fd2439df7d88d \
+ --hash=sha256:40bdb468281a5cd525e2e990b97344f0974e0589bd1b395501c25471fcd7edda \
+ --hash=sha256:418e9a676cc7ce00edd2fd044ee063c8639fd8cd6897ffda395a152cdc66ec97 \
+ --hash=sha256:4358dd80b315c82d760b44c6df7857c9c898d04e7b0c14abb0eb3692354e9379 \
+ --hash=sha256:441078bfd3b508597415338af667c3575980364f1286eedde58291558b9c2832 \
+ --hash=sha256:47c2a4c319300c381f194274203f47b12c433e1fd86b90ecdc7fb258c630f93b \
+ --hash=sha256:49c57ae18f138a4b66480b2364fe6a0f2345ada919e93fc729c95c6b17ec73a4 \
+ --hash=sha256:4a0dcb32ac4d1d67a77ae6a2d60ea0921af7e682b3427202d8acb8e86642391c \
+ --hash=sha256:4ed01beb31d5177456ec2c4b66591a0df83dbc72df29f05f40502bfefe47bbe4 \
+ --hash=sha256:50ccbaafee80b4f1c5c55bbe07f80871b9b8fe3499bf7357dde2c23fb1c2ac0e \
+ --hash=sha256:51607d7d44f94a364ef0e3ccf9a92390def0faf6e7572eef082f15c657b5d03a \
+ --hash=sha256:52dcae42f32f7a25c6b90bd479f3d04902700e3214e8fffe1bfe70053eb35ccb \
+ --hash=sha256:5345c7a697327e2fa7c37534bb2968ea84595d8ec7fc8c4a60216ec1be6e65bd \
+ --hash=sha256:542808d88464d538f5d2c6b48b545a7fe15f0d20c7fa703b469d039a08c9fa10 \
+ --hash=sha256:5453ebe42a2c7462fa532fd03cbf64e5c6baf5508b3089736c78444148d3c593 \
+ --hash=sha256:5819d502dacd54114c30bc24efcb76e723b93f8f528be70851056a396a792c46 \
+ --hash=sha256:5aed5fc86d0bfc5f16e871cbb35ec93df61476d7fde4c1c6081015a075ecfbc1 \
+ --hash=sha256:5d9ec8634ab0cbfbcff535ac07555ebdae0282ad66762f0471fad11c16181e33 \
+ --hash=sha256:5fb00c706d0b59c53124f982bd84b7d46866a8ea2a7670aaaa1ab4dbe6001b50 \
+ --hash=sha256:5fd7cf79949174d1018b896638f88aea1ff2a969f87a6199ea23b25b506e26c5 \
+ --hash=sha256:606b2452d78f0f731566d392f8d83cd012c2ffadb2cb2e2903fdd360c1faac8a \
+ --hash=sha256:6128cb653d011f3781554b70ce1f1f388cd516820fbaf8fd03ee245ecaa48349 \
+ --hash=sha256:639935b5b3d9ed3911493504581254b76cb578279302f7f340924ac5bfca4090 \
+ --hash=sha256:64564f4c175c5bb8e744de5816d69ee0b940e472160a5e665f30adc412b694f3 \
+ --hash=sha256:69f12ce4866a3725138e97f22f2c4cb21d3ae18cd422906cd57ed12a9ffd86c5 \
+ --hash=sha256:6a60ee6836599363a24367cf780ad45446b07eba49ec72d19bad761d5414aca7 \
+ --hash=sha256:6b9af8d62c087354abd071e01d9445ea51b31779c8a4a0d5c14ee12caee3d18f \
+ --hash=sha256:6c456882baab2a48a5bfabe458a557af25d0768ff29acbe200461e84c0f697d5 \
+ --hash=sha256:6f281cc2f096530c339f122e0d9866545f5592dd9bffe0fade565c2771130a45 \
+ --hash=sha256:73877eebbdcb8259cf0099665f8c8274d4273b361371405a611fb6bd9f4d64f6 \
+ --hash=sha256:74455bd918e7bc9883e3178a1a8fe796308670f0ee4488c80a0d9514e13807a1 \
+ --hash=sha256:7452ae7e6d80e697d78d3f56d1b4d2a350286eea229afb35f55ab88b934b6acd \
+ --hash=sha256:77294f0f797c97a46ffb3daff1fe097c9d5aa9f96867333978e6791286963e50 \
+ --hash=sha256:78c38850af6b990e8ec1bc87b48f73ed5cc633f4baaa7bbc78f9b2f4449cf081 \
+ --hash=sha256:7ac886e04f253960ae82e38ded8352085c61d78de99412d178a94ecf475b5e5f \
+ --hash=sha256:7c420878726d677da7484f6021dbe7e1f9345a791b155de632c6ce36678fb621 \
+ --hash=sha256:836f1d85a4b5d3689d455aeb1dc6c42acb96aaf8e5282825c00ccf2545ad5630 \
+ --hash=sha256:84aa6eecba967bdac167451501dcaceec548d8b8c4ca7fa41ceda4dbfc279297 \
+ --hash=sha256:866ba6ce85f337fa1677516217b6f10fc25e19acb6e17a501d5822e66396bdd5 \
+ --hash=sha256:86e0e65e205793b337d62d9764700dfd02b5f83b01e26ad345736e7ac0554ebd \
+ --hash=sha256:87a1a4ca93da414f3b6da8131e61aca6d48a4e837fb0b1cbde05ae9d13332317 \
+ --hash=sha256:8d3a1b6fa71a0ae7abc320d9db91b5a96a71eef1dbee0d62a6232b71c97af962 \
+ --hash=sha256:8f9eb97fb6fd4551ff9d5012b4fcee9abeea9c8af6b9e3ebc3c76cc2bd0a43a7 \
+ --hash=sha256:91453ce9476363d777b2ea2e9c6dccecd2073cf35697e048de2e8d47e1f36c7c \
+ --hash=sha256:922f1bb8ef80c42a2fca297ba0b03442c143a9a1f717e83db79f190514888803 \
+ --hash=sha256:937f118fdd7a23654886634f650d6502a2dd12c8a8e2bf14beb2fa5fa95058bf \
+ --hash=sha256:9596aeb8c71192f4fba1ca25cec420da195219398d2df811d5082559efd9561f \
+ --hash=sha256:960ab83a977a44284c4ffab2820ccd6c9b332571a3d622fefa4b29b0a5de72b0 \
+ --hash=sha256:9638d40ec02a5b194a4c98a5b6e36cdfde4e9d6b721ae6167ef8e57d2e69002f \
+ --hash=sha256:97e05f66c5847e6889594508298d78ddb84a0115e9234d598415dc5a06d3a4a7 \
+ --hash=sha256:9ac634753f6d26cba503cea7bb5b350aec7c5366f44fa68c79e9c90be9fd0ebc \
+ --hash=sha256:9e1097d8b57f64878a3f176f4cd6b9a1bbe9fb2d236f1a85a4357722626d8f25 \
+ --hash=sha256:a1b81cc86b69ff530d45e735ed479e14704999f534ad28a39f04be4a8fe2b91f \
+ --hash=sha256:a4f786f1b1ab39a0908db04ebe5b2c7cbc6f1ce07a27d3a12eb980bffd7fea7d \
+ --hash=sha256:a594795ef89bd83297c860ff585f2d25580ce9805eb9cc44c831d311e7f1951a \
+ --hash=sha256:a708b9e6ff1826504940beb6b5c2c9dfd4e3b55c16ab88a4572f5b9dbb64cc56 \
+ --hash=sha256:a90b901ccfd24b028faea19c927ff03f3cfefe82ba0b931fbb8da4ef0664911b \
+ --hash=sha256:ae3d0575721a372c20130681bfaf873225fd9e1c290b7d56b7e0c14f413318f6 \
+ --hash=sha256:afef9eb882cf3b395eef9c85b737a4acd09528975e6a5d9faedf28874ca65f52 \
+ --hash=sha256:aff1b469187f6c789cdf17cd95c9b24e87396dc86953b1cf38b9a05cea873c80 \
+ --hash=sha256:b2ae8993f3863632d31ca8921c8a5dc9ecc5551c7b88895cefb5a26d17643391 \
+ --hash=sha256:b2dd39e12f7467a7422ce50711524759d4d22016714cbae6a7096b954bc2fa32 \
+ --hash=sha256:b4de7741d542a477387299bf9450e8be3e768c352d6b3438254eb02af1e59462 \
+ --hash=sha256:b5b517fbbc5d223fc36041673e7c2a0d3a82be6a5464a5f0599069330b76f97d \
+ --hash=sha256:bdc09de97b1b3f6c3d87fec04d6fe29dd4fefe6b354ad2d822fc369b8aa0942b \
+ --hash=sha256:c249741b10eb714578d765487b767e0e7fcc2ac84a299209a6073566e730dbea \
+ --hash=sha256:c2b093a74b10232c70b5d29814fcee6544bb6f30e2d922d26db9ab4b4cd00c04 \
+ --hash=sha256:c31f6dd5bd60688d51487a3f5e2ae29ed1948926e44d7a2316b193b083f80d5d \
+ --hash=sha256:c36dbbf71480f1fffeaeca901adb31e0c7d59270a239eca63fe26e4647b7aca8 \
+ --hash=sha256:c41e5457f4de5d38a270bc44619873589bbe6fe251225deec583ed20199df0f3 \
+ --hash=sha256:c46e77c2ad614a0399503dc675d72436cbf6332a20d49a0e5bad03058d6cbfad \
+ --hash=sha256:c8d1966e38c220d5940f8cb6303651af261f0bcfce77218a030b1a24ec986e2f \
+ --hash=sha256:c9589cb79d4e401630481755c92b072aa7ba5505ec81dec865ef43932ec037e4 \
+ --hash=sha256:ca19213785f864781848e0216cba07e97f563f60a50bbc7885b54461d8c64873 \
+ --hash=sha256:cbfdde6c5768ffa5d2f14127bbc1d7c3c2d03c0ceaeb0736946197e06275ccc7 \
+ --hash=sha256:cd6a8d43a0c294918e3afb7e4b1d8c04d2e4c3ea9ddf05475fdaf366c7e5b3a6 \
+ --hash=sha256:cfa981cedd54bb8862d9033440a0afac38845db89e7099ceeb4f4d064dffd2f8 \
+ --hash=sha256:cffaab46f9e04856dc3daa6097bfb3d3bea0b1771237e869c57b13f3dcc2c238 \
+ --hash=sha256:d0929302d187bfeca335b7f710f774f1b2ea3f610b2a80e8a1ac2da216cd9766 \
+ --hash=sha256:d44a7d4586f02b630658298c089ff755e74d0677b93c71e09d33dd35bdd4987a \
+ --hash=sha256:d7ddbf234c9adc72189bb552d830e9a0c2c4401b5baf7b003eacd5c552ddcc00 \
+ --hash=sha256:da070933d4bcfcbf58472da12ffa77c9fbc90efb39e21a9b74eb04b5af4b412a \
+ --hash=sha256:dca286c6c1ca5febf13f5f2ae7e8aa7536e49bd07f4232796651a43ff741ceca \
+ --hash=sha256:dcb2172ca8b62f82af9d1f8db80c21c64c5ba3991935caefde88bb378f0afb51 \
+ --hash=sha256:e4e00c1600022b47ef0e9e1f893cb0c2322209ec6c1581a3e3f63ed78330ddf0 \
+ --hash=sha256:e789e19095b818f7126180b4387c0f01700c3ad2378a4e7649b2ddf4bf47ffbc \
+ --hash=sha256:e79babb67b415aa54abb213897ceaa011515a5f3e146a2a97f4e6486b9743af4 \
+ --hash=sha256:e8f75e839ee253af60b03d9957182fdd069dfaebb62b4e999bd74016f4e120bb \
+ --hash=sha256:e9934277abdddf9c733267e4dcc4886de8a3302d28f390237d447e215e8ce47d \
+ --hash=sha256:ef3399e0544b46d31c2a8ff14ae1fb3c3571ae1153bbbc5ddf0d242c67bde624 \
+ --hash=sha256:f169e166774587227255f6ffe71f5b3303ea73cde0e2c6d52e53b9e12c03d787 \
+ --hash=sha256:f1d8b58f00137ccbe8b828a5ede92be3f0115cef75e6bed88d4d0bd1e7a0b1fc \
+ --hash=sha256:f2839c13e486e4a23b19b1d2dc4624565cec6c228bbf803c066be1106515966b \
+ --hash=sha256:f66790e4b2dcfcabc0aa54dd89317ea5671cabf06aa93cbef7cbdd4d2fdb7ee3 \
+ --hash=sha256:f6d8a881b50bb2015e9bdba5edb0331e85d41ff44ab33cde551047480b98d748 \
+ --hash=sha256:f73821d429bfbb04645b80ec491ab05b35078f031f9fa3273fbf9027d1406233 \
+ --hash=sha256:f7cfc683d320402d61205a196ace77f15dcfd16b5771f8b9ffaf406868c98e78 \
+ --hash=sha256:f9c5fc29a5b9d61a8f0a3494172107e0e6cf23d0cb800d6285c6722ba7fc3535 \
+ --hash=sha256:fc92a718bccb8ce5c9eb63fca743c38f3fa4c4e47f58f0c4ada51b2474668184
+regex==2022.10.31 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad \
+ --hash=sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4 \
+ --hash=sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd \
+ --hash=sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc \
+ --hash=sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d \
+ --hash=sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066 \
+ --hash=sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec \
+ --hash=sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9 \
+ --hash=sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e \
+ --hash=sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8 \
+ --hash=sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e \
+ --hash=sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783 \
+ --hash=sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6 \
+ --hash=sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1 \
+ --hash=sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c \
+ --hash=sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4 \
+ --hash=sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1 \
+ --hash=sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1 \
+ --hash=sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7 \
+ --hash=sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8 \
+ --hash=sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe \
+ --hash=sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d \
+ --hash=sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b \
+ --hash=sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8 \
+ --hash=sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c \
+ --hash=sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af \
+ --hash=sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49 \
+ --hash=sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714 \
+ --hash=sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542 \
+ --hash=sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318 \
+ --hash=sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e \
+ --hash=sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5 \
+ --hash=sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc \
+ --hash=sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144 \
+ --hash=sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453 \
+ --hash=sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5 \
+ --hash=sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61 \
+ --hash=sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11 \
+ --hash=sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a \
+ --hash=sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54 \
+ --hash=sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73 \
+ --hash=sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc \
+ --hash=sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347 \
+ --hash=sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c \
+ --hash=sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66 \
+ --hash=sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c \
+ --hash=sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93 \
+ --hash=sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443 \
+ --hash=sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc \
+ --hash=sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1 \
+ --hash=sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892 \
+ --hash=sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8 \
+ --hash=sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001 \
+ --hash=sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa \
+ --hash=sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90 \
+ --hash=sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c \
+ --hash=sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0 \
+ --hash=sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692 \
+ --hash=sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4 \
+ --hash=sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5 \
+ --hash=sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690 \
+ --hash=sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83 \
+ --hash=sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66 \
+ --hash=sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f \
+ --hash=sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f \
+ --hash=sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4 \
+ --hash=sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee \
+ --hash=sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81 \
+ --hash=sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95 \
+ --hash=sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9 \
+ --hash=sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff \
+ --hash=sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e \
+ --hash=sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5 \
+ --hash=sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6 \
+ --hash=sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7 \
+ --hash=sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1 \
+ --hash=sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394 \
+ --hash=sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6 \
+ --hash=sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742 \
+ --hash=sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57 \
+ --hash=sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b \
+ --hash=sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7 \
+ --hash=sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b \
+ --hash=sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244 \
+ --hash=sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af \
+ --hash=sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185 \
+ --hash=sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8 \
+ --hash=sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5
+repath==0.9.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:8292139bac6a0e43fd9d70605d4e8daeb25d46672e484ed31a24c7ce0aef0fb7 \
+ --hash=sha256:ee079d6c91faeb843274d22d8f786094ee01316ecfe293a1eb6546312bb6a318
+requests==2.31.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
+ --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
+rfc3986[idna2008]==1.5.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835 \
+ --hash=sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97
+schema==0.7.5 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197 \
+ --hash=sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c
+setuptools==69.0.3 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05 \
+ --hash=sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78
+six==1.16.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
+ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
+sniffio==1.3.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \
+ --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384
+texttable==1.7.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638 \
+ --hash=sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917
+typing-extensions==4.9.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
+ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
+urllib3==2.2.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20 \
+ --hash=sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224
+watchdog==2.3.1 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190 \
+ --hash=sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43 \
+ --hash=sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d \
+ --hash=sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256 \
+ --hash=sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd \
+ --hash=sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96 \
+ --hash=sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5 \
+ --hash=sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad \
+ --hash=sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42 \
+ --hash=sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225 \
+ --hash=sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb \
+ --hash=sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc \
+ --hash=sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79 \
+ --hash=sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf \
+ --hash=sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44 \
+ --hash=sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc \
+ --hash=sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131 \
+ --hash=sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c \
+ --hash=sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565 \
+ --hash=sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab \
+ --hash=sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed \
+ --hash=sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16 \
+ --hash=sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf \
+ --hash=sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375 \
+ --hash=sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697 \
+ --hash=sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906 \
+ --hash=sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b \
+ --hash=sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f
+websocket-client==1.7.0 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6 \
+ --hash=sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588
+websockets==10.4 ; python_version >= "3.11" and python_version < "3.12" \
+ --hash=sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41 \
+ --hash=sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96 \
+ --hash=sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4 \
+ --hash=sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72 \
+ --hash=sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576 \
+ --hash=sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63 \
+ --hash=sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b \
+ --hash=sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d \
+ --hash=sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032 \
+ --hash=sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393 \
+ --hash=sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50 \
+ --hash=sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631 \
+ --hash=sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f \
+ --hash=sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c \
+ --hash=sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6 \
+ --hash=sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4 \
+ --hash=sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6 \
+ --hash=sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0 \
+ --hash=sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8 \
+ --hash=sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112 \
+ --hash=sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94 \
+ --hash=sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4 \
+ --hash=sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb \
+ --hash=sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331 \
+ --hash=sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c \
+ --hash=sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c \
+ --hash=sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193 \
+ --hash=sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b \
+ --hash=sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b \
+ --hash=sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038 \
+ --hash=sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089 \
+ --hash=sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa \
+ --hash=sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9 \
+ --hash=sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56 \
+ --hash=sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4 \
+ --hash=sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179 \
+ --hash=sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c \
+ --hash=sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882 \
+ --hash=sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28 \
+ --hash=sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1 \
+ --hash=sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a \
+ --hash=sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033 \
+ --hash=sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1 \
+ --hash=sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13 \
+ --hash=sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8 \
+ --hash=sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c \
+ --hash=sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74 \
+ --hash=sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab \
+ --hash=sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3 \
+ --hash=sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588 \
+ --hash=sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485 \
+ --hash=sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342 \
+ --hash=sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48 \
+ --hash=sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf \
+ --hash=sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0 \
+ --hash=sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a \
+ --hash=sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea \
+ --hash=sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf \
+ --hash=sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8 \
+ --hash=sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df \
+ --hash=sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc \
+ --hash=sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f \
+ --hash=sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269 \
+ --hash=sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3 \
+ --hash=sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c \
+ --hash=sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46 \
+ --hash=sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f \
+ --hash=sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106 \
+ --hash=sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f
+win32-setctime==1.1.0 ; python_version >= "3.11" and python_version < "3.12" and sys_platform == "win32" \
+ --hash=sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2 \
+ --hash=sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad
From 092cbf507b500e6770d81dc9b8cb2b7a4271ed0a Mon Sep 17 00:00:00 2001
From: Tobias Sterbak
Date: Wed, 7 Feb 2024 12:46:16 +0000
Subject: [PATCH 8/8] Add english base file
---
locales/en/LC_MESSAGES/base.mo | Bin 0 -> 337 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 locales/en/LC_MESSAGES/base.mo
diff --git a/locales/en/LC_MESSAGES/base.mo b/locales/en/LC_MESSAGES/base.mo
new file mode 100644
index 0000000000000000000000000000000000000000..9ffdffbd7551d47315507732d268bb25a789a9f9
GIT binary patch
literal 337
zcmYL@u};G<5Qd9j%E-dP;DHUUz*bB_HH~Q_>?BIkO0b#M4MxF^90$RJ@OnH8mxcb)
zryK4+-S>NZ^fSU7Ag9O~a)?|YLng=xE^lxSo&V(Cz3WYYWD9HUJL4=RIh#MR1t)7>
zlu4FGg>Ib>AiLUZ;i0cPs2n9xo