dl1wjd2 commited on
Commit
760dae4
·
verified ·
1 Parent(s): b439509

Upload folder using huggingface_hub (part 16)

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +10 -0
  2. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/INSTALLER +1 -0
  3. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/METADATA +110 -0
  4. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/RECORD +889 -0
  5. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/REQUESTED +0 -0
  6. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/WHEEL +4 -0
  7. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/entry_points.txt +4 -0
  8. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/AUTHORS.txt +888 -0
  9. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/LICENSE.txt +20 -0
  10. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  11. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/certifi/LICENSE +20 -0
  12. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt +284 -0
  13. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/distro/LICENSE +202 -0
  14. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md +31 -0
  15. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/msgpack/COPYING +14 -0
  16. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE +3 -0
  17. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  18. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD +23 -0
  19. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE +17 -0
  20. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE +21 -0
  21. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/pygments/LICENSE +25 -0
  22. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  23. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/requests/LICENSE +175 -0
  24. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE +13 -0
  25. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/rich/LICENSE +19 -0
  26. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE +21 -0
  27. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE +21 -0
  28. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/truststore/LICENSE +21 -0
  29. hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt +21 -0
  30. hug/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py +793 -0
  31. hug/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py +119 -0
  32. hug/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py +10 -0
  33. hug/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed +1 -0
  34. hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/LICENSE +21 -0
  35. hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  36. hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/__pycache__/__init__.cpython-312.pyc +0 -0
  37. hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/__pycache__/_writer.cpython-312.pyc +0 -0
  38. hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  39. hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  40. hug/lib/python3.12/site-packages/pip/_vendor/truststore/LICENSE +21 -0
  41. hug/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  42. hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc +0 -0
  43. hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc +0 -0
  44. hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc +0 -0
  45. hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc +0 -0
  46. hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc +0 -0
  47. hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc +0 -0
  48. hug/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py +341 -0
  49. hug/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  50. hug/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
.gitattributes CHANGED
@@ -285,3 +285,13 @@ hug/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe filter=lfs diff=lfs
285
  hug/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
286
  hug/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
287
  hug/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
285
  hug/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
286
  hug/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
287
  hug/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
288
+ hug/lib/python3.12/site-packages/polars/__pycache__/selectors.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
289
+ hug/lib/python3.12/site-packages/polars/dataframe/__pycache__/frame.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
290
+ hug/lib/python3.12/site-packages/polars/expr/__pycache__/datetime.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
291
+ hug/lib/python3.12/site-packages/polars/expr/__pycache__/expr.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
292
+ hug/lib/python3.12/site-packages/polars/expr/__pycache__/string.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
293
+ hug/lib/python3.12/site-packages/polars/lazyframe/__pycache__/frame.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
294
+ hug/lib/python3.12/site-packages/polars/series/__pycache__/series.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
295
+ hug/lib/python3.12/site-packages/psutil/_psutil_linux.abi3.so filter=lfs diff=lfs merge=lfs -text
296
+ hug/lib/python3.12/site-packages/pyparsing/__pycache__/core.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
297
+ hug/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/__pycache__/__init__.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/METADATA ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: pip
3
+ Version: 26.2.2
4
+ Summary: The PyPA recommended tool for installing Python packages.
5
+ Author-email: The pip developers <distutils-sig@python.org>
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/x-rst
8
+ License-Expression: MIT
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Topic :: Software Development :: Build Tools
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3 :: Only
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Programming Language :: Python :: 3.15
21
+ Classifier: Programming Language :: Python :: Implementation :: CPython
22
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
23
+ License-File: AUTHORS.txt
24
+ License-File: LICENSE.txt
25
+ License-File: src/pip/_vendor/cachecontrol/LICENSE.txt
26
+ License-File: src/pip/_vendor/certifi/LICENSE
27
+ License-File: src/pip/_vendor/distlib/LICENSE.txt
28
+ License-File: src/pip/_vendor/distro/LICENSE
29
+ License-File: src/pip/_vendor/idna/LICENSE.md
30
+ License-File: src/pip/_vendor/msgpack/COPYING
31
+ License-File: src/pip/_vendor/packaging/LICENSE
32
+ License-File: src/pip/_vendor/packaging/LICENSE.APACHE
33
+ License-File: src/pip/_vendor/packaging/LICENSE.BSD
34
+ License-File: src/pip/_vendor/pkg_resources/LICENSE
35
+ License-File: src/pip/_vendor/platformdirs/LICENSE
36
+ License-File: src/pip/_vendor/pygments/LICENSE
37
+ License-File: src/pip/_vendor/pyproject_hooks/LICENSE
38
+ License-File: src/pip/_vendor/requests/LICENSE
39
+ License-File: src/pip/_vendor/resolvelib/LICENSE
40
+ License-File: src/pip/_vendor/rich/LICENSE
41
+ License-File: src/pip/_vendor/tomli/LICENSE
42
+ License-File: src/pip/_vendor/tomli_w/LICENSE
43
+ License-File: src/pip/_vendor/truststore/LICENSE
44
+ License-File: src/pip/_vendor/urllib3/LICENSE.txt
45
+ Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
46
+ Project-URL: Documentation, https://pip.pypa.io
47
+ Project-URL: Homepage, https://pip.pypa.io/
48
+ Project-URL: Source, https://github.com/pypa/pip
49
+
50
+ pip - The Python Package Installer
51
+ ==================================
52
+
53
+ .. |pypi-version| image:: https://img.shields.io/pypi/v/pip.svg
54
+ :target: https://pypi.org/project/pip/
55
+ :alt: PyPI
56
+
57
+ .. |python-versions| image:: https://img.shields.io/pypi/pyversions/pip
58
+ :target: https://pypi.org/project/pip
59
+ :alt: PyPI - Python Version
60
+
61
+ .. |docs-badge| image:: https://readthedocs.org/projects/pip/badge/?version=latest
62
+ :target: https://pip.pypa.io/en/latest
63
+ :alt: Documentation
64
+
65
+ |pypi-version| |python-versions| |docs-badge|
66
+
67
+ Pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
68
+
69
+ Please take a look at our documentation for how to install and use pip:
70
+
71
+ * `Installation`_
72
+ * `Usage`_
73
+
74
+ We release updates regularly, with a new version every 3 months. Find more details in our documentation:
75
+
76
+ * `Release notes`_
77
+ * `Release process`_
78
+
79
+ If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
80
+
81
+ * `Issue tracking`_
82
+ * `Discourse channel`_
83
+ * `User IRC`_
84
+
85
+ If you want to get involved, head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
86
+
87
+ * `GitHub page`_
88
+ * `Development documentation`_
89
+ * `Development IRC`_
90
+
91
+ Code of Conduct
92
+ ---------------
93
+
94
+ Everyone interacting in the pip project's codebases, issue trackers, chat
95
+ rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
96
+
97
+ .. _package installer: https://packaging.python.org/guides/tool-recommendations/
98
+ .. _Python Package Index: https://pypi.org
99
+ .. _Installation: https://pip.pypa.io/en/stable/installation/
100
+ .. _Usage: https://pip.pypa.io/en/stable/
101
+ .. _Release notes: https://pip.pypa.io/en/stable/news.html
102
+ .. _Release process: https://pip.pypa.io/en/latest/development/release-process/
103
+ .. _GitHub page: https://github.com/pypa/pip
104
+ .. _Development documentation: https://pip.pypa.io/en/latest/development
105
+ .. _Issue tracking: https://github.com/pypa/pip/issues
106
+ .. _Discourse channel: https://discuss.python.org/c/packaging
107
+ .. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
108
+ .. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
109
+ .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
110
+
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/RECORD ADDED
@@ -0,0 +1,889 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../../bin/pip,sha256=ysZ9OBR2eaNzAuvIShE0iQBEb8DYK2wMkfZmxOEU3eU,244
2
+ ../../../bin/pip3,sha256=ysZ9OBR2eaNzAuvIShE0iQBEb8DYK2wMkfZmxOEU3eU,244
3
+ ../../../bin/pip3.12,sha256=ysZ9OBR2eaNzAuvIShE0iQBEb8DYK2wMkfZmxOEU3eU,244
4
+ pip-26.2.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
5
+ pip-26.2.2.dist-info/METADATA,sha256=_hV6YKlwsoh3D615oSQAH1OKMlsKInDFlHkrakdet5g,4617
6
+ pip-26.2.2.dist-info/RECORD,,
7
+ pip-26.2.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ pip-26.2.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
9
+ pip-26.2.2.dist-info/entry_points.txt,sha256=Vhf8s0IYgX37mtd4vGL73BPcxdKnqeCFPzB5-d30x8o,84
10
+ pip-26.2.2.dist-info/licenses/AUTHORS.txt,sha256=TrH7FwXi3viY6BvLoZw6rIBiDSe6NWnWpt97RinRtcI,12139
11
+ pip-26.2.2.dist-info/licenses/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
12
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt,sha256=hu7uh74qQ_P_H1ZJb0UfaSQ5JvAl_tuwM2ZsMExMFhs,558
13
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/certifi/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989
14
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt,sha256=gI4QyKarjesUn_mz-xn0R6gICUYG1xKpylf-rTVSWZ0,14531
15
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/distro/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
16
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md,sha256=GppPDj1HmickDd1ZqRN6ZqtKD539yMphiMwL_YUYfwQ,1541
17
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/msgpack/COPYING,sha256=SS3tuoXaWHL3jmCRvNH-pHTWYNNay03ulkuKqz8AdCc,614
18
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
19
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
20
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
21
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE,sha256=htoPAa6uRjSKPD1GUZXcHOzN55956HdppkuNoEsqR0E,1023
22
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE,sha256=KeD9YukphQ6G6yjD_czwzv30-pSHkBHP-z0NS-1tTbY,1089
23
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/pygments/LICENSE,sha256=qdZvHVJt8C4p3Oc0NtNOVuhjL0bCdbvf_HBWnogvnxc,1331
24
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE,sha256=GyKwSbUmfW38I6Z79KhNjsBLn9-xpR02DkK0NCyLQVQ,1081
25
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/requests/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
26
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE,sha256=84j9OMrRMRLB3A9mm76A5_hFQe26-3LzAw0sp2QsPJ0,751
27
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/rich/LICENSE,sha256=3u18F6QxgVgZCj6iOcyHmlpQJxzruYrnAl9I--WNyhU,1056
28
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072
29
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072
30
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/truststore/LICENSE,sha256=M757fo-k_Rmxdg4ajtimaL2rhSyRtpLdQUJLy3Jan8o,1086
31
+ pip-26.2.2.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt,sha256=Ew46ZNX91dCWp1JpRjSn2d8oRGnehuVzIQAmgEHj1oY,1093
32
+ pip/__init__.py,sha256=S6PbvnKOClOi1dqd_bH9_j2wUOSXjtZn6h_5tKBoHNg,355
33
+ pip/__main__.py,sha256=rOZRtrXjDBzY24niaxTnd9ZHHWL7B0EawVdLoJ3nI6c,874
34
+ pip/__pip-runner__.py,sha256=720Mt6h07Uce52v80EOF__JYauoLw9b7Pfs_5B91isg,1451
35
+ pip/__pycache__/__init__.cpython-312.pyc,,
36
+ pip/__pycache__/__main__.cpython-312.pyc,,
37
+ pip/__pycache__/__pip-runner__.cpython-312.pyc,,
38
+ pip/_internal/__init__.py,sha256=S7i9Dn9aSZS0MG-2Wrve3dV9TImPzvQn5jjhp9t_uf0,511
39
+ pip/_internal/__pycache__/__init__.cpython-312.pyc,,
40
+ pip/_internal/__pycache__/cache.cpython-312.pyc,,
41
+ pip/_internal/__pycache__/configuration.cpython-312.pyc,,
42
+ pip/_internal/__pycache__/exceptions.cpython-312.pyc,,
43
+ pip/_internal/__pycache__/main.cpython-312.pyc,,
44
+ pip/_internal/__pycache__/pyproject.cpython-312.pyc,,
45
+ pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc,,
46
+ pip/_internal/__pycache__/wheel_builder.cpython-312.pyc,,
47
+ pip/_internal/build_env/__init__.py,sha256=AI5x2Kfv1exG1IbsNHuIV1agqNgstTj_LWpbwWLq8ok,788
48
+ pip/_internal/build_env/__pycache__/__init__.cpython-312.pyc,,
49
+ pip/_internal/build_env/__pycache__/base.cpython-312.pyc,,
50
+ pip/_internal/build_env/__pycache__/installer.cpython-312.pyc,,
51
+ pip/_internal/build_env/__pycache__/noop.cpython-312.pyc,,
52
+ pip/_internal/build_env/__pycache__/venv.cpython-312.pyc,,
53
+ pip/_internal/build_env/__pycache__/virtual.cpython-312.pyc,,
54
+ pip/_internal/build_env/base.py,sha256=7RHW5X-QSVWHeK7_5Uei9Gbq0q1pAXHF9tq7Mj3wtTs,3440
55
+ pip/_internal/build_env/installer.py,sha256=eMUytQCdBiQ9TgkaGeTAzq_IVBqLHyD9OJ_kNTIjjcM,13046
56
+ pip/_internal/build_env/noop.py,sha256=FXk9ZFTTN0s1cecZE6ycN2ZznBh75Ok2I3QXF8HTo6I,1001
57
+ pip/_internal/build_env/venv.py,sha256=PsDl0PpmB9jRNaIawhy6Xk9R8WcYoAogLS2afmZ9AQc,5692
58
+ pip/_internal/build_env/virtual.py,sha256=HsVRzzhgBGyy06DZBoO0PW_3kIEacy9S4TI5H1q72Hk,4858
59
+ pip/_internal/cache.py,sha256=eqMQVfpD8x7GcCO0V0z73mnjPIuSapMFoQ_WRE7iLY8,10457
60
+ pip/_internal/cli/__init__.py,sha256=Iqg_tKA771XuMO1P4t_sDHnSKPzkUb9D0DqunAmw_ko,131
61
+ pip/_internal/cli/__pycache__/__init__.cpython-312.pyc,,
62
+ pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc,,
63
+ pip/_internal/cli/__pycache__/base_command.cpython-312.pyc,,
64
+ pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc,,
65
+ pip/_internal/cli/__pycache__/command_context.cpython-312.pyc,,
66
+ pip/_internal/cli/__pycache__/index_command.cpython-312.pyc,,
67
+ pip/_internal/cli/__pycache__/main.cpython-312.pyc,,
68
+ pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc,,
69
+ pip/_internal/cli/__pycache__/parser.cpython-312.pyc,,
70
+ pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc,,
71
+ pip/_internal/cli/__pycache__/req_command.cpython-312.pyc,,
72
+ pip/_internal/cli/__pycache__/spinners.cpython-312.pyc,,
73
+ pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc,,
74
+ pip/_internal/cli/autocompletion.py,sha256=gFtmiFhHccizyx4JPJnEKik-uftU7kwrUvm72cSFPHI,7353
75
+ pip/_internal/cli/base_command.py,sha256=yF5_mQEIrLG2G0nvymZS0nLhiDg4B0T89W5iX78H558,9431
76
+ pip/_internal/cli/cmdoptions.py,sha256=aBNxaIy4YV4AfjAqrG8RoZFcv7kwWzRAzg5mnZmOGDw,41180
77
+ pip/_internal/cli/command_context.py,sha256=kmu3EWZbfBega1oDamnGJTA_UaejhIQNuMj2CVmMXu0,817
78
+ pip/_internal/cli/index_command.py,sha256=_Qzc9oHnButVvD0wxYcHfe0uJZqRWOtIg5HaQpnSNeM,7504
79
+ pip/_internal/cli/main.py,sha256=O10guzBqF2MykAaZYo6sua097dXqC3nozKodtTOpHDc,3209
80
+ pip/_internal/cli/main_parser.py,sha256=7PhEfZ8AXiWUpTfB_KJMngI2sF8XIXl52alI1LZ_e_M,4368
81
+ pip/_internal/cli/parser.py,sha256=WvRHuI2MdFp187BWrY_D17L02asq9jmCnng81af52SQ,14147
82
+ pip/_internal/cli/progress_bars.py,sha256=13U3AY3DYwdEIwPYLtUn5B4QcpJUApLWCkfJ-u_PqzY,4706
83
+ pip/_internal/cli/req_command.py,sha256=wW-mRcPqPczeqxp9SQ_yh3YfrRAYAlEAZextlLcDbUc,18952
84
+ pip/_internal/cli/spinners.py,sha256=EJzZIZNyUtJljp3-WjcsyIrqxW-HUsfWzhuW84n_Tqw,7362
85
+ pip/_internal/cli/status_codes.py,sha256=9QhNe6hHqsiw5y5wufiNKBOgJjV0HF3I3P2K21nj-OM,136
86
+ pip/_internal/commands/__init__.py,sha256=aNeCbQurGWihfhQq7BqaLXHqWDQ0i3I04OS7kxK6plQ,4026
87
+ pip/_internal/commands/__pycache__/__init__.cpython-312.pyc,,
88
+ pip/_internal/commands/__pycache__/cache.cpython-312.pyc,,
89
+ pip/_internal/commands/__pycache__/check.cpython-312.pyc,,
90
+ pip/_internal/commands/__pycache__/completion.cpython-312.pyc,,
91
+ pip/_internal/commands/__pycache__/configuration.cpython-312.pyc,,
92
+ pip/_internal/commands/__pycache__/debug.cpython-312.pyc,,
93
+ pip/_internal/commands/__pycache__/download.cpython-312.pyc,,
94
+ pip/_internal/commands/__pycache__/freeze.cpython-312.pyc,,
95
+ pip/_internal/commands/__pycache__/hash.cpython-312.pyc,,
96
+ pip/_internal/commands/__pycache__/help.cpython-312.pyc,,
97
+ pip/_internal/commands/__pycache__/index.cpython-312.pyc,,
98
+ pip/_internal/commands/__pycache__/inspect.cpython-312.pyc,,
99
+ pip/_internal/commands/__pycache__/install.cpython-312.pyc,,
100
+ pip/_internal/commands/__pycache__/list.cpython-312.pyc,,
101
+ pip/_internal/commands/__pycache__/lock.cpython-312.pyc,,
102
+ pip/_internal/commands/__pycache__/search.cpython-312.pyc,,
103
+ pip/_internal/commands/__pycache__/show.cpython-312.pyc,,
104
+ pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc,,
105
+ pip/_internal/commands/__pycache__/wheel.cpython-312.pyc,,
106
+ pip/_internal/commands/cache.py,sha256=YLZrLWNvChl0pImBkoSZGGD3fb2MfdYGpYF4J0aQs6w,9251
107
+ pip/_internal/commands/check.py,sha256=hVFBQezQ3zj4EydoWbFQj_afPUppMt7r9JPAlY22U6Y,2244
108
+ pip/_internal/commands/completion.py,sha256=LjvRIZ6QUiDXJL3IOMFeD-_J97HfjMGgEk0j2tWGu1U,4565
109
+ pip/_internal/commands/configuration.py,sha256=5M6KM30G3i6oMHAsVUSWP4E93cSSJQoJ6evURC754E8,10132
110
+ pip/_internal/commands/debug.py,sha256=tCWUOEyz2HdlLGTvzNqSZIAJQkQYCy58zBTdfIWyzSo,6556
111
+ pip/_internal/commands/download.py,sha256=cuXEj9PmoZ4kCsxm_BaZ_OkmIsV_gluLiOVSuOO2MS0,5404
112
+ pip/_internal/commands/freeze.py,sha256=Lg8EOokxnRZrwdLWJgLpBWxNUt7-HrkWlEC05e-vBww,3100
113
+ pip/_internal/commands/hash.py,sha256=GO9pRN3wXC2kQaovK57TaLYBMc3IltOH92O6QEw6YE0,1679
114
+ pip/_internal/commands/help.py,sha256=Bz3LcjNQXkz4Cu__pL4CZ86o4-HNLZj1NZWdlJhjuu0,1108
115
+ pip/_internal/commands/index.py,sha256=ny_hGzXuZHzjsq4CIJh_6YfZGVJm7G7LqQQdKTibJ_Q,5608
116
+ pip/_internal/commands/inspect.py,sha256=iiAM-JuL_Z1-QP34cgAloZPSr50Mc7wAvuFDRzHQrQk,3185
117
+ pip/_internal/commands/install.py,sha256=DREULA-TGbCKhqBBLkrbDKztyQ557QbDe6ZJUYuh2yk,33761
118
+ pip/_internal/commands/list.py,sha256=W-FyxXTrHJhqRl4ZoqFp68_5GAwC9GYuY6fhFTJdHzU,13908
119
+ pip/_internal/commands/lock.py,sha256=VhpNRWItLdqywSOIqXg3vuIyf59cozh09-Z6Z9cMiLM,5987
120
+ pip/_internal/commands/search.py,sha256=zbMsX_YASj6kXA6XIBgTDv0bGK51xG-CV3IynZJcE-c,5782
121
+ pip/_internal/commands/show.py,sha256=91_XljhCHWyCNfoFBa4XdacbumQgoNbhkcHHk_gcW9Y,8247
122
+ pip/_internal/commands/uninstall.py,sha256=CsOihqvb6ZA6O67L70oXeoLHeOfNzMM88H9g-9aocgw,3868
123
+ pip/_internal/commands/wheel.py,sha256=5m3NvVKatqLDOVoC_4WOFiDDrvQRjB52jkbvpbZApug,6187
124
+ pip/_internal/configuration.py,sha256=0eEdh1xTlOHhoCrTtwHYM5DEj7BbTmhIaCaNNj3srBM,14562
125
+ pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858
126
+ pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc,,
127
+ pip/_internal/distributions/__pycache__/base.cpython-312.pyc,,
128
+ pip/_internal/distributions/__pycache__/installed.cpython-312.pyc,,
129
+ pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc,,
130
+ pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc,,
131
+ pip/_internal/distributions/base.py,sha256=BjYazg2EhbEgrO1W_JD6jEZIDVlUpA_WZkqU-NvCBkQ,1907
132
+ pip/_internal/distributions/installed.py,sha256=QPDhCqc-GTGiWZAAOFaVKMETg1m_kYuf6RBO9ZZlDqY,994
133
+ pip/_internal/distributions/sdist.py,sha256=hof85VbuXa_NydvFZj6zOtnxuPY15tsuCJVirLuNT-U,7783
134
+ pip/_internal/distributions/wheel.py,sha256=qOMVYzKT3tJsO0QundLjADcFiW_RODui4K51XRqMru8,1429
135
+ pip/_internal/exceptions.py,sha256=Zdu17pVbD1eI_yjg52Zd0ygAWDy8LtXS1Atfvn1pPts,38302
136
+ pip/_internal/index/__init__.py,sha256=tzwMH_fhQeubwMqHdSivasg1cRgTSbNg2CiMVnzMmyU,29
137
+ pip/_internal/index/__pycache__/__init__.cpython-312.pyc,,
138
+ pip/_internal/index/__pycache__/collector.cpython-312.pyc,,
139
+ pip/_internal/index/__pycache__/package_finder.cpython-312.pyc,,
140
+ pip/_internal/index/__pycache__/sources.cpython-312.pyc,,
141
+ pip/_internal/index/collector.py,sha256=bu-NBVToIeyYEbcv0_gtInAxsCK3E0yI6Je6yxAwE5k,16578
142
+ pip/_internal/index/package_finder.py,sha256=RoWK5rPkOcmOdiWEXhnk9aaFDgaj4QEE70FeQokqZf4,43149
143
+ pip/_internal/index/sources.py,sha256=fqqVli93Lr-HNk-wFD67yyfZzS6WeDkSZGv1RFw63QE,8621
144
+ pip/_internal/locations/__init__.py,sha256=iP9yVZn_4iPuNcaUNh2A_vJLcvUZ-8y4zvKLDVEqaM0,14022
145
+ pip/_internal/locations/__pycache__/__init__.cpython-312.pyc,,
146
+ pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc,,
147
+ pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc,,
148
+ pip/_internal/locations/__pycache__/base.cpython-312.pyc,,
149
+ pip/_internal/locations/_distutils.py,sha256=jpFj4V00rD9IR3vA9TqrGkwcdNVFc58LsChZavge9JY,5975
150
+ pip/_internal/locations/_sysconfig.py,sha256=HoZYQ1sVQD3IRpQCp4TpdTQLNrDFFzI9zRjXrTYnJWY,7788
151
+ pip/_internal/locations/base.py,sha256=5mVcXh9jnSepEO25aG2U-qZWguzeoOPIbT0mRiBDDME,2548
152
+ pip/_internal/main.py,sha256=1cHqjsfFCrMFf3B5twzocxTJUdHMLoXUpy5lJoFqUi8,338
153
+ pip/_internal/metadata/__init__.py,sha256=vp-JAxiWg_-l5F8AT0Jcey72uUnh8CDwwol9-KktHZ8,5824
154
+ pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc,,
155
+ pip/_internal/metadata/__pycache__/_json.cpython-312.pyc,,
156
+ pip/_internal/metadata/__pycache__/base.cpython-312.pyc,,
157
+ pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc,,
158
+ pip/_internal/metadata/_json.py,sha256=hNvnMHOXLAyNlzirWhPL9Nx2CvCqa1iRma6Osq1YfV8,2711
159
+ pip/_internal/metadata/base.py,sha256=_o9lMyHmia4Ea9fhceyB9rp3jUUU8k7FmlhXB7N9_tM,25642
160
+ pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135
161
+ pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc,,
162
+ pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc,,
163
+ pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc,,
164
+ pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc,,
165
+ pip/_internal/metadata/importlib/_compat.py,sha256=sneVh4_6WxQZK4ljdl3ylVuP-q0ttSqbgl9mWt0HnOg,2804
166
+ pip/_internal/metadata/importlib/_dists.py,sha256=akX5xiLB_3dvbeb2gHL8i7wORi01_Cnty0HnKFQAF0Y,8717
167
+ pip/_internal/metadata/importlib/_envs.py,sha256=ulCRDEXYeinwS5AXL-Quj7C4Erk20kHhIwBmE2P3BYA,5590
168
+ pip/_internal/metadata/pkg_resources.py,sha256=NO76ZrfR2-LKJTyaXrmQoGhmJMArALvacrlZHViSDT8,10544
169
+ pip/_internal/models/__init__.py,sha256=AjmCEBxX_MH9f_jVjIGNCFJKYCYeSEe18yyvNx4uRKQ,62
170
+ pip/_internal/models/__pycache__/__init__.cpython-312.pyc,,
171
+ pip/_internal/models/__pycache__/candidate.cpython-312.pyc,,
172
+ pip/_internal/models/__pycache__/direct_url.cpython-312.pyc,,
173
+ pip/_internal/models/__pycache__/format_control.cpython-312.pyc,,
174
+ pip/_internal/models/__pycache__/index.cpython-312.pyc,,
175
+ pip/_internal/models/__pycache__/installation_report.cpython-312.pyc,,
176
+ pip/_internal/models/__pycache__/link.cpython-312.pyc,,
177
+ pip/_internal/models/__pycache__/release_control.cpython-312.pyc,,
178
+ pip/_internal/models/__pycache__/scheme.cpython-312.pyc,,
179
+ pip/_internal/models/__pycache__/search_scope.cpython-312.pyc,,
180
+ pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc,,
181
+ pip/_internal/models/__pycache__/target_python.cpython-312.pyc,,
182
+ pip/_internal/models/__pycache__/wheel.cpython-312.pyc,,
183
+ pip/_internal/models/candidate.py,sha256=MvANZJiHkw6Y4T-oYSM8710G6yYB4_DwofoD7BAmrnM,824
184
+ pip/_internal/models/direct_url.py,sha256=9RS3TQAXknwLd8JOOZWlbBV6WZFs9qn-YAYk0VQ8R_Q,944
185
+ pip/_internal/models/format_control.py,sha256=PwemYG1L27BM0f1KP61rm24wShENFyxqlD1TWu34alc,2471
186
+ pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030
187
+ pip/_internal/models/installation_report.py,sha256=U4MlXWFB-8ev_yheuMO9T2m_y5b4C-hOzVaoHVobl38,2846
188
+ pip/_internal/models/link.py,sha256=SSXtFO3YAreUYY2R0PqtKXbAe1vV9Bqt5r_qPN218zE,23474
189
+ pip/_internal/models/release_control.py,sha256=31Jh-ZHsTIBZLe-7uPNoYLiRSWXAjEI1jGNxwqLKd4A,3365
190
+ pip/_internal/models/scheme.py,sha256=G-O9KElabcXqbPwfE_66lzX5fGahh3Gu6DAkz_9ZhJw,558
191
+ pip/_internal/models/search_scope.py,sha256=_i-Gj_w_FwZAvTs7WhjslBDD70J-8hmIdjXByI8uEZQ,4461
192
+ pip/_internal/models/selection_prefs.py,sha256=0teekwSVxW5MOk0WPG5Novw5q_XJjxijcd75kZO6E9g,1503
193
+ pip/_internal/models/target_python.py,sha256=I0eFS-eia3kwhrOvgsphFZtNAB2IwXZ9Sr9fp6IjBP4,4243
194
+ pip/_internal/models/wheel.py,sha256=1SdfDvN7ALTsbyZ9EOsNy1GPirP1n6EjHyzPrZyLSh8,2920
195
+ pip/_internal/network/__init__.py,sha256=FMy06P__y6jMjUc8z3ZcQdKF-pmZ2zM14_vBeHPGhUI,49
196
+ pip/_internal/network/__pycache__/__init__.cpython-312.pyc,,
197
+ pip/_internal/network/__pycache__/auth.cpython-312.pyc,,
198
+ pip/_internal/network/__pycache__/cache.cpython-312.pyc,,
199
+ pip/_internal/network/__pycache__/download.cpython-312.pyc,,
200
+ pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc,,
201
+ pip/_internal/network/__pycache__/session.cpython-312.pyc,,
202
+ pip/_internal/network/__pycache__/utils.cpython-312.pyc,,
203
+ pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc,,
204
+ pip/_internal/network/auth.py,sha256=TBpwe7zcaPuBdBldjAOZhf20lmkacpIgGA-AqLcr8eU,21545
205
+ pip/_internal/network/cache.py,sha256=6DlMXJ7pb35M1vgtTK0-L_kiHJFxf7t9zrfeJ9vqO34,4862
206
+ pip/_internal/network/download.py,sha256=SVrmKao567lfs8RaCdyuOitzIRCZp9Rf3RcDj_o8vkg,14618
207
+ pip/_internal/network/lazy_wheel.py,sha256=y9gVksdJCSjnLfYzs_m3DYUAtl3hc_k-xFPDBd9DgOs,7646
208
+ pip/_internal/network/session.py,sha256=2KqMv5Hu_PFRYRkDBhSjIbqbsBp0lXv4tqoLKnM2K6o,19924
209
+ pip/_internal/network/utils.py,sha256=OTA1vwFtu2Ee1zWrqLysBpRQGTjvXxCJJUTEqy7hNcA,8128
210
+ pip/_internal/network/xmlrpc.py,sha256=_-Rnk3vOff8uF9hAGmT6SLALflY1gMBcbGwS12fb_Y4,1830
211
+ pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
212
+ pip/_internal/operations/__pycache__/__init__.cpython-312.pyc,,
213
+ pip/_internal/operations/__pycache__/check.cpython-312.pyc,,
214
+ pip/_internal/operations/__pycache__/freeze.cpython-312.pyc,,
215
+ pip/_internal/operations/__pycache__/prepare.cpython-312.pyc,,
216
+ pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
217
+ pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc,,
218
+ pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc,,
219
+ pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc,,
220
+ pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc,,
221
+ pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc,,
222
+ pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc,,
223
+ pip/_internal/operations/build/build_tracker.py,sha256=W3b5cmkMWPaE6QIwfzsTayJo7-OlxFHWDxfPuax1KcE,4771
224
+ pip/_internal/operations/build/metadata.py,sha256=INHaeiRfOiLYCXApfDNRo9Cw2xI4VwTc0KItvfdfOjk,1421
225
+ pip/_internal/operations/build/metadata_editable.py,sha256=oWudMsnjy4loO_Jy7g4N9nxsnaEX_iDlVRgCy7pu1rs,1509
226
+ pip/_internal/operations/build/wheel.py,sha256=3bP-nNiJ4S8JvMaBnyessXQUBhxTqt1GBx6DQ1iPJDY,1136
227
+ pip/_internal/operations/build/wheel_editable.py,sha256=q3kfElclM6FutVbFwE87JOTpVWt5ixDf3_UkHAIVfz4,1478
228
+ pip/_internal/operations/check.py,sha256=k7mTjLb5yZbidYw8Nt9vu7_u1L1ekLOzUECeN4qcNsA,5891
229
+ pip/_internal/operations/freeze.py,sha256=PDdY-y_ZtZZJLAKcaWPIGRKAGW7DXR48f0aMRU0j7BA,9854
230
+ pip/_internal/operations/install/__init__.py,sha256=ak-UETcQPKlFZaWoYKWu5QVXbpFBvg0sXc3i0O4vSYY,50
231
+ pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc,,
232
+ pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc,,
233
+ pip/_internal/operations/install/wheel.py,sha256=qhFwJSShLm4quY8zIss_t-bff0YV49HTNAKfu4fSpic,29078
234
+ pip/_internal/operations/prepare.py,sha256=zLkVMSDu9cUR0KnDm3bZ3QvIeaErhJKrr109UyDMlKQ,35030
235
+ pip/_internal/pyproject.py,sha256=J-sTWqC-XfsKQgz9m1bypMWZPHItsSHzIN_NWeIRmhM,4555
236
+ pip/_internal/req/__init__.py,sha256=x3uB7ZW-l_MOPm8ldF8Gi0dh5C8W23dB_wOH2NmWpFc,3140
237
+ pip/_internal/req/__pycache__/__init__.cpython-312.pyc,,
238
+ pip/_internal/req/__pycache__/constructors.cpython-312.pyc,,
239
+ pip/_internal/req/__pycache__/pep723.cpython-312.pyc,,
240
+ pip/_internal/req/__pycache__/req_dependency_group.cpython-312.pyc,,
241
+ pip/_internal/req/__pycache__/req_file.cpython-312.pyc,,
242
+ pip/_internal/req/__pycache__/req_install.cpython-312.pyc,,
243
+ pip/_internal/req/__pycache__/req_set.cpython-312.pyc,,
244
+ pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc,,
245
+ pip/_internal/req/constructors.py,sha256=fwILg3OiIK_f13RUGX5zQyz4YasUMp7MC6u9uPvoGzw,22276
246
+ pip/_internal/req/pep723.py,sha256=JsG1p3CaVcW8cjclD2kDj7d9qtVrNQaevY_UnKh00tk,1242
247
+ pip/_internal/req/req_dependency_group.py,sha256=PrWKtlwI8xbWnWEKjXs9RkrpQx2_h02ABefYT0ZdeQg,3145
248
+ pip/_internal/req/req_file.py,sha256=dmGBSxZ9dj1eOq2NXv94bor0u1n8P4-AvmJL-vYzIsE,20644
249
+ pip/_internal/req/req_install.py,sha256=r289__WNVaTxpRtLFUz3FpNvdGv8yYa87G-QkP5DsJc,32173
250
+ pip/_internal/req/req_set.py,sha256=awkqIXnYA4Prmsj0Qb3zhqdbYUmXd-1o0P-KZ3mvRQs,2828
251
+ pip/_internal/req/req_uninstall.py,sha256=t5HSYuLoLxnF7jrcIBDjTEP-sjjr8O4fZouEqOkVM_c,24276
252
+ pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
253
+ pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc,,
254
+ pip/_internal/resolution/__pycache__/base.cpython-312.pyc,,
255
+ pip/_internal/resolution/base.py,sha256=J9Fq3kFOjFj9gBShYQtldEFPrRGSWtsp-rO9rIc4W4g,573
256
+ pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
257
+ pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc,,
258
+ pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc,,
259
+ pip/_internal/resolution/legacy/resolver.py,sha256=2CVLIZLm_nXkfJTt5RKtIbIxvCkn9Gavf4Yp9c1IjDU,24110
260
+ pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
261
+ pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc,,
262
+ pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc,,
263
+ pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc,,
264
+ pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc,,
265
+ pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc,,
266
+ pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc,,
267
+ pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc,,
268
+ pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc,,
269
+ pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc,,
270
+ pip/_internal/resolution/resolvelib/base.py,sha256=fo7ojoQtgjmQH5ca3VyKJAO3p5sHnihMDw79Z8_31-U,5900
271
+ pip/_internal/resolution/resolvelib/candidates.py,sha256=SEkpEH6T6zl7Ve7Dw9oIS6tnREj-1U_q4U-2xEH0ISc,20848
272
+ pip/_internal/resolution/resolvelib/factory.py,sha256=rqwnD4GWEdVgG7nGP6OGj493yiGW6jZr0cW_msMOK_U,36162
273
+ pip/_internal/resolution/resolvelib/found_candidates.py,sha256=F55YtXekKUbVwphlXska01LkdTGVgx1qONlLK7BX-HM,6005
274
+ pip/_internal/resolution/resolvelib/provider.py,sha256=Nkx4A16MOAxjCj9jFm8wmlMk5cbWh1YK2-UYWTKEJCw,12310
275
+ pip/_internal/resolution/resolvelib/reporter.py,sha256=tEC7MF8IqGU4Ww9t61YVfNFKtoaQpb6-AwLZptJz1VE,3918
276
+ pip/_internal/resolution/resolvelib/requirements.py,sha256=Izl9n8nc188lA1BSPS8QxfudfDQPHgngw-ij6hXt0nQ,8239
277
+ pip/_internal/resolution/resolvelib/resolver.py,sha256=wM3CcRTYPdjnQ1ai3YP6htFmkE32o1xx2RgjU-ykAjc,13849
278
+ pip/_internal/self_outdated_check.py,sha256=9XxOXPqsZlKceTP2tZS7I7rXjodnqd3GrIQ8U0_L8BM,8097
279
+ pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
280
+ pip/_internal/utils/__pycache__/__init__.cpython-312.pyc,,
281
+ pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc,,
282
+ pip/_internal/utils/__pycache__/_log.cpython-312.pyc,,
283
+ pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc,,
284
+ pip/_internal/utils/__pycache__/compat.cpython-312.pyc,,
285
+ pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc,,
286
+ pip/_internal/utils/__pycache__/datetime.cpython-312.pyc,,
287
+ pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc,,
288
+ pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc,,
289
+ pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc,,
290
+ pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc,,
291
+ pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc,,
292
+ pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc,,
293
+ pip/_internal/utils/__pycache__/glibc.cpython-312.pyc,,
294
+ pip/_internal/utils/__pycache__/hashes.cpython-312.pyc,,
295
+ pip/_internal/utils/__pycache__/logging.cpython-312.pyc,,
296
+ pip/_internal/utils/__pycache__/misc.cpython-312.pyc,,
297
+ pip/_internal/utils/__pycache__/packaging.cpython-312.pyc,,
298
+ pip/_internal/utils/__pycache__/pylock.cpython-312.pyc,,
299
+ pip/_internal/utils/__pycache__/retry.cpython-312.pyc,,
300
+ pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc,,
301
+ pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc,,
302
+ pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc,,
303
+ pip/_internal/utils/__pycache__/urls.cpython-312.pyc,,
304
+ pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc,,
305
+ pip/_internal/utils/__pycache__/wheel.cpython-312.pyc,,
306
+ pip/_internal/utils/_jaraco_text.py,sha256=M15uUPIh5NpP1tdUGBxRau6q1ZAEtI8-XyLEETscFfE,3350
307
+ pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015
308
+ pip/_internal/utils/appdirs.py,sha256=LrzDPZMKVh0rubtCx9vu3XlZbLCSug6VSj4Qsvt66BA,1681
309
+ pip/_internal/utils/compat.py,sha256=i2JUZXGrqP-ZoD8t4gwckBA3KYNUWCluvRDXScts5fE,2601
310
+ pip/_internal/utils/compatibility_tags.py,sha256=DiNSLqpuruXUamGQwOJ2WZByDGLTGaXi9O-Xf8fOi34,6630
311
+ pip/_internal/utils/datetime.py,sha256=kuJOf1mW8G5tRFN6jWardddS-9qSaR53lK1jmx3NTZY,868
312
+ pip/_internal/utils/deprecation.py,sha256=IQFumZa-XWJ3UoPnX4duwbf79CTzOZD_Vk1PkivAu4g,4537
313
+ pip/_internal/utils/direct_url_helpers.py,sha256=WCCPJnmoPHz7kiYePrEcVAen2lDpCT9WQVImoHHWCO8,3363
314
+ pip/_internal/utils/egg_link.py,sha256=YWfsrbmfcrfWgqQYy6OuIjsyb9IfL1q_2v4zsms1WjI,2459
315
+ pip/_internal/utils/entrypoints.py,sha256=uPjAyShKObdotjQjJUzprQ6r3xQvDIZwUYfHHqZ7Dok,3324
316
+ pip/_internal/utils/filesystem.py,sha256=gig73bOOS1NnDB94EDDvdDnHjQoeRz_TlfQPiCV7Me0,6812
317
+ pip/_internal/utils/filetypes.py,sha256=sEMa38qaqjvx1Zid3OCAUja31BOBU-USuSMPBvU3yjo,689
318
+ pip/_internal/utils/glibc.py,sha256=sEh8RJJLYSdRvTqAO4THVPPA-YSDVLD4SI9So-bxX1U,3726
319
+ pip/_internal/utils/hashes.py,sha256=38-bCOJSHippQ7r9RttrMHxb2mv3EARt1Gw8kFmW73g,5040
320
+ pip/_internal/utils/logging.py,sha256=hGTjBuIjNZxydV6vs4woxAbhkHI8L-9uCO14OCvPlA8,13919
321
+ pip/_internal/utils/misc.py,sha256=28LWQFvFWmrpJqMcV0soif1xnl3_gb25B3gG_iU5zhM,25408
322
+ pip/_internal/utils/packaging.py,sha256=s5tpUmFumwV0H9JSTzryrIY4JwQM8paGt7Sm7eNwt2Y,1601
323
+ pip/_internal/utils/pylock.py,sha256=XQTZ1ggh7yfpHfRdbvjSAe1peOtg2Z2xFrUeZ7wl4Ts,10290
324
+ pip/_internal/utils/retry.py,sha256=oOK3VGgKRKxSkXDPARf73cnQS3hDtnE9-feAg4AlNZE,1488
325
+ pip/_internal/utils/subprocess.py,sha256=nqNz2p3G4QANCCBcaJkqIQvQUYA50TwjZnoYjiyPxs8,9001
326
+ pip/_internal/utils/temp_dir.py,sha256=TDiL9BzEp2eHalQLH0rhyM3m2xuydEg9c6t1h4bT5l8,9303
327
+ pip/_internal/utils/unpacking.py,sha256=5i9Sn__SNElhoCXnLt2SvQaQ-SnTzcUaDH1_JI1THUw,14789
328
+ pip/_internal/utils/urls.py,sha256=JQWrRAoXHBpPsY9Aij61bsZjMQLCcuyrUO1R6W_BwIo,1647
329
+ pip/_internal/utils/virtualenv.py,sha256=9od4LsceDynUSsLTEXXgtumlUQ8VvKp86b2xzK0Yu3g,2272
330
+ pip/_internal/utils/wheel.py,sha256=YdRuj6MicG-Q9Mg03FbUv1WTLam6Lc7AgijY4voVyis,4468
331
+ pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596
332
+ pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc,,
333
+ pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc,,
334
+ pip/_internal/vcs/__pycache__/git.cpython-312.pyc,,
335
+ pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc,,
336
+ pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc,,
337
+ pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc,,
338
+ pip/_internal/vcs/bazaar.py,sha256=3W1eHjkYx2vc6boeb2NBh4I_rlGAXM-vrzfNhLm1Rxg,3734
339
+ pip/_internal/vcs/git.py,sha256=L52rqJN--Kq0kjAR8_9Si8RJEcNlULJdk6Vipg8ZlfA,19273
340
+ pip/_internal/vcs/mercurial.py,sha256=w1ZJWLKqNP1onEjkfjlwBVnMqPZNSIER8ayjQcnTq4w,5575
341
+ pip/_internal/vcs/subversion.py,sha256=uUgdPvxmvEB8Qwtjr0Hc0XgFjbiNi5cbvI4vARLOJXo,11787
342
+ pip/_internal/vcs/versioncontrol.py,sha256=JsUgTG53DkJPy5mXVBH7uqeFQyaL69707ibts5uCBYA,22579
343
+ pip/_internal/wheel_builder.py,sha256=kdPvAcxfknA8B_4g6hPDjB7C4uzL_cV5Vde2Oj2Ipzk,9146
344
+ pip/_vendor/README.rst,sha256=t7IinjaiuwUh812XmVApQHJb8pTw33U8A9URqy6GlF4,9222
345
+ pip/_vendor/__init__.py,sha256=WzusPTGWIMeQQWSVJ0h2rafGkVTa9WKJ2HT-2-EoZrU,4907
346
+ pip/_vendor/__pycache__/__init__.cpython-312.pyc,,
347
+ pip/_vendor/bom.cdx.json,sha256=e-l2ABunD-azhTCvEwY76pbhvYlMJxxOV5CMc3B575M,5325
348
+ pip/_vendor/cachecontrol/LICENSE.txt,sha256=hu7uh74qQ_P_H1ZJb0UfaSQ5JvAl_tuwM2ZsMExMFhs,558
349
+ pip/_vendor/cachecontrol/__init__.py,sha256=GxwRkm_TQBtPZpfpVK9r6S9dAy2DVnVgDVHJKTiPZ1k,820
350
+ pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc,,
351
+ pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc,,
352
+ pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc,,
353
+ pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc,,
354
+ pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc,,
355
+ pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc,,
356
+ pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc,,
357
+ pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc,,
358
+ pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc,,
359
+ pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737
360
+ pip/_vendor/cachecontrol/adapter.py,sha256=W-HW-l01gyCsnxkOyCbqx7sxrWYoBbKrDsKkVVQN6NE,6586
361
+ pip/_vendor/cachecontrol/cache.py,sha256=OXwv7Fn2AwnKNiahJHnjtvaKLndvVLv_-zO-ltlV9qI,1953
362
+ pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303
363
+ pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc,,
364
+ pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc,,
365
+ pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc,,
366
+ pip/_vendor/cachecontrol/caches/file_cache.py,sha256=d8upFmy_zwaCmlbWEVBlLXFddt8Zw8c5SFpxeOZsdfw,4117
367
+ pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386
368
+ pip/_vendor/cachecontrol/controller.py,sha256=xBauC-vUSu5GsJsxD4-W-JaKqqbBz0MN6Zv8PA2N8hI,19102
369
+ pip/_vendor/cachecontrol/filewrapper.py,sha256=DhxC_rSk-beKdbsYhfvBUDovQHX9r3gHH_jP9-q_mKk,4354
370
+ pip/_vendor/cachecontrol/heuristics.py,sha256=gqMXU8w0gQuEQiSdu3Yg-0vd9kW7nrWKbLca75rheGE,4881
371
+ pip/_vendor/cachecontrol/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
372
+ pip/_vendor/cachecontrol/serialize.py,sha256=HQd2IllQ05HzPkVLMXTF2uX5mjEQjDBkxCqUJUODpZk,5163
373
+ pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417
374
+ pip/_vendor/certifi/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989
375
+ pip/_vendor/certifi/__init__.py,sha256=-Mz8ECNZmMft00Dy8wW189ca7ZeK6oKgKvMNeHe-6QI,94
376
+ pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255
377
+ pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc,,
378
+ pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc,,
379
+ pip/_vendor/certifi/__pycache__/core.cpython-312.pyc,,
380
+ pip/_vendor/certifi/cacert.pem,sha256=UPefmNrBkrINv3PzXFbwsMVXqyZ_9RmdERfMEYC3B4U,238856
381
+ pip/_vendor/certifi/core.py,sha256=gu_ECVI1m3Rq0ytpsNE61hgQGcKaOAt9Rs9G8KsTCOI,3442
382
+ pip/_vendor/certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
383
+ pip/_vendor/certifi/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
384
+ pip/_vendor/certifi/tests/__pycache__/__init__.cpython-312.pyc,,
385
+ pip/_vendor/certifi/tests/__pycache__/test_certify.cpython-312.pyc,,
386
+ pip/_vendor/certifi/tests/test_certify.py,sha256=TGSVk2vx_aS0er2_3HYheaN4V-1nZWTVwgzMJJKVjF8,484
387
+ pip/_vendor/distlib/LICENSE.txt,sha256=gI4QyKarjesUn_mz-xn0R6gICUYG1xKpylf-rTVSWZ0,14531
388
+ pip/_vendor/distlib/__init__.py,sha256=tmYThB1xmgfRjRtyy8YP0i0ymrF2n6eVswcwK6OYbcc,625
389
+ pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc,,
390
+ pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc,,
391
+ pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc,,
392
+ pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc,,
393
+ pip/_vendor/distlib/__pycache__/util.cpython-312.pyc,,
394
+ pip/_vendor/distlib/compat.py,sha256=HTzhOY98c_fyMVE7xtVuZZ-AVkN4-RGes-hWmvuwquk,40605
395
+ pip/_vendor/distlib/resources.py,sha256=wZt_Ako8TY-L6ZIAmP42J7MNX0XTEF6gkM0Om5F7UPY,11350
396
+ pip/_vendor/distlib/scripts.py,sha256=rVm4A-YfGQDpsORwOy7AwepyRTayuy6rc-MnaCMBAcM,18835
397
+ pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792
398
+ pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784
399
+ pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032
400
+ pip/_vendor/distlib/util.py,sha256=n2QDXvB0XtwrtehygnwdLgLkLia58sZjzgZPKyD6rAE,68167
401
+ pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648
402
+ pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448
403
+ pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888
404
+ pip/_vendor/distro/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
405
+ pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981
406
+ pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64
407
+ pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc,,
408
+ pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc,,
409
+ pip/_vendor/distro/__pycache__/distro.cpython-312.pyc,,
410
+ pip/_vendor/distro/distro.py,sha256=XqbefacAhDT4zr_trnbA15eY8vdK4GTghgmvUGrEM_4,49430
411
+ pip/_vendor/distro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
412
+ pip/_vendor/idna/LICENSE.md,sha256=GppPDj1HmickDd1ZqRN6ZqtKD539yMphiMwL_YUYfwQ,1541
413
+ pip/_vendor/idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868
414
+ pip/_vendor/idna/__main__.py,sha256=4JMK66Wj4uLZTKbF-sT3LAxOsr6buig77PmOkJCRRxw,83
415
+ pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc,,
416
+ pip/_vendor/idna/__pycache__/__main__.cpython-312.pyc,,
417
+ pip/_vendor/idna/__pycache__/cli.cpython-312.pyc,,
418
+ pip/_vendor/idna/__pycache__/codec.cpython-312.pyc,,
419
+ pip/_vendor/idna/__pycache__/compat.cpython-312.pyc,,
420
+ pip/_vendor/idna/__pycache__/core.cpython-312.pyc,,
421
+ pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc,,
422
+ pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc,,
423
+ pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc,,
424
+ pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc,,
425
+ pip/_vendor/idna/cli.py,sha256=swqJLMNc8Uzs60KziNpbWnHuqlG3WRQwJSbo4n8xDAo,4139
426
+ pip/_vendor/idna/codec.py,sha256=JRbo-f7pEkLdWeiH89Z72UR4VBYhvKDFrQBeNX6sRDE,5040
427
+ pip/_vendor/idna/compat.py,sha256=AepA39ceRHxkfHP41-FvKW5Ki-f4PfUZ90RUMlCNdmo,1353
428
+ pip/_vendor/idna/core.py,sha256=SfOr1xO3PoE0RDYx7bMciAnjiyjJPbPw_93AB5IUYOw,24685
429
+ pip/_vendor/idna/idnadata.py,sha256=Af-mo8WBmkhAK6TyXKOQH88OX0mQNDKtdL7UWtQpppk,44862
430
+ pip/_vendor/idna/intranges.py,sha256=g49scLSkqJtAhLmOODa7hVHriSjmb60tiTsEoocJdBI,1851
431
+ pip/_vendor/idna/package_data.py,sha256=TeI94EqAFAFaXfBJwsOPUMLn2969uirPa-DaeaceAyU,21
432
+ pip/_vendor/idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
433
+ pip/_vendor/idna/uts46data.py,sha256=jujNz5QqWMcJf-XYLv4X1jBvb5FlI0t6-e1mILsgbPk,234325
434
+ pip/_vendor/msgpack/COPYING,sha256=SS3tuoXaWHL3jmCRvNH-pHTWYNNay03ulkuKqz8AdCc,614
435
+ pip/_vendor/msgpack/__init__.py,sha256=RA8gcqK17YpkxBnNwXJVa1oa2LygWDgfF1nA1NPw3mo,1109
436
+ pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc,,
437
+ pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc,,
438
+ pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc,,
439
+ pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc,,
440
+ pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081
441
+ pip/_vendor/msgpack/ext.py,sha256=kteJv03n9tYzd5oo3xYopVTo4vRaAxonBQQJhXohZZo,5726
442
+ pip/_vendor/msgpack/fallback.py,sha256=0g1Pzp0vtmBEmJ5w9F3s_-JMVURP8RS4G1cc5TRaAsI,32390
443
+ pip/_vendor/packaging/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
444
+ pip/_vendor/packaging/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
445
+ pip/_vendor/packaging/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
446
+ pip/_vendor/packaging/__init__.py,sha256=QhMEdPu2XogrJzV3S0KWS6t7l0I9k8EeDRJl4fnw87s,494
447
+ pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc,,
448
+ pip/_vendor/packaging/__pycache__/_elffile.cpython-312.pyc,,
449
+ pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc,,
450
+ pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc,,
451
+ pip/_vendor/packaging/__pycache__/_parser.cpython-312.pyc,,
452
+ pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc,,
453
+ pip/_vendor/packaging/__pycache__/_tokenizer.cpython-312.pyc,,
454
+ pip/_vendor/packaging/__pycache__/dependency_groups.cpython-312.pyc,,
455
+ pip/_vendor/packaging/__pycache__/direct_url.cpython-312.pyc,,
456
+ pip/_vendor/packaging/__pycache__/errors.cpython-312.pyc,,
457
+ pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc,,
458
+ pip/_vendor/packaging/__pycache__/metadata.cpython-312.pyc,,
459
+ pip/_vendor/packaging/__pycache__/pylock.cpython-312.pyc,,
460
+ pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc,,
461
+ pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc,,
462
+ pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc,,
463
+ pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc,,
464
+ pip/_vendor/packaging/__pycache__/version.cpython-312.pyc,,
465
+ pip/_vendor/packaging/_elffile.py,sha256=-sKkptYqzYw2-x3QByJa5mB4rfPWu1pxkZHRx1WAFCY,3211
466
+ pip/_vendor/packaging/_manylinux.py,sha256=Hf6nB0cOrayEs96-p3oIXAgGnFquv20DO5l-o2_Xnv0,9559
467
+ pip/_vendor/packaging/_musllinux.py,sha256=Z6swjH3MA7XS3qXnmMN7QPhqP3fnoYI0eQ18e9-HgAE,2707
468
+ pip/_vendor/packaging/_parser.py,sha256=Kf2nsDw4c54X82pY8ba4F02Bve6OygGMAjL-Begqcew,11698
469
+ pip/_vendor/packaging/_structures.py,sha256=60jRbF78p8z5MKnNd6cAprgOadCJHV0DlmUmRBqFZcs,1109
470
+ pip/_vendor/packaging/_tokenizer.py,sha256=tFU2Wr-ZZJdAbkXLEJo7qUQDJaIkfft9DqaifiEND7A,5391
471
+ pip/_vendor/packaging/dependency_groups.py,sha256=XZIAVFK9uHG4RCGprmJn3VInUWMesxha_kytJuMO9eY,10218
472
+ pip/_vendor/packaging/direct_url.py,sha256=eKmbDiPP1sLV4Mj_kCSZqqknrIyVO9Sr7JpF8KCjp4U,10917
473
+ pip/_vendor/packaging/errors.py,sha256=6hfEYXAf8v_IF65-lFadJOMIieBP2xIKtyEXjG1nGIs,2680
474
+ pip/_vendor/packaging/licenses/__init__.py,sha256=_Jx0XRiD_58palsWnyLrLuh59ZpGCPIPXLKdZo9OJvQ,7293
475
+ pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-312.pyc,,
476
+ pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-312.pyc,,
477
+ pip/_vendor/packaging/licenses/_spdx.py,sha256=WW7DXiyg68up_YND_wpRYlr1SHhiV4FfJLQffghhMxQ,51122
478
+ pip/_vendor/packaging/markers.py,sha256=QixBVcb9D2HjwEYiuhpNkbqk9znPRbU8zNX0kR1RIrU,17067
479
+ pip/_vendor/packaging/metadata.py,sha256=crAh0E3GVGVqPlu6EdRFsaG-Y6UYznTUqjuGKRGPv6c,38770
480
+ pip/_vendor/packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
481
+ pip/_vendor/packaging/pylock.py,sha256=G_1gncTmDbRLY1jo4VDI9Uw-b5IErh_Q9V_BbVJTmD8,33890
482
+ pip/_vendor/packaging/requirements.py,sha256=Q-BdEHVW5K785GBXt7RcP4UEsdIKWoWFqlrHjR4WV50,4395
483
+ pip/_vendor/packaging/specifiers.py,sha256=3XBcSslm-YQEEEO_zrv4F6dR5wRxs4ErJvJ0vjNBfGM,71550
484
+ pip/_vendor/packaging/tags.py,sha256=ANYHZxYQVp9BlOQYOHU5ArDNVIpTFl4KlbocYVBWnFs,34236
485
+ pip/_vendor/packaging/utils.py,sha256=M7-JMKic2sP1YtV_8aW7eVGB-x3ADuKCiSrsVeCd2Uo,9848
486
+ pip/_vendor/packaging/version.py,sha256=Mcu7Tf6Y1i0gQ4FXv4t0g8cbL5joAEshjgIpz_2vISI,38393
487
+ pip/_vendor/pkg_resources/LICENSE,sha256=htoPAa6uRjSKPD1GUZXcHOzN55956HdppkuNoEsqR0E,1023
488
+ pip/_vendor/pkg_resources/__init__.py,sha256=vbTJ0_ruUgGxQjlEqsruFmiNPVyh2t9q-zyTDT053xI,124451
489
+ pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc,,
490
+ pip/_vendor/platformdirs/LICENSE,sha256=KeD9YukphQ6G6yjD_czwzv30-pSHkBHP-z0NS-1tTbY,1089
491
+ pip/_vendor/platformdirs/__init__.py,sha256=gBmL_J_KdPgKiwM3dHCo-y-8CbS06QCa1XIhJ9bIgew,32389
492
+ pip/_vendor/platformdirs/__main__.py,sha256=DQ1o1E1l0Ghuitj4uQJKAPwkcKbGzkzO0sbhzd9RbUc,1773
493
+ pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc,,
494
+ pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc,,
495
+ pip/_vendor/platformdirs/__pycache__/_xdg.cpython-312.pyc,,
496
+ pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc,,
497
+ pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc,,
498
+ pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc,,
499
+ pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc,,
500
+ pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc,,
501
+ pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc,,
502
+ pip/_vendor/platformdirs/_xdg.py,sha256=5w6S07vVabEROhaUB_X7i0hmLNbdYtC9aEvPbsEIS8M,7894
503
+ pip/_vendor/platformdirs/android.py,sha256=BBj3wfw-dfuVxsCsKsvFByKVspRDgfv8gwIzhpE1JRQ,11566
504
+ pip/_vendor/platformdirs/api.py,sha256=EaIsFgXGu8cDTb41WM3hse_SrIoOUht8_TCo5XdOOSM,14887
505
+ pip/_vendor/platformdirs/macos.py,sha256=PWudeDZAY9UuwLP_5rN3exSRFtYdY542hDhjah4dSWA,9538
506
+ pip/_vendor/platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
507
+ pip/_vendor/platformdirs/unix.py,sha256=X7Cip1xOHFOnSVveqKWzU1P7jn4zuDGpRgmVxJnk4vk,13317
508
+ pip/_vendor/platformdirs/version.py,sha256=dJvdm7L_7wobEcxrNoJtH7CtmYcG_VR5yNmtBshJ-xs,522
509
+ pip/_vendor/platformdirs/windows.py,sha256=YOdSGNhdpxm_ydZq7uG74i9mX2_WWbcMSA4fobXwL0M,15798
510
+ pip/_vendor/pygments/LICENSE,sha256=qdZvHVJt8C4p3Oc0NtNOVuhjL0bCdbvf_HBWnogvnxc,1331
511
+ pip/_vendor/pygments/__init__.py,sha256=Xnd_7fJUqU_6D0bxXW0qS9M_OE9G6VW8YNPbGLWoKwQ,2986
512
+ pip/_vendor/pygments/__main__.py,sha256=IqAQ_836Kv2CTx8r6Ie6duRQuYSPl85sbYomEwIsY14,356
513
+ pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc,,
514
+ pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc,,
515
+ pip/_vendor/pygments/__pycache__/console.cpython-312.pyc,,
516
+ pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc,,
517
+ pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc,,
518
+ pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc,,
519
+ pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc,,
520
+ pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc,,
521
+ pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc,,
522
+ pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc,,
523
+ pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc,,
524
+ pip/_vendor/pygments/__pycache__/style.cpython-312.pyc,,
525
+ pip/_vendor/pygments/__pycache__/token.cpython-312.pyc,,
526
+ pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc,,
527
+ pip/_vendor/pygments/__pycache__/util.cpython-312.pyc,,
528
+ pip/_vendor/pygments/console.py,sha256=C189JAwhC1Qh0AKgshzb1wVDzFqBnv1VZ45kTEDIO30,1721
529
+ pip/_vendor/pygments/filter.py,sha256=1dnbkq2AdC3AkHt3DaXwnOkTBLChl1kR6naSLwnr_tc,1913
530
+ pip/_vendor/pygments/filters/__init__.py,sha256=Prd6xUK_7kw0rQv_OXPY3871RzwtWKGp_g7SddYHBXg,40397
531
+ pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc,,
532
+ pip/_vendor/pygments/formatter.py,sha256=EuAXPX6c3XQkCt3lD0VhSPSZByG7YQk8HrCwxlf-CZQ,4393
533
+ pip/_vendor/pygments/formatters/__init__.py,sha256=EYLDCIgBHL_DkuhNRQZlHpS2_UE5-MfsGL1hMcOa95w,5388
534
+ pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc,,
535
+ pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc,,
536
+ pip/_vendor/pygments/formatters/_mapping.py,sha256=1Cw37FuQlNacnxRKmtlPX4nyLoX9_ttko5ZwscNUZZ4,4176
537
+ pip/_vendor/pygments/lexer.py,sha256=wSXDzt2fNZJSrlfdIfnKVlheRpFkszkPmgwBJevbBNo,35394
538
+ pip/_vendor/pygments/lexers/__init__.py,sha256=s8I_tVlotrM8cFTGlnjw45UY5sj5jhDwdQzOOjhzgNg,12118
539
+ pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc,,
540
+ pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc,,
541
+ pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc,,
542
+ pip/_vendor/pygments/lexers/_mapping.py,sha256=wGAYjOBprDVZA01eocwcLJ6L8biM9rP2jxwr1bQJ96M,77934
543
+ pip/_vendor/pygments/lexers/python.py,sha256=TqyfQOPhCYPx35apQL65CAj9k-4BxuzLq8MDfdm2jvE,54250
544
+ pip/_vendor/pygments/modeline.py,sha256=me8g5rySidvPtMBOrDy2O1sMqZd02lBHMY5KDZefUws,1008
545
+ pip/_vendor/pygments/plugin.py,sha256=P6zIw-vkSQ0k1WKHrzbBTjpwlCZPbR-6Qe_dO9Bjdu0,1928
546
+ pip/_vendor/pygments/regexopt.py,sha256=d2hTvazlow5zzZIOCVnfeEG2CY0GrY_igH1kCSSf7ow,3308
547
+ pip/_vendor/pygments/scanner.py,sha256=DtoLi1pOKpNu-6jiakJpSQLUi_ep29SQQhv7oAwYWME,3095
548
+ pip/_vendor/pygments/sphinxext.py,sha256=RflpnfXB4rZLYyZ-OQ_igntVOlB8jG42xFYgEVIyHf8,7984
549
+ pip/_vendor/pygments/style.py,sha256=wJSXOXjehGYxI6e3DGaUtONeWuhmTfswfkysrL9Was0,6423
550
+ pip/_vendor/pygments/styles/__init__.py,sha256=kYdCGK8gZ1V8wfFQETOzpPmZTJ1nMB0b1iNlU8dHQ9E,2045
551
+ pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc,,
552
+ pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-312.pyc,,
553
+ pip/_vendor/pygments/styles/_mapping.py,sha256=6lovFUE29tz6EsV3XYY4hgozJ7q1JL7cfO3UOlgnS8w,3312
554
+ pip/_vendor/pygments/token.py,sha256=DVil5T2ltHkTgQTUYy1dMtgyigjavCs1ypE4Qf2CrGo,6229
555
+ pip/_vendor/pygments/unistring.py,sha256=Z4w4HfOVUhueCURRkfhAqQ2b-69UzkhY4xuHevYEy5g,63211
556
+ pip/_vendor/pygments/util.py,sha256=zk935tJSpwSA9zxNmV1TuhcEP0MfboXiRZSGQnLPEqk,10046
557
+ pip/_vendor/pyproject_hooks/LICENSE,sha256=GyKwSbUmfW38I6Z79KhNjsBLn9-xpR02DkK0NCyLQVQ,1081
558
+ pip/_vendor/pyproject_hooks/__init__.py,sha256=cPB_a9LXz5xvsRbX1o2qyAdjLatZJdQ_Lc5McNX-X7Y,691
559
+ pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc,,
560
+ pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc,,
561
+ pip/_vendor/pyproject_hooks/_impl.py,sha256=jY-raxnmyRyB57ruAitrJRUzEexuAhGTpgMygqx67Z4,14936
562
+ pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=MJNPpfIxcO-FghxpBbxkG1rFiQf6HOUbV4U5mq0HFns,557
563
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc,,
564
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc,,
565
+ pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=qcXMhmx__MIJq10gGHW3mA4Tl8dy8YzHMccwnNoKlw0,12216
566
+ pip/_vendor/pyproject_hooks/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
567
+ pip/_vendor/requests/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
568
+ pip/_vendor/requests/__init__.py,sha256=nC2attFwdoYN-oE6-vQW4ciuvIu7J2P_TU1qQ2DcueE,5873
569
+ pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc,,
570
+ pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc,,
571
+ pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc,,
572
+ pip/_vendor/requests/__pycache__/_types.cpython-312.pyc,,
573
+ pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc,,
574
+ pip/_vendor/requests/__pycache__/api.cpython-312.pyc,,
575
+ pip/_vendor/requests/__pycache__/auth.cpython-312.pyc,,
576
+ pip/_vendor/requests/__pycache__/certs.cpython-312.pyc,,
577
+ pip/_vendor/requests/__pycache__/compat.cpython-312.pyc,,
578
+ pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc,,
579
+ pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc,,
580
+ pip/_vendor/requests/__pycache__/help.cpython-312.pyc,,
581
+ pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc,,
582
+ pip/_vendor/requests/__pycache__/models.cpython-312.pyc,,
583
+ pip/_vendor/requests/__pycache__/packages.cpython-312.pyc,,
584
+ pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc,,
585
+ pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc,,
586
+ pip/_vendor/requests/__pycache__/structures.cpython-312.pyc,,
587
+ pip/_vendor/requests/__pycache__/utils.cpython-312.pyc,,
588
+ pip/_vendor/requests/__version__.py,sha256=q7qQZwsDcKPcQNl8LepGo11L7JQf8Q18PPMJjvBKF_k,435
589
+ pip/_vendor/requests/_internal_utils.py,sha256=TH2NEyyYmPx9cV5HPzrHR4XdxKuW0skkD4eDXcbZgf8,1542
590
+ pip/_vendor/requests/_types.py,sha256=0G33n1SiecDMP67FlsRGJG1a0U7f1SnrMo3vvWKkSok,5838
591
+ pip/_vendor/requests/adapters.py,sha256=5kSKhXlJuR_enrOjd3khSGpRBj1WqCh08Qssu0CEZ8M,28208
592
+ pip/_vendor/requests/api.py,sha256=TRVICsBG8Ikgl5joZQR270oo6-b4G0AHWPjvQuxrVQk,7152
593
+ pip/_vendor/requests/auth.py,sha256=6TlRpVLUw8X9m4Sl4dSbA8qrpHI8T_ES2mBTYA7IWmU,12233
594
+ pip/_vendor/requests/certs.py,sha256=eD1G0RoMZ3kA0lydkw7oo0lmcKqvD1hhz6yOlgSKm8w,442
595
+ pip/_vendor/requests/compat.py,sha256=1UheFGomceWe7aysgboYWxcEOH_HpQFmKhIyPiAanog,2035
596
+ pip/_vendor/requests/cookies.py,sha256=ChzmFA8rlCBSLFCA41bmifp5bCUi9VyhCCb17Y4Kcjw,21549
597
+ pip/_vendor/requests/exceptions.py,sha256=Am6y4ncoBptpmesOjRxc5iiuBDYjx3UN1oRVBlNgRyE,4576
598
+ pip/_vendor/requests/help.py,sha256=TVWejkCROwKexHHB44KCZSr-c0o5XakNL7LT1UJlRy8,4114
599
+ pip/_vendor/requests/hooks.py,sha256=69igJHXTGg5HOo9VPpUB_0NkW5VjiFrVKETnpj8Ndqs,1138
600
+ pip/_vendor/requests/models.py,sha256=99d7WF4pR35NHo9jrbGiBocZ3LCMsloVU0DAcQ49x3Q,41848
601
+ pip/_vendor/requests/packages.py,sha256=_ZQDCJTJ8SP3kVWunSqBsRZNPzj2c1WFVqbdr08pz3U,1057
602
+ pip/_vendor/requests/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
603
+ pip/_vendor/requests/sessions.py,sha256=lvuzC7vwalmlJo0TtXiFFJdWqj8xaVtcFeQd17svZ6Y,34248
604
+ pip/_vendor/requests/status_codes.py,sha256=GVD0fInPGAGXh-B9jOSPZtazjmIvfZTXCpAkf-5sBA4,4351
605
+ pip/_vendor/requests/structures.py,sha256=upRgw5B48l5vHSokrJQaxvjS7pcZf6jI0MJi2KHmegI,4134
606
+ pip/_vendor/requests/utils.py,sha256=u7MICyzQTvfUa3asg9nBvcrnhSIPEc6qhJSxiGGwTOk,36334
607
+ pip/_vendor/resolvelib/LICENSE,sha256=84j9OMrRMRLB3A9mm76A5_hFQe26-3LzAw0sp2QsPJ0,751
608
+ pip/_vendor/resolvelib/__init__.py,sha256=yoX-d4STvwGGCiQRE5cJC9Cter69SgVgqClxOCvSP7M,541
609
+ pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc,,
610
+ pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc,,
611
+ pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc,,
612
+ pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc,,
613
+ pip/_vendor/resolvelib/providers.py,sha256=pIWJbIdJJ9GFtNbtwTH0Ia43Vj6hYCEJj2DOLue15FM,8914
614
+ pip/_vendor/resolvelib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
615
+ pip/_vendor/resolvelib/reporters.py,sha256=pNJf4nFxLpAeKxlBUi2GEj0a2Ij1nikY0UabTKXesT4,2037
616
+ pip/_vendor/resolvelib/resolvers/__init__.py,sha256=728M3EvmnPbVXS7ExXlv2kMu6b7wEsoPutEfl-uVk_I,640
617
+ pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-312.pyc,,
618
+ pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-312.pyc,,
619
+ pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-312.pyc,,
620
+ pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-312.pyc,,
621
+ pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-312.pyc,,
622
+ pip/_vendor/resolvelib/resolvers/abstract.py,sha256=CNeQPnpAudY77nmzOkONSmAgRlzIf06X-X9mvRYODms,1543
623
+ pip/_vendor/resolvelib/resolvers/criterion.py,sha256=lcmZGv5sKHOnFD_RzZwvlGSj19MeA-5rCMpdf2Sgw7Y,1768
624
+ pip/_vendor/resolvelib/resolvers/exceptions.py,sha256=ln_jaQtgLlRUSFY627yiHG2gD7AgaXzRKaElFVh7fDQ,1768
625
+ pip/_vendor/resolvelib/resolvers/resolution.py,sha256=3J_zkW-sD3EY-BlNXjyln__njpyH5n0UZJT6uV7CheA,24212
626
+ pip/_vendor/resolvelib/structs.py,sha256=pu-EJiR2IBITr2SQeNPRa0rXhjlStfmO_GEgAhr3004,6420
627
+ pip/_vendor/rich/LICENSE,sha256=3u18F6QxgVgZCj6iOcyHmlpQJxzruYrnAl9I--WNyhU,1056
628
+ pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090
629
+ pip/_vendor/rich/__main__.py,sha256=e_aVC-tDzarWQW9SuZMuCgBr6ODV_iDNV2Wh2xkxOlw,7896
630
+ pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc,,
631
+ pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc,,
632
+ pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc,,
633
+ pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc,,
634
+ pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc,,
635
+ pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc,,
636
+ pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc,,
637
+ pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc,,
638
+ pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc,,
639
+ pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc,,
640
+ pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc,,
641
+ pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc,,
642
+ pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc,,
643
+ pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc,,
644
+ pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc,,
645
+ pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc,,
646
+ pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc,,
647
+ pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc,,
648
+ pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc,,
649
+ pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc,,
650
+ pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc,,
651
+ pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc,,
652
+ pip/_vendor/rich/__pycache__/abc.cpython-312.pyc,,
653
+ pip/_vendor/rich/__pycache__/align.cpython-312.pyc,,
654
+ pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc,,
655
+ pip/_vendor/rich/__pycache__/bar.cpython-312.pyc,,
656
+ pip/_vendor/rich/__pycache__/box.cpython-312.pyc,,
657
+ pip/_vendor/rich/__pycache__/cells.cpython-312.pyc,,
658
+ pip/_vendor/rich/__pycache__/color.cpython-312.pyc,,
659
+ pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc,,
660
+ pip/_vendor/rich/__pycache__/columns.cpython-312.pyc,,
661
+ pip/_vendor/rich/__pycache__/console.cpython-312.pyc,,
662
+ pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc,,
663
+ pip/_vendor/rich/__pycache__/containers.cpython-312.pyc,,
664
+ pip/_vendor/rich/__pycache__/control.cpython-312.pyc,,
665
+ pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc,,
666
+ pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc,,
667
+ pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc,,
668
+ pip/_vendor/rich/__pycache__/errors.cpython-312.pyc,,
669
+ pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc,,
670
+ pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc,,
671
+ pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc,,
672
+ pip/_vendor/rich/__pycache__/json.cpython-312.pyc,,
673
+ pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc,,
674
+ pip/_vendor/rich/__pycache__/layout.cpython-312.pyc,,
675
+ pip/_vendor/rich/__pycache__/live.cpython-312.pyc,,
676
+ pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc,,
677
+ pip/_vendor/rich/__pycache__/logging.cpython-312.pyc,,
678
+ pip/_vendor/rich/__pycache__/markup.cpython-312.pyc,,
679
+ pip/_vendor/rich/__pycache__/measure.cpython-312.pyc,,
680
+ pip/_vendor/rich/__pycache__/padding.cpython-312.pyc,,
681
+ pip/_vendor/rich/__pycache__/pager.cpython-312.pyc,,
682
+ pip/_vendor/rich/__pycache__/palette.cpython-312.pyc,,
683
+ pip/_vendor/rich/__pycache__/panel.cpython-312.pyc,,
684
+ pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc,,
685
+ pip/_vendor/rich/__pycache__/progress.cpython-312.pyc,,
686
+ pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc,,
687
+ pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc,,
688
+ pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc,,
689
+ pip/_vendor/rich/__pycache__/region.cpython-312.pyc,,
690
+ pip/_vendor/rich/__pycache__/repr.cpython-312.pyc,,
691
+ pip/_vendor/rich/__pycache__/rule.cpython-312.pyc,,
692
+ pip/_vendor/rich/__pycache__/scope.cpython-312.pyc,,
693
+ pip/_vendor/rich/__pycache__/screen.cpython-312.pyc,,
694
+ pip/_vendor/rich/__pycache__/segment.cpython-312.pyc,,
695
+ pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc,,
696
+ pip/_vendor/rich/__pycache__/status.cpython-312.pyc,,
697
+ pip/_vendor/rich/__pycache__/style.cpython-312.pyc,,
698
+ pip/_vendor/rich/__pycache__/styled.cpython-312.pyc,,
699
+ pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc,,
700
+ pip/_vendor/rich/__pycache__/table.cpython-312.pyc,,
701
+ pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc,,
702
+ pip/_vendor/rich/__pycache__/text.cpython-312.pyc,,
703
+ pip/_vendor/rich/__pycache__/theme.cpython-312.pyc,,
704
+ pip/_vendor/rich/__pycache__/themes.cpython-312.pyc,,
705
+ pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc,,
706
+ pip/_vendor/rich/__pycache__/tree.cpython-312.pyc,,
707
+ pip/_vendor/rich/_cell_widths.py,sha256=fbmeyetEdHjzE_Vx2l1uK7tnPOhMs2X1lJfO3vsKDpA,10209
708
+ pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235
709
+ pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064
710
+ pip/_vendor/rich/_export_format.py,sha256=RI08pSrm5tBSzPMvnbTqbD9WIalaOoN5d4M1RTmLq1Y,2128
711
+ pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265
712
+ pip/_vendor/rich/_fileno.py,sha256=HWZxP5C2ajMbHryvAQZseflVfQoGzsKOHzKGsLD8ynQ,799
713
+ pip/_vendor/rich/_inspect.py,sha256=ROT0PLC2GMWialWZkqJIjmYq7INRijQQkoSokWTaAiI,9656
714
+ pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225
715
+ pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236
716
+ pip/_vendor/rich/_null_file.py,sha256=ADGKp1yt-k70FMKV6tnqCqecB-rSJzp-WQsD7LPL-kg,1394
717
+ pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063
718
+ pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423
719
+ pip/_vendor/rich/_ratio.py,sha256=IOtl78sQCYZsmHyxhe45krkb68u9xVz7zFsXVJD-b2Y,5325
720
+ pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919
721
+ pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351
722
+ pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417
723
+ pip/_vendor/rich/_win32_console.py,sha256=BSaDRIMwBLITn_m0mTRLPqME5q-quGdSMuYMpYeYJwc,22755
724
+ pip/_vendor/rich/_windows.py,sha256=aBwaD_S56SbgopIvayVmpk0Y28uwY2C5Bab1wl3Bp-I,1925
725
+ pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783
726
+ pip/_vendor/rich/_wrap.py,sha256=FlSsom5EX0LVkA3KWy34yHnCfLtqX-ZIepXKh-70rpc,3404
727
+ pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890
728
+ pip/_vendor/rich/align.py,sha256=dg-7uY0ukMLLlUEsBDRLva22_sQgIJD4BK0dmZHFHug,10324
729
+ pip/_vendor/rich/ansi.py,sha256=Avs1LHbSdcyOvDOdpELZUoULcBiYewY76eNBp6uFBhs,6921
730
+ pip/_vendor/rich/bar.py,sha256=ldbVHOzKJOnflVNuv1xS7g6dLX2E3wMnXkdPbpzJTcs,3263
731
+ pip/_vendor/rich/box.py,sha256=kmavBc_dn73L_g_8vxWSwYJD2uzBXOUFTtJOfpbczcM,10686
732
+ pip/_vendor/rich/cells.py,sha256=KrQkj5-LghCCpJLSNQIyAZjndc4bnEqOEmi5YuZ9UCY,5130
733
+ pip/_vendor/rich/color.py,sha256=3HSULVDj7qQkXUdFWv78JOiSZzfy5y1nkcYhna296V0,18211
734
+ pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054
735
+ pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131
736
+ pip/_vendor/rich/console.py,sha256=t9azZpmRMVU5cphVBZSShNsmBxd2-IAWcTTlhor-E1s,100849
737
+ pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288
738
+ pip/_vendor/rich/containers.py,sha256=c_56TxcedGYqDepHBMTuZdUIijitAQgnox-Qde0Z1qo,5502
739
+ pip/_vendor/rich/control.py,sha256=EUTSUFLQbxY6Zmo_sdM-5Ls323vIHTBfN8TPulqeHUY,6487
740
+ pip/_vendor/rich/default_styles.py,sha256=khQFqqaoDs3bprMqWpHw8nO5UpG2DN6QtuTd6LzZwYc,8257
741
+ pip/_vendor/rich/diagnose.py,sha256=fJl1TItRn19gGwouqTg-8zPUW3YqQBqGltrfPQs1H9w,1025
742
+ pip/_vendor/rich/emoji.py,sha256=Wd4bQubZdSy6-PyrRQNuMHtn2VkljK9uPZPVlu2cmx0,2367
743
+ pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642
744
+ pip/_vendor/rich/file_proxy.py,sha256=Tl9THMDZ-Pk5Wm8sI1gGg_U5DhusmxD-FZ0fUbcU0W0,1683
745
+ pip/_vendor/rich/filesize.py,sha256=_iz9lIpRgvW7MNSeCZnLg-HwzbP4GETg543WqD8SFs0,2484
746
+ pip/_vendor/rich/highlighter.py,sha256=G_sn-8DKjM1sEjLG_oc4ovkWmiUpWvj8bXi0yed2LnY,9586
747
+ pip/_vendor/rich/json.py,sha256=vVEoKdawoJRjAFayPwXkMBPLy7RSTs-f44wSQDR2nJ0,5031
748
+ pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252
749
+ pip/_vendor/rich/layout.py,sha256=ajkSFAtEVv9EFTcFs-w4uZfft7nEXhNzL7ZVdgrT5rI,14004
750
+ pip/_vendor/rich/live.py,sha256=tF3ukAAJZ_N2ZbGclqZ-iwLoIoZ8f0HHUz79jAyJqj8,15180
751
+ pip/_vendor/rich/live_render.py,sha256=It_39YdzrBm8o3LL0kaGorPFg-BfZWAcrBjLjFokbx4,3521
752
+ pip/_vendor/rich/logging.py,sha256=5KaPPSMP9FxcXPBcKM4cGd_zW78PMgf-YbMVnvfSw0o,12468
753
+ pip/_vendor/rich/markup.py,sha256=3euGKP5s41NCQwaSjTnJxus5iZMHjxpIM0W6fCxra38,8451
754
+ pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305
755
+ pip/_vendor/rich/padding.py,sha256=KVEI3tOwo9sgK1YNSuH__M1_jUWmLZwRVV_KmOtVzyM,4908
756
+ pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828
757
+ pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396
758
+ pip/_vendor/rich/panel.py,sha256=9sQl00hPIqH5G2gALQo4NepFwpP0k9wT-s_gOms5pIc,11157
759
+ pip/_vendor/rich/pretty.py,sha256=gy3S72u4FRg2ytoo7N1ZDWDIvB4unbzd5iUGdgm-8fc,36391
760
+ pip/_vendor/rich/progress.py,sha256=CUc2lkU-X59mVdGfjMCBkZeiGPL3uxdONjhNJF2T7wY,60408
761
+ pip/_vendor/rich/progress_bar.py,sha256=mZTPpJUwcfcdgQCTTz3kyY-fc79ddLwtx6Ghhxfo064,8162
762
+ pip/_vendor/rich/prompt.py,sha256=l0RhQU-0UVTV9e08xW1BbIj0Jq2IXyChX4lC0lFNzt4,12447
763
+ pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391
764
+ pip/_vendor/rich/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
765
+ pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166
766
+ pip/_vendor/rich/repr.py,sha256=5MZJZmONgC6kud-QW-_m1okXwL2aR6u6y-pUcUCJz28,4431
767
+ pip/_vendor/rich/rule.py,sha256=0fNaS_aERa3UMRc3T5WMpN_sumtDxfaor2y3of1ftBk,4602
768
+ pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843
769
+ pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591
770
+ pip/_vendor/rich/segment.py,sha256=otnKeKGEV-WRlQVosfJVeFDcDxAKHpvJ_hLzSu5lumM,24743
771
+ pip/_vendor/rich/spinner.py,sha256=onIhpKlljRHppTZasxO8kXgtYyCHUkpSgKglRJ3o51g,4214
772
+ pip/_vendor/rich/status.py,sha256=kkPph3YeAZBo-X-4wPp8gTqZyU466NLwZBA4PZTTewo,4424
773
+ pip/_vendor/rich/style.py,sha256=W9Ccy8Py8lNICtlfcp-ryzMTuQaGxAU3av7-g5fHu0s,26990
774
+ pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258
775
+ pip/_vendor/rich/syntax.py,sha256=eDKIRwl--eZ0Lwo2da2RRtfutXGavrJO61Cl5OkS59U,36371
776
+ pip/_vendor/rich/table.py,sha256=ZmT7V7MMCOYKw7TGY9SZLyYDf6JdM-WVf07FdVuVhTI,40049
777
+ pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370
778
+ pip/_vendor/rich/text.py,sha256=AO7JPCz6-gaN1thVLXMBntEmDPVYFgFNG1oM61_sanU,47552
779
+ pip/_vendor/rich/theme.py,sha256=oNyhXhGagtDlbDye3tVu3esWOWk0vNkuxFw-_unlaK0,3771
780
+ pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102
781
+ pip/_vendor/rich/traceback.py,sha256=c0WmB_L04_UfZbLaoH982_U_s7eosxKMUiAVmDPdRYU,35861
782
+ pip/_vendor/rich/tree.py,sha256=yWnQ6rAvRGJ3qZGqBrxS2SW2TKBTNrP0SdY8QxOFPuw,9451
783
+ pip/_vendor/tomli/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072
784
+ pip/_vendor/tomli/__init__.py,sha256=nrBC18DbXRTCFo7ElG5BDeWpHJzOhokvXk215GM8Z2I,314
785
+ pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc,,
786
+ pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc,,
787
+ pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc,,
788
+ pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc,,
789
+ pip/_vendor/tomli/_parser.py,sha256=pBIjTIa_cQs2HglDJ2lh8OJfptfDa6eg5-7Iej4BjHs,26440
790
+ pip/_vendor/tomli/_re.py,sha256=oSNZ_ilFI6chEuQ01YRSoUydBQr_okF_mSdHTkFmv90,3396
791
+ pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
792
+ pip/_vendor/tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
793
+ pip/_vendor/tomli_w/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072
794
+ pip/_vendor/tomli_w/__init__.py,sha256=0F8yDtXx3Uunhm874KrAcP76srsM98y7WyHQwCulZbo,169
795
+ pip/_vendor/tomli_w/__pycache__/__init__.cpython-312.pyc,,
796
+ pip/_vendor/tomli_w/__pycache__/_writer.cpython-312.pyc,,
797
+ pip/_vendor/tomli_w/_writer.py,sha256=dsifFS2xYf1i76mmRyfz9y125xC7Z_HQ845ZKhJsYXs,6961
798
+ pip/_vendor/tomli_w/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
799
+ pip/_vendor/truststore/LICENSE,sha256=M757fo-k_Rmxdg4ajtimaL2rhSyRtpLdQUJLy3Jan8o,1086
800
+ pip/_vendor/truststore/__init__.py,sha256=Bu7kqkmpunhLsj5xCu8gT_25ktoPXcSnwe8VHk1GmJo,1320
801
+ pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc,,
802
+ pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc,,
803
+ pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc,,
804
+ pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc,,
805
+ pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc,,
806
+ pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc,,
807
+ pip/_vendor/truststore/_api.py,sha256=CYJCV5BTfttZYfqY3movdMBE-8az7uhET_LYbKT2Nn4,11413
808
+ pip/_vendor/truststore/_macos.py,sha256=nZlLkOmszUE0g6ryRwBVGY5COzPyudcsiJtDWarM5LQ,20503
809
+ pip/_vendor/truststore/_openssl.py,sha256=zB-SQvJydks7tQ0yIwrP6GD3fQNSSaPiq7zw4yF5T40,2412
810
+ pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130
811
+ pip/_vendor/truststore/_windows.py,sha256=rAHyKYD8M7t-bXfG8VgOVa3TpfhVhbt4rZQlO45YuP8,17993
812
+ pip/_vendor/truststore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
813
+ pip/_vendor/urllib3/LICENSE.txt,sha256=Ew46ZNX91dCWp1JpRjSn2d8oRGnehuVzIQAmgEHj1oY,1093
814
+ pip/_vendor/urllib3/__init__.py,sha256=JMo1tg1nIV1AeJ2vENC_Txfl0e5h6Gzl9DGVk1rWRbo,6979
815
+ pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc,,
816
+ pip/_vendor/urllib3/__pycache__/_base_connection.cpython-312.pyc,,
817
+ pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc,,
818
+ pip/_vendor/urllib3/__pycache__/_request_methods.cpython-312.pyc,,
819
+ pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc,,
820
+ pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc,,
821
+ pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc,,
822
+ pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc,,
823
+ pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc,,
824
+ pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc,,
825
+ pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc,,
826
+ pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc,,
827
+ pip/_vendor/urllib3/_base_connection.py,sha256=HzcSEHexgDrRUr60jNniB2KQjdw97SedD5luRfHtCXg,5580
828
+ pip/_vendor/urllib3/_collections.py,sha256=aOVm2mKilvuvT1efAGtkA7pi65C1NC3HJfpFxvYBS8A,17522
829
+ pip/_vendor/urllib3/_request_methods.py,sha256=gCeF85SO_UU4WoPwYHIoz_tw-eM_EVOkLFp8OFsC7DA,9931
830
+ pip/_vendor/urllib3/_version.py,sha256=-gMrKhsPiOj0XzUezVFa59d1S6QgQiKgQT5gGgyM8-w,520
831
+ pip/_vendor/urllib3/connection.py,sha256=Zos3qxKDW9-GQ6aVqfBQVRM5soB0IjHxY_xXWpJaFTI,42786
832
+ pip/_vendor/urllib3/connectionpool.py,sha256=sGFnddXYwlx7KC4JCP1gKvdNGLNK-YTCJDdGACGj3Y8,44164
833
+ pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
834
+ pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc,,
835
+ pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc,,
836
+ pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc,,
837
+ pip/_vendor/urllib3/contrib/emscripten/__init__.py,sha256=ZruXaWKVzAEJdqNH3NEh0mrHrw--2VZYb0zX0RonNZA,870
838
+ pip/_vendor/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc,,
839
+ pip/_vendor/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc,,
840
+ pip/_vendor/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc,,
841
+ pip/_vendor/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc,,
842
+ pip/_vendor/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc,,
843
+ pip/_vendor/urllib3/contrib/emscripten/connection.py,sha256=giElsBoUsKVURbZzb8GCrJmqW23Xnvj2aNyQVF42slg,8960
844
+ pip/_vendor/urllib3/contrib/emscripten/emscripten_fetch_worker.js,sha256=z1k3zZ4_hDKd3-tN7wzz8LHjHC2pxN_uu8B3k9D9A3c,3677
845
+ pip/_vendor/urllib3/contrib/emscripten/fetch.py,sha256=5xcd--viFxZd2nBy0aK73dtJ9Tsh1yYZU_SUXwnwibk,23520
846
+ pip/_vendor/urllib3/contrib/emscripten/request.py,sha256=mL28szy1KvE3NJhWor5jNmarp8gwplDU-7gwGZY5g0Q,566
847
+ pip/_vendor/urllib3/contrib/emscripten/response.py,sha256=CDpY0GFoluR3IxECkM2gH5uDfYDM0EL1FWr7B76wtgM,9719
848
+ pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=Pi_qwvdl83tNpuj1k5pCpP_gmxlk4BfFrTlAeg-qZ_U,19760
849
+ pip/_vendor/urllib3/contrib/socks.py,sha256=rSuklfha4-vto-8qSLhSPmf5lmRPIYuqdAxKe9bg2RA,7639
850
+ pip/_vendor/urllib3/exceptions.py,sha256=hQPHoqo4yw46esNSVkciVQXVUgAxWAglsh6MbyQta-Q,9945
851
+ pip/_vendor/urllib3/fields.py,sha256=aGLFAVZpVU-FbJlllve4Ahg0-pH9ZZBQ2Iz7lfpkjkM,10801
852
+ pip/_vendor/urllib3/filepost.py,sha256=U8eNZ-mpKKHhrlbHEEiTxxgK16IejhEa7uz42yqA_dI,2388
853
+ pip/_vendor/urllib3/http2/__init__.py,sha256=xzrASH7R5ANRkPJOot5lGnATOq3KKuyXzI42rcnwmqs,1741
854
+ pip/_vendor/urllib3/http2/__pycache__/__init__.cpython-312.pyc,,
855
+ pip/_vendor/urllib3/http2/__pycache__/connection.cpython-312.pyc,,
856
+ pip/_vendor/urllib3/http2/__pycache__/probe.cpython-312.pyc,,
857
+ pip/_vendor/urllib3/http2/connection.py,sha256=bHMH6fNvatwXPrKqrcn74yA3pUWcqPDppnK1LcKCbP8,12578
858
+ pip/_vendor/urllib3/http2/probe.py,sha256=nnAkqbhAakOiF75rz7W0udZ38Eeh_uD8fjV74N73FEI,3014
859
+ pip/_vendor/urllib3/poolmanager.py,sha256=grIrETG1rgHYBaQau1yN4xxfK8U9CKVRYmwBXW_kdSo,23929
860
+ pip/_vendor/urllib3/py.typed,sha256=UaCuPFa3H8UAakbt-5G8SPacldTOGvJv18pPjUJ5gDY,93
861
+ pip/_vendor/urllib3/response.py,sha256=DzBM-dzl6x_h2EZGc9iw0gbOkQ36bolC7WESH4TurH8,53031
862
+ pip/_vendor/urllib3/util/__init__.py,sha256=-qeS0QceivazvBEKDNFCAI-6ACcdDOE4TMvo7SLNlAQ,1001
863
+ pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc,,
864
+ pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc,,
865
+ pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc,,
866
+ pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc,,
867
+ pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc,,
868
+ pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc,,
869
+ pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc,,
870
+ pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc,,
871
+ pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc,,
872
+ pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc,,
873
+ pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc,,
874
+ pip/_vendor/urllib3/util/__pycache__/util.cpython-312.pyc,,
875
+ pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc,,
876
+ pip/_vendor/urllib3/util/connection.py,sha256=JjO722lzHlzLXPTkr9ZWBdhseXnMVjMSb1DJLVrXSnQ,4444
877
+ pip/_vendor/urllib3/util/proxy.py,sha256=seP8-Q5B6bB0dMtwPj-YcZZQ30vHuLqRu-tI0JZ2fzs,1148
878
+ pip/_vendor/urllib3/util/request.py,sha256=p9Ki9eo1tFBO-jqV_7KmmJ60RKqoY2r4ao0SmaHLyOs,8086
879
+ pip/_vendor/urllib3/util/response.py,sha256=vQE639uoEhj1vpjEdxu5lNIhJCSUZkd7pqllUI0BZOA,3374
880
+ pip/_vendor/urllib3/util/retry.py,sha256=2YnSX-_FecMShD61Mx5s68J0_btUHZrrc_BkFVRS1P4,19577
881
+ pip/_vendor/urllib3/util/ssl_.py,sha256=Oqe3rIhUU3e3GVgZob2hxmR8Q0ZDhrhESPlPP_GLaVQ,17742
882
+ pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ft44KJzTzGMmKff_ZXP91li2V4WhmvEy16PKBcv4vZk,5479
883
+ pip/_vendor/urllib3/util/ssltransport.py,sha256=Ez4O8pR_vT8dan_FvqBYS6dgDfBXEMfVfrzcdUoWfi4,8847
884
+ pip/_vendor/urllib3/util/timeout.py,sha256=vsUJRpO0nfKk-y1OKlgFGY1ONJGPgkaZ7B7kruEpVYw,10363
885
+ pip/_vendor/urllib3/util/url.py,sha256=PEDQMypidude0nAZctLLiFK9epN-LPnSH7KpOLLwqH0,15256
886
+ pip/_vendor/urllib3/util/util.py,sha256=j3lbZK1jPyiwD34T8IgJzdWEZVT-4E-0vYIJi9UjeNA,1146
887
+ pip/_vendor/urllib3/util/wait.py,sha256=_ph8IrUR3sqPqi0OopQgJUlH4wzkGeM5CiyA7XGGtmI,4423
888
+ pip/_vendor/vendor.txt,sha256=K0S0vFt9qdzaOAmdySxSzD3aKnFM0Ym0OcBmhAFBhjA,318
889
+ pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/REQUESTED ADDED
File without changes
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/WHEEL ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: flit 3.12.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/entry_points.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ [console_scripts]
2
+ pip=pip._internal.cli.main:main
3
+ pip3=pip._internal.cli.main:main
4
+
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/AUTHORS.txt ADDED
@@ -0,0 +1,888 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @Switch01
2
+ A_Rog
3
+ Aakanksha Agrawal
4
+ Aarni Koskela
5
+ abdul rawoof
6
+ Abdul Rawoof Khan
7
+ Abhinav Sagar
8
+ ABHYUDAY PRATAP SINGH
9
+ abs51295
10
+ AceGentile
11
+ Adam Chainz
12
+ Adam Tse
13
+ Adam Turner
14
+ Adam Wentz
15
+ admin
16
+ Adolfo Ochagavía
17
+ Adrien Morison
18
+ Agus
19
+ ahayrapetyan
20
+ Ahilya
21
+ AinsworthK
22
+ Akash Srivastava
23
+ Alan Yee
24
+ Albert Tugushev
25
+ Albert-Guan
26
+ albertg
27
+ Alberto Sottile
28
+ Aleks Bunin
29
+ Ales Erjavec
30
+ Alessandro Molina
31
+ Alethea Flowers
32
+ Alex Gaynor
33
+ Alex Grönholm
34
+ Alex Hedges
35
+ Alex Loosley
36
+ Alex Morega
37
+ Alex Stachowiak
38
+ Alexander Regueiro
39
+ Alexander Shtyrov
40
+ Alexandre Conrad
41
+ Alexey Popravka
42
+ Aleš Erjavec
43
+ Alli
44
+ Aman
45
+ Ami Fischman
46
+ Ananya Maiti
47
+ Anatoly Techtonik
48
+ Anders Kaseorg
49
+ Andre Aguiar
50
+ Andrea Corna
51
+ Andreas Lutro
52
+ Andrei Geacar
53
+ Andrew Gaul
54
+ Andrew Shymanel
55
+ Andrey Bienkowski
56
+ Andrey Bulgakov
57
+ Andrés Delfino
58
+ Andy Freeland
59
+ Andy Kluger
60
+ Ani Hayrapetyan
61
+ Aniruddha Basak
62
+ Anish Tambe
63
+ Anrs Hu
64
+ Anthony Sottile
65
+ Antoine Lambert
66
+ Antoine Musso
67
+ Anton Ovchinnikov
68
+ Anton Patrushev
69
+ Anton Zelenov
70
+ Antonio Alvarado Hernandez
71
+ Antony Lee
72
+ Antti Kaihola
73
+ Anubhav Patel
74
+ Anudit Nagar
75
+ Anuj Godase
76
+ AQNOUCH Mohammed
77
+ AraHaan
78
+ Aren Siekmeier
79
+ arena
80
+ arenasys
81
+ Arindam Choudhury
82
+ Armin Ronacher
83
+ Arnon Yaari
84
+ Artem
85
+ Arun Babu Neelicattu
86
+ Ashley Manton
87
+ Ashwin Ramaswami
88
+ atse
89
+ Atsushi Odagiri
90
+ Avinash Karhana
91
+ Avner Cohen
92
+ Awit (Ah-Wit) Ghirmai
93
+ Baptiste Mispelon
94
+ Barney Gale
95
+ barneygale
96
+ Bartek Ogryczak
97
+ Bastian Venthur
98
+ Ben Bodenmiller
99
+ Ben Darnell
100
+ Ben Hoyt
101
+ Ben Mares
102
+ Ben Rosser
103
+ Bence Nagy
104
+ Benjamin Peterson
105
+ Benjamin VanEvery
106
+ Benoit Pierre
107
+ Berker Peksag
108
+ Bernard
109
+ Bernard Tyers
110
+ Bernardo B. Marques
111
+ Bernhard M. Wiedemann
112
+ Bertil Hatt
113
+ Bhavam Vidyarthi
114
+ Blazej Michalik
115
+ Bogdan Opanchuk
116
+ BorisZZZ
117
+ Brad Erickson
118
+ Bradley Ayers
119
+ Bradley Reynolds
120
+ Branch Vincent
121
+ Brandon L. Reiss
122
+ Brandt Bucher
123
+ Brannon Dorsey
124
+ Brett Randall
125
+ Brett Rosen
126
+ Brian Cristante
127
+ Brian Rosner
128
+ briantracy
129
+ BrownTruck
130
+ Bruno Oliveira
131
+ Bruno Renié
132
+ Bruno S
133
+ Bstrdsmkr
134
+ Buck Golemon
135
+ burrows
136
+ Bussonnier Matthias
137
+ bwoodsend
138
+ c22
139
+ Caleb Brown
140
+ Caleb Martinez
141
+ Calvin Smith
142
+ Carl Meyer
143
+ Carlos Liam
144
+ Carol Willing
145
+ Carter Thayer
146
+ Cass
147
+ Chandrasekhar Atina
148
+ Charlie Marsh
149
+ charwick
150
+ Chih-Hsuan Yen
151
+ Chris Brinker
152
+ Chris Hunt
153
+ Chris Jerdonek
154
+ Chris Kuehl
155
+ Chris Markiewicz
156
+ Chris McDonough
157
+ Chris Pawley
158
+ Chris Pryer
159
+ Chris Wolfe
160
+ Christian Clauss
161
+ Christian Heimes
162
+ Christian Oudard
163
+ Christoph Reiter
164
+ Christopher Hunt
165
+ Christopher Snyder
166
+ chrysle
167
+ cjc7373
168
+ Clark Boylan
169
+ Claudio Jolowicz
170
+ Clay McClure
171
+ Cody
172
+ Cody Soyland
173
+ Colin Watson
174
+ Collin Anderson
175
+ Connor Osborn
176
+ Cooper Lees
177
+ Cooper Ry Lees
178
+ Cory Benfield
179
+ Cory Wright
180
+ Craig Kerstiens
181
+ Cristian Sorinel
182
+ Cristina
183
+ Cristina Muñoz
184
+ ctg123
185
+ Curtis Doty
186
+ cytolentino
187
+ Daan De Meyer
188
+ Dale
189
+ Damian
190
+ Damian Quiroga
191
+ Damian Shaw
192
+ Dan Black
193
+ Dan Savilonis
194
+ Dan Sully
195
+ Dane Hillard
196
+ daniel
197
+ Daniel Collins
198
+ Daniel Hahler
199
+ Daniel Hollas
200
+ Daniel Holth
201
+ Daniel Jost
202
+ Daniel Katz
203
+ Daniel Shaulov
204
+ Daniele Esposti
205
+ Daniele Nicolodi
206
+ Daniele Procida
207
+ Daniil Konovalenko
208
+ Danny Hermes
209
+ Danny McClanahan
210
+ Darren Kavanagh
211
+ Dav Clark
212
+ Dave Abrahams
213
+ Dave Jones
214
+ David Aguilar
215
+ David Black
216
+ David Bordeynik
217
+ David Caro
218
+ David D Lowe
219
+ David Evans
220
+ David Hewitt
221
+ David Linke
222
+ David Poggi
223
+ David Poznik
224
+ David Pursehouse
225
+ David Runge
226
+ David Tucker
227
+ David Wales
228
+ Davidovich
229
+ Dayna Blackwell
230
+ ddelange
231
+ Deepak Sharma
232
+ Deepyaman Datta
233
+ Denis Roussel (ACSONE)
234
+ Denise Yu
235
+ dependabot[bot]
236
+ dereksz
237
+ derwolfe
238
+ Desetude
239
+ developer
240
+ Devesh Kumar
241
+ Devesh Kumar Singh
242
+ devsagul
243
+ Dewank Pant
244
+ Diego Caraballo
245
+ Diego Ramirez
246
+ DiegoCaraballo
247
+ Dimitri Merejkowsky
248
+ Dimitri Papadopoulos
249
+ Dimitri Papadopoulos Orfanos
250
+ Dirk Stolle
251
+ dkjsone
252
+ Dmitrii Sutiagin
253
+ Dmitry Gladkov
254
+ Dmitry Volodin
255
+ Domen Kožar
256
+ Dominic Davis-Foster
257
+ Donald Stufft
258
+ Dongweiming
259
+ doron zarhi
260
+ Dos Moonen
261
+ Douglas Thor
262
+ DrFeathers
263
+ Dustin Ingram
264
+ Dustin Rodrigues
265
+ Dwayne Bailey
266
+ Ed Morley
267
+ Edgar Ramírez
268
+ Edgar Ramírez Mondragón
269
+ Ee Durbin
270
+ Efflam Lemaillet
271
+ efflamlemaillet
272
+ Eitan Adler
273
+ ekristina
274
+ elainechan
275
+ Eli Schwartz
276
+ Elisha Hollander
277
+ Ellen Marie Dash
278
+ Emil Burzo
279
+ Emil Styrke
280
+ Emmanuel Arias
281
+ Endoh Takanao
282
+ enoch
283
+ Erdinc Mutlu
284
+ Eric Cousineau
285
+ Eric Gillingham
286
+ Eric Hanchrow
287
+ Eric Hopper
288
+ Erik M. Bray
289
+ Erik Rose
290
+ Erwin Janssen
291
+ Eugene Vereshchagin
292
+ everdimension
293
+ Federico
294
+ Felipe Peter
295
+ Felix Yan
296
+ fiber-space
297
+ Filip Kokosiński
298
+ Filipe Laíns
299
+ Finn Womack
300
+ finnagin
301
+ Flavio Amurrio
302
+ Florian Briand
303
+ Florian Rathgeber
304
+ Francesco
305
+ Francesco Montesano
306
+ Fredrik Orderud
307
+ Fredrik Roubert
308
+ Frost Ming
309
+ Gabriel Curio
310
+ Gabriel de Perthuis
311
+ Garry Polley
312
+ gavin
313
+ gdanielson
314
+ Gene Wood
315
+ Geoffrey Sneddon
316
+ George Margaritis
317
+ George Song
318
+ Georgi Valkov
319
+ Georgy Pchelkin
320
+ Gertjan van Zwieten
321
+ ghost
322
+ Giancarlo Cicellyn Comneno
323
+ Giftlin Rajaiah
324
+ gizmoguy1
325
+ gkdoc
326
+ Godefroid Chapelle
327
+ Gopinath M
328
+ GOTO Hayato
329
+ gousaiyang
330
+ gpiks
331
+ Greg Roodt
332
+ Greg Ward
333
+ Guido Diepen
334
+ Guilherme Espada
335
+ Guillaume Seguin
336
+ gutsytechster
337
+ Guy Rozendorn
338
+ Guy Tuval
339
+ gzpan123
340
+ Hanjun Kim
341
+ Hari Charan
342
+ Harsh Vardhan
343
+ Harsha Sai
344
+ harupy
345
+ Harutaka Kawamura
346
+ Hasan-8326
347
+ hauntsaninja
348
+ Henrich Hartzer
349
+ Henry Schreiner
350
+ Herbert Pfennig
351
+ Holly Stotelmyer
352
+ Honnix
353
+ Hsiaoming Yang
354
+ Hugo
355
+ Hugo Lopes Tavares
356
+ Hugo van Kemenade
357
+ Hugues Bruant
358
+ Hynek Schlawack
359
+ iamsrp-deshaw
360
+ Ian Bicking
361
+ Ian Cordasco
362
+ Ian Lee
363
+ Ian Stapleton Cordasco
364
+ Ian Wienand
365
+ Igor Kuzmitshov
366
+ Igor Sobreira
367
+ Ikko Ashimine
368
+ Ilan Schnell
369
+ Illia Volochii
370
+ Ilya Abdolmanafi
371
+ Ilya Baryshev
372
+ Inada Naoki
373
+ Ionel Cristian Mărieș
374
+ Ionel Maries Cristian
375
+ Itamar Turner-Trauring
376
+ iTrooz
377
+ Ivan Pozdeev
378
+ J. Nick Koston
379
+ Jacob Kim
380
+ Jacob Walls
381
+ Jaime Sanz
382
+ Jake Lishman
383
+ jakirkham
384
+ Jakub Kuczys
385
+ Jakub Stasiak
386
+ Jakub Vysoky
387
+ Jakub Wilk
388
+ James
389
+ James Cleveland
390
+ James Curtin
391
+ James Firth
392
+ James Gerity
393
+ James Polley
394
+ Jan Pokorný
395
+ Jannis Leidel
396
+ Jarek Potiuk
397
+ jarondl
398
+ Jason Curtis
399
+ Jason R. Coombs
400
+ JasonMo
401
+ JasonMo1
402
+ Jay Graves
403
+ Jean Abou Samra
404
+ Jean-Christophe Fillion-Robin
405
+ Jeff Barber
406
+ Jeff Dairiki
407
+ Jeff Widman
408
+ Jelmer Vernooij
409
+ jenix21
410
+ Jeremy Fleischman
411
+ Jeremy Stanley
412
+ Jeremy Zafran
413
+ Jesse Rittner
414
+ Jiashuo Li
415
+ Jim Fisher
416
+ Jim Garrison
417
+ Jinzhe Zeng
418
+ Jiun Bae
419
+ Jivan Amara
420
+ Joa
421
+ Joe Bylund
422
+ Joe Michelini
423
+ Johannes Altmanninger
424
+ John Paton
425
+ John Sirois
426
+ John T. Wodder II
427
+ John-Scott Atlakson
428
+ johnthagen
429
+ Jon Banafato
430
+ Jon Dufresne
431
+ Jon Parise
432
+ Jonas Nockert
433
+ Jonathan Herbert
434
+ Joonatan Partanen
435
+ Joost Molenaar
436
+ Jorge Niedbalski
437
+ Joseph Bylund
438
+ Joseph Long
439
+ Josh Bronson
440
+ Josh Cannon
441
+ Josh Hansen
442
+ Josh Schneier
443
+ Joshua
444
+ JoshuaPerdue
445
+ Jost Migenda
446
+ Juan Luis Cano Rodríguez
447
+ Juanjo Bazán
448
+ Judah Rand
449
+ Julian Berman
450
+ Julian Gethmann
451
+ Julien Demoor
452
+ Julien Stephan
453
+ July Tikhonov
454
+ Jussi Kukkonen
455
+ Justin van Heek
456
+ jwg4
457
+ Jyrki Pulliainen
458
+ Kai Chen
459
+ Kai Mueller
460
+ Kamal Bin Mustafa
461
+ Karolina Surma
462
+ kasium
463
+ kaustav haldar
464
+ Kaz Nishimura
465
+ keanemind
466
+ Keith Maxwell
467
+ Kelsey Hightower
468
+ Kenneth Belitzky
469
+ Kenneth Reitz
470
+ Kevin Burke
471
+ Kevin Carter
472
+ Kevin Frommelt
473
+ Kevin R Patterson
474
+ Kevin Turcios
475
+ Kexuan Sun
476
+ Kit Randel
477
+ Klaas van Schelven
478
+ KOLANICH
479
+ konstin
480
+ kpinc
481
+ Krishan Bhasin
482
+ Krishna Oza
483
+ Kumar McMillan
484
+ Kuntal Majumder
485
+ Kurt McKee
486
+ Kyle Persohn
487
+ lakshmanaram
488
+ Laszlo Kiss-Kollar
489
+ Laurent Bristiel
490
+ Laurent LAPORTE
491
+ Laurie O
492
+ Laurie Opperman
493
+ layday
494
+ Leon Sasson
495
+ Lev Givon
496
+ Lincoln de Sousa
497
+ Lipis
498
+ lorddavidiii
499
+ Loren Carvalho
500
+ Louis Liu
501
+ Lucas Cimon
502
+ Ludovic Gasc
503
+ Luis Carlos
504
+ Luis Medel
505
+ Lukas Geiger
506
+ Lukas Juhrich
507
+ Luke Macken
508
+ Luo Jiebin
509
+ luojiebin
510
+ luz.paz
511
+ László Kiss Kollár
512
+ M00nL1ght
513
+ MajorTanya
514
+ Malcolm Smith
515
+ Marc Abramowitz
516
+ Marc Tamlyn
517
+ Marcus Smith
518
+ Mariatta
519
+ Mark Kohler
520
+ Mark McLoughlin
521
+ Mark Williams
522
+ Markus Hametner
523
+ Martey Dodoo
524
+ Martin Fischer
525
+ Martin Häcker
526
+ Martin Pavlasek
527
+ Masaki
528
+ Masklinn
529
+ Matej Stuchlik
530
+ Mateusz Sokół
531
+ Mathew Jennings
532
+ Mathieu Bridon
533
+ Mathieu Kniewallner
534
+ Matt Bacchi
535
+ Matt Good
536
+ Matt Maker
537
+ Matt Robenolt
538
+ Matt Wozniski
539
+ matthew
540
+ Matthew Einhorn
541
+ Matthew Feickert
542
+ Matthew Gilliard
543
+ Matthew Hughes
544
+ Matthew Iversen
545
+ Matthew Treinish
546
+ Matthew Trumbell
547
+ Matthew Willson
548
+ Matthias Bussonnier
549
+ mattip
550
+ Maurits van Rees
551
+ Max W Chase
552
+ Maxim Kurnikov
553
+ Maxime Rouyrre
554
+ mayeut
555
+ mbaluna
556
+ Md Sujauddin Sekh
557
+ mdebi
558
+ Meet Vasita
559
+ memoselyk
560
+ meowmeowcat
561
+ Michael
562
+ Michael Aquilina
563
+ Michael E. Karpeles
564
+ Michael Klich
565
+ Michael Mintz
566
+ Michael Williamson
567
+ michaelpacer
568
+ Michał Górny
569
+ Mickaël Schoentgen
570
+ Miguel Araujo Perez
571
+ Mihir Singh
572
+ Mike
573
+ Mike Hendricks
574
+ Min RK
575
+ MinRK
576
+ Miro Hrončok
577
+ Mohsen Fooladnezhad
578
+ Monica Baluna
579
+ montefra
580
+ Monty Taylor
581
+ morotti
582
+ mrKazzila
583
+ Muha Ajjan
584
+ MUTHUSRIHEMADHARSHINI S A
585
+ Nadav Wexler
586
+ Nahuel Ambrosini
587
+ Nate Coraor
588
+ Nate Prewitt
589
+ Nathan Houghton
590
+ Nathaniel J. Smith
591
+ Nehal J Wani
592
+ Neil Botelho
593
+ Nguyễn Gia Phong
594
+ Nicholas Serra
595
+ Nick Coghlan
596
+ Nick Stenning
597
+ Nick Timkovich
598
+ Nicolas Bock
599
+ Nicole Harris
600
+ Nikhil Benesch
601
+ Nikhil Ladha
602
+ Nikita Chepanov
603
+ Nikolay Korolev
604
+ Nipunn Koorapati
605
+ Nitesh Sharma
606
+ Niyas Sait
607
+ Noah
608
+ Noah Gorny
609
+ Nok Lam Chan
610
+ Norbert Manthey
611
+ Nothing-991
612
+ Nowell Strite
613
+ NtaleGrey
614
+ nucccc
615
+ nvdv
616
+ OBITORASU
617
+ Ofek Lev
618
+ ofrinevo
619
+ Oleg Burnaev
620
+ Oliver Freund
621
+ Oliver Jeeves
622
+ Oliver Mannion
623
+ Oliver Tonnhofer
624
+ Olivier Girardot
625
+ Olivier Grisel
626
+ Ollie Rutherfurd
627
+ Omar Abdalgwad
628
+ OMOTO Kenji
629
+ Omry Yadan
630
+ onlinejudge95
631
+ Oren Held
632
+ Oscar Benjamin
633
+ oxygen dioxide
634
+ Oz N Tiram
635
+ Pachwenko
636
+ Paresh Joshi
637
+ Patrick Dubroy
638
+ Patrick Jenkins
639
+ Patrick Lawson
640
+ patricktokeeffe
641
+ Patrik Kopkan
642
+ Paul Ganssle
643
+ Paul Kehrer
644
+ Paul Moore
645
+ Paul Nasrat
646
+ Paul Oswald
647
+ Paul van der Linden
648
+ Paulus Schoutsen
649
+ Pavel Safronov
650
+ Pavithra Eswaramoorthy
651
+ Pawel Jasinski
652
+ Paweł Szramowski
653
+ Pekka Klärck
654
+ Peter Gessler
655
+ Peter Lisák
656
+ Peter Shen
657
+ Peter Waller
658
+ Petr Viktorin
659
+ petr-tik
660
+ Phaneendra Chiruvella
661
+ Phil Elson
662
+ Phil Freo
663
+ Phil Pennock
664
+ Phil Whelan
665
+ Philip Jägenstedt
666
+ Philip Molloy
667
+ Philippe Ombredanne
668
+ Pi Delport
669
+ Pierre-Yves Rofes
670
+ Pieter Degroote
671
+ pip
672
+ Prabakaran Kumaresshan
673
+ Prabhjyotsing Surjit Singh Sodhi
674
+ Prabhu Marappan
675
+ Pradyun Gedam
676
+ Prashant Sharma
677
+ Pratik Mallya
678
+ pre-commit-ci[bot]
679
+ Preet Thakkar
680
+ Preston Holmes
681
+ Przemek Wrzos
682
+ Pulkit Goyal
683
+ q0w
684
+ Qiangning Hong
685
+ Qiming Xu
686
+ qraqras
687
+ Quentin Lee
688
+ Quentin Pradet
689
+ R. David Murray
690
+ Rafael Caricio
691
+ RAHUL KUMAR
692
+ rahulkotargasthi
693
+ Ralf Schmitt
694
+ Ran Benita
695
+ Randy Döring
696
+ Razzi Abuissa
697
+ rdb
698
+ Reece Dunham
699
+ Remi Rampin
700
+ Rene Dudfield
701
+ Riccardo Magliocchetti
702
+ Riccardo Schirone
703
+ Richard Jones
704
+ Richard Si
705
+ Ricky Ng-Adam
706
+ Rishi
707
+ rmorotti
708
+ RobberPhex
709
+ Robert Collins
710
+ Robert McGibbon
711
+ Robert Pollak
712
+ Robert T. McGibbon
713
+ robin elisha robinson
714
+ Rodney, Tiara
715
+ Roey Berman
716
+ Rohan Jain
717
+ Roman Bogorodskiy
718
+ Roman Donchenko
719
+ Romuald Brunet
720
+ ronaudinho
721
+ Ronny Pfannschmidt
722
+ Rory McCann
723
+ Ross Brattain
724
+ Roy Wellington Ⅳ
725
+ RoyS
726
+ Ruairidh MacLeod
727
+ Russell Keith-Magee
728
+ Ryan Shepherd
729
+ Ryan Wooden
730
+ ryneeverett
731
+ Ryuma Asai
732
+ S. Guliaev
733
+ Sachi King
734
+ Sai Sridhar Tarra
735
+ Salvatore Rinchiera
736
+ sandeepkiran-js
737
+ Sander Van Balen
738
+ Savio Jomton
739
+ schlamar
740
+ Scott Kitterman
741
+ Sean
742
+ seanj
743
+ Sebastian Höffner
744
+ Sebastian Jordan
745
+ Sebastian Schaetz
746
+ Segev Finer
747
+ SeongSoo Cho
748
+ Sepehr Rasouli
749
+ sepehrrasooli
750
+ Sergey Vasilyev
751
+ Seth Michael Larson
752
+ Seth Woodworth
753
+ Shahar Epstein
754
+ Shantanu
755
+ shenxianpeng
756
+ shireenrao
757
+ Shivam Shrey
758
+ Shivansh-007
759
+ Shixian Sheng
760
+ Shlomi Fish
761
+ Shovan Maity
762
+ Shubham Nagure
763
+ Simeon Visser
764
+ Simon Cross
765
+ Simon Pichugin
766
+ sinoroc
767
+ sinscary
768
+ snook92
769
+ socketubs
770
+ Sorin Sbarnea
771
+ Srinivas Nyayapati
772
+ Srishti Hegde
773
+ Stavros Korokithakis
774
+ Stefan Scherfke
775
+ Stefano Rivera
776
+ Stephan Erb
777
+ Stephane Chazelas
778
+ Stephen Payne
779
+ Stephen Rosen
780
+ stepshal
781
+ Steve (Gadget) Barnes
782
+ Steve Barnes
783
+ Steve Dower
784
+ Steve Kowalik
785
+ Steven Myint
786
+ Steven Silvester
787
+ stonebig
788
+ studioj
789
+ Stéphane Bidoul
790
+ Stéphane Bidoul (ACSONE)
791
+ Stéphane Klein
792
+ Sumana Harihareswara
793
+ Surbhi Sharma
794
+ Sviatoslav Sydorenko
795
+ Sviatoslav Sydorenko (Святослав Сидоренко)
796
+ Swat009
797
+ Sylvain
798
+ S​age Abdullah
799
+ Takayuki SHIMIZUKAWA
800
+ Taneli Hukkinen
801
+ tbeswick
802
+ Terrance
803
+ Thiago
804
+ Thijs Triemstra
805
+ Thomas Fenzl
806
+ Thomas Grainger
807
+ Thomas Guettler
808
+ Thomas Johansson
809
+ Thomas Kluyver
810
+ Thomas Smith
811
+ Thomas VINCENT
812
+ Tim D. Smith
813
+ Tim Gates
814
+ Tim Harder
815
+ Tim Heap
816
+ tim smith
817
+ tinruufu
818
+ Tobias Hermann
819
+ Tom Forbes
820
+ Tom Freudenheim
821
+ Tom V
822
+ Tomas Hrnciar
823
+ Tomas Orsava
824
+ Tomer Chachamu
825
+ Tommi Enenkel | AnB
826
+ Tomáš Hrnčiar
827
+ Tony Beswick
828
+ Tony Narlock
829
+ Tony Zhaocheng Tan
830
+ TonyBeswick
831
+ toonarmycaptain
832
+ Toshio Kuratomi
833
+ toxinu
834
+ Travis Swicegood
835
+ Tushar Sadhwani
836
+ Tzu-ping Chung
837
+ Valentin Haenel
838
+ Victor Stinner
839
+ victorvpaulo
840
+ Vikram - Google
841
+ Viktor Szépe
842
+ Ville Skyttä
843
+ Vinay Sajip
844
+ Vincent Fazio
845
+ Vincent Philippon
846
+ Vinicyus Macedo
847
+ Vipul Kumar
848
+ Vitaly Babiy
849
+ Vladimir Fokow
850
+ Vladimir Rutsky
851
+ W. Trevor King
852
+ Weida Hong
853
+ Wil Tan
854
+ Wilfred Hughes
855
+ William Edwards
856
+ William ML Leslie
857
+ William T Olson
858
+ William Woodruff
859
+ Wilson Mo
860
+ wim glenn
861
+ Winson Luk
862
+ Wolfgang Maier
863
+ Wu Zhenyu
864
+ XAMES3
865
+ Xavier Fernandez
866
+ Xianpeng Shen
867
+ xoviat
868
+ xtreak
869
+ YAMAMOTO Takashi
870
+ Yash
871
+ Yashraj
872
+ Yen Chi Hsuan
873
+ Yeray Diaz Diaz
874
+ Youngkwang Yang
875
+ Yoval P
876
+ Yu Jian
877
+ Yuan Jing Vincent Yan
878
+ Yuki Kobayashi
879
+ Yusuke Hayashi
880
+ Zachary Ware
881
+ zackzack38
882
+ Zearin
883
+ Zhiping Deng
884
+ ziebam
885
+ Zvezdan Petkovic
886
+ Łukasz Langa
887
+ Роман Донченко
888
+ Семён Марьясин
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2008-present The pip developers (see AUTHORS.txt file)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright 2012-2021 Eric Larson
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/certifi/LICENSE ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This package contains a modified version of ca-bundle.crt:
2
+
3
+ ca-bundle.crt -- Bundle of CA Root Certificates
4
+
5
+ This is a bundle of X.509 certificates of public Certificate Authorities
6
+ (CA). These were automatically extracted from Mozilla's root certificates
7
+ file (certdata.txt). This file can be found in the mozilla source tree:
8
+ https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt
9
+ It contains the certificates in PEM format and therefore
10
+ can be directly used with curl / libcurl / php_curl, or with
11
+ an Apache+mod_ssl webserver for SSL client authentication.
12
+ Just configure this file as the SSLCACertificateFile.#
13
+
14
+ ***** BEGIN LICENSE BLOCK *****
15
+ This Source Code Form is subject to the terms of the Mozilla Public License,
16
+ v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain
17
+ one at http://mozilla.org/MPL/2.0/.
18
+
19
+ ***** END LICENSE BLOCK *****
20
+ @(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ A. HISTORY OF THE SOFTWARE
2
+ ==========================
3
+
4
+ Python was created in the early 1990s by Guido van Rossum at Stichting
5
+ Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
6
+ as a successor of a language called ABC. Guido remains Python's
7
+ principal author, although it includes many contributions from others.
8
+
9
+ In 1995, Guido continued his work on Python at the Corporation for
10
+ National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
11
+ in Reston, Virginia where he released several versions of the
12
+ software.
13
+
14
+ In May 2000, Guido and the Python core development team moved to
15
+ BeOpen.com to form the BeOpen PythonLabs team. In October of the same
16
+ year, the PythonLabs team moved to Digital Creations (now Zope
17
+ Corporation, see http://www.zope.com). In 2001, the Python Software
18
+ Foundation (PSF, see http://www.python.org/psf/) was formed, a
19
+ non-profit organization created specifically to own Python-related
20
+ Intellectual Property. Zope Corporation is a sponsoring member of
21
+ the PSF.
22
+
23
+ All Python releases are Open Source (see http://www.opensource.org for
24
+ the Open Source Definition). Historically, most, but not all, Python
25
+ releases have also been GPL-compatible; the table below summarizes
26
+ the various releases.
27
+
28
+ Release Derived Year Owner GPL-
29
+ from compatible? (1)
30
+
31
+ 0.9.0 thru 1.2 1991-1995 CWI yes
32
+ 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
33
+ 1.6 1.5.2 2000 CNRI no
34
+ 2.0 1.6 2000 BeOpen.com no
35
+ 1.6.1 1.6 2001 CNRI yes (2)
36
+ 2.1 2.0+1.6.1 2001 PSF no
37
+ 2.0.1 2.0+1.6.1 2001 PSF yes
38
+ 2.1.1 2.1+2.0.1 2001 PSF yes
39
+ 2.2 2.1.1 2001 PSF yes
40
+ 2.1.2 2.1.1 2002 PSF yes
41
+ 2.1.3 2.1.2 2002 PSF yes
42
+ 2.2.1 2.2 2002 PSF yes
43
+ 2.2.2 2.2.1 2002 PSF yes
44
+ 2.2.3 2.2.2 2003 PSF yes
45
+ 2.3 2.2.2 2002-2003 PSF yes
46
+ 2.3.1 2.3 2002-2003 PSF yes
47
+ 2.3.2 2.3.1 2002-2003 PSF yes
48
+ 2.3.3 2.3.2 2002-2003 PSF yes
49
+ 2.3.4 2.3.3 2004 PSF yes
50
+ 2.3.5 2.3.4 2005 PSF yes
51
+ 2.4 2.3 2004 PSF yes
52
+ 2.4.1 2.4 2005 PSF yes
53
+ 2.4.2 2.4.1 2005 PSF yes
54
+ 2.4.3 2.4.2 2006 PSF yes
55
+ 2.4.4 2.4.3 2006 PSF yes
56
+ 2.5 2.4 2006 PSF yes
57
+ 2.5.1 2.5 2007 PSF yes
58
+ 2.5.2 2.5.1 2008 PSF yes
59
+ 2.5.3 2.5.2 2008 PSF yes
60
+ 2.6 2.5 2008 PSF yes
61
+ 2.6.1 2.6 2008 PSF yes
62
+ 2.6.2 2.6.1 2009 PSF yes
63
+ 2.6.3 2.6.2 2009 PSF yes
64
+ 2.6.4 2.6.3 2009 PSF yes
65
+ 2.6.5 2.6.4 2010 PSF yes
66
+ 3.0 2.6 2008 PSF yes
67
+ 3.0.1 3.0 2009 PSF yes
68
+ 3.1 3.0.1 2009 PSF yes
69
+ 3.1.1 3.1 2009 PSF yes
70
+ 3.1.2 3.1 2010 PSF yes
71
+ 3.2 3.1 2010 PSF yes
72
+
73
+ Footnotes:
74
+
75
+ (1) GPL-compatible doesn't mean that we're distributing Python under
76
+ the GPL. All Python licenses, unlike the GPL, let you distribute
77
+ a modified version without making your changes open source. The
78
+ GPL-compatible licenses make it possible to combine Python with
79
+ other software that is released under the GPL; the others don't.
80
+
81
+ (2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
82
+ because its license has a choice of law clause. According to
83
+ CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
84
+ is "not incompatible" with the GPL.
85
+
86
+ Thanks to the many outside volunteers who have worked under Guido's
87
+ direction to make these releases possible.
88
+
89
+
90
+ B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
91
+ ===============================================================
92
+
93
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
94
+ --------------------------------------------
95
+
96
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation
97
+ ("PSF"), and the Individual or Organization ("Licensee") accessing and
98
+ otherwise using this software ("Python") in source or binary form and
99
+ its associated documentation.
100
+
101
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby
102
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
103
+ analyze, test, perform and/or display publicly, prepare derivative works,
104
+ distribute, and otherwise use Python alone or in any derivative version,
105
+ provided, however, that PSF's License Agreement and PSF's notice of copyright,
106
+ i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
107
+ Python Software Foundation; All Rights Reserved" are retained in Python alone or
108
+ in any derivative version prepared by Licensee.
109
+
110
+ 3. In the event Licensee prepares a derivative work that is based on
111
+ or incorporates Python or any part thereof, and wants to make
112
+ the derivative work available to others as provided herein, then
113
+ Licensee hereby agrees to include in any such work a brief summary of
114
+ the changes made to Python.
115
+
116
+ 4. PSF is making Python available to Licensee on an "AS IS"
117
+ basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
118
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
119
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
120
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
121
+ INFRINGE ANY THIRD PARTY RIGHTS.
122
+
123
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
124
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
125
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
126
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
127
+
128
+ 6. This License Agreement will automatically terminate upon a material
129
+ breach of its terms and conditions.
130
+
131
+ 7. Nothing in this License Agreement shall be deemed to create any
132
+ relationship of agency, partnership, or joint venture between PSF and
133
+ Licensee. This License Agreement does not grant permission to use PSF
134
+ trademarks or trade name in a trademark sense to endorse or promote
135
+ products or services of Licensee, or any third party.
136
+
137
+ 8. By copying, installing or otherwise using Python, Licensee
138
+ agrees to be bound by the terms and conditions of this License
139
+ Agreement.
140
+
141
+
142
+ BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
143
+ -------------------------------------------
144
+
145
+ BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
146
+
147
+ 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
148
+ office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
149
+ Individual or Organization ("Licensee") accessing and otherwise using
150
+ this software in source or binary form and its associated
151
+ documentation ("the Software").
152
+
153
+ 2. Subject to the terms and conditions of this BeOpen Python License
154
+ Agreement, BeOpen hereby grants Licensee a non-exclusive,
155
+ royalty-free, world-wide license to reproduce, analyze, test, perform
156
+ and/or display publicly, prepare derivative works, distribute, and
157
+ otherwise use the Software alone or in any derivative version,
158
+ provided, however, that the BeOpen Python License is retained in the
159
+ Software, alone or in any derivative version prepared by Licensee.
160
+
161
+ 3. BeOpen is making the Software available to Licensee on an "AS IS"
162
+ basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
163
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
164
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
165
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
166
+ INFRINGE ANY THIRD PARTY RIGHTS.
167
+
168
+ 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
169
+ SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
170
+ AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
171
+ DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
172
+
173
+ 5. This License Agreement will automatically terminate upon a material
174
+ breach of its terms and conditions.
175
+
176
+ 6. This License Agreement shall be governed by and interpreted in all
177
+ respects by the law of the State of California, excluding conflict of
178
+ law provisions. Nothing in this License Agreement shall be deemed to
179
+ create any relationship of agency, partnership, or joint venture
180
+ between BeOpen and Licensee. This License Agreement does not grant
181
+ permission to use BeOpen trademarks or trade names in a trademark
182
+ sense to endorse or promote products or services of Licensee, or any
183
+ third party. As an exception, the "BeOpen Python" logos available at
184
+ http://www.pythonlabs.com/logos.html may be used according to the
185
+ permissions granted on that web page.
186
+
187
+ 7. By copying, installing or otherwise using the software, Licensee
188
+ agrees to be bound by the terms and conditions of this License
189
+ Agreement.
190
+
191
+
192
+ CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
193
+ ---------------------------------------
194
+
195
+ 1. This LICENSE AGREEMENT is between the Corporation for National
196
+ Research Initiatives, having an office at 1895 Preston White Drive,
197
+ Reston, VA 20191 ("CNRI"), and the Individual or Organization
198
+ ("Licensee") accessing and otherwise using Python 1.6.1 software in
199
+ source or binary form and its associated documentation.
200
+
201
+ 2. Subject to the terms and conditions of this License Agreement, CNRI
202
+ hereby grants Licensee a nonexclusive, royalty-free, world-wide
203
+ license to reproduce, analyze, test, perform and/or display publicly,
204
+ prepare derivative works, distribute, and otherwise use Python 1.6.1
205
+ alone or in any derivative version, provided, however, that CNRI's
206
+ License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
207
+ 1995-2001 Corporation for National Research Initiatives; All Rights
208
+ Reserved" are retained in Python 1.6.1 alone or in any derivative
209
+ version prepared by Licensee. Alternately, in lieu of CNRI's License
210
+ Agreement, Licensee may substitute the following text (omitting the
211
+ quotes): "Python 1.6.1 is made available subject to the terms and
212
+ conditions in CNRI's License Agreement. This Agreement together with
213
+ Python 1.6.1 may be located on the Internet using the following
214
+ unique, persistent identifier (known as a handle): 1895.22/1013. This
215
+ Agreement may also be obtained from a proxy server on the Internet
216
+ using the following URL: http://hdl.handle.net/1895.22/1013".
217
+
218
+ 3. In the event Licensee prepares a derivative work that is based on
219
+ or incorporates Python 1.6.1 or any part thereof, and wants to make
220
+ the derivative work available to others as provided herein, then
221
+ Licensee hereby agrees to include in any such work a brief summary of
222
+ the changes made to Python 1.6.1.
223
+
224
+ 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
225
+ basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
226
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
227
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
228
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
229
+ INFRINGE ANY THIRD PARTY RIGHTS.
230
+
231
+ 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
232
+ 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
233
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
234
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
235
+
236
+ 6. This License Agreement will automatically terminate upon a material
237
+ breach of its terms and conditions.
238
+
239
+ 7. This License Agreement shall be governed by the federal
240
+ intellectual property law of the United States, including without
241
+ limitation the federal copyright law, and, to the extent such
242
+ U.S. federal law does not apply, by the law of the Commonwealth of
243
+ Virginia, excluding Virginia's conflict of law provisions.
244
+ Notwithstanding the foregoing, with regard to derivative works based
245
+ on Python 1.6.1 that incorporate non-separable material that was
246
+ previously distributed under the GNU General Public License (GPL), the
247
+ law of the Commonwealth of Virginia shall govern this License
248
+ Agreement only as to issues arising under or with respect to
249
+ Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
250
+ License Agreement shall be deemed to create any relationship of
251
+ agency, partnership, or joint venture between CNRI and Licensee. This
252
+ License Agreement does not grant permission to use CNRI trademarks or
253
+ trade name in a trademark sense to endorse or promote products or
254
+ services of Licensee, or any third party.
255
+
256
+ 8. By clicking on the "ACCEPT" button where indicated, or by copying,
257
+ installing or otherwise using Python 1.6.1, Licensee agrees to be
258
+ bound by the terms and conditions of this License Agreement.
259
+
260
+ ACCEPT
261
+
262
+
263
+ CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
264
+ --------------------------------------------------
265
+
266
+ Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
267
+ The Netherlands. All rights reserved.
268
+
269
+ Permission to use, copy, modify, and distribute this software and its
270
+ documentation for any purpose and without fee is hereby granted,
271
+ provided that the above copyright notice appear in all copies and that
272
+ both that copyright notice and this permission notice appear in
273
+ supporting documentation, and that the name of Stichting Mathematisch
274
+ Centrum or CWI not be used in advertising or publicity pertaining to
275
+ distribution of the software without specific, written prior
276
+ permission.
277
+
278
+ STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
279
+ THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
280
+ FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
281
+ FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
282
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
283
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
284
+ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/distro/LICENSE ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "{}"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright {yyyy} {name of copyright owner}
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
202
+
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2013-2026, Kim Davies and contributors.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ 1. Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ 2. Redistributions in binary form must reproduce the above copyright
14
+ notice, this list of conditions and the following disclaimer in the
15
+ documentation and/or other materials provided with the distribution.
16
+
17
+ 3. Neither the name of the copyright holder nor the names of its
18
+ contributors may be used to endorse or promote products derived from
19
+ this software without specific prior written permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/msgpack/COPYING ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (C) 2008-2011 INADA Naoki <songofacandy@gmail.com>
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ This software is made available under the terms of *either* of the licenses
2
+ found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made
3
+ under the terms of *both* these licenses.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) Donald Stufft and individual contributors.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in the
12
+ documentation and/or other materials provided with the distribution.
13
+
14
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Permission is hereby granted, free of charge, to any person obtaining a copy
2
+ of this software and associated documentation files (the "Software"), to
3
+ deal in the Software without restriction, including without limitation the
4
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
5
+ sell copies of the Software, and to permit persons to whom the Software is
6
+ furnished to do so, subject to the following conditions:
7
+
8
+ The above copyright notice and this permission notice shall be included in
9
+ all copies or substantial portions of the Software.
10
+
11
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
16
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
17
+ IN THE SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2010-202x The platformdirs developers
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/pygments/LICENSE ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2006-2022 by the respective authors (see AUTHORS file).
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ * Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+
11
+ * Redistributions in binary form must reproduce the above copyright
12
+ notice, this list of conditions and the following disclaimer in the
13
+ documentation and/or other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 Thomas Kluyver
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/requests/LICENSE ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2018, Tzu-ping Chung <uranusjr@gmail.com>
2
+
3
+ Permission to use, copy, modify, and distribute this software for any
4
+ purpose with or without fee is hereby granted, provided that the above
5
+ copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/rich/LICENSE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2020 Will McGugan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Taneli Hukkinen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Taneli Hukkinen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/truststore/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 Seth Michael Larson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
hug/lib/python3.12/site-packages/pip-26.2.2.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2008-2020 Andrey Petrov and contributors.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
hug/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py ADDED
@@ -0,0 +1,793 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ from __future__ import annotations
6
+
7
+ import sys
8
+ from types import MappingProxyType
9
+
10
+ from ._re import (
11
+ RE_DATETIME,
12
+ RE_LOCALTIME,
13
+ RE_NUMBER,
14
+ match_to_datetime,
15
+ match_to_localtime,
16
+ match_to_number,
17
+ )
18
+
19
+ TYPE_CHECKING = False
20
+ if TYPE_CHECKING:
21
+ from collections.abc import Iterable
22
+ from typing import IO, Any, Final
23
+
24
+ from ._types import Key, ParseFloat, Pos
25
+
26
+ # Inline tables/arrays are implemented using recursion. Pathologically
27
+ # nested documents cause pure Python to raise RecursionError (which is OK),
28
+ # but mypyc binary wheels will crash unrecoverably (not OK). According to
29
+ # mypyc docs this will be fixed in the future:
30
+ # https://mypyc.readthedocs.io/en/latest/differences_from_python.html#stack-overflows
31
+ # Before mypyc's fix is in, recursion needs to be limited by this library.
32
+ # Choosing `sys.getrecursionlimit()` as maximum inline table/array nesting
33
+ # level, as it allows more nesting than pure Python, but still seems a far
34
+ # lower number than where mypyc binaries crash.
35
+ MAX_INLINE_NESTING: Final = sys.getrecursionlimit()
36
+
37
+ # Pathologically excessive number of parts in a key runs into quadratic
38
+ # behavior (e.g. in Flags.is_).
39
+ # Even if keys aren't currently parsed using recursion, they name a
40
+ # recursive structure, so it makes sense to limit it using getrecursionlimit()
41
+ # and RecursionError.
42
+ MAX_KEY_PARTS: Final = sys.getrecursionlimit()
43
+
44
+ ASCII_CTRL: Final = frozenset(chr(i) for i in range(32)) | frozenset(chr(127))
45
+
46
+ # Neither of these sets include quotation mark or backslash. They are
47
+ # currently handled as separate cases in the parser functions.
48
+ ILLEGAL_BASIC_STR_CHARS: Final = ASCII_CTRL - frozenset("\t")
49
+ ILLEGAL_MULTILINE_BASIC_STR_CHARS: Final = ASCII_CTRL - frozenset("\t\n")
50
+
51
+ ILLEGAL_LITERAL_STR_CHARS: Final = ILLEGAL_BASIC_STR_CHARS
52
+ ILLEGAL_MULTILINE_LITERAL_STR_CHARS: Final = ILLEGAL_MULTILINE_BASIC_STR_CHARS
53
+
54
+ ILLEGAL_COMMENT_CHARS: Final = ILLEGAL_BASIC_STR_CHARS
55
+
56
+ TOML_WS: Final = frozenset(" \t")
57
+ TOML_WS_AND_NEWLINE: Final = TOML_WS | frozenset("\n")
58
+ BARE_KEY_CHARS: Final = frozenset(
59
+ "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789" "-_"
60
+ )
61
+ KEY_INITIAL_CHARS: Final = BARE_KEY_CHARS | frozenset("\"'")
62
+ HEXDIGIT_CHARS: Final = frozenset("abcdef" "ABCDEF" "0123456789")
63
+
64
+ BASIC_STR_ESCAPE_REPLACEMENTS: Final = MappingProxyType(
65
+ {
66
+ "\\b": "\u0008", # backspace
67
+ "\\t": "\u0009", # tab
68
+ "\\n": "\u000a", # linefeed
69
+ "\\f": "\u000c", # form feed
70
+ "\\r": "\u000d", # carriage return
71
+ "\\e": "\u001b", # escape
72
+ '\\"': "\u0022", # quote
73
+ "\\\\": "\u005c", # backslash
74
+ }
75
+ )
76
+
77
+
78
+ class DEPRECATED_DEFAULT:
79
+ """Sentinel to be used as default arg during deprecation
80
+ period of TOMLDecodeError's free-form arguments."""
81
+
82
+
83
+ class TOMLDecodeError(ValueError):
84
+ """An error raised if a document is not valid TOML.
85
+
86
+ Adds the following attributes to ValueError:
87
+ msg: The unformatted error message
88
+ doc: The TOML document being parsed
89
+ pos: The index of doc where parsing failed
90
+ lineno: The line corresponding to pos
91
+ colno: The column corresponding to pos
92
+ """
93
+
94
+ def __init__(
95
+ self,
96
+ msg: str | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT,
97
+ doc: str | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT,
98
+ pos: Pos | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT,
99
+ *args: Any,
100
+ ):
101
+ if (
102
+ args
103
+ or not isinstance(msg, str)
104
+ or not isinstance(doc, str)
105
+ or not isinstance(pos, int)
106
+ ):
107
+ import warnings
108
+
109
+ warnings.warn(
110
+ "Free-form arguments for TOMLDecodeError are deprecated. "
111
+ "Please set 'msg' (str), 'doc' (str) and 'pos' (int) arguments only.",
112
+ DeprecationWarning,
113
+ stacklevel=2,
114
+ )
115
+ if pos is not DEPRECATED_DEFAULT:
116
+ args = pos, *args
117
+ if doc is not DEPRECATED_DEFAULT:
118
+ args = doc, *args
119
+ if msg is not DEPRECATED_DEFAULT:
120
+ args = msg, *args
121
+ ValueError.__init__(self, *args)
122
+ return
123
+
124
+ lineno = doc.count("\n", 0, pos) + 1
125
+ if lineno == 1:
126
+ colno = pos + 1
127
+ else:
128
+ colno = pos - doc.rindex("\n", 0, pos)
129
+
130
+ if pos >= len(doc):
131
+ coord_repr = "end of document"
132
+ else:
133
+ coord_repr = f"line {lineno}, column {colno}"
134
+ errmsg = f"{msg} (at {coord_repr})"
135
+ ValueError.__init__(self, errmsg)
136
+
137
+ self.msg = msg
138
+ self.doc = doc
139
+ self.pos = pos
140
+ self.lineno = lineno
141
+ self.colno = colno
142
+
143
+
144
+ def load(__fp: IO[bytes], *, parse_float: ParseFloat = float) -> dict[str, Any]:
145
+ """Parse TOML from a binary file object."""
146
+ b = __fp.read()
147
+ try:
148
+ s = b.decode()
149
+ except AttributeError:
150
+ raise TypeError(
151
+ "File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`"
152
+ ) from None
153
+ return loads(s, parse_float=parse_float)
154
+
155
+
156
+ def loads(__s: str, *, parse_float: ParseFloat = float) -> dict[str, Any]:
157
+ """Parse TOML from a string."""
158
+
159
+ # The spec allows converting "\r\n" to "\n", even in string
160
+ # literals. Let's do so to simplify parsing.
161
+ try:
162
+ src = __s.replace("\r\n", "\n")
163
+ except (AttributeError, TypeError):
164
+ raise TypeError(
165
+ f"Expected str object, not '{type(__s).__qualname__}'"
166
+ ) from None
167
+ pos = 0
168
+ out = Output()
169
+ header: Key = ()
170
+ parse_float = make_safe_parse_float(parse_float)
171
+
172
+ # Parse one statement at a time
173
+ # (typically means one line in TOML source)
174
+ while True:
175
+ # 1. Skip line leading whitespace
176
+ pos = skip_chars(src, pos, TOML_WS)
177
+
178
+ # 2. Parse rules. Expect one of the following:
179
+ # - end of file
180
+ # - end of line
181
+ # - comment
182
+ # - key/value pair
183
+ # - append dict to list (and move to its namespace)
184
+ # - create dict (and move to its namespace)
185
+ # Skip trailing whitespace when applicable.
186
+ try:
187
+ char = src[pos]
188
+ except IndexError:
189
+ break
190
+ if char == "\n":
191
+ pos += 1
192
+ continue
193
+ if char in KEY_INITIAL_CHARS:
194
+ pos = key_value_rule(src, pos, out, header, parse_float)
195
+ pos = skip_chars(src, pos, TOML_WS)
196
+ elif char == "[":
197
+ try:
198
+ second_char: str | None = src[pos + 1]
199
+ except IndexError:
200
+ second_char = None
201
+ out.flags.finalize_pending()
202
+ if second_char == "[":
203
+ pos, header = create_list_rule(src, pos, out)
204
+ else:
205
+ pos, header = create_dict_rule(src, pos, out)
206
+ pos = skip_chars(src, pos, TOML_WS)
207
+ elif char != "#":
208
+ raise TOMLDecodeError("Invalid statement", src, pos)
209
+
210
+ # 3. Skip comment
211
+ pos = skip_comment(src, pos)
212
+
213
+ # 4. Expect end of line or end of file
214
+ try:
215
+ char = src[pos]
216
+ except IndexError:
217
+ break
218
+ if char != "\n":
219
+ raise TOMLDecodeError(
220
+ "Expected newline or end of document after a statement", src, pos
221
+ )
222
+ pos += 1
223
+
224
+ return out.data.dict
225
+
226
+
227
+ class Flags:
228
+ """Flags that map to parsed keys/namespaces."""
229
+
230
+ # Marks an immutable namespace (inline array or inline table).
231
+ FROZEN: Final = 0
232
+ # Marks a nest that has been explicitly created and can no longer
233
+ # be opened using the "[table]" syntax.
234
+ EXPLICIT_NEST: Final = 1
235
+
236
+ def __init__(self) -> None:
237
+ self._flags: dict[str, dict[Any, Any]] = {}
238
+ self._pending_flags: set[tuple[Key, int]] = set()
239
+
240
+ def add_pending(self, key: Key, flag: int) -> None:
241
+ self._pending_flags.add((key, flag))
242
+
243
+ def finalize_pending(self) -> None:
244
+ for key, flag in self._pending_flags:
245
+ self.set(key, flag, recursive=False)
246
+ self._pending_flags.clear()
247
+
248
+ def unset_all(self, key: Key) -> None:
249
+ cont = self._flags
250
+ for k in key[:-1]:
251
+ if k not in cont:
252
+ return
253
+ cont = cont[k]["nested"]
254
+ cont.pop(key[-1], None)
255
+
256
+ def set(self, key: Key, flag: int, *, recursive: bool) -> None: # noqa: A003
257
+ cont = self._flags
258
+ key_parent, key_stem = key[:-1], key[-1]
259
+ for k in key_parent:
260
+ if k not in cont:
261
+ cont[k] = {"flags": set(), "recursive_flags": set(), "nested": {}}
262
+ cont = cont[k]["nested"]
263
+ if key_stem not in cont:
264
+ cont[key_stem] = {"flags": set(), "recursive_flags": set(), "nested": {}}
265
+ cont[key_stem]["recursive_flags" if recursive else "flags"].add(flag)
266
+
267
+ def is_(self, key: Key, flag: int) -> bool:
268
+ if not key:
269
+ return False # document root has no flags
270
+ cont = self._flags
271
+ for k in key[:-1]:
272
+ if k not in cont:
273
+ return False
274
+ inner_cont = cont[k]
275
+ if flag in inner_cont["recursive_flags"]:
276
+ return True
277
+ cont = inner_cont["nested"]
278
+ key_stem = key[-1]
279
+ if key_stem in cont:
280
+ inner_cont = cont[key_stem]
281
+ return flag in inner_cont["flags"] or flag in inner_cont["recursive_flags"]
282
+ return False
283
+
284
+
285
+ class NestedDict:
286
+ def __init__(self) -> None:
287
+ # The parsed content of the TOML document
288
+ self.dict: dict[str, Any] = {}
289
+
290
+ def get_or_create_nest(
291
+ self,
292
+ key: Key,
293
+ *,
294
+ access_lists: bool = True,
295
+ ) -> dict[str, Any]:
296
+ cont: Any = self.dict
297
+ for k in key:
298
+ if k not in cont:
299
+ cont[k] = {}
300
+ cont = cont[k]
301
+ if access_lists and isinstance(cont, list):
302
+ cont = cont[-1]
303
+ if not isinstance(cont, dict):
304
+ raise KeyError("There is no nest behind this key")
305
+ return cont # type: ignore[no-any-return]
306
+
307
+ def append_nest_to_list(self, key: Key) -> None:
308
+ cont = self.get_or_create_nest(key[:-1])
309
+ last_key = key[-1]
310
+ if last_key in cont:
311
+ list_ = cont[last_key]
312
+ if not isinstance(list_, list):
313
+ raise KeyError("An object other than list found behind this key")
314
+ list_.append({})
315
+ else:
316
+ cont[last_key] = [{}]
317
+
318
+
319
+ class Output:
320
+ def __init__(self) -> None:
321
+ self.data = NestedDict()
322
+ self.flags = Flags()
323
+
324
+
325
+ def skip_chars(src: str, pos: Pos, chars: Iterable[str]) -> Pos:
326
+ try:
327
+ while src[pos] in chars:
328
+ pos += 1
329
+ except IndexError:
330
+ pass
331
+ return pos
332
+
333
+
334
+ def skip_until(
335
+ src: str,
336
+ pos: Pos,
337
+ expect: str,
338
+ *,
339
+ error_on: frozenset[str],
340
+ error_on_eof: bool,
341
+ ) -> Pos:
342
+ try:
343
+ new_pos = src.index(expect, pos)
344
+ except ValueError:
345
+ new_pos = len(src)
346
+ if error_on_eof:
347
+ raise TOMLDecodeError(f"Expected {expect!r}", src, new_pos) from None
348
+
349
+ if not error_on.isdisjoint(src[pos:new_pos]):
350
+ while src[pos] not in error_on:
351
+ pos += 1
352
+ raise TOMLDecodeError(f"Found invalid character {src[pos]!r}", src, pos)
353
+ return new_pos
354
+
355
+
356
+ def skip_comment(src: str, pos: Pos) -> Pos:
357
+ try:
358
+ char: str | None = src[pos]
359
+ except IndexError:
360
+ char = None
361
+ if char == "#":
362
+ return skip_until(
363
+ src, pos + 1, "\n", error_on=ILLEGAL_COMMENT_CHARS, error_on_eof=False
364
+ )
365
+ return pos
366
+
367
+
368
+ def skip_comments_and_array_ws(src: str, pos: Pos) -> Pos:
369
+ while True:
370
+ pos_before_skip = pos
371
+ pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
372
+ pos = skip_comment(src, pos)
373
+ if pos == pos_before_skip:
374
+ return pos
375
+
376
+
377
+ def create_dict_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
378
+ pos += 1 # Skip "["
379
+ pos = skip_chars(src, pos, TOML_WS)
380
+ pos, key = parse_key(src, pos)
381
+
382
+ if out.flags.is_(key, Flags.EXPLICIT_NEST) or out.flags.is_(key, Flags.FROZEN):
383
+ raise TOMLDecodeError(f"Cannot declare {key} twice", src, pos)
384
+ out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False)
385
+ try:
386
+ out.data.get_or_create_nest(key)
387
+ except KeyError:
388
+ raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None
389
+
390
+ if not src.startswith("]", pos):
391
+ raise TOMLDecodeError(
392
+ "Expected ']' at the end of a table declaration", src, pos
393
+ )
394
+ return pos + 1, key
395
+
396
+
397
+ def create_list_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
398
+ pos += 2 # Skip "[["
399
+ pos = skip_chars(src, pos, TOML_WS)
400
+ pos, key = parse_key(src, pos)
401
+
402
+ if out.flags.is_(key, Flags.FROZEN):
403
+ raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos)
404
+ # Free the namespace now that it points to another empty list item...
405
+ out.flags.unset_all(key)
406
+ # ...but this key precisely is still prohibited from table declaration
407
+ out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False)
408
+ try:
409
+ out.data.append_nest_to_list(key)
410
+ except KeyError:
411
+ raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None
412
+
413
+ if not src.startswith("]]", pos):
414
+ raise TOMLDecodeError(
415
+ "Expected ']]' at the end of an array declaration", src, pos
416
+ )
417
+ return pos + 2, key
418
+
419
+
420
+ def key_value_rule(
421
+ src: str, pos: Pos, out: Output, header: Key, parse_float: ParseFloat
422
+ ) -> Pos:
423
+ pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0)
424
+ key_parent, key_stem = key[:-1], key[-1]
425
+ abs_key_parent = header + key_parent
426
+
427
+ relative_path_cont_keys = (header + key[:i] for i in range(1, len(key)))
428
+ for cont_key in relative_path_cont_keys:
429
+ # Check that dotted key syntax does not redefine an existing table
430
+ if out.flags.is_(cont_key, Flags.EXPLICIT_NEST):
431
+ raise TOMLDecodeError(f"Cannot redefine namespace {cont_key}", src, pos)
432
+ # Containers in the relative path can't be opened with the table syntax or
433
+ # dotted key/value syntax in following table sections.
434
+ out.flags.add_pending(cont_key, Flags.EXPLICIT_NEST)
435
+
436
+ if out.flags.is_(abs_key_parent, Flags.FROZEN):
437
+ raise TOMLDecodeError(
438
+ f"Cannot mutate immutable namespace {abs_key_parent}", src, pos
439
+ )
440
+
441
+ try:
442
+ nest = out.data.get_or_create_nest(abs_key_parent)
443
+ except KeyError:
444
+ raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None
445
+ if key_stem in nest:
446
+ raise TOMLDecodeError("Cannot overwrite a value", src, pos)
447
+ # Mark inline table and array namespaces recursively immutable
448
+ if isinstance(value, (dict, list)):
449
+ out.flags.set(header + key, Flags.FROZEN, recursive=True)
450
+ nest[key_stem] = value
451
+ return pos
452
+
453
+
454
+ def parse_key_value_pair(
455
+ src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int
456
+ ) -> tuple[Pos, Key, Any]:
457
+ pos, key = parse_key(src, pos)
458
+ try:
459
+ char: str | None = src[pos]
460
+ except IndexError:
461
+ char = None
462
+ if char != "=":
463
+ raise TOMLDecodeError("Expected '=' after a key in a key/value pair", src, pos)
464
+ pos += 1
465
+ pos = skip_chars(src, pos, TOML_WS)
466
+ pos, value = parse_value(src, pos, parse_float, nest_lvl)
467
+ return pos, key, value
468
+
469
+
470
+ def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]:
471
+ pos, key_part = parse_key_part(src, pos)
472
+ key: Key = (key_part,)
473
+ pos = skip_chars(src, pos, TOML_WS)
474
+ while True:
475
+ try:
476
+ char: str | None = src[pos]
477
+ except IndexError:
478
+ char = None
479
+ if char != ".":
480
+ return pos, key
481
+ pos += 1
482
+ pos = skip_chars(src, pos, TOML_WS)
483
+ pos, key_part = parse_key_part(src, pos)
484
+ key += (key_part,)
485
+ if len(key) > MAX_KEY_PARTS:
486
+ raise RecursionError(
487
+ f"TOML key has more than the allowed {MAX_KEY_PARTS} parts"
488
+ )
489
+ pos = skip_chars(src, pos, TOML_WS)
490
+
491
+
492
+ def parse_key_part(src: str, pos: Pos) -> tuple[Pos, str]:
493
+ try:
494
+ char: str | None = src[pos]
495
+ except IndexError:
496
+ char = None
497
+ if char in BARE_KEY_CHARS:
498
+ start_pos = pos
499
+ pos = skip_chars(src, pos, BARE_KEY_CHARS)
500
+ return pos, src[start_pos:pos]
501
+ if char == "'":
502
+ return parse_literal_str(src, pos)
503
+ if char == '"':
504
+ return parse_one_line_basic_str(src, pos)
505
+ raise TOMLDecodeError("Invalid initial character for a key part", src, pos)
506
+
507
+
508
+ def parse_one_line_basic_str(src: str, pos: Pos) -> tuple[Pos, str]:
509
+ pos += 1
510
+ return parse_basic_str(src, pos, multiline=False)
511
+
512
+
513
+ def parse_array(
514
+ src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int
515
+ ) -> tuple[Pos, list[Any]]:
516
+ pos += 1
517
+ array: list[Any] = []
518
+
519
+ pos = skip_comments_and_array_ws(src, pos)
520
+ if src.startswith("]", pos):
521
+ return pos + 1, array
522
+ while True:
523
+ pos, val = parse_value(src, pos, parse_float, nest_lvl)
524
+ array.append(val)
525
+ pos = skip_comments_and_array_ws(src, pos)
526
+
527
+ c = src[pos : pos + 1]
528
+ if c == "]":
529
+ return pos + 1, array
530
+ if c != ",":
531
+ raise TOMLDecodeError("Unclosed array", src, pos)
532
+ pos += 1
533
+
534
+ pos = skip_comments_and_array_ws(src, pos)
535
+ if src.startswith("]", pos):
536
+ return pos + 1, array
537
+
538
+
539
+ def parse_inline_table(
540
+ src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int
541
+ ) -> tuple[Pos, dict[str, Any]]:
542
+ pos += 1
543
+ nested_dict = NestedDict()
544
+ flags = Flags()
545
+
546
+ pos = skip_comments_and_array_ws(src, pos)
547
+ if src.startswith("}", pos):
548
+ return pos + 1, nested_dict.dict
549
+ while True:
550
+ pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl)
551
+ key_parent, key_stem = key[:-1], key[-1]
552
+ if flags.is_(key, Flags.FROZEN):
553
+ raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos)
554
+ try:
555
+ nest = nested_dict.get_or_create_nest(key_parent, access_lists=False)
556
+ except KeyError:
557
+ raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None
558
+ if key_stem in nest:
559
+ raise TOMLDecodeError(f"Duplicate inline table key {key_stem!r}", src, pos)
560
+ nest[key_stem] = value
561
+ pos = skip_comments_and_array_ws(src, pos)
562
+ c = src[pos : pos + 1]
563
+ if c == "}":
564
+ return pos + 1, nested_dict.dict
565
+ if c != ",":
566
+ raise TOMLDecodeError("Unclosed inline table", src, pos)
567
+ pos += 1
568
+ pos = skip_comments_and_array_ws(src, pos)
569
+ if src.startswith("}", pos):
570
+ return pos + 1, nested_dict.dict
571
+ if isinstance(value, (dict, list)):
572
+ flags.set(key, Flags.FROZEN, recursive=True)
573
+
574
+
575
+ def parse_basic_str_escape(
576
+ src: str, pos: Pos, *, multiline: bool = False
577
+ ) -> tuple[Pos, str]:
578
+ escape_id = src[pos : pos + 2]
579
+ pos += 2
580
+ if multiline and escape_id in {"\\ ", "\\\t", "\\\n"}:
581
+ # Skip whitespace until next non-whitespace character or end of
582
+ # the doc. Error if non-whitespace is found before newline.
583
+ if escape_id != "\\\n":
584
+ pos = skip_chars(src, pos, TOML_WS)
585
+ try:
586
+ char = src[pos]
587
+ except IndexError:
588
+ return pos, ""
589
+ if char != "\n":
590
+ raise TOMLDecodeError("Unescaped '\\' in a string", src, pos)
591
+ pos += 1
592
+ pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
593
+ return pos, ""
594
+ if escape_id == "\\x":
595
+ return parse_hex_char(src, pos, 2)
596
+ if escape_id == "\\u":
597
+ return parse_hex_char(src, pos, 4)
598
+ if escape_id == "\\U":
599
+ return parse_hex_char(src, pos, 8)
600
+ try:
601
+ return pos, BASIC_STR_ESCAPE_REPLACEMENTS[escape_id]
602
+ except KeyError:
603
+ raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) from None
604
+
605
+
606
+ def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]:
607
+ return parse_basic_str_escape(src, pos, multiline=True)
608
+
609
+
610
+ def parse_hex_char(src: str, pos: Pos, hex_len: int) -> tuple[Pos, str]:
611
+ hex_str = src[pos : pos + hex_len]
612
+ if len(hex_str) != hex_len or not HEXDIGIT_CHARS.issuperset(hex_str):
613
+ raise TOMLDecodeError("Invalid hex value", src, pos)
614
+ pos += hex_len
615
+ hex_int = int(hex_str, 16)
616
+ if not is_unicode_scalar_value(hex_int):
617
+ raise TOMLDecodeError(
618
+ "Escaped character is not a Unicode scalar value", src, pos
619
+ )
620
+ return pos, chr(hex_int)
621
+
622
+
623
+ def parse_literal_str(src: str, pos: Pos) -> tuple[Pos, str]:
624
+ pos += 1 # Skip starting apostrophe
625
+ start_pos = pos
626
+ pos = skip_until(
627
+ src, pos, "'", error_on=ILLEGAL_LITERAL_STR_CHARS, error_on_eof=True
628
+ )
629
+ return pos + 1, src[start_pos:pos] # Skip ending apostrophe
630
+
631
+
632
+ def parse_multiline_str(src: str, pos: Pos, *, literal: bool) -> tuple[Pos, str]:
633
+ pos += 3
634
+ if src.startswith("\n", pos):
635
+ pos += 1
636
+
637
+ if literal:
638
+ delim = "'"
639
+ end_pos = skip_until(
640
+ src,
641
+ pos,
642
+ "'''",
643
+ error_on=ILLEGAL_MULTILINE_LITERAL_STR_CHARS,
644
+ error_on_eof=True,
645
+ )
646
+ result = src[pos:end_pos]
647
+ pos = end_pos + 3
648
+ else:
649
+ delim = '"'
650
+ pos, result = parse_basic_str(src, pos, multiline=True)
651
+
652
+ # Add at maximum two extra apostrophes/quotes if the end sequence
653
+ # is 4 or 5 chars long instead of just 3.
654
+ if not src.startswith(delim, pos):
655
+ return pos, result
656
+ pos += 1
657
+ if not src.startswith(delim, pos):
658
+ return pos, result + delim
659
+ pos += 1
660
+ return pos, result + (delim * 2)
661
+
662
+
663
+ def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]:
664
+ if multiline:
665
+ error_on = ILLEGAL_MULTILINE_BASIC_STR_CHARS
666
+ parse_escapes = parse_basic_str_escape_multiline
667
+ else:
668
+ error_on = ILLEGAL_BASIC_STR_CHARS
669
+ parse_escapes = parse_basic_str_escape
670
+ result = ""
671
+ start_pos = pos
672
+ while True:
673
+ try:
674
+ char = src[pos]
675
+ except IndexError:
676
+ raise TOMLDecodeError("Unterminated string", src, pos) from None
677
+ if char == '"':
678
+ if not multiline:
679
+ return pos + 1, result + src[start_pos:pos]
680
+ if src.startswith('"""', pos):
681
+ return pos + 3, result + src[start_pos:pos]
682
+ pos += 1
683
+ continue
684
+ if char == "\\":
685
+ result += src[start_pos:pos]
686
+ pos, parsed_escape = parse_escapes(src, pos)
687
+ result += parsed_escape
688
+ start_pos = pos
689
+ continue
690
+ if char in error_on:
691
+ raise TOMLDecodeError(f"Illegal character {char!r}", src, pos)
692
+ pos += 1
693
+
694
+
695
+ def parse_value(
696
+ src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int
697
+ ) -> tuple[Pos, Any]:
698
+ if nest_lvl > MAX_INLINE_NESTING:
699
+ # Pure Python should have raised RecursionError already.
700
+ # This ensures mypyc binaries eventually do the same.
701
+ raise RecursionError( # pragma: no cover
702
+ "TOML inline arrays/tables are nested more than the allowed"
703
+ f" {MAX_INLINE_NESTING} levels"
704
+ )
705
+
706
+ try:
707
+ char: str | None = src[pos]
708
+ except IndexError:
709
+ char = None
710
+
711
+ # IMPORTANT: order conditions based on speed of checking and likelihood
712
+
713
+ # Basic strings
714
+ if char == '"':
715
+ if src.startswith('"""', pos):
716
+ return parse_multiline_str(src, pos, literal=False)
717
+ return parse_one_line_basic_str(src, pos)
718
+
719
+ # Literal strings
720
+ if char == "'":
721
+ if src.startswith("'''", pos):
722
+ return parse_multiline_str(src, pos, literal=True)
723
+ return parse_literal_str(src, pos)
724
+
725
+ # Booleans
726
+ if char == "t":
727
+ if src.startswith("true", pos):
728
+ return pos + 4, True
729
+ if char == "f":
730
+ if src.startswith("false", pos):
731
+ return pos + 5, False
732
+
733
+ # Arrays
734
+ if char == "[":
735
+ return parse_array(src, pos, parse_float, nest_lvl + 1)
736
+
737
+ # Inline tables
738
+ if char == "{":
739
+ return parse_inline_table(src, pos, parse_float, nest_lvl + 1)
740
+
741
+ # Dates and times
742
+ datetime_match = RE_DATETIME.match(src, pos)
743
+ if datetime_match:
744
+ try:
745
+ datetime_obj = match_to_datetime(datetime_match)
746
+ except ValueError as e:
747
+ raise TOMLDecodeError("Invalid date or datetime", src, pos) from e
748
+ return datetime_match.end(), datetime_obj
749
+ localtime_match = RE_LOCALTIME.match(src, pos)
750
+ if localtime_match:
751
+ return localtime_match.end(), match_to_localtime(localtime_match)
752
+
753
+ # Integers and "normal" floats.
754
+ # The regex will greedily match any type starting with a decimal
755
+ # char, so needs to be located after handling of dates and times.
756
+ number_match = RE_NUMBER.match(src, pos)
757
+ if number_match:
758
+ return number_match.end(), match_to_number(number_match, parse_float)
759
+
760
+ # Special floats
761
+ first_three = src[pos : pos + 3]
762
+ if first_three in {"inf", "nan"}:
763
+ return pos + 3, parse_float(first_three)
764
+ first_four = src[pos : pos + 4]
765
+ if first_four in {"-inf", "+inf", "-nan", "+nan"}:
766
+ return pos + 4, parse_float(first_four)
767
+
768
+ raise TOMLDecodeError("Invalid value", src, pos)
769
+
770
+
771
+ def is_unicode_scalar_value(codepoint: int) -> bool:
772
+ return (0 <= codepoint <= 55295) or (57344 <= codepoint <= 1114111)
773
+
774
+
775
+ def make_safe_parse_float(parse_float: ParseFloat) -> ParseFloat:
776
+ """A decorator to make `parse_float` safe.
777
+
778
+ `parse_float` must not return dicts or lists, because these types
779
+ would be mixed with parsed TOML tables and arrays, thus confusing
780
+ the parser. The returned decorated callable raises `ValueError`
781
+ instead of returning illegal types.
782
+ """
783
+ # The default `float` callable never returns illegal types. Optimize it.
784
+ if parse_float is float:
785
+ return float
786
+
787
+ def safe_parse_float(float_str: str) -> Any:
788
+ float_value = parse_float(float_str)
789
+ if isinstance(float_value, (dict, list)):
790
+ raise ValueError("parse_float must not return dicts or lists")
791
+ return float_value
792
+
793
+ return safe_parse_float
hug/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ from __future__ import annotations
6
+
7
+ from datetime import date, datetime, time, timedelta, timezone, tzinfo
8
+ from functools import lru_cache
9
+ import re
10
+
11
+ TYPE_CHECKING = False
12
+ if TYPE_CHECKING:
13
+ from typing import Any, Final
14
+
15
+ from ._types import ParseFloat
16
+
17
+ _TIME_RE_STR: Final = r"""
18
+ ([01][0-9]|2[0-3]) # hours
19
+ :([0-5][0-9]) # minutes
20
+ (?:
21
+ :([0-5][0-9]) # optional seconds
22
+ (?:\.([0-9]{1,6})[0-9]*)? # optional fractions of a second
23
+ )?
24
+ """
25
+
26
+ RE_NUMBER: Final = re.compile(
27
+ r"""
28
+ 0
29
+ (?:
30
+ x[0-9A-Fa-f](?:_?[0-9A-Fa-f])* # hex
31
+ |
32
+ b[01](?:_?[01])* # bin
33
+ |
34
+ o[0-7](?:_?[0-7])* # oct
35
+ )
36
+ |
37
+ [+-]?(?:0|[1-9](?:_?[0-9])*) # dec, integer part
38
+ (?P<floatpart>
39
+ (?:\.[0-9](?:_?[0-9])*)? # optional fractional part
40
+ (?:[eE][+-]?[0-9](?:_?[0-9])*)? # optional exponent part
41
+ )
42
+ """,
43
+ flags=re.VERBOSE,
44
+ )
45
+ RE_LOCALTIME: Final = re.compile(_TIME_RE_STR, flags=re.VERBOSE)
46
+ RE_DATETIME: Final = re.compile(
47
+ rf"""
48
+ ([0-9]{{4}})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) # date, e.g. 1988-10-27
49
+ (?:
50
+ [Tt ]
51
+ {_TIME_RE_STR}
52
+ (?:([Zz])|([+-])([01][0-9]|2[0-3]):([0-5][0-9]))? # optional time offset
53
+ )?
54
+ """,
55
+ flags=re.VERBOSE,
56
+ )
57
+
58
+
59
+ def match_to_datetime(match: re.Match[str]) -> datetime | date:
60
+ """Convert a `RE_DATETIME` match to `datetime.datetime` or `datetime.date`.
61
+
62
+ Raises ValueError if the match does not correspond to a valid date
63
+ or datetime.
64
+ """
65
+ (
66
+ year_str,
67
+ month_str,
68
+ day_str,
69
+ hour_str,
70
+ minute_str,
71
+ sec_str,
72
+ micros_str,
73
+ zulu_time,
74
+ offset_sign_str,
75
+ offset_hour_str,
76
+ offset_minute_str,
77
+ ) = match.groups()
78
+ year, month, day = int(year_str), int(month_str), int(day_str)
79
+ if hour_str is None:
80
+ return date(year, month, day)
81
+ hour, minute = int(hour_str), int(minute_str)
82
+ sec = int(sec_str) if sec_str else 0
83
+ micros = int(micros_str.ljust(6, "0")) if micros_str else 0
84
+ if offset_sign_str:
85
+ tz: tzinfo | None = cached_tz(
86
+ offset_hour_str, offset_minute_str, offset_sign_str
87
+ )
88
+ elif zulu_time:
89
+ tz = timezone.utc
90
+ else: # local date-time
91
+ tz = None
92
+ return datetime(year, month, day, hour, minute, sec, micros, tzinfo=tz)
93
+
94
+
95
+ # No need to limit cache size. This is only ever called on input
96
+ # that matched RE_DATETIME, so there is an implicit bound of
97
+ # 24 (hours) * 60 (minutes) * 2 (offset direction) = 2880.
98
+ @lru_cache(maxsize=None)
99
+ def cached_tz(hour_str: str, minute_str: str, sign_str: str) -> timezone:
100
+ sign = 1 if sign_str == "+" else -1
101
+ return timezone(
102
+ timedelta(
103
+ hours=sign * int(hour_str),
104
+ minutes=sign * int(minute_str),
105
+ )
106
+ )
107
+
108
+
109
+ def match_to_localtime(match: re.Match[str]) -> time:
110
+ hour_str, minute_str, sec_str, micros_str = match.groups()
111
+ sec = int(sec_str) if sec_str else 0
112
+ micros = int(micros_str.ljust(6, "0")) if micros_str else 0
113
+ return time(int(hour_str), int(minute_str), sec, micros)
114
+
115
+
116
+ def match_to_number(match: re.Match[str], parse_float: ParseFloat) -> Any:
117
+ if match.group("floatpart"):
118
+ return parse_float(match.group())
119
+ return int(match.group(), 0)
hug/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ from typing import Any, Callable, Tuple
6
+
7
+ # Type annotations
8
+ ParseFloat = Callable[[str], Any]
9
+ Key = Tuple[str, ...]
10
+ Pos = int
hug/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed ADDED
@@ -0,0 +1 @@
 
 
1
+ # Marker file for PEP 561
hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Taneli Hukkinen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/__init__.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ __all__ = ("dumps", "dump")
2
+ __version__ = "1.2.0" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT
3
+
4
+ from pip._vendor.tomli_w._writer import dump, dumps
hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/__pycache__/__init__.cpython-312.pyc ADDED
Binary file (323 Bytes). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/__pycache__/_writer.cpython-312.pyc ADDED
Binary file (10.4 kB). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/_writer.py ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from datetime import date, datetime, time
5
+ from types import MappingProxyType
6
+
7
+ TYPE_CHECKING = False
8
+ if TYPE_CHECKING:
9
+ from collections.abc import Generator
10
+ from decimal import Decimal
11
+ from typing import IO, Any, Final
12
+
13
+ ASCII_CTRL = frozenset(chr(i) for i in range(32)) | frozenset(chr(127))
14
+ ILLEGAL_BASIC_STR_CHARS = frozenset('"\\') | ASCII_CTRL - frozenset("\t")
15
+ BARE_KEY_CHARS = frozenset(
16
+ "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789" "-_"
17
+ )
18
+ ARRAY_TYPES = (list, tuple)
19
+ MAX_LINE_LENGTH = 100
20
+
21
+ COMPACT_ESCAPES = MappingProxyType(
22
+ {
23
+ "\u0008": "\\b", # backspace
24
+ "\u000A": "\\n", # linefeed
25
+ "\u000C": "\\f", # form feed
26
+ "\u000D": "\\r", # carriage return
27
+ "\u0022": '\\"', # quote
28
+ "\u005C": "\\\\", # backslash
29
+ }
30
+ )
31
+
32
+
33
+ class Context:
34
+ def __init__(self, allow_multiline: bool, indent: int):
35
+ if indent < 0:
36
+ raise ValueError("Indent width must be non-negative")
37
+ self.allow_multiline: Final = allow_multiline
38
+ # cache rendered inline tables (mapping from object id to rendered inline table)
39
+ self.inline_table_cache: Final[dict[int, str]] = {}
40
+ self.indent_str: Final = " " * indent
41
+
42
+
43
+ def dump(
44
+ obj: Mapping[str, Any],
45
+ fp: IO[bytes],
46
+ /,
47
+ *,
48
+ multiline_strings: bool = False,
49
+ indent: int = 4,
50
+ ) -> None:
51
+ ctx = Context(multiline_strings, indent)
52
+ for chunk in gen_table_chunks(obj, ctx, name=""):
53
+ fp.write(chunk.encode())
54
+
55
+
56
+ def dumps(
57
+ obj: Mapping[str, Any], /, *, multiline_strings: bool = False, indent: int = 4
58
+ ) -> str:
59
+ ctx = Context(multiline_strings, indent)
60
+ return "".join(gen_table_chunks(obj, ctx, name=""))
61
+
62
+
63
+ def gen_table_chunks(
64
+ table: Mapping[str, Any],
65
+ ctx: Context,
66
+ *,
67
+ name: str,
68
+ inside_aot: bool = False,
69
+ ) -> Generator[str, None, None]:
70
+ yielded = False
71
+ literals = []
72
+ tables: list[tuple[str, Any, bool]] = [] # => [(key, value, inside_aot)]
73
+ for k, v in table.items():
74
+ if isinstance(v, Mapping):
75
+ tables.append((k, v, False))
76
+ elif is_aot(v) and not all(is_suitable_inline_table(t, ctx) for t in v):
77
+ tables.extend((k, t, True) for t in v)
78
+ else:
79
+ literals.append((k, v))
80
+
81
+ if inside_aot or name and (literals or not tables):
82
+ yielded = True
83
+ yield f"[[{name}]]\n" if inside_aot else f"[{name}]\n"
84
+
85
+ if literals:
86
+ yielded = True
87
+ for k, v in literals:
88
+ yield f"{format_key_part(k)} = {format_literal(v, ctx)}\n"
89
+
90
+ for k, v, in_aot in tables:
91
+ if yielded:
92
+ yield "\n"
93
+ else:
94
+ yielded = True
95
+ key_part = format_key_part(k)
96
+ display_name = f"{name}.{key_part}" if name else key_part
97
+ yield from gen_table_chunks(v, ctx, name=display_name, inside_aot=in_aot)
98
+
99
+
100
+ def format_literal(obj: object, ctx: Context, *, nest_level: int = 0) -> str:
101
+ if isinstance(obj, bool):
102
+ return "true" if obj else "false"
103
+ if isinstance(obj, (int, float, date, datetime)):
104
+ return str(obj)
105
+ if isinstance(obj, time):
106
+ if obj.tzinfo:
107
+ raise ValueError("TOML does not support offset times")
108
+ return str(obj)
109
+ if isinstance(obj, str):
110
+ return format_string(obj, allow_multiline=ctx.allow_multiline)
111
+ if isinstance(obj, ARRAY_TYPES):
112
+ return format_inline_array(obj, ctx, nest_level)
113
+ if isinstance(obj, Mapping):
114
+ return format_inline_table(obj, ctx)
115
+
116
+ # Lazy import to improve module import time
117
+ from decimal import Decimal
118
+
119
+ if isinstance(obj, Decimal):
120
+ return format_decimal(obj)
121
+ raise TypeError(
122
+ f"Object of type '{type(obj).__qualname__}' is not TOML serializable"
123
+ )
124
+
125
+
126
+ def format_decimal(obj: Decimal) -> str:
127
+ if obj.is_nan():
128
+ return "nan"
129
+ if obj.is_infinite():
130
+ return "-inf" if obj.is_signed() else "inf"
131
+ dec_str = str(obj).lower()
132
+ return dec_str if "." in dec_str or "e" in dec_str else dec_str + ".0"
133
+
134
+
135
+ def format_inline_table(obj: Mapping, ctx: Context) -> str:
136
+ # check cache first
137
+ obj_id = id(obj)
138
+ if obj_id in ctx.inline_table_cache:
139
+ return ctx.inline_table_cache[obj_id]
140
+
141
+ if not obj:
142
+ rendered = "{}"
143
+ else:
144
+ rendered = (
145
+ "{ "
146
+ + ", ".join(
147
+ f"{format_key_part(k)} = {format_literal(v, ctx)}"
148
+ for k, v in obj.items()
149
+ )
150
+ + " }"
151
+ )
152
+ ctx.inline_table_cache[obj_id] = rendered
153
+ return rendered
154
+
155
+
156
+ def format_inline_array(obj: tuple | list, ctx: Context, nest_level: int) -> str:
157
+ if not obj:
158
+ return "[]"
159
+ item_indent = ctx.indent_str * (1 + nest_level)
160
+ closing_bracket_indent = ctx.indent_str * nest_level
161
+ return (
162
+ "[\n"
163
+ + ",\n".join(
164
+ item_indent + format_literal(item, ctx, nest_level=nest_level + 1)
165
+ for item in obj
166
+ )
167
+ + f",\n{closing_bracket_indent}]"
168
+ )
169
+
170
+
171
+ def format_key_part(part: str) -> str:
172
+ try:
173
+ only_bare_key_chars = BARE_KEY_CHARS.issuperset(part)
174
+ except TypeError:
175
+ raise TypeError(
176
+ f"Invalid mapping key '{part}' of type '{type(part).__qualname__}'."
177
+ " A string is required."
178
+ ) from None
179
+
180
+ if part and only_bare_key_chars:
181
+ return part
182
+ return format_string(part, allow_multiline=False)
183
+
184
+
185
+ def format_string(s: str, *, allow_multiline: bool) -> str:
186
+ do_multiline = allow_multiline and "\n" in s
187
+ if do_multiline:
188
+ result = '"""\n'
189
+ s = s.replace("\r\n", "\n")
190
+ else:
191
+ result = '"'
192
+
193
+ pos = seq_start = 0
194
+ while True:
195
+ try:
196
+ char = s[pos]
197
+ except IndexError:
198
+ result += s[seq_start:pos]
199
+ if do_multiline:
200
+ return result + '"""'
201
+ return result + '"'
202
+ if char in ILLEGAL_BASIC_STR_CHARS:
203
+ result += s[seq_start:pos]
204
+ if char in COMPACT_ESCAPES:
205
+ if do_multiline and char == "\n":
206
+ result += "\n"
207
+ else:
208
+ result += COMPACT_ESCAPES[char]
209
+ else:
210
+ result += "\\u" + hex(ord(char))[2:].rjust(4, "0")
211
+ seq_start = pos + 1
212
+ pos += 1
213
+
214
+
215
+ def is_aot(obj: Any) -> bool:
216
+ """Decides if an object behaves as an array of tables (i.e. a nonempty list
217
+ of dicts)."""
218
+ return bool(
219
+ isinstance(obj, ARRAY_TYPES)
220
+ and obj
221
+ and all(isinstance(v, Mapping) for v in obj)
222
+ )
223
+
224
+
225
+ def is_suitable_inline_table(obj: Mapping, ctx: Context) -> bool:
226
+ """Use heuristics to decide if the inline-style representation is a good
227
+ choice for a given table."""
228
+ rendered_inline = f"{ctx.indent_str}{format_inline_table(obj, ctx)},"
229
+ return len(rendered_inline) <= MAX_LINE_LENGTH and "\n" not in rendered_inline
hug/lib/python3.12/site-packages/pip/_vendor/tomli_w/py.typed ADDED
@@ -0,0 +1 @@
 
 
1
+ # Marker file for PEP 561
hug/lib/python3.12/site-packages/pip/_vendor/truststore/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 Seth Michael Larson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
hug/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Verify certificates using native system trust stores"""
2
+
3
+ import sys as _sys
4
+
5
+ if _sys.version_info < (3, 10):
6
+ raise ImportError("truststore requires Python 3.10 or later")
7
+
8
+ # Detect Python runtimes which don't implement SSLObject.get_unverified_chain() API
9
+ # This API only became public in Python 3.13 but was available in CPython and PyPy since 3.10.
10
+ if _sys.version_info < (3, 13) and _sys.implementation.name not in ("cpython", "pypy"):
11
+ try:
12
+ import ssl as _ssl
13
+ except ImportError:
14
+ raise ImportError("truststore requires the 'ssl' module")
15
+ else:
16
+ _sslmem = _ssl.MemoryBIO()
17
+ _sslobj = _ssl.create_default_context().wrap_bio(
18
+ _sslmem,
19
+ _sslmem,
20
+ )
21
+ try:
22
+ while not hasattr(_sslobj, "get_unverified_chain"):
23
+ _sslobj = _sslobj._sslobj # type: ignore[attr-defined]
24
+ except AttributeError:
25
+ raise ImportError(
26
+ "truststore requires peer certificate chain APIs to be available"
27
+ ) from None
28
+
29
+ del _ssl, _sslobj, _sslmem # noqa: F821
30
+
31
+ from ._api import SSLContext, extract_from_ssl, inject_into_ssl # noqa: E402
32
+
33
+ del _api, _sys # type: ignore[name-defined] # noqa: F821
34
+
35
+ __all__ = ["SSLContext", "inject_into_ssl", "extract_from_ssl"]
36
+ __version__ = "0.10.4"
hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc ADDED
Binary file (1.45 kB). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc ADDED
Binary file (17.5 kB). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc ADDED
Binary file (19 kB). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc ADDED
Binary file (2.26 kB). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc ADDED
Binary file (1.1 kB). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc ADDED
Binary file (15.8 kB). View file
 
hug/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import contextlib
2
+ import os
3
+ import platform
4
+ import socket
5
+ import ssl
6
+ import sys
7
+ import threading
8
+ import typing
9
+
10
+ import _ssl
11
+
12
+ from ._ssl_constants import (
13
+ _original_SSLContext,
14
+ _original_super_SSLContext,
15
+ _truststore_SSLContext_dunder_class,
16
+ _truststore_SSLContext_super_class,
17
+ )
18
+
19
+ if platform.system() == "Windows":
20
+ from ._windows import _configure_context, _verify_peercerts_impl
21
+ elif platform.system() == "Darwin":
22
+ from ._macos import _configure_context, _verify_peercerts_impl
23
+ else:
24
+ from ._openssl import _configure_context, _verify_peercerts_impl
25
+
26
+ if typing.TYPE_CHECKING:
27
+ from typing_extensions import Buffer
28
+
29
+ # From typeshed/stdlib/ssl.pyi
30
+ _StrOrBytesPath: typing.TypeAlias = str | bytes | os.PathLike[str] | os.PathLike[bytes]
31
+ _PasswordType: typing.TypeAlias = str | bytes | typing.Callable[[], str | bytes]
32
+
33
+
34
+ def inject_into_ssl() -> None:
35
+ """Injects the :class:`truststore.SSLContext` into the ``ssl``
36
+ module by replacing :class:`ssl.SSLContext`.
37
+ """
38
+ setattr(ssl, "SSLContext", SSLContext)
39
+ # urllib3 holds on to its own reference of ssl.SSLContext
40
+ # so we need to replace that reference too.
41
+ try:
42
+ import pip._vendor.urllib3.util.ssl_ as urllib3_ssl
43
+
44
+ setattr(urllib3_ssl, "SSLContext", SSLContext)
45
+ except ImportError:
46
+ pass
47
+
48
+ # requests starting with 2.32.0 added a preloaded SSL context to improve concurrent performance;
49
+ # this unfortunately leads to a RecursionError, which can be avoided by patching the preloaded SSL context with
50
+ # the truststore patched instance
51
+ # also see https://github.com/psf/requests/pull/6667
52
+ try:
53
+ from pip._vendor.requests import adapters as requests_adapters
54
+
55
+ preloaded_context = getattr(requests_adapters, "_preloaded_ssl_context", None)
56
+ if preloaded_context is not None:
57
+ setattr(
58
+ requests_adapters,
59
+ "_preloaded_ssl_context",
60
+ SSLContext(ssl.PROTOCOL_TLS_CLIENT),
61
+ )
62
+ except ImportError:
63
+ pass
64
+
65
+
66
+ def extract_from_ssl() -> None:
67
+ """Restores the :class:`ssl.SSLContext` class to its original state"""
68
+ setattr(ssl, "SSLContext", _original_SSLContext)
69
+ try:
70
+ import pip._vendor.urllib3.util.ssl_ as urllib3_ssl
71
+
72
+ urllib3_ssl.SSLContext = _original_SSLContext
73
+ except ImportError:
74
+ pass
75
+
76
+
77
+ class SSLContext(_truststore_SSLContext_super_class): # type: ignore[misc]
78
+ """SSLContext API that uses system certificates on all platforms"""
79
+
80
+ @property # type: ignore[misc]
81
+ def __class__(self) -> type:
82
+ # Dirty hack to get around isinstance() checks
83
+ # for ssl.SSLContext instances in aiohttp/trustme
84
+ # when using non-CPython implementations.
85
+ return _truststore_SSLContext_dunder_class or SSLContext
86
+
87
+ def __init__(self, protocol: int = None) -> None: # type: ignore[assignment]
88
+ self._ctx = _original_SSLContext(protocol)
89
+ self._ctx_lock = threading.Lock()
90
+
91
+ class TruststoreSSLObject(ssl.SSLObject):
92
+ # This object exists because wrap_bio() doesn't
93
+ # immediately do the handshake so we need to do
94
+ # certificate verifications after SSLObject.do_handshake()
95
+
96
+ def do_handshake(self) -> None:
97
+ ret = super().do_handshake()
98
+ _verify_peercerts(self, server_hostname=self.server_hostname)
99
+ return ret
100
+
101
+ self._ctx.sslobject_class = TruststoreSSLObject
102
+
103
+ def wrap_socket(
104
+ self,
105
+ sock: socket.socket,
106
+ server_side: bool = False,
107
+ do_handshake_on_connect: bool = True,
108
+ suppress_ragged_eofs: bool = True,
109
+ server_hostname: str | None = None,
110
+ session: ssl.SSLSession | None = None,
111
+ ) -> ssl.SSLSocket:
112
+
113
+ # We need to lock around the .__enter__()
114
+ # but we don't need to lock within the
115
+ # context manager, so we need to expand the
116
+ # syntactic sugar of the `with` statement.
117
+ with contextlib.ExitStack() as stack:
118
+ with self._ctx_lock:
119
+ stack.enter_context(_configure_context(self._ctx))
120
+
121
+ ssl_sock = self._ctx.wrap_socket(
122
+ sock,
123
+ server_side=server_side,
124
+ server_hostname=server_hostname,
125
+ do_handshake_on_connect=do_handshake_on_connect,
126
+ suppress_ragged_eofs=suppress_ragged_eofs,
127
+ session=session,
128
+ )
129
+ try:
130
+ _verify_peercerts(ssl_sock, server_hostname=server_hostname)
131
+ except Exception:
132
+ ssl_sock.close()
133
+ raise
134
+ return ssl_sock
135
+
136
+ def wrap_bio(
137
+ self,
138
+ incoming: ssl.MemoryBIO,
139
+ outgoing: ssl.MemoryBIO,
140
+ server_side: bool = False,
141
+ server_hostname: str | None = None,
142
+ session: ssl.SSLSession | None = None,
143
+ ) -> ssl.SSLObject:
144
+ with _configure_context(self._ctx):
145
+ ssl_obj = self._ctx.wrap_bio(
146
+ incoming,
147
+ outgoing,
148
+ server_hostname=server_hostname,
149
+ server_side=server_side,
150
+ session=session,
151
+ )
152
+ return ssl_obj
153
+
154
+ def load_verify_locations(
155
+ self,
156
+ cafile: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None,
157
+ capath: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None,
158
+ cadata: typing.Union[str, "Buffer", None] = None,
159
+ ) -> None:
160
+ return self._ctx.load_verify_locations(
161
+ cafile=cafile, capath=capath, cadata=cadata
162
+ )
163
+
164
+ def load_cert_chain(
165
+ self,
166
+ certfile: _StrOrBytesPath,
167
+ keyfile: _StrOrBytesPath | None = None,
168
+ password: _PasswordType | None = None,
169
+ ) -> None:
170
+ return self._ctx.load_cert_chain(
171
+ certfile=certfile, keyfile=keyfile, password=password
172
+ )
173
+
174
+ def load_default_certs(
175
+ self, purpose: ssl.Purpose = ssl.Purpose.SERVER_AUTH
176
+ ) -> None:
177
+ return self._ctx.load_default_certs(purpose)
178
+
179
+ def set_alpn_protocols(self, alpn_protocols: typing.Iterable[str]) -> None:
180
+ return self._ctx.set_alpn_protocols(alpn_protocols)
181
+
182
+ def set_npn_protocols(self, npn_protocols: typing.Iterable[str]) -> None:
183
+ return self._ctx.set_npn_protocols(npn_protocols)
184
+
185
+ def set_ciphers(self, __cipherlist: str) -> None:
186
+ return self._ctx.set_ciphers(__cipherlist)
187
+
188
+ def get_ciphers(self) -> typing.Any:
189
+ return self._ctx.get_ciphers()
190
+
191
+ def session_stats(self) -> dict[str, int]:
192
+ return self._ctx.session_stats()
193
+
194
+ def cert_store_stats(self) -> dict[str, int]:
195
+ raise NotImplementedError()
196
+
197
+ def set_default_verify_paths(self) -> None:
198
+ self._ctx.set_default_verify_paths()
199
+
200
+ @typing.overload
201
+ def get_ca_certs(
202
+ self, binary_form: typing.Literal[False] = ...
203
+ ) -> list[typing.Any]: ...
204
+
205
+ @typing.overload
206
+ def get_ca_certs(self, binary_form: typing.Literal[True] = ...) -> list[bytes]: ...
207
+
208
+ @typing.overload
209
+ def get_ca_certs(self, binary_form: bool = ...) -> typing.Any: ...
210
+
211
+ def get_ca_certs(self, binary_form: bool = False) -> list[typing.Any] | list[bytes]:
212
+ raise NotImplementedError()
213
+
214
+ @property
215
+ def check_hostname(self) -> bool:
216
+ return self._ctx.check_hostname
217
+
218
+ @check_hostname.setter
219
+ def check_hostname(self, value: bool) -> None:
220
+ self._ctx.check_hostname = value
221
+
222
+ @property
223
+ def hostname_checks_common_name(self) -> bool:
224
+ return self._ctx.hostname_checks_common_name
225
+
226
+ @hostname_checks_common_name.setter
227
+ def hostname_checks_common_name(self, value: bool) -> None:
228
+ self._ctx.hostname_checks_common_name = value
229
+
230
+ @property
231
+ def keylog_filename(self) -> str:
232
+ return self._ctx.keylog_filename
233
+
234
+ @keylog_filename.setter
235
+ def keylog_filename(self, value: str) -> None:
236
+ self._ctx.keylog_filename = value
237
+
238
+ @property
239
+ def maximum_version(self) -> ssl.TLSVersion:
240
+ return self._ctx.maximum_version
241
+
242
+ @maximum_version.setter
243
+ def maximum_version(self, value: ssl.TLSVersion) -> None:
244
+ _original_super_SSLContext.maximum_version.__set__( # type: ignore[attr-defined]
245
+ self._ctx, value
246
+ )
247
+
248
+ @property
249
+ def minimum_version(self) -> ssl.TLSVersion:
250
+ return self._ctx.minimum_version
251
+
252
+ @minimum_version.setter
253
+ def minimum_version(self, value: ssl.TLSVersion) -> None:
254
+ _original_super_SSLContext.minimum_version.__set__( # type: ignore[attr-defined]
255
+ self._ctx, value
256
+ )
257
+
258
+ @property
259
+ def options(self) -> ssl.Options:
260
+ return self._ctx.options
261
+
262
+ @options.setter
263
+ def options(self, value: ssl.Options) -> None:
264
+ _original_super_SSLContext.options.__set__( # type: ignore[attr-defined]
265
+ self._ctx, value
266
+ )
267
+
268
+ @property
269
+ def post_handshake_auth(self) -> bool:
270
+ return self._ctx.post_handshake_auth
271
+
272
+ @post_handshake_auth.setter
273
+ def post_handshake_auth(self, value: bool) -> None:
274
+ self._ctx.post_handshake_auth = value
275
+
276
+ @property
277
+ def protocol(self) -> ssl._SSLMethod:
278
+ return self._ctx.protocol
279
+
280
+ @property
281
+ def security_level(self) -> int:
282
+ return self._ctx.security_level
283
+
284
+ @property
285
+ def verify_flags(self) -> ssl.VerifyFlags:
286
+ return self._ctx.verify_flags
287
+
288
+ @verify_flags.setter
289
+ def verify_flags(self, value: ssl.VerifyFlags) -> None:
290
+ _original_super_SSLContext.verify_flags.__set__( # type: ignore[attr-defined]
291
+ self._ctx, value
292
+ )
293
+
294
+ @property
295
+ def verify_mode(self) -> ssl.VerifyMode:
296
+ return self._ctx.verify_mode
297
+
298
+ @verify_mode.setter
299
+ def verify_mode(self, value: ssl.VerifyMode) -> None:
300
+ _original_super_SSLContext.verify_mode.__set__( # type: ignore[attr-defined]
301
+ self._ctx, value
302
+ )
303
+
304
+
305
+ # Python 3.13+ makes get_unverified_chain() a public API that only returns DER
306
+ # encoded certificates. We detect whether we need to call public_bytes() for 3.10->3.12
307
+ # Pre-3.13 returned None instead of an empty list from get_unverified_chain()
308
+ if sys.version_info >= (3, 13):
309
+
310
+ def _get_unverified_chain_bytes(sslobj: ssl.SSLObject) -> list[bytes]:
311
+ unverified_chain = sslobj.get_unverified_chain() or ()
312
+ return [
313
+ cert if isinstance(cert, bytes) else cert.public_bytes(_ssl.ENCODING_DER)
314
+ for cert in unverified_chain
315
+ ]
316
+
317
+ else:
318
+
319
+ def _get_unverified_chain_bytes(sslobj: ssl.SSLObject) -> list[bytes]:
320
+ unverified_chain = sslobj.get_unverified_chain() or () # type: ignore[attr-defined]
321
+ return [cert.public_bytes(_ssl.ENCODING_DER) for cert in unverified_chain]
322
+
323
+
324
+ def _verify_peercerts(
325
+ sock_or_sslobj: ssl.SSLSocket | ssl.SSLObject, server_hostname: str | None
326
+ ) -> None:
327
+ """
328
+ Verifies the peer certificates from an SSLSocket or SSLObject
329
+ against the certificates in the OS trust store.
330
+ """
331
+ sslobj: ssl.SSLObject = sock_or_sslobj # type: ignore[assignment]
332
+ try:
333
+ while not hasattr(sslobj, "get_unverified_chain"):
334
+ sslobj = sslobj._sslobj # type: ignore[attr-defined]
335
+ except AttributeError:
336
+ pass
337
+
338
+ cert_bytes = _get_unverified_chain_bytes(sslobj)
339
+ _verify_peercerts_impl(
340
+ sock_or_sslobj.context, cert_bytes, server_hostname=server_hostname
341
+ )
hug/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py ADDED
@@ -0,0 +1,571 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import contextlib
2
+ import ctypes
3
+ import platform
4
+ import ssl
5
+ import typing
6
+ from ctypes import (
7
+ CDLL,
8
+ POINTER,
9
+ c_bool,
10
+ c_char_p,
11
+ c_int32,
12
+ c_long,
13
+ c_uint32,
14
+ c_ulong,
15
+ c_void_p,
16
+ )
17
+ from ctypes.util import find_library
18
+
19
+ from ._ssl_constants import _set_ssl_context_verify_mode
20
+
21
+ _mac_version = platform.mac_ver()[0]
22
+ _mac_version_info = tuple(map(int, _mac_version.split(".")))
23
+ if _mac_version_info < (10, 8):
24
+ raise ImportError(
25
+ f"Only OS X 10.8 and newer are supported, not {_mac_version_info[0]}.{_mac_version_info[1]}"
26
+ )
27
+
28
+ _is_macos_version_10_14_or_later = _mac_version_info >= (10, 14)
29
+
30
+
31
+ def _load_cdll(name: str, macos10_16_path: str) -> CDLL:
32
+ """Loads a CDLL by name, falling back to known path on 10.16+"""
33
+ try:
34
+ # Big Sur is technically 11 but we use 10.16 due to the Big Sur
35
+ # beta being labeled as 10.16.
36
+ path: str | None
37
+ if _mac_version_info >= (10, 16):
38
+ path = macos10_16_path
39
+ else:
40
+ path = find_library(name)
41
+ if not path:
42
+ raise OSError # Caught and reraised as 'ImportError'
43
+ return CDLL(path, use_errno=True)
44
+ except OSError:
45
+ raise ImportError(f"The library {name} failed to load") from None
46
+
47
+
48
+ Security = _load_cdll(
49
+ "Security", "/System/Library/Frameworks/Security.framework/Security"
50
+ )
51
+ CoreFoundation = _load_cdll(
52
+ "CoreFoundation",
53
+ "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation",
54
+ )
55
+
56
+ Boolean = c_bool
57
+ CFIndex = c_long
58
+ CFStringEncoding = c_uint32
59
+ CFData = c_void_p
60
+ CFString = c_void_p
61
+ CFArray = c_void_p
62
+ CFMutableArray = c_void_p
63
+ CFError = c_void_p
64
+ CFType = c_void_p
65
+ CFTypeID = c_ulong
66
+ CFTypeRef = POINTER(CFType)
67
+ CFAllocatorRef = c_void_p
68
+
69
+ OSStatus = c_int32
70
+
71
+ CFErrorRef = POINTER(CFError)
72
+ CFDataRef = POINTER(CFData)
73
+ CFStringRef = POINTER(CFString)
74
+ CFArrayRef = POINTER(CFArray)
75
+ CFMutableArrayRef = POINTER(CFMutableArray)
76
+ CFArrayCallBacks = c_void_p
77
+ CFOptionFlags = c_uint32
78
+
79
+ SecCertificateRef = POINTER(c_void_p)
80
+ SecPolicyRef = POINTER(c_void_p)
81
+ SecTrustRef = POINTER(c_void_p)
82
+ SecTrustResultType = c_uint32
83
+ SecTrustOptionFlags = c_uint32
84
+
85
+ try:
86
+ Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef]
87
+ Security.SecCertificateCreateWithData.restype = SecCertificateRef
88
+
89
+ Security.SecCertificateCopyData.argtypes = [SecCertificateRef]
90
+ Security.SecCertificateCopyData.restype = CFDataRef
91
+
92
+ Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p]
93
+ Security.SecCopyErrorMessageString.restype = CFStringRef
94
+
95
+ Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef]
96
+ Security.SecTrustSetAnchorCertificates.restype = OSStatus
97
+
98
+ Security.SecTrustSetAnchorCertificatesOnly.argtypes = [SecTrustRef, Boolean]
99
+ Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus
100
+
101
+ Security.SecPolicyCreateRevocation.argtypes = [CFOptionFlags]
102
+ Security.SecPolicyCreateRevocation.restype = SecPolicyRef
103
+
104
+ Security.SecPolicyCreateSSL.argtypes = [Boolean, CFStringRef]
105
+ Security.SecPolicyCreateSSL.restype = SecPolicyRef
106
+
107
+ Security.SecTrustCreateWithCertificates.argtypes = [
108
+ CFTypeRef,
109
+ CFTypeRef,
110
+ POINTER(SecTrustRef),
111
+ ]
112
+ Security.SecTrustCreateWithCertificates.restype = OSStatus
113
+
114
+ Security.SecTrustGetTrustResult.argtypes = [
115
+ SecTrustRef,
116
+ POINTER(SecTrustResultType),
117
+ ]
118
+ Security.SecTrustGetTrustResult.restype = OSStatus
119
+
120
+ Security.SecTrustEvaluate.argtypes = [
121
+ SecTrustRef,
122
+ POINTER(SecTrustResultType),
123
+ ]
124
+ Security.SecTrustEvaluate.restype = OSStatus
125
+
126
+ Security.SecTrustRef = SecTrustRef # type: ignore[attr-defined]
127
+ Security.SecTrustResultType = SecTrustResultType # type: ignore[attr-defined]
128
+ Security.OSStatus = OSStatus # type: ignore[attr-defined]
129
+
130
+ kSecRevocationUseAnyAvailableMethod = 3
131
+ kSecRevocationRequirePositiveResponse = 8
132
+
133
+ CoreFoundation.CFRelease.argtypes = [CFTypeRef]
134
+ CoreFoundation.CFRelease.restype = None
135
+
136
+ CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef]
137
+ CoreFoundation.CFGetTypeID.restype = CFTypeID
138
+
139
+ CoreFoundation.CFStringCreateWithCString.argtypes = [
140
+ CFAllocatorRef,
141
+ c_char_p,
142
+ CFStringEncoding,
143
+ ]
144
+ CoreFoundation.CFStringCreateWithCString.restype = CFStringRef
145
+
146
+ CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding]
147
+ CoreFoundation.CFStringGetCStringPtr.restype = c_char_p
148
+
149
+ CoreFoundation.CFStringGetCString.argtypes = [
150
+ CFStringRef,
151
+ c_char_p,
152
+ CFIndex,
153
+ CFStringEncoding,
154
+ ]
155
+ CoreFoundation.CFStringGetCString.restype = c_bool
156
+
157
+ CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex]
158
+ CoreFoundation.CFDataCreate.restype = CFDataRef
159
+
160
+ CoreFoundation.CFDataGetLength.argtypes = [CFDataRef]
161
+ CoreFoundation.CFDataGetLength.restype = CFIndex
162
+
163
+ CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef]
164
+ CoreFoundation.CFDataGetBytePtr.restype = c_void_p
165
+
166
+ CoreFoundation.CFArrayCreate.argtypes = [
167
+ CFAllocatorRef,
168
+ POINTER(CFTypeRef),
169
+ CFIndex,
170
+ CFArrayCallBacks,
171
+ ]
172
+ CoreFoundation.CFArrayCreate.restype = CFArrayRef
173
+
174
+ CoreFoundation.CFArrayCreateMutable.argtypes = [
175
+ CFAllocatorRef,
176
+ CFIndex,
177
+ CFArrayCallBacks,
178
+ ]
179
+ CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef
180
+
181
+ CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p]
182
+ CoreFoundation.CFArrayAppendValue.restype = None
183
+
184
+ CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef]
185
+ CoreFoundation.CFArrayGetCount.restype = CFIndex
186
+
187
+ CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex]
188
+ CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p
189
+
190
+ CoreFoundation.CFErrorGetCode.argtypes = [CFErrorRef]
191
+ CoreFoundation.CFErrorGetCode.restype = CFIndex
192
+
193
+ CoreFoundation.CFErrorCopyDescription.argtypes = [CFErrorRef]
194
+ CoreFoundation.CFErrorCopyDescription.restype = CFStringRef
195
+
196
+ CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( # type: ignore[attr-defined]
197
+ CoreFoundation, "kCFAllocatorDefault"
198
+ )
199
+ CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll( # type: ignore[attr-defined]
200
+ CoreFoundation, "kCFTypeArrayCallBacks"
201
+ )
202
+
203
+ CoreFoundation.CFTypeRef = CFTypeRef # type: ignore[attr-defined]
204
+ CoreFoundation.CFArrayRef = CFArrayRef # type: ignore[attr-defined]
205
+ CoreFoundation.CFStringRef = CFStringRef # type: ignore[attr-defined]
206
+ CoreFoundation.CFErrorRef = CFErrorRef # type: ignore[attr-defined]
207
+
208
+ except AttributeError as e:
209
+ raise ImportError(f"Error initializing ctypes: {e}") from None
210
+
211
+ # SecTrustEvaluateWithError is macOS 10.14+
212
+ if _is_macos_version_10_14_or_later:
213
+ try:
214
+ Security.SecTrustEvaluateWithError.argtypes = [
215
+ SecTrustRef,
216
+ POINTER(CFErrorRef),
217
+ ]
218
+ Security.SecTrustEvaluateWithError.restype = c_bool
219
+ except AttributeError as e:
220
+ raise ImportError(f"Error initializing ctypes: {e}") from None
221
+
222
+
223
+ def _handle_osstatus(result: OSStatus, _: typing.Any, args: typing.Any) -> typing.Any:
224
+ """
225
+ Raises an error if the OSStatus value is non-zero.
226
+ """
227
+ if int(result) == 0:
228
+ return args
229
+
230
+ # Returns a CFString which we need to transform
231
+ # into a UTF-8 Python string.
232
+ error_message_cfstring = None
233
+ try:
234
+ error_message_cfstring = Security.SecCopyErrorMessageString(result, None)
235
+
236
+ # First step is convert the CFString into a C string pointer.
237
+ # We try the fast no-copy way first.
238
+ error_message_cfstring_c_void_p = ctypes.cast(
239
+ error_message_cfstring, ctypes.POINTER(ctypes.c_void_p)
240
+ )
241
+ message = CoreFoundation.CFStringGetCStringPtr(
242
+ error_message_cfstring_c_void_p, CFConst.kCFStringEncodingUTF8
243
+ )
244
+
245
+ # Quoting the Apple dev docs:
246
+ #
247
+ # "A pointer to a C string or NULL if the internal
248
+ # storage of theString does not allow this to be
249
+ # returned efficiently."
250
+ #
251
+ # So we need to get our hands dirty.
252
+ if message is None:
253
+ buffer = ctypes.create_string_buffer(1024)
254
+ result = CoreFoundation.CFStringGetCString(
255
+ error_message_cfstring_c_void_p,
256
+ buffer,
257
+ 1024,
258
+ CFConst.kCFStringEncodingUTF8,
259
+ )
260
+ if not result:
261
+ raise OSError("Error copying C string from CFStringRef")
262
+ message = buffer.value
263
+
264
+ finally:
265
+ if error_message_cfstring is not None:
266
+ CoreFoundation.CFRelease(error_message_cfstring)
267
+
268
+ # If no message can be found for this status we come
269
+ # up with a generic one that forwards the status code.
270
+ if message is None or message == "":
271
+ message = f"SecureTransport operation returned a non-zero OSStatus: {result}"
272
+
273
+ raise ssl.SSLError(message)
274
+
275
+
276
+ Security.SecTrustCreateWithCertificates.errcheck = _handle_osstatus # type: ignore[assignment]
277
+ Security.SecTrustSetAnchorCertificates.errcheck = _handle_osstatus # type: ignore[assignment]
278
+ Security.SecTrustSetAnchorCertificatesOnly.errcheck = _handle_osstatus # type: ignore[assignment]
279
+ Security.SecTrustGetTrustResult.errcheck = _handle_osstatus # type: ignore[assignment]
280
+ Security.SecTrustEvaluate.errcheck = _handle_osstatus # type: ignore[assignment]
281
+
282
+
283
+ class CFConst:
284
+ """CoreFoundation constants"""
285
+
286
+ kCFStringEncodingUTF8 = CFStringEncoding(0x08000100)
287
+
288
+ errSecIncompleteCertRevocationCheck = -67635
289
+ errSecHostNameMismatch = -67602
290
+ errSecCertificateExpired = -67818
291
+ errSecNotTrusted = -67843
292
+
293
+
294
+ def _bytes_to_cf_data_ref(value: bytes) -> CFDataRef: # type: ignore[valid-type]
295
+ return CoreFoundation.CFDataCreate( # type: ignore[no-any-return]
296
+ CoreFoundation.kCFAllocatorDefault, value, len(value)
297
+ )
298
+
299
+
300
+ def _bytes_to_cf_string(value: bytes) -> CFString:
301
+ """
302
+ Given a Python binary data, create a CFString.
303
+ The string must be CFReleased by the caller.
304
+ """
305
+ c_str = ctypes.c_char_p(value)
306
+ cf_str = CoreFoundation.CFStringCreateWithCString(
307
+ CoreFoundation.kCFAllocatorDefault,
308
+ c_str,
309
+ CFConst.kCFStringEncodingUTF8,
310
+ )
311
+ return cf_str # type: ignore[no-any-return]
312
+
313
+
314
+ def _cf_string_ref_to_str(cf_string_ref: CFStringRef) -> str | None: # type: ignore[valid-type]
315
+ """
316
+ Creates a Unicode string from a CFString object. Used entirely for error
317
+ reporting.
318
+ Yes, it annoys me quite a lot that this function is this complex.
319
+ """
320
+
321
+ string = CoreFoundation.CFStringGetCStringPtr(
322
+ cf_string_ref, CFConst.kCFStringEncodingUTF8
323
+ )
324
+ if string is None:
325
+ buffer = ctypes.create_string_buffer(1024)
326
+ result = CoreFoundation.CFStringGetCString(
327
+ cf_string_ref, buffer, 1024, CFConst.kCFStringEncodingUTF8
328
+ )
329
+ if not result:
330
+ raise OSError("Error copying C string from CFStringRef")
331
+ string = buffer.value
332
+ if string is not None:
333
+ string = string.decode("utf-8")
334
+ return string # type: ignore[no-any-return]
335
+
336
+
337
+ def _der_certs_to_cf_cert_array(certs: list[bytes]) -> CFMutableArrayRef: # type: ignore[valid-type]
338
+ """Builds a CFArray of SecCertificateRefs from a list of DER-encoded certificates.
339
+ Responsibility of the caller to call CoreFoundation.CFRelease on the CFArray.
340
+ """
341
+ cf_array = CoreFoundation.CFArrayCreateMutable(
342
+ CoreFoundation.kCFAllocatorDefault,
343
+ 0,
344
+ ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks),
345
+ )
346
+ if not cf_array:
347
+ raise MemoryError("Unable to allocate memory!")
348
+
349
+ for cert_data in certs:
350
+ cf_data = None
351
+ sec_cert_ref = None
352
+ try:
353
+ cf_data = _bytes_to_cf_data_ref(cert_data)
354
+ sec_cert_ref = Security.SecCertificateCreateWithData(
355
+ CoreFoundation.kCFAllocatorDefault, cf_data
356
+ )
357
+ CoreFoundation.CFArrayAppendValue(cf_array, sec_cert_ref)
358
+ finally:
359
+ if cf_data:
360
+ CoreFoundation.CFRelease(cf_data)
361
+ if sec_cert_ref:
362
+ CoreFoundation.CFRelease(sec_cert_ref)
363
+
364
+ return cf_array # type: ignore[no-any-return]
365
+
366
+
367
+ @contextlib.contextmanager
368
+ def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]:
369
+ check_hostname = ctx.check_hostname
370
+ verify_mode = ctx.verify_mode
371
+ ctx.check_hostname = False
372
+ _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE)
373
+ try:
374
+ yield
375
+ finally:
376
+ ctx.check_hostname = check_hostname
377
+ _set_ssl_context_verify_mode(ctx, verify_mode)
378
+
379
+
380
+ def _verify_peercerts_impl(
381
+ ssl_context: ssl.SSLContext,
382
+ cert_chain: list[bytes],
383
+ server_hostname: str | None = None,
384
+ ) -> None:
385
+ certs = None
386
+ policies = None
387
+ trust = None
388
+ try:
389
+ # Only set a hostname on the policy if we're verifying the hostname
390
+ # on the leaf certificate.
391
+ if server_hostname is not None and ssl_context.check_hostname:
392
+ cf_str_hostname = None
393
+ try:
394
+ cf_str_hostname = _bytes_to_cf_string(server_hostname.encode("ascii"))
395
+ ssl_policy = Security.SecPolicyCreateSSL(True, cf_str_hostname)
396
+ finally:
397
+ if cf_str_hostname:
398
+ CoreFoundation.CFRelease(cf_str_hostname)
399
+ else:
400
+ ssl_policy = Security.SecPolicyCreateSSL(True, None)
401
+
402
+ policies = ssl_policy
403
+ if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN:
404
+ # Add explicit policy requiring positive revocation checks
405
+ policies = CoreFoundation.CFArrayCreateMutable(
406
+ CoreFoundation.kCFAllocatorDefault,
407
+ 0,
408
+ ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks),
409
+ )
410
+ CoreFoundation.CFArrayAppendValue(policies, ssl_policy)
411
+ CoreFoundation.CFRelease(ssl_policy)
412
+ revocation_policy = Security.SecPolicyCreateRevocation(
413
+ kSecRevocationUseAnyAvailableMethod
414
+ | kSecRevocationRequirePositiveResponse
415
+ )
416
+ CoreFoundation.CFArrayAppendValue(policies, revocation_policy)
417
+ CoreFoundation.CFRelease(revocation_policy)
418
+ elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF:
419
+ raise NotImplementedError("VERIFY_CRL_CHECK_LEAF not implemented for macOS")
420
+
421
+ certs = None
422
+ try:
423
+ certs = _der_certs_to_cf_cert_array(cert_chain)
424
+
425
+ # Now that we have certificates loaded and a SecPolicy
426
+ # we can finally create a SecTrust object!
427
+ trust = Security.SecTrustRef()
428
+ Security.SecTrustCreateWithCertificates(
429
+ certs, policies, ctypes.byref(trust)
430
+ )
431
+
432
+ finally:
433
+ # The certs are now being held by SecTrust so we can
434
+ # release our handles for the array.
435
+ if certs:
436
+ CoreFoundation.CFRelease(certs)
437
+
438
+ # If there are additional trust anchors to load we need to transform
439
+ # the list of DER-encoded certificates into a CFArray.
440
+ ctx_ca_certs_der: list[bytes] | None = ssl_context.get_ca_certs(
441
+ binary_form=True
442
+ )
443
+ if ctx_ca_certs_der:
444
+ ctx_ca_certs = None
445
+ try:
446
+ ctx_ca_certs = _der_certs_to_cf_cert_array(ctx_ca_certs_der)
447
+ Security.SecTrustSetAnchorCertificates(trust, ctx_ca_certs)
448
+ finally:
449
+ if ctx_ca_certs:
450
+ CoreFoundation.CFRelease(ctx_ca_certs)
451
+
452
+ # We always want system certificates.
453
+ Security.SecTrustSetAnchorCertificatesOnly(trust, False)
454
+
455
+ # macOS 10.13 and earlier don't support SecTrustEvaluateWithError()
456
+ # so we use SecTrustEvaluate() which means we need to construct error
457
+ # messages ourselves.
458
+ if _is_macos_version_10_14_or_later:
459
+ _verify_peercerts_impl_macos_10_14(ssl_context, trust)
460
+ else:
461
+ _verify_peercerts_impl_macos_10_13(ssl_context, trust)
462
+ finally:
463
+ if policies:
464
+ CoreFoundation.CFRelease(policies)
465
+ if trust:
466
+ CoreFoundation.CFRelease(trust)
467
+
468
+
469
+ def _verify_peercerts_impl_macos_10_13(
470
+ ssl_context: ssl.SSLContext, sec_trust_ref: typing.Any
471
+ ) -> None:
472
+ """Verify using 'SecTrustEvaluate' API for macOS 10.13 and earlier.
473
+ macOS 10.14 added the 'SecTrustEvaluateWithError' API.
474
+ """
475
+ sec_trust_result_type = Security.SecTrustResultType()
476
+ Security.SecTrustEvaluate(sec_trust_ref, ctypes.byref(sec_trust_result_type))
477
+
478
+ try:
479
+ sec_trust_result_type_as_int = int(sec_trust_result_type.value)
480
+ except (ValueError, TypeError):
481
+ sec_trust_result_type_as_int = -1
482
+
483
+ # Apple doesn't document these values in their own API docs.
484
+ # See: https://github.com/xybp888/iOS-SDKs/blob/master/iPhoneOS13.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecTrust.h#L84
485
+ if (
486
+ ssl_context.verify_mode == ssl.CERT_REQUIRED
487
+ and sec_trust_result_type_as_int not in (1, 4)
488
+ ):
489
+ # Note that we're not able to ignore only hostname errors
490
+ # for macOS 10.13 and earlier, so check_hostname=False will
491
+ # still return an error.
492
+ sec_trust_result_type_to_message = {
493
+ 0: "Invalid trust result type",
494
+ # 1: "Trust evaluation succeeded",
495
+ 2: "User confirmation required",
496
+ 3: "User specified that certificate is not trusted",
497
+ # 4: "Trust result is unspecified",
498
+ 5: "Recoverable trust failure occurred",
499
+ 6: "Fatal trust failure occurred",
500
+ 7: "Other error occurred, certificate may be revoked",
501
+ }
502
+ error_message = sec_trust_result_type_to_message.get(
503
+ sec_trust_result_type_as_int,
504
+ f"Unknown trust result: {sec_trust_result_type_as_int}",
505
+ )
506
+
507
+ err = ssl.SSLCertVerificationError(error_message)
508
+ err.verify_message = error_message
509
+ err.verify_code = sec_trust_result_type_as_int
510
+ raise err
511
+
512
+
513
+ def _verify_peercerts_impl_macos_10_14(
514
+ ssl_context: ssl.SSLContext, sec_trust_ref: typing.Any
515
+ ) -> None:
516
+ """Verify using 'SecTrustEvaluateWithError' API for macOS 10.14+."""
517
+ cf_error = CoreFoundation.CFErrorRef()
518
+ sec_trust_eval_result = Security.SecTrustEvaluateWithError(
519
+ sec_trust_ref, ctypes.byref(cf_error)
520
+ )
521
+ # sec_trust_eval_result is a bool (0 or 1)
522
+ # where 1 means that the certs are trusted.
523
+ if sec_trust_eval_result == 1:
524
+ is_trusted = True
525
+ elif sec_trust_eval_result == 0:
526
+ is_trusted = False
527
+ else:
528
+ raise ssl.SSLError(
529
+ f"Unknown result from Security.SecTrustEvaluateWithError: {sec_trust_eval_result!r}"
530
+ )
531
+
532
+ cf_error_code = 0
533
+ if not is_trusted:
534
+ cf_error_code = CoreFoundation.CFErrorGetCode(cf_error)
535
+
536
+ # If the error is a known failure that we're
537
+ # explicitly okay with from SSLContext configuration
538
+ # we can set is_trusted accordingly.
539
+ if ssl_context.verify_mode != ssl.CERT_REQUIRED and (
540
+ cf_error_code == CFConst.errSecNotTrusted
541
+ or cf_error_code == CFConst.errSecCertificateExpired
542
+ ):
543
+ is_trusted = True
544
+
545
+ # If we're still not trusted then we start to
546
+ # construct and raise the SSLCertVerificationError.
547
+ if not is_trusted:
548
+ cf_error_string_ref = None
549
+ try:
550
+ cf_error_string_ref = CoreFoundation.CFErrorCopyDescription(cf_error)
551
+
552
+ # Can this ever return 'None' if there's a CFError?
553
+ cf_error_message = (
554
+ _cf_string_ref_to_str(cf_error_string_ref)
555
+ or "Certificate verification failed"
556
+ )
557
+
558
+ # TODO: Not sure if we need the SecTrustResultType for anything?
559
+ # We only care whether or not it's a success or failure for now.
560
+ sec_trust_result_type = Security.SecTrustResultType()
561
+ Security.SecTrustGetTrustResult(
562
+ sec_trust_ref, ctypes.byref(sec_trust_result_type)
563
+ )
564
+
565
+ err = ssl.SSLCertVerificationError(cf_error_message)
566
+ err.verify_message = cf_error_message
567
+ err.verify_code = cf_error_code
568
+ raise err
569
+ finally:
570
+ if cf_error_string_ref:
571
+ CoreFoundation.CFRelease(cf_error_string_ref)
hug/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import contextlib
2
+ import os
3
+ import re
4
+ import ssl
5
+ import typing
6
+
7
+ # candidates based on https://github.com/tiran/certifi-system-store by Christian Heimes
8
+ _CA_FILE_CANDIDATES = [
9
+ # Alpine, Arch, Fedora 34-42, OpenWRT, RHEL 9-10, BSD
10
+ "/etc/ssl/cert.pem",
11
+ # Fedora 43+, RHEL 11+
12
+ "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem",
13
+ # Fedora <= 34, RHEL <= 9, CentOS <= 9
14
+ "/etc/pki/tls/cert.pem",
15
+ # Debian, Ubuntu (requires ca-certificates)
16
+ "/etc/ssl/certs/ca-certificates.crt",
17
+ # SUSE
18
+ "/etc/ssl/ca-bundle.pem",
19
+ ]
20
+
21
+ _HASHED_CERT_FILENAME_RE = re.compile(r"^[0-9a-fA-F]{8}\.[0-9]$")
22
+
23
+
24
+ @contextlib.contextmanager
25
+ def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]:
26
+ # First, check whether the default locations from OpenSSL
27
+ # seem like they will give us a usable set of CA certs.
28
+ # ssl.get_default_verify_paths already takes care of:
29
+ # - getting cafile from either the SSL_CERT_FILE env var
30
+ # or the path configured when OpenSSL was compiled,
31
+ # and verifying that that path exists
32
+ # - getting capath from either the SSL_CERT_DIR env var
33
+ # or the path configured when OpenSSL was compiled,
34
+ # and verifying that that path exists
35
+ # In addition we'll check whether capath appears to contain certs.
36
+ defaults = ssl.get_default_verify_paths()
37
+ if defaults.cafile or (defaults.capath and _capath_contains_certs(defaults.capath)):
38
+ ctx.set_default_verify_paths()
39
+ else:
40
+ # cafile from OpenSSL doesn't exist
41
+ # and capath from OpenSSL doesn't contain certs.
42
+ # Let's search other common locations instead.
43
+ for cafile in _CA_FILE_CANDIDATES:
44
+ if os.path.isfile(cafile):
45
+ ctx.load_verify_locations(cafile=cafile)
46
+ break
47
+
48
+ yield
49
+
50
+
51
+ def _capath_contains_certs(capath: str) -> bool:
52
+ """Check whether capath exists and contains certs in the expected format."""
53
+ if not os.path.isdir(capath):
54
+ return False
55
+ for name in os.listdir(capath):
56
+ if _HASHED_CERT_FILENAME_RE.match(name):
57
+ return True
58
+ return False
59
+
60
+
61
+ def _verify_peercerts_impl(
62
+ ssl_context: ssl.SSLContext,
63
+ cert_chain: list[bytes],
64
+ server_hostname: str | None = None,
65
+ ) -> None:
66
+ # This is a no-op because we've enabled SSLContext's built-in
67
+ # verification via verify_mode=CERT_REQUIRED, and don't need to repeat it.
68
+ pass