#
tokens: 48654/50000 5/808 files (page 37/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 37 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .venv
│   ├── __pycache__
│   │   └── hello.cpython-312.pyc
│   ├── bin
│   │   ├── activate
│   │   ├── activate.csh
│   │   ├── activate.fish
│   │   ├── Activate.ps1
│   │   ├── flask
│   │   ├── normalizer
│   │   ├── pip
│   │   ├── pip3
│   │   ├── pip3.12
│   │   ├── python
│   │   ├── python3
│   │   └── python3.12
│   ├── hello.py
│   ├── lib
│   │   └── python3.12
│   │       └── site-packages
│   │           ├── beautifulsoup4-4.12.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   ├── AUTHORS
│   │           │   │   └── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── blinker
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _utilities.cpython-312.pyc
│   │           │   │   └── base.cpython-312.pyc
│   │           │   ├── _utilities.py
│   │           │   ├── base.py
│   │           │   └── py.typed
│   │           ├── blinker-1.8.2.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── bs4
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── css.cpython-312.pyc
│   │           │   │   ├── dammit.cpython-312.pyc
│   │           │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   ├── element.cpython-312.pyc
│   │           │   │   └── formatter.cpython-312.pyc
│   │           │   ├── builder
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _html5lib.cpython-312.pyc
│   │           │   │   │   ├── _htmlparser.cpython-312.pyc
│   │           │   │   │   └── _lxml.cpython-312.pyc
│   │           │   │   ├── _html5lib.py
│   │           │   │   ├── _htmlparser.py
│   │           │   │   └── _lxml.py
│   │           │   ├── css.py
│   │           │   ├── dammit.py
│   │           │   ├── diagnose.py
│   │           │   ├── element.py
│   │           │   ├── formatter.py
│   │           │   └── tests
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── test_builder_registry.cpython-312.pyc
│   │           │       │   ├── test_builder.cpython-312.pyc
│   │           │       │   ├── test_css.cpython-312.pyc
│   │           │       │   ├── test_dammit.cpython-312.pyc
│   │           │       │   ├── test_docs.cpython-312.pyc
│   │           │       │   ├── test_element.cpython-312.pyc
│   │           │       │   ├── test_formatter.cpython-312.pyc
│   │           │       │   ├── test_fuzz.cpython-312.pyc
│   │           │       │   ├── test_html5lib.cpython-312.pyc
│   │           │       │   ├── test_htmlparser.cpython-312.pyc
│   │           │       │   ├── test_lxml.cpython-312.pyc
│   │           │       │   ├── test_navigablestring.cpython-312.pyc
│   │           │       │   ├── test_pageelement.cpython-312.pyc
│   │           │       │   ├── test_soup.cpython-312.pyc
│   │           │       │   ├── test_tag.cpython-312.pyc
│   │           │       │   └── test_tree.cpython-312.pyc
│   │           │       ├── fuzz
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│   │           │       │   ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│   │           │       │   └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│   │           │       ├── test_builder_registry.py
│   │           │       ├── test_builder.py
│   │           │       ├── test_css.py
│   │           │       ├── test_dammit.py
│   │           │       ├── test_docs.py
│   │           │       ├── test_element.py
│   │           │       ├── test_formatter.py
│   │           │       ├── test_fuzz.py
│   │           │       ├── test_html5lib.py
│   │           │       ├── test_htmlparser.py
│   │           │       ├── test_lxml.py
│   │           │       ├── test_navigablestring.py
│   │           │       ├── test_pageelement.py
│   │           │       ├── test_soup.py
│   │           │       ├── test_tag.py
│   │           │       └── test_tree.py
│   │           ├── certifi
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── core.cpython-312.pyc
│   │           │   ├── cacert.pem
│   │           │   ├── core.py
│   │           │   └── py.typed
│   │           ├── certifi-2024.8.30.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── charset_normalizer
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── cd.cpython-312.pyc
│   │           │   │   ├── constant.cpython-312.pyc
│   │           │   │   ├── legacy.cpython-312.pyc
│   │           │   │   ├── md.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── version.cpython-312.pyc
│   │           │   ├── api.py
│   │           │   ├── cd.py
│   │           │   ├── cli
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __main__.py
│   │           │   │   └── __pycache__
│   │           │   │       ├── __init__.cpython-312.pyc
│   │           │   │       └── __main__.cpython-312.pyc
│   │           │   ├── constant.py
│   │           │   ├── legacy.py
│   │           │   ├── md__mypyc.cpython-312-darwin.so
│   │           │   ├── md.cpython-312-darwin.so
│   │           │   ├── md.py
│   │           │   ├── models.py
│   │           │   ├── py.typed
│   │           │   ├── utils.py
│   │           │   └── version.py
│   │           ├── charset_normalizer-3.4.0.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── click
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _compat.cpython-312.pyc
│   │           │   │   ├── _termui_impl.cpython-312.pyc
│   │           │   │   ├── _textwrap.cpython-312.pyc
│   │           │   │   ├── _winconsole.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── decorators.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formatting.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── shell_completion.cpython-312.pyc
│   │           │   │   ├── termui.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── types.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── _compat.py
│   │           │   ├── _termui_impl.py
│   │           │   ├── _textwrap.py
│   │           │   ├── _winconsole.py
│   │           │   ├── core.py
│   │           │   ├── decorators.py
│   │           │   ├── exceptions.py
│   │           │   ├── formatting.py
│   │           │   ├── globals.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── shell_completion.py
│   │           │   ├── termui.py
│   │           │   ├── testing.py
│   │           │   ├── types.py
│   │           │   └── utils.py
│   │           ├── click-8.1.7.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.rst
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── fake_useragent
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── errors.cpython-312.pyc
│   │           │   │   ├── fake.cpython-312.pyc
│   │           │   │   ├── log.cpython-312.pyc
│   │           │   │   ├── settings.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── data
│   │           │   │   └── browsers.json
│   │           │   ├── errors.py
│   │           │   ├── fake.py
│   │           │   ├── log.py
│   │           │   ├── settings.py
│   │           │   └── utils.py
│   │           ├── fake_useragent-1.5.1.dist-info
│   │           │   ├── AUTHORS
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── flask
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── app.cpython-312.pyc
│   │           │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   ├── cli.cpython-312.pyc
│   │           │   │   ├── config.cpython-312.pyc
│   │           │   │   ├── ctx.cpython-312.pyc
│   │           │   │   ├── debughelpers.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── helpers.cpython-312.pyc
│   │           │   │   ├── logging.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── signals.cpython-312.pyc
│   │           │   │   ├── templating.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── typing.cpython-312.pyc
│   │           │   │   ├── views.cpython-312.pyc
│   │           │   │   └── wrappers.cpython-312.pyc
│   │           │   ├── app.py
│   │           │   ├── blueprints.py
│   │           │   ├── cli.py
│   │           │   ├── config.py
│   │           │   ├── ctx.py
│   │           │   ├── debughelpers.py
│   │           │   ├── globals.py
│   │           │   ├── helpers.py
│   │           │   ├── json
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── provider.cpython-312.pyc
│   │           │   │   │   └── tag.cpython-312.pyc
│   │           │   │   ├── provider.py
│   │           │   │   └── tag.py
│   │           │   ├── logging.py
│   │           │   ├── py.typed
│   │           │   ├── sansio
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── app.cpython-312.pyc
│   │           │   │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   │   └── scaffold.cpython-312.pyc
│   │           │   │   ├── app.py
│   │           │   │   ├── blueprints.py
│   │           │   │   ├── README.md
│   │           │   │   └── scaffold.py
│   │           │   ├── sessions.py
│   │           │   ├── signals.py
│   │           │   ├── templating.py
│   │           │   ├── testing.py
│   │           │   ├── typing.py
│   │           │   ├── views.py
│   │           │   └── wrappers.py
│   │           ├── flask-3.0.3.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── idna
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── codec.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   ├── intranges.cpython-312.pyc
│   │           │   │   ├── package_data.cpython-312.pyc
│   │           │   │   └── uts46data.cpython-312.pyc
│   │           │   ├── codec.py
│   │           │   ├── compat.py
│   │           │   ├── core.py
│   │           │   ├── idnadata.py
│   │           │   ├── intranges.py
│   │           │   ├── package_data.py
│   │           │   ├── py.typed
│   │           │   └── uts46data.py
│   │           ├── idna-3.10.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── itsdangerous
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _json.cpython-312.pyc
│   │           │   │   ├── encoding.cpython-312.pyc
│   │           │   │   ├── exc.cpython-312.pyc
│   │           │   │   ├── serializer.cpython-312.pyc
│   │           │   │   ├── signer.cpython-312.pyc
│   │           │   │   ├── timed.cpython-312.pyc
│   │           │   │   └── url_safe.cpython-312.pyc
│   │           │   ├── _json.py
│   │           │   ├── encoding.py
│   │           │   ├── exc.py
│   │           │   ├── py.typed
│   │           │   ├── serializer.py
│   │           │   ├── signer.py
│   │           │   ├── timed.py
│   │           │   └── url_safe.py
│   │           ├── itsdangerous-2.2.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── jinja2
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _identifier.cpython-312.pyc
│   │           │   │   ├── async_utils.cpython-312.pyc
│   │           │   │   ├── bccache.cpython-312.pyc
│   │           │   │   ├── compiler.cpython-312.pyc
│   │           │   │   ├── constants.cpython-312.pyc
│   │           │   │   ├── debug.cpython-312.pyc
│   │           │   │   ├── defaults.cpython-312.pyc
│   │           │   │   ├── environment.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── ext.cpython-312.pyc
│   │           │   │   ├── filters.cpython-312.pyc
│   │           │   │   ├── idtracking.cpython-312.pyc
│   │           │   │   ├── lexer.cpython-312.pyc
│   │           │   │   ├── loaders.cpython-312.pyc
│   │           │   │   ├── meta.cpython-312.pyc
│   │           │   │   ├── nativetypes.cpython-312.pyc
│   │           │   │   ├── nodes.cpython-312.pyc
│   │           │   │   ├── optimizer.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── runtime.cpython-312.pyc
│   │           │   │   ├── sandbox.cpython-312.pyc
│   │           │   │   ├── tests.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── visitor.cpython-312.pyc
│   │           │   ├── _identifier.py
│   │           │   ├── async_utils.py
│   │           │   ├── bccache.py
│   │           │   ├── compiler.py
│   │           │   ├── constants.py
│   │           │   ├── debug.py
│   │           │   ├── defaults.py
│   │           │   ├── environment.py
│   │           │   ├── exceptions.py
│   │           │   ├── ext.py
│   │           │   ├── filters.py
│   │           │   ├── idtracking.py
│   │           │   ├── lexer.py
│   │           │   ├── loaders.py
│   │           │   ├── meta.py
│   │           │   ├── nativetypes.py
│   │           │   ├── nodes.py
│   │           │   ├── optimizer.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── runtime.py
│   │           │   ├── sandbox.py
│   │           │   ├── tests.py
│   │           │   ├── utils.py
│   │           │   └── visitor.py
│   │           ├── jinja2-3.1.4.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── lxml
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _elementpath.cpython-312.pyc
│   │           │   │   ├── builder.cpython-312.pyc
│   │           │   │   ├── cssselect.cpython-312.pyc
│   │           │   │   ├── doctestcompare.cpython-312.pyc
│   │           │   │   ├── ElementInclude.cpython-312.pyc
│   │           │   │   ├── pyclasslookup.cpython-312.pyc
│   │           │   │   ├── sax.cpython-312.pyc
│   │           │   │   └── usedoctest.cpython-312.pyc
│   │           │   ├── _elementpath.cpython-312-darwin.so
│   │           │   ├── _elementpath.py
│   │           │   ├── apihelpers.pxi
│   │           │   ├── builder.cpython-312-darwin.so
│   │           │   ├── builder.py
│   │           │   ├── classlookup.pxi
│   │           │   ├── cleanup.pxi
│   │           │   ├── cssselect.py
│   │           │   ├── debug.pxi
│   │           │   ├── docloader.pxi
│   │           │   ├── doctestcompare.py
│   │           │   ├── dtd.pxi
│   │           │   ├── ElementInclude.py
│   │           │   ├── etree_api.h
│   │           │   ├── etree.cpython-312-darwin.so
│   │           │   ├── etree.h
│   │           │   ├── etree.pyx
│   │           │   ├── extensions.pxi
│   │           │   ├── html
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _diffcommand.cpython-312.pyc
│   │           │   │   │   ├── _html5builder.cpython-312.pyc
│   │           │   │   │   ├── _setmixin.cpython-312.pyc
│   │           │   │   │   ├── builder.cpython-312.pyc
│   │           │   │   │   ├── clean.cpython-312.pyc
│   │           │   │   │   ├── defs.cpython-312.pyc
│   │           │   │   │   ├── diff.cpython-312.pyc
│   │           │   │   │   ├── ElementSoup.cpython-312.pyc
│   │           │   │   │   ├── formfill.cpython-312.pyc
│   │           │   │   │   ├── html5parser.cpython-312.pyc
│   │           │   │   │   ├── soupparser.cpython-312.pyc
│   │           │   │   │   └── usedoctest.cpython-312.pyc
│   │           │   │   ├── _diffcommand.py
│   │           │   │   ├── _html5builder.py
│   │           │   │   ├── _setmixin.py
│   │           │   │   ├── builder.py
│   │           │   │   ├── clean.py
│   │           │   │   ├── defs.py
│   │           │   │   ├── diff.cpython-312-darwin.so
│   │           │   │   ├── diff.py
│   │           │   │   ├── ElementSoup.py
│   │           │   │   ├── formfill.py
│   │           │   │   ├── html5parser.py
│   │           │   │   ├── soupparser.py
│   │           │   │   └── usedoctest.py
│   │           │   ├── includes
│   │           │   │   ├── __init__.pxd
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   ├── c14n.pxd
│   │           │   │   ├── config.pxd
│   │           │   │   ├── dtdvalid.pxd
│   │           │   │   ├── etree_defs.h
│   │           │   │   ├── etreepublic.pxd
│   │           │   │   ├── extlibs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── libcharset.h
│   │           │   │   │   ├── localcharset.h
│   │           │   │   │   ├── zconf.h
│   │           │   │   │   └── zlib.h
│   │           │   │   ├── htmlparser.pxd
│   │           │   │   ├── libexslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── exslt.h
│   │           │   │   │   ├── exsltconfig.h
│   │           │   │   │   └── exsltexports.h
│   │           │   │   ├── libxml
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── c14n.h
│   │           │   │   │   ├── catalog.h
│   │           │   │   │   ├── chvalid.h
│   │           │   │   │   ├── debugXML.h
│   │           │   │   │   ├── dict.h
│   │           │   │   │   ├── encoding.h
│   │           │   │   │   ├── entities.h
│   │           │   │   │   ├── globals.h
│   │           │   │   │   ├── hash.h
│   │           │   │   │   ├── HTMLparser.h
│   │           │   │   │   ├── HTMLtree.h
│   │           │   │   │   ├── list.h
│   │           │   │   │   ├── nanoftp.h
│   │           │   │   │   ├── nanohttp.h
│   │           │   │   │   ├── parser.h
│   │           │   │   │   ├── parserInternals.h
│   │           │   │   │   ├── relaxng.h
│   │           │   │   │   ├── SAX.h
│   │           │   │   │   ├── SAX2.h
│   │           │   │   │   ├── schemasInternals.h
│   │           │   │   │   ├── schematron.h
│   │           │   │   │   ├── threads.h
│   │           │   │   │   ├── tree.h
│   │           │   │   │   ├── uri.h
│   │           │   │   │   ├── valid.h
│   │           │   │   │   ├── xinclude.h
│   │           │   │   │   ├── xlink.h
│   │           │   │   │   ├── xmlautomata.h
│   │           │   │   │   ├── xmlerror.h
│   │           │   │   │   ├── xmlexports.h
│   │           │   │   │   ├── xmlIO.h
│   │           │   │   │   ├── xmlmemory.h
│   │           │   │   │   ├── xmlmodule.h
│   │           │   │   │   ├── xmlreader.h
│   │           │   │   │   ├── xmlregexp.h
│   │           │   │   │   ├── xmlsave.h
│   │           │   │   │   ├── xmlschemas.h
│   │           │   │   │   ├── xmlschemastypes.h
│   │           │   │   │   ├── xmlstring.h
│   │           │   │   │   ├── xmlunicode.h
│   │           │   │   │   ├── xmlversion.h
│   │           │   │   │   ├── xmlwriter.h
│   │           │   │   │   ├── xpath.h
│   │           │   │   │   ├── xpathInternals.h
│   │           │   │   │   └── xpointer.h
│   │           │   │   ├── libxslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── attributes.h
│   │           │   │   │   ├── documents.h
│   │           │   │   │   ├── extensions.h
│   │           │   │   │   ├── extra.h
│   │           │   │   │   ├── functions.h
│   │           │   │   │   ├── imports.h
│   │           │   │   │   ├── keys.h
│   │           │   │   │   ├── namespaces.h
│   │           │   │   │   ├── numbersInternals.h
│   │           │   │   │   ├── pattern.h
│   │           │   │   │   ├── preproc.h
│   │           │   │   │   ├── security.h
│   │           │   │   │   ├── templates.h
│   │           │   │   │   ├── transform.h
│   │           │   │   │   ├── variables.h
│   │           │   │   │   ├── xslt.h
│   │           │   │   │   ├── xsltconfig.h
│   │           │   │   │   ├── xsltexports.h
│   │           │   │   │   ├── xsltInternals.h
│   │           │   │   │   ├── xsltlocale.h
│   │           │   │   │   └── xsltutils.h
│   │           │   │   ├── lxml-version.h
│   │           │   │   ├── relaxng.pxd
│   │           │   │   ├── schematron.pxd
│   │           │   │   ├── tree.pxd
│   │           │   │   ├── uri.pxd
│   │           │   │   ├── xinclude.pxd
│   │           │   │   ├── xmlerror.pxd
│   │           │   │   ├── xmlparser.pxd
│   │           │   │   ├── xmlschema.pxd
│   │           │   │   ├── xpath.pxd
│   │           │   │   └── xslt.pxd
│   │           │   ├── isoschematron
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   └── resources
│   │           │   │       ├── rng
│   │           │   │       │   └── iso-schematron.rng
│   │           │   │       └── xsl
│   │           │   │           ├── iso-schematron-xslt1
│   │           │   │           │   ├── iso_abstract_expand.xsl
│   │           │   │           │   ├── iso_dsdl_include.xsl
│   │           │   │           │   ├── iso_schematron_message.xsl
│   │           │   │           │   ├── iso_schematron_skeleton_for_xslt1.xsl
│   │           │   │           │   ├── iso_svrl_for_xslt1.xsl
│   │           │   │           │   └── readme.txt
│   │           │   │           ├── RNG2Schtrn.xsl
│   │           │   │           └── XSD2Schtrn.xsl
│   │           │   ├── iterparse.pxi
│   │           │   ├── lxml.etree_api.h
│   │           │   ├── lxml.etree.h
│   │           │   ├── nsclasses.pxi
│   │           │   ├── objectify.cpython-312-darwin.so
│   │           │   ├── objectify.pyx
│   │           │   ├── objectpath.pxi
│   │           │   ├── parser.pxi
│   │           │   ├── parsertarget.pxi
│   │           │   ├── proxy.pxi
│   │           │   ├── public-api.pxi
│   │           │   ├── pyclasslookup.py
│   │           │   ├── readonlytree.pxi
│   │           │   ├── relaxng.pxi
│   │           │   ├── sax.cpython-312-darwin.so
│   │           │   ├── sax.py
│   │           │   ├── saxparser.pxi
│   │           │   ├── schematron.pxi
│   │           │   ├── serializer.pxi
│   │           │   ├── usedoctest.py
│   │           │   ├── xinclude.pxi
│   │           │   ├── xmlerror.pxi
│   │           │   ├── xmlid.pxi
│   │           │   ├── xmlschema.pxi
│   │           │   ├── xpath.pxi
│   │           │   ├── xslt.pxi
│   │           │   └── xsltext.pxi
│   │           ├── lxml-5.3.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── LICENSES.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── markupsafe
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   └── _native.cpython-312.pyc
│   │           │   ├── _native.py
│   │           │   ├── _speedups.c
│   │           │   ├── _speedups.cpython-312-darwin.so
│   │           │   ├── _speedups.pyi
│   │           │   └── py.typed
│   │           ├── MarkupSafe-3.0.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── pip
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pip-runner__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── __pip-runner__.cpython-312.pyc
│   │           │   ├── _internal
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── build_env.cpython-312.pyc
│   │           │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   ├── pyproject.cpython-312.pyc
│   │           │   │   │   ├── self_outdated_check.cpython-312.pyc
│   │           │   │   │   └── wheel_builder.cpython-312.pyc
│   │           │   │   ├── build_env.py
│   │           │   │   ├── cache.py
│   │           │   │   ├── cli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── autocompletion.cpython-312.pyc
│   │           │   │   │   │   ├── base_command.cpython-312.pyc
│   │           │   │   │   │   ├── cmdoptions.cpython-312.pyc
│   │           │   │   │   │   ├── command_context.cpython-312.pyc
│   │           │   │   │   │   ├── index_command.cpython-312.pyc
│   │           │   │   │   │   ├── main_parser.cpython-312.pyc
│   │           │   │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   │   ├── parser.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bars.cpython-312.pyc
│   │           │   │   │   │   ├── req_command.cpython-312.pyc
│   │           │   │   │   │   ├── spinners.cpython-312.pyc
│   │           │   │   │   │   └── status_codes.cpython-312.pyc
│   │           │   │   │   ├── autocompletion.py
│   │           │   │   │   ├── base_command.py
│   │           │   │   │   ├── cmdoptions.py
│   │           │   │   │   ├── command_context.py
│   │           │   │   │   ├── index_command.py
│   │           │   │   │   ├── main_parser.py
│   │           │   │   │   ├── main.py
│   │           │   │   │   ├── parser.py
│   │           │   │   │   ├── progress_bars.py
│   │           │   │   │   ├── req_command.py
│   │           │   │   │   ├── spinners.py
│   │           │   │   │   └── status_codes.py
│   │           │   │   ├── commands
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── completion.cpython-312.pyc
│   │           │   │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   │   ├── debug.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   ├── hash.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── inspect.cpython-312.pyc
│   │           │   │   │   │   ├── install.cpython-312.pyc
│   │           │   │   │   │   ├── list.cpython-312.pyc
│   │           │   │   │   │   ├── search.cpython-312.pyc
│   │           │   │   │   │   ├── show.cpython-312.pyc
│   │           │   │   │   │   ├── uninstall.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── completion.py
│   │           │   │   │   ├── configuration.py
│   │           │   │   │   ├── debug.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── hash.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── inspect.py
│   │           │   │   │   ├── install.py
│   │           │   │   │   ├── list.py
│   │           │   │   │   ├── search.py
│   │           │   │   │   ├── show.py
│   │           │   │   │   ├── uninstall.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── configuration.py
│   │           │   │   ├── distributions
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   ├── installed.cpython-312.pyc
│   │           │   │   │   │   ├── sdist.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── installed.py
│   │           │   │   │   ├── sdist.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── index
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── collector.cpython-312.pyc
│   │           │   │   │   │   ├── package_finder.cpython-312.pyc
│   │           │   │   │   │   └── sources.cpython-312.pyc
│   │           │   │   │   ├── collector.py
│   │           │   │   │   ├── package_finder.py
│   │           │   │   │   └── sources.py
│   │           │   │   ├── locations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _distutils.cpython-312.pyc
│   │           │   │   │   │   ├── _sysconfig.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── _distutils.py
│   │           │   │   │   ├── _sysconfig.py
│   │           │   │   │   └── base.py
│   │           │   │   ├── main.py
│   │           │   │   ├── metadata
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _json.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   └── pkg_resources.cpython-312.pyc
│   │           │   │   │   ├── _json.py
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── importlib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   │   ├── _dists.cpython-312.pyc
│   │           │   │   │   │   │   └── _envs.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.py
│   │           │   │   │   │   ├── _dists.py
│   │           │   │   │   │   └── _envs.py
│   │           │   │   │   └── pkg_resources.py
│   │           │   │   ├── models
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── candidate.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url.cpython-312.pyc
│   │           │   │   │   │   ├── format_control.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── installation_report.cpython-312.pyc
│   │           │   │   │   │   ├── link.cpython-312.pyc
│   │           │   │   │   │   ├── scheme.cpython-312.pyc
│   │           │   │   │   │   ├── search_scope.cpython-312.pyc
│   │           │   │   │   │   ├── selection_prefs.cpython-312.pyc
│   │           │   │   │   │   ├── target_python.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── candidate.py
│   │           │   │   │   ├── direct_url.py
│   │           │   │   │   ├── format_control.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── installation_report.py
│   │           │   │   │   ├── link.py
│   │           │   │   │   ├── scheme.py
│   │           │   │   │   ├── search_scope.py
│   │           │   │   │   ├── selection_prefs.py
│   │           │   │   │   ├── target_python.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── network
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── lazy_wheel.cpython-312.pyc
│   │           │   │   │   │   ├── session.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── xmlrpc.cpython-312.pyc
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── lazy_wheel.py
│   │           │   │   │   ├── session.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── xmlrpc.py
│   │           │   │   ├── operations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   └── prepare.cpython-312.pyc
│   │           │   │   │   ├── build
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── build_tracker.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_legacy.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── build_tracker.py
│   │           │   │   │   │   ├── metadata_editable.py
│   │           │   │   │   │   ├── metadata_legacy.py
│   │           │   │   │   │   ├── metadata.py
│   │           │   │   │   │   ├── wheel_editable.py
│   │           │   │   │   │   ├── wheel_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── install
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── editable_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── editable_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   └── prepare.py
│   │           │   │   ├── pyproject.py
│   │           │   │   ├── req
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── constructors.cpython-312.pyc
│   │           │   │   │   │   ├── req_file.cpython-312.pyc
│   │           │   │   │   │   ├── req_install.cpython-312.pyc
│   │           │   │   │   │   ├── req_set.cpython-312.pyc
│   │           │   │   │   │   └── req_uninstall.cpython-312.pyc
│   │           │   │   │   ├── constructors.py
│   │           │   │   │   ├── req_file.py
│   │           │   │   │   ├── req_install.py
│   │           │   │   │   ├── req_set.py
│   │           │   │   │   └── req_uninstall.py
│   │           │   │   ├── resolution
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── legacy
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── resolver.cpython-312.pyc
│   │           │   │   │   │   └── resolver.py
│   │           │   │   │   └── resolvelib
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── base.cpython-312.pyc
│   │           │   │   │       │   ├── candidates.cpython-312.pyc
│   │           │   │   │       │   ├── factory.cpython-312.pyc
│   │           │   │   │       │   ├── found_candidates.cpython-312.pyc
│   │           │   │   │       │   ├── provider.cpython-312.pyc
│   │           │   │   │       │   ├── reporter.cpython-312.pyc
│   │           │   │   │       │   ├── requirements.cpython-312.pyc
│   │           │   │   │       │   └── resolver.cpython-312.pyc
│   │           │   │   │       ├── base.py
│   │           │   │   │       ├── candidates.py
│   │           │   │   │       ├── factory.py
│   │           │   │   │       ├── found_candidates.py
│   │           │   │   │       ├── provider.py
│   │           │   │   │       ├── reporter.py
│   │           │   │   │       ├── requirements.py
│   │           │   │   │       └── resolver.py
│   │           │   │   ├── self_outdated_check.py
│   │           │   │   ├── utils
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _jaraco_text.cpython-312.pyc
│   │           │   │   │   │   ├── _log.cpython-312.pyc
│   │           │   │   │   │   ├── appdirs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── compatibility_tags.cpython-312.pyc
│   │           │   │   │   │   ├── datetime.cpython-312.pyc
│   │           │   │   │   │   ├── deprecation.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url_helpers.cpython-312.pyc
│   │           │   │   │   │   ├── egg_link.cpython-312.pyc
│   │           │   │   │   │   ├── encoding.cpython-312.pyc
│   │           │   │   │   │   ├── entrypoints.cpython-312.pyc
│   │           │   │   │   │   ├── filesystem.cpython-312.pyc
│   │           │   │   │   │   ├── filetypes.cpython-312.pyc
│   │           │   │   │   │   ├── glibc.cpython-312.pyc
│   │           │   │   │   │   ├── hashes.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── misc.cpython-312.pyc
│   │           │   │   │   │   ├── packaging.cpython-312.pyc
│   │           │   │   │   │   ├── retry.cpython-312.pyc
│   │           │   │   │   │   ├── setuptools_build.cpython-312.pyc
│   │           │   │   │   │   ├── subprocess.cpython-312.pyc
│   │           │   │   │   │   ├── temp_dir.cpython-312.pyc
│   │           │   │   │   │   ├── unpacking.cpython-312.pyc
│   │           │   │   │   │   ├── urls.cpython-312.pyc
│   │           │   │   │   │   ├── virtualenv.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── _jaraco_text.py
│   │           │   │   │   ├── _log.py
│   │           │   │   │   ├── appdirs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── compatibility_tags.py
│   │           │   │   │   ├── datetime.py
│   │           │   │   │   ├── deprecation.py
│   │           │   │   │   ├── direct_url_helpers.py
│   │           │   │   │   ├── egg_link.py
│   │           │   │   │   ├── encoding.py
│   │           │   │   │   ├── entrypoints.py
│   │           │   │   │   ├── filesystem.py
│   │           │   │   │   ├── filetypes.py
│   │           │   │   │   ├── glibc.py
│   │           │   │   │   ├── hashes.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── misc.py
│   │           │   │   │   ├── packaging.py
│   │           │   │   │   ├── retry.py
│   │           │   │   │   ├── setuptools_build.py
│   │           │   │   │   ├── subprocess.py
│   │           │   │   │   ├── temp_dir.py
│   │           │   │   │   ├── unpacking.py
│   │           │   │   │   ├── urls.py
│   │           │   │   │   ├── virtualenv.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── vcs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── bazaar.cpython-312.pyc
│   │           │   │   │   │   ├── git.cpython-312.pyc
│   │           │   │   │   │   ├── mercurial.cpython-312.pyc
│   │           │   │   │   │   ├── subversion.cpython-312.pyc
│   │           │   │   │   │   └── versioncontrol.cpython-312.pyc
│   │           │   │   │   ├── bazaar.py
│   │           │   │   │   ├── git.py
│   │           │   │   │   ├── mercurial.py
│   │           │   │   │   ├── subversion.py
│   │           │   │   │   └── versioncontrol.py
│   │           │   │   └── wheel_builder.py
│   │           │   ├── _vendor
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   └── typing_extensions.cpython-312.pyc
│   │           │   │   ├── cachecontrol
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _cmd.cpython-312.pyc
│   │           │   │   │   │   ├── adapter.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── controller.cpython-312.pyc
│   │           │   │   │   │   ├── filewrapper.cpython-312.pyc
│   │           │   │   │   │   ├── heuristics.cpython-312.pyc
│   │           │   │   │   │   ├── serialize.cpython-312.pyc
│   │           │   │   │   │   └── wrapper.cpython-312.pyc
│   │           │   │   │   ├── _cmd.py
│   │           │   │   │   ├── adapter.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── caches
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── file_cache.cpython-312.pyc
│   │           │   │   │   │   │   └── redis_cache.cpython-312.pyc
│   │           │   │   │   │   ├── file_cache.py
│   │           │   │   │   │   └── redis_cache.py
│   │           │   │   │   ├── controller.py
│   │           │   │   │   ├── filewrapper.py
│   │           │   │   │   ├── heuristics.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── serialize.py
│   │           │   │   │   └── wrapper.py
│   │           │   │   ├── certifi
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── core.cpython-312.pyc
│   │           │   │   │   ├── cacert.pem
│   │           │   │   │   ├── core.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── distlib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── database.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── locators.cpython-312.pyc
│   │           │   │   │   │   ├── manifest.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── resources.cpython-312.pyc
│   │           │   │   │   │   ├── scripts.cpython-312.pyc
│   │           │   │   │   │   ├── util.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── database.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── locators.py
│   │           │   │   │   ├── manifest.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── resources.py
│   │           │   │   │   ├── scripts.py
│   │           │   │   │   ├── t32.exe
│   │           │   │   │   ├── t64-arm.exe
│   │           │   │   │   ├── t64.exe
│   │           │   │   │   ├── util.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   ├── w32.exe
│   │           │   │   │   ├── w64-arm.exe
│   │           │   │   │   ├── w64.exe
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── distro
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── distro.cpython-312.pyc
│   │           │   │   │   ├── distro.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── idna
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── codec.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── core.cpython-312.pyc
│   │           │   │   │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   │   │   ├── intranges.cpython-312.pyc
│   │           │   │   │   │   ├── package_data.cpython-312.pyc
│   │           │   │   │   │   └── uts46data.cpython-312.pyc
│   │           │   │   │   ├── codec.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── core.py
│   │           │   │   │   ├── idnadata.py
│   │           │   │   │   ├── intranges.py
│   │           │   │   │   ├── package_data.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   └── uts46data.py
│   │           │   │   ├── msgpack
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── ext.cpython-312.pyc
│   │           │   │   │   │   └── fallback.cpython-312.pyc
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── ext.py
│   │           │   │   │   └── fallback.py
│   │           │   │   ├── packaging
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _elffile.cpython-312.pyc
│   │           │   │   │   │   ├── _manylinux.cpython-312.pyc
│   │           │   │   │   │   ├── _musllinux.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _structures.cpython-312.pyc
│   │           │   │   │   │   ├── _tokenizer.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── requirements.cpython-312.pyc
│   │           │   │   │   │   ├── specifiers.cpython-312.pyc
│   │           │   │   │   │   ├── tags.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── version.cpython-312.pyc
│   │           │   │   │   ├── _elffile.py
│   │           │   │   │   ├── _manylinux.py
│   │           │   │   │   ├── _musllinux.py
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _structures.py
│   │           │   │   │   ├── _tokenizer.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── requirements.py
│   │           │   │   │   ├── specifiers.py
│   │           │   │   │   ├── tags.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── version.py
│   │           │   │   ├── pkg_resources
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   └── __pycache__
│   │           │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   ├── platformdirs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── android.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── macos.cpython-312.pyc
│   │           │   │   │   │   ├── unix.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── windows.cpython-312.pyc
│   │           │   │   │   ├── android.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── macos.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── unix.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   └── windows.py
│   │           │   │   ├── pygments
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── cmdline.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── filter.cpython-312.pyc
│   │           │   │   │   │   ├── formatter.cpython-312.pyc
│   │           │   │   │   │   ├── lexer.cpython-312.pyc
│   │           │   │   │   │   ├── modeline.cpython-312.pyc
│   │           │   │   │   │   ├── plugin.cpython-312.pyc
│   │           │   │   │   │   ├── regexopt.cpython-312.pyc
│   │           │   │   │   │   ├── scanner.cpython-312.pyc
│   │           │   │   │   │   ├── sphinxext.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── token.cpython-312.pyc
│   │           │   │   │   │   ├── unistring.cpython-312.pyc
│   │           │   │   │   │   └── util.cpython-312.pyc
│   │           │   │   │   ├── cmdline.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── filter.py
│   │           │   │   │   ├── filters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   └── __pycache__
│   │           │   │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   │   ├── formatter.py
│   │           │   │   │   ├── formatters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   ├── bbcode.cpython-312.pyc
│   │           │   │   │   │   │   ├── groff.cpython-312.pyc
│   │           │   │   │   │   │   ├── html.cpython-312.pyc
│   │           │   │   │   │   │   ├── img.cpython-312.pyc
│   │           │   │   │   │   │   ├── irc.cpython-312.pyc
│   │           │   │   │   │   │   ├── latex.cpython-312.pyc
│   │           │   │   │   │   │   ├── other.cpython-312.pyc
│   │           │   │   │   │   │   ├── pangomarkup.cpython-312.pyc
│   │           │   │   │   │   │   ├── rtf.cpython-312.pyc
│   │           │   │   │   │   │   ├── svg.cpython-312.pyc
│   │           │   │   │   │   │   ├── terminal.cpython-312.pyc
│   │           │   │   │   │   │   └── terminal256.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   ├── bbcode.py
│   │           │   │   │   │   ├── groff.py
│   │           │   │   │   │   ├── html.py
│   │           │   │   │   │   ├── img.py
│   │           │   │   │   │   ├── irc.py
│   │           │   │   │   │   ├── latex.py
│   │           │   │   │   │   ├── other.py
│   │           │   │   │   │   ├── pangomarkup.py
│   │           │   │   │   │   ├── rtf.py
│   │           │   │   │   │   ├── svg.py
│   │           │   │   │   │   ├── terminal.py
│   │           │   │   │   │   └── terminal256.py
│   │           │   │   │   ├── lexer.py
│   │           │   │   │   ├── lexers
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   └── python.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   └── python.py
│   │           │   │   │   ├── modeline.py
│   │           │   │   │   ├── plugin.py
│   │           │   │   │   ├── regexopt.py
│   │           │   │   │   ├── scanner.py
│   │           │   │   │   ├── sphinxext.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styles
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── _mapping.cpython-312.pyc
│   │           │   │   │   │   └── _mapping.py
│   │           │   │   │   ├── token.py
│   │           │   │   │   ├── unistring.py
│   │           │   │   │   └── util.py
│   │           │   │   ├── pyproject_hooks
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   └── _impl.cpython-312.pyc
│   │           │   │   │   ├── _compat.py
│   │           │   │   │   ├── _impl.py
│   │           │   │   │   └── _in_process
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   └── _in_process.cpython-312.pyc
│   │           │   │   │       └── _in_process.py
│   │           │   │   ├── requests
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __version__.cpython-312.pyc
│   │           │   │   │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   │   │   ├── adapters.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── certs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── cookies.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── hooks.cpython-312.pyc
│   │           │   │   │   │   ├── models.cpython-312.pyc
│   │           │   │   │   │   ├── packages.cpython-312.pyc
│   │           │   │   │   │   ├── sessions.cpython-312.pyc
│   │           │   │   │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   │   │   ├── structures.cpython-312.pyc
│   │           │   │   │   │   └── utils.cpython-312.pyc
│   │           │   │   │   ├── __version__.py
│   │           │   │   │   ├── _internal_utils.py
│   │           │   │   │   ├── adapters.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── certs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── cookies.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── hooks.py
│   │           │   │   │   ├── models.py
│   │           │   │   │   ├── packages.py
│   │           │   │   │   ├── sessions.py
│   │           │   │   │   ├── status_codes.py
│   │           │   │   │   ├── structures.py
│   │           │   │   │   └── utils.py
│   │           │   │   ├── resolvelib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── providers.cpython-312.pyc
│   │           │   │   │   │   ├── reporters.cpython-312.pyc
│   │           │   │   │   │   ├── resolvers.cpython-312.pyc
│   │           │   │   │   │   └── structs.cpython-312.pyc
│   │           │   │   │   ├── compat
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── collections_abc.cpython-312.pyc
│   │           │   │   │   │   └── collections_abc.py
│   │           │   │   │   ├── providers.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── reporters.py
│   │           │   │   │   ├── resolvers.py
│   │           │   │   │   └── structs.py
│   │           │   │   ├── rich
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── _cell_widths.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_codes.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_replace.cpython-312.pyc
│   │           │   │   │   │   ├── _export_format.cpython-312.pyc
│   │           │   │   │   │   ├── _extension.cpython-312.pyc
│   │           │   │   │   │   ├── _fileno.cpython-312.pyc
│   │           │   │   │   │   ├── _inspect.cpython-312.pyc
│   │           │   │   │   │   ├── _log_render.cpython-312.pyc
│   │           │   │   │   │   ├── _loop.cpython-312.pyc
│   │           │   │   │   │   ├── _null_file.cpython-312.pyc
│   │           │   │   │   │   ├── _palettes.cpython-312.pyc
│   │           │   │   │   │   ├── _pick.cpython-312.pyc
│   │           │   │   │   │   ├── _ratio.cpython-312.pyc
│   │           │   │   │   │   ├── _spinners.cpython-312.pyc
│   │           │   │   │   │   ├── _stack.cpython-312.pyc
│   │           │   │   │   │   ├── _timer.cpython-312.pyc
│   │           │   │   │   │   ├── _win32_console.cpython-312.pyc
│   │           │   │   │   │   ├── _windows_renderer.cpython-312.pyc
│   │           │   │   │   │   ├── _windows.cpython-312.pyc
│   │           │   │   │   │   ├── _wrap.cpython-312.pyc
│   │           │   │   │   │   ├── abc.cpython-312.pyc
│   │           │   │   │   │   ├── align.cpython-312.pyc
│   │           │   │   │   │   ├── ansi.cpython-312.pyc
│   │           │   │   │   │   ├── bar.cpython-312.pyc
│   │           │   │   │   │   ├── box.cpython-312.pyc
│   │           │   │   │   │   ├── cells.cpython-312.pyc
│   │           │   │   │   │   ├── color_triplet.cpython-312.pyc
│   │           │   │   │   │   ├── color.cpython-312.pyc
│   │           │   │   │   │   ├── columns.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── constrain.cpython-312.pyc
│   │           │   │   │   │   ├── containers.cpython-312.pyc
│   │           │   │   │   │   ├── control.cpython-312.pyc
│   │           │   │   │   │   ├── default_styles.cpython-312.pyc
│   │           │   │   │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   │   │   ├── emoji.cpython-312.pyc
│   │           │   │   │   │   ├── errors.cpython-312.pyc
│   │           │   │   │   │   ├── file_proxy.cpython-312.pyc
│   │           │   │   │   │   ├── filesize.cpython-312.pyc
│   │           │   │   │   │   ├── highlighter.cpython-312.pyc
│   │           │   │   │   │   ├── json.cpython-312.pyc
│   │           │   │   │   │   ├── jupyter.cpython-312.pyc
│   │           │   │   │   │   ├── layout.cpython-312.pyc
│   │           │   │   │   │   ├── live_render.cpython-312.pyc
│   │           │   │   │   │   ├── live.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── markup.cpython-312.pyc
│   │           │   │   │   │   ├── measure.cpython-312.pyc
│   │           │   │   │   │   ├── padding.cpython-312.pyc
│   │           │   │   │   │   ├── pager.cpython-312.pyc
│   │           │   │   │   │   ├── palette.cpython-312.pyc
│   │           │   │   │   │   ├── panel.cpython-312.pyc
│   │           │   │   │   │   ├── pretty.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bar.cpython-312.pyc
│   │           │   │   │   │   ├── progress.cpython-312.pyc
│   │           │   │   │   │   ├── prompt.cpython-312.pyc
│   │           │   │   │   │   ├── protocol.cpython-312.pyc
│   │           │   │   │   │   ├── region.cpython-312.pyc
│   │           │   │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   │   ├── rule.cpython-312.pyc
│   │           │   │   │   │   ├── scope.cpython-312.pyc
│   │           │   │   │   │   ├── screen.cpython-312.pyc
│   │           │   │   │   │   ├── segment.cpython-312.pyc
│   │           │   │   │   │   ├── spinner.cpython-312.pyc
│   │           │   │   │   │   ├── status.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── styled.cpython-312.pyc
│   │           │   │   │   │   ├── syntax.cpython-312.pyc
│   │           │   │   │   │   ├── table.cpython-312.pyc
│   │           │   │   │   │   ├── terminal_theme.cpython-312.pyc
│   │           │   │   │   │   ├── text.cpython-312.pyc
│   │           │   │   │   │   ├── theme.cpython-312.pyc
│   │           │   │   │   │   ├── themes.cpython-312.pyc
│   │           │   │   │   │   ├── traceback.cpython-312.pyc
│   │           │   │   │   │   └── tree.cpython-312.pyc
│   │           │   │   │   ├── _cell_widths.py
│   │           │   │   │   ├── _emoji_codes.py
│   │           │   │   │   ├── _emoji_replace.py
│   │           │   │   │   ├── _export_format.py
│   │           │   │   │   ├── _extension.py
│   │           │   │   │   ├── _fileno.py
│   │           │   │   │   ├── _inspect.py
│   │           │   │   │   ├── _log_render.py
│   │           │   │   │   ├── _loop.py
│   │           │   │   │   ├── _null_file.py
│   │           │   │   │   ├── _palettes.py
│   │           │   │   │   ├── _pick.py
│   │           │   │   │   ├── _ratio.py
│   │           │   │   │   ├── _spinners.py
│   │           │   │   │   ├── _stack.py
│   │           │   │   │   ├── _timer.py
│   │           │   │   │   ├── _win32_console.py
│   │           │   │   │   ├── _windows_renderer.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   ├── _wrap.py
│   │           │   │   │   ├── abc.py
│   │           │   │   │   ├── align.py
│   │           │   │   │   ├── ansi.py
│   │           │   │   │   ├── bar.py
│   │           │   │   │   ├── box.py
│   │           │   │   │   ├── cells.py
│   │           │   │   │   ├── color_triplet.py
│   │           │   │   │   ├── color.py
│   │           │   │   │   ├── columns.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── constrain.py
│   │           │   │   │   ├── containers.py
│   │           │   │   │   ├── control.py
│   │           │   │   │   ├── default_styles.py
│   │           │   │   │   ├── diagnose.py
│   │           │   │   │   ├── emoji.py
│   │           │   │   │   ├── errors.py
│   │           │   │   │   ├── file_proxy.py
│   │           │   │   │   ├── filesize.py
│   │           │   │   │   ├── highlighter.py
│   │           │   │   │   ├── json.py
│   │           │   │   │   ├── jupyter.py
│   │           │   │   │   ├── layout.py
│   │           │   │   │   ├── live_render.py
│   │           │   │   │   ├── live.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── markup.py
│   │           │   │   │   ├── measure.py
│   │           │   │   │   ├── padding.py
│   │           │   │   │   ├── pager.py
│   │           │   │   │   ├── palette.py
│   │           │   │   │   ├── panel.py
│   │           │   │   │   ├── pretty.py
│   │           │   │   │   ├── progress_bar.py
│   │           │   │   │   ├── progress.py
│   │           │   │   │   ├── prompt.py
│   │           │   │   │   ├── protocol.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── region.py
│   │           │   │   │   ├── repr.py
│   │           │   │   │   ├── rule.py
│   │           │   │   │   ├── scope.py
│   │           │   │   │   ├── screen.py
│   │           │   │   │   ├── segment.py
│   │           │   │   │   ├── spinner.py
│   │           │   │   │   ├── status.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styled.py
│   │           │   │   │   ├── syntax.py
│   │           │   │   │   ├── table.py
│   │           │   │   │   ├── terminal_theme.py
│   │           │   │   │   ├── text.py
│   │           │   │   │   ├── theme.py
│   │           │   │   │   ├── themes.py
│   │           │   │   │   ├── traceback.py
│   │           │   │   │   └── tree.py
│   │           │   │   ├── tomli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _re.cpython-312.pyc
│   │           │   │   │   │   └── _types.cpython-312.pyc
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _re.py
│   │           │   │   │   ├── _types.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── truststore
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _api.cpython-312.pyc
│   │           │   │   │   │   ├── _macos.cpython-312.pyc
│   │           │   │   │   │   ├── _openssl.cpython-312.pyc
│   │           │   │   │   │   ├── _ssl_constants.cpython-312.pyc
│   │           │   │   │   │   └── _windows.cpython-312.pyc
│   │           │   │   │   ├── _api.py
│   │           │   │   │   ├── _macos.py
│   │           │   │   │   ├── _openssl.py
│   │           │   │   │   ├── _ssl_constants.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── typing_extensions.py
│   │           │   │   ├── urllib3
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _collections.cpython-312.pyc
│   │           │   │   │   │   ├── _version.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── fields.cpython-312.pyc
│   │           │   │   │   │   ├── filepost.cpython-312.pyc
│   │           │   │   │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── _collections.py
│   │           │   │   │   ├── _version.py
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── connectionpool.py
│   │           │   │   │   ├── contrib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _appengine_environ.cpython-312.pyc
│   │           │   │   │   │   │   ├── appengine.cpython-312.pyc
│   │           │   │   │   │   │   ├── ntlmpool.cpython-312.pyc
│   │           │   │   │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   │   │   ├── securetransport.cpython-312.pyc
│   │           │   │   │   │   │   └── socks.cpython-312.pyc
│   │           │   │   │   │   ├── _appengine_environ.py
│   │           │   │   │   │   ├── _securetransport
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── bindings.cpython-312.pyc
│   │           │   │   │   │   │   │   └── low_level.cpython-312.pyc
│   │           │   │   │   │   │   ├── bindings.py
│   │           │   │   │   │   │   └── low_level.py
│   │           │   │   │   │   ├── appengine.py
│   │           │   │   │   │   ├── ntlmpool.py
│   │           │   │   │   │   ├── pyopenssl.py
│   │           │   │   │   │   ├── securetransport.py
│   │           │   │   │   │   └── socks.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── fields.py
│   │           │   │   │   ├── filepost.py
│   │           │   │   │   ├── packages
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── six.cpython-312.pyc
│   │           │   │   │   │   ├── backports
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── makefile.cpython-312.pyc
│   │           │   │   │   │   │   │   └── weakref_finalize.cpython-312.pyc
│   │           │   │   │   │   │   ├── makefile.py
│   │           │   │   │   │   │   └── weakref_finalize.py
│   │           │   │   │   │   └── six.py
│   │           │   │   │   ├── poolmanager.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   ├── response.py
│   │           │   │   │   └── util
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── connection.cpython-312.pyc
│   │           │   │   │       │   ├── proxy.cpython-312.pyc
│   │           │   │   │       │   ├── queue.cpython-312.pyc
│   │           │   │   │       │   ├── request.cpython-312.pyc
│   │           │   │   │       │   ├── response.cpython-312.pyc
│   │           │   │   │       │   ├── retry.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │   │   │       │   ├── ssltransport.cpython-312.pyc
│   │           │   │   │       │   ├── timeout.cpython-312.pyc
│   │           │   │   │       │   ├── url.cpython-312.pyc
│   │           │   │   │       │   └── wait.cpython-312.pyc
│   │           │   │   │       ├── connection.py
│   │           │   │   │       ├── proxy.py
│   │           │   │   │       ├── queue.py
│   │           │   │   │       ├── request.py
│   │           │   │   │       ├── response.py
│   │           │   │   │       ├── retry.py
│   │           │   │   │       ├── ssl_.py
│   │           │   │   │       ├── ssl_match_hostname.py
│   │           │   │   │       ├── ssltransport.py
│   │           │   │   │       ├── timeout.py
│   │           │   │   │       ├── url.py
│   │           │   │   │       └── wait.py
│   │           │   │   └── vendor.txt
│   │           │   └── py.typed
│   │           ├── pip-24.2.dist-info
│   │           │   ├── AUTHORS.txt
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── requests
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __version__.cpython-312.pyc
│   │           │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   ├── adapters.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── auth.cpython-312.pyc
│   │           │   │   ├── certs.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── cookies.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── help.cpython-312.pyc
│   │           │   │   ├── hooks.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── packages.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   ├── structures.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── __version__.py
│   │           │   ├── _internal_utils.py
│   │           │   ├── adapters.py
│   │           │   ├── api.py
│   │           │   ├── auth.py
│   │           │   ├── certs.py
│   │           │   ├── compat.py
│   │           │   ├── cookies.py
│   │           │   ├── exceptions.py
│   │           │   ├── help.py
│   │           │   ├── hooks.py
│   │           │   ├── models.py
│   │           │   ├── packages.py
│   │           │   ├── sessions.py
│   │           │   ├── status_codes.py
│   │           │   ├── structures.py
│   │           │   └── utils.py
│   │           ├── requests-2.32.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── soupsieve
│   │           │   ├── __init__.py
│   │           │   ├── __meta__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __meta__.cpython-312.pyc
│   │           │   │   ├── css_match.cpython-312.pyc
│   │           │   │   ├── css_parser.cpython-312.pyc
│   │           │   │   ├── css_types.cpython-312.pyc
│   │           │   │   ├── pretty.cpython-312.pyc
│   │           │   │   └── util.cpython-312.pyc
│   │           │   ├── css_match.py
│   │           │   ├── css_parser.py
│   │           │   ├── css_types.py
│   │           │   ├── pretty.py
│   │           │   ├── py.typed
│   │           │   └── util.py
│   │           ├── soupsieve-2.6.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── urllib3
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _base_connection.cpython-312.pyc
│   │           │   │   ├── _collections.cpython-312.pyc
│   │           │   │   ├── _request_methods.cpython-312.pyc
│   │           │   │   ├── _version.cpython-312.pyc
│   │           │   │   ├── connection.cpython-312.pyc
│   │           │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── fields.cpython-312.pyc
│   │           │   │   ├── filepost.cpython-312.pyc
│   │           │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   └── response.cpython-312.pyc
│   │           │   ├── _base_connection.py
│   │           │   ├── _collections.py
│   │           │   ├── _request_methods.py
│   │           │   ├── _version.py
│   │           │   ├── connection.py
│   │           │   ├── connectionpool.py
│   │           │   ├── contrib
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   └── socks.cpython-312.pyc
│   │           │   │   ├── emscripten
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── fetch.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── emscripten_fetch_worker.js
│   │           │   │   │   ├── fetch.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   └── response.py
│   │           │   │   ├── pyopenssl.py
│   │           │   │   └── socks.py
│   │           │   ├── exceptions.py
│   │           │   ├── fields.py
│   │           │   ├── filepost.py
│   │           │   ├── http2
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   └── probe.cpython-312.pyc
│   │           │   │   ├── connection.py
│   │           │   │   └── probe.py
│   │           │   ├── poolmanager.py
│   │           │   ├── py.typed
│   │           │   ├── response.py
│   │           │   └── util
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── connection.cpython-312.pyc
│   │           │       │   ├── proxy.cpython-312.pyc
│   │           │       │   ├── request.cpython-312.pyc
│   │           │       │   ├── response.cpython-312.pyc
│   │           │       │   ├── retry.cpython-312.pyc
│   │           │       │   ├── ssl_.cpython-312.pyc
│   │           │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │       │   ├── ssltransport.cpython-312.pyc
│   │           │       │   ├── timeout.cpython-312.pyc
│   │           │       │   ├── url.cpython-312.pyc
│   │           │       │   ├── util.cpython-312.pyc
│   │           │       │   └── wait.cpython-312.pyc
│   │           │       ├── connection.py
│   │           │       ├── proxy.py
│   │           │       ├── request.py
│   │           │       ├── response.py
│   │           │       ├── retry.py
│   │           │       ├── ssl_.py
│   │           │       ├── ssl_match_hostname.py
│   │           │       ├── ssltransport.py
│   │           │       ├── timeout.py
│   │           │       ├── url.py
│   │           │       ├── util.py
│   │           │       └── wait.py
│   │           ├── urllib3-2.2.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── useragent
│   │           │   ├── __init__.py
│   │           │   ├── __init__.pyc
│   │           │   ├── __pycache__
│   │           │   │   └── __init__.cpython-312.pyc
│   │           │   ├── resources
│   │           │   │   └── user_agent_data.json
│   │           │   └── test
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   └── __init__.cpython-312.pyc
│   │           │       ├── test_additional_os.json
│   │           │       ├── test_browser.json
│   │           │       ├── test_device.json
│   │           │       ├── test_firefox.json
│   │           │       ├── test_os.json
│   │           │       └── test_pgts_browser.json
│   │           ├── useragent-0.1.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── werkzeug
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _internal.cpython-312.pyc
│   │           │   │   ├── _reloader.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formparser.cpython-312.pyc
│   │           │   │   ├── http.cpython-312.pyc
│   │           │   │   ├── local.cpython-312.pyc
│   │           │   │   ├── security.cpython-312.pyc
│   │           │   │   ├── serving.cpython-312.pyc
│   │           │   │   ├── test.cpython-312.pyc
│   │           │   │   ├── testapp.cpython-312.pyc
│   │           │   │   ├── urls.cpython-312.pyc
│   │           │   │   ├── user_agent.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── wsgi.cpython-312.pyc
│   │           │   ├── _internal.py
│   │           │   ├── _reloader.py
│   │           │   ├── datastructures
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── accept.cpython-312.pyc
│   │           │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   ├── cache_control.cpython-312.pyc
│   │           │   │   │   ├── csp.cpython-312.pyc
│   │           │   │   │   ├── etag.cpython-312.pyc
│   │           │   │   │   ├── file_storage.cpython-312.pyc
│   │           │   │   │   ├── headers.cpython-312.pyc
│   │           │   │   │   ├── mixins.cpython-312.pyc
│   │           │   │   │   ├── range.cpython-312.pyc
│   │           │   │   │   └── structures.cpython-312.pyc
│   │           │   │   ├── accept.py
│   │           │   │   ├── accept.pyi
│   │           │   │   ├── auth.py
│   │           │   │   ├── cache_control.py
│   │           │   │   ├── cache_control.pyi
│   │           │   │   ├── csp.py
│   │           │   │   ├── csp.pyi
│   │           │   │   ├── etag.py
│   │           │   │   ├── etag.pyi
│   │           │   │   ├── file_storage.py
│   │           │   │   ├── file_storage.pyi
│   │           │   │   ├── headers.py
│   │           │   │   ├── headers.pyi
│   │           │   │   ├── mixins.py
│   │           │   │   ├── mixins.pyi
│   │           │   │   ├── range.py
│   │           │   │   ├── range.pyi
│   │           │   │   ├── structures.py
│   │           │   │   └── structures.pyi
│   │           │   ├── debug
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   └── tbtools.cpython-312.pyc
│   │           │   │   ├── console.py
│   │           │   │   ├── repr.py
│   │           │   │   ├── shared
│   │           │   │   │   ├── console.png
│   │           │   │   │   ├── debugger.js
│   │           │   │   │   ├── ICON_LICENSE.md
│   │           │   │   │   ├── less.png
│   │           │   │   │   ├── more.png
│   │           │   │   │   └── style.css
│   │           │   │   └── tbtools.py
│   │           │   ├── exceptions.py
│   │           │   ├── formparser.py
│   │           │   ├── http.py
│   │           │   ├── local.py
│   │           │   ├── middleware
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── dispatcher.cpython-312.pyc
│   │           │   │   │   ├── http_proxy.cpython-312.pyc
│   │           │   │   │   ├── lint.cpython-312.pyc
│   │           │   │   │   ├── profiler.cpython-312.pyc
│   │           │   │   │   ├── proxy_fix.cpython-312.pyc
│   │           │   │   │   └── shared_data.cpython-312.pyc
│   │           │   │   ├── dispatcher.py
│   │           │   │   ├── http_proxy.py
│   │           │   │   ├── lint.py
│   │           │   │   ├── profiler.py
│   │           │   │   ├── proxy_fix.py
│   │           │   │   └── shared_data.py
│   │           │   ├── py.typed
│   │           │   ├── routing
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── converters.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── map.cpython-312.pyc
│   │           │   │   │   ├── matcher.cpython-312.pyc
│   │           │   │   │   └── rules.cpython-312.pyc
│   │           │   │   ├── converters.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── map.py
│   │           │   │   ├── matcher.py
│   │           │   │   └── rules.py
│   │           │   ├── sansio
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── http.cpython-312.pyc
│   │           │   │   │   ├── multipart.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   ├── response.cpython-312.pyc
│   │           │   │   │   └── utils.cpython-312.pyc
│   │           │   │   ├── http.py
│   │           │   │   ├── multipart.py
│   │           │   │   ├── request.py
│   │           │   │   ├── response.py
│   │           │   │   └── utils.py
│   │           │   ├── security.py
│   │           │   ├── serving.py
│   │           │   ├── test.py
│   │           │   ├── testapp.py
│   │           │   ├── urls.py
│   │           │   ├── user_agent.py
│   │           │   ├── utils.py
│   │           │   ├── wrappers
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   └── response.cpython-312.pyc
│   │           │   │   ├── request.py
│   │           │   │   └── response.py
│   │           │   └── wsgi.py
│   │           └── werkzeug-3.0.4.dist-info
│   │               ├── INSTALLER
│   │               ├── LICENSE.txt
│   │               ├── METADATA
│   │               ├── RECORD
│   │               └── WHEEL
│   ├── pyvenv.cfg
│   ├── static
│   │   └── styles.css
│   ├── templates
│   │   └── index.html
│   └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
    ├── text1.txt
    └── text2.txt
```

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import absolute_import
  2 | 
  3 | import time
  4 | 
  5 | # The default socket timeout, used by httplib to indicate that no timeout was; specified by the user
  6 | from socket import _GLOBAL_DEFAULT_TIMEOUT, getdefaulttimeout
  7 | 
  8 | from ..exceptions import TimeoutStateError
  9 | 
 10 | # A sentinel value to indicate that no timeout was specified by the user in
 11 | # urllib3
 12 | _Default = object()
 13 | 
 14 | 
 15 | # Use time.monotonic if available.
 16 | current_time = getattr(time, "monotonic", time.time)
 17 | 
 18 | 
 19 | class Timeout(object):
 20 |     """Timeout configuration.
 21 | 
 22 |     Timeouts can be defined as a default for a pool:
 23 | 
 24 |     .. code-block:: python
 25 | 
 26 |        timeout = Timeout(connect=2.0, read=7.0)
 27 |        http = PoolManager(timeout=timeout)
 28 |        response = http.request('GET', 'http://example.com/')
 29 | 
 30 |     Or per-request (which overrides the default for the pool):
 31 | 
 32 |     .. code-block:: python
 33 | 
 34 |        response = http.request('GET', 'http://example.com/', timeout=Timeout(10))
 35 | 
 36 |     Timeouts can be disabled by setting all the parameters to ``None``:
 37 | 
 38 |     .. code-block:: python
 39 | 
 40 |        no_timeout = Timeout(connect=None, read=None)
 41 |        response = http.request('GET', 'http://example.com/, timeout=no_timeout)
 42 | 
 43 | 
 44 |     :param total:
 45 |         This combines the connect and read timeouts into one; the read timeout
 46 |         will be set to the time leftover from the connect attempt. In the
 47 |         event that both a connect timeout and a total are specified, or a read
 48 |         timeout and a total are specified, the shorter timeout will be applied.
 49 | 
 50 |         Defaults to None.
 51 | 
 52 |     :type total: int, float, or None
 53 | 
 54 |     :param connect:
 55 |         The maximum amount of time (in seconds) to wait for a connection
 56 |         attempt to a server to succeed. Omitting the parameter will default the
 57 |         connect timeout to the system default, probably `the global default
 58 |         timeout in socket.py
 59 |         <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
 60 |         None will set an infinite timeout for connection attempts.
 61 | 
 62 |     :type connect: int, float, or None
 63 | 
 64 |     :param read:
 65 |         The maximum amount of time (in seconds) to wait between consecutive
 66 |         read operations for a response from the server. Omitting the parameter
 67 |         will default the read timeout to the system default, probably `the
 68 |         global default timeout in socket.py
 69 |         <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
 70 |         None will set an infinite timeout.
 71 | 
 72 |     :type read: int, float, or None
 73 | 
 74 |     .. note::
 75 | 
 76 |         Many factors can affect the total amount of time for urllib3 to return
 77 |         an HTTP response.
 78 | 
 79 |         For example, Python's DNS resolver does not obey the timeout specified
 80 |         on the socket. Other factors that can affect total request time include
 81 |         high CPU load, high swap, the program running at a low priority level,
 82 |         or other behaviors.
 83 | 
 84 |         In addition, the read and total timeouts only measure the time between
 85 |         read operations on the socket connecting the client and the server,
 86 |         not the total amount of time for the request to return a complete
 87 |         response. For most requests, the timeout is raised because the server
 88 |         has not sent the first byte in the specified time. This is not always
 89 |         the case; if a server streams one byte every fifteen seconds, a timeout
 90 |         of 20 seconds will not trigger, even though the request will take
 91 |         several minutes to complete.
 92 | 
 93 |         If your goal is to cut off any request after a set amount of wall clock
 94 |         time, consider having a second "watcher" thread to cut off a slow
 95 |         request.
 96 |     """
 97 | 
 98 |     #: A sentinel object representing the default timeout value
 99 |     DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT
100 | 
101 |     def __init__(self, total=None, connect=_Default, read=_Default):
102 |         self._connect = self._validate_timeout(connect, "connect")
103 |         self._read = self._validate_timeout(read, "read")
104 |         self.total = self._validate_timeout(total, "total")
105 |         self._start_connect = None
106 | 
107 |     def __repr__(self):
108 |         return "%s(connect=%r, read=%r, total=%r)" % (
109 |             type(self).__name__,
110 |             self._connect,
111 |             self._read,
112 |             self.total,
113 |         )
114 | 
115 |     # __str__ provided for backwards compatibility
116 |     __str__ = __repr__
117 | 
118 |     @classmethod
119 |     def resolve_default_timeout(cls, timeout):
120 |         return getdefaulttimeout() if timeout is cls.DEFAULT_TIMEOUT else timeout
121 | 
122 |     @classmethod
123 |     def _validate_timeout(cls, value, name):
124 |         """Check that a timeout attribute is valid.
125 | 
126 |         :param value: The timeout value to validate
127 |         :param name: The name of the timeout attribute to validate. This is
128 |             used to specify in error messages.
129 |         :return: The validated and casted version of the given value.
130 |         :raises ValueError: If it is a numeric value less than or equal to
131 |             zero, or the type is not an integer, float, or None.
132 |         """
133 |         if value is _Default:
134 |             return cls.DEFAULT_TIMEOUT
135 | 
136 |         if value is None or value is cls.DEFAULT_TIMEOUT:
137 |             return value
138 | 
139 |         if isinstance(value, bool):
140 |             raise ValueError(
141 |                 "Timeout cannot be a boolean value. It must "
142 |                 "be an int, float or None."
143 |             )
144 |         try:
145 |             float(value)
146 |         except (TypeError, ValueError):
147 |             raise ValueError(
148 |                 "Timeout value %s was %s, but it must be an "
149 |                 "int, float or None." % (name, value)
150 |             )
151 | 
152 |         try:
153 |             if value <= 0:
154 |                 raise ValueError(
155 |                     "Attempted to set %s timeout to %s, but the "
156 |                     "timeout cannot be set to a value less "
157 |                     "than or equal to 0." % (name, value)
158 |                 )
159 |         except TypeError:
160 |             # Python 3
161 |             raise ValueError(
162 |                 "Timeout value %s was %s, but it must be an "
163 |                 "int, float or None." % (name, value)
164 |             )
165 | 
166 |         return value
167 | 
168 |     @classmethod
169 |     def from_float(cls, timeout):
170 |         """Create a new Timeout from a legacy timeout value.
171 | 
172 |         The timeout value used by httplib.py sets the same timeout on the
173 |         connect(), and recv() socket requests. This creates a :class:`Timeout`
174 |         object that sets the individual timeouts to the ``timeout`` value
175 |         passed to this function.
176 | 
177 |         :param timeout: The legacy timeout value.
178 |         :type timeout: integer, float, sentinel default object, or None
179 |         :return: Timeout object
180 |         :rtype: :class:`Timeout`
181 |         """
182 |         return Timeout(read=timeout, connect=timeout)
183 | 
184 |     def clone(self):
185 |         """Create a copy of the timeout object
186 | 
187 |         Timeout properties are stored per-pool but each request needs a fresh
188 |         Timeout object to ensure each one has its own start/stop configured.
189 | 
190 |         :return: a copy of the timeout object
191 |         :rtype: :class:`Timeout`
192 |         """
193 |         # We can't use copy.deepcopy because that will also create a new object
194 |         # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to
195 |         # detect the user default.
196 |         return Timeout(connect=self._connect, read=self._read, total=self.total)
197 | 
198 |     def start_connect(self):
199 |         """Start the timeout clock, used during a connect() attempt
200 | 
201 |         :raises urllib3.exceptions.TimeoutStateError: if you attempt
202 |             to start a timer that has been started already.
203 |         """
204 |         if self._start_connect is not None:
205 |             raise TimeoutStateError("Timeout timer has already been started.")
206 |         self._start_connect = current_time()
207 |         return self._start_connect
208 | 
209 |     def get_connect_duration(self):
210 |         """Gets the time elapsed since the call to :meth:`start_connect`.
211 | 
212 |         :return: Elapsed time in seconds.
213 |         :rtype: float
214 |         :raises urllib3.exceptions.TimeoutStateError: if you attempt
215 |             to get duration for a timer that hasn't been started.
216 |         """
217 |         if self._start_connect is None:
218 |             raise TimeoutStateError(
219 |                 "Can't get connect duration for timer that has not started."
220 |             )
221 |         return current_time() - self._start_connect
222 | 
223 |     @property
224 |     def connect_timeout(self):
225 |         """Get the value to use when setting a connection timeout.
226 | 
227 |         This will be a positive float or integer, the value None
228 |         (never timeout), or the default system timeout.
229 | 
230 |         :return: Connect timeout.
231 |         :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
232 |         """
233 |         if self.total is None:
234 |             return self._connect
235 | 
236 |         if self._connect is None or self._connect is self.DEFAULT_TIMEOUT:
237 |             return self.total
238 | 
239 |         return min(self._connect, self.total)
240 | 
241 |     @property
242 |     def read_timeout(self):
243 |         """Get the value for the read timeout.
244 | 
245 |         This assumes some time has elapsed in the connection timeout and
246 |         computes the read timeout appropriately.
247 | 
248 |         If self.total is set, the read timeout is dependent on the amount of
249 |         time taken by the connect timeout. If the connection time has not been
250 |         established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be
251 |         raised.
252 | 
253 |         :return: Value to use for the read timeout.
254 |         :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
255 |         :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect`
256 |             has not yet been called on this object.
257 |         """
258 |         if (
259 |             self.total is not None
260 |             and self.total is not self.DEFAULT_TIMEOUT
261 |             and self._read is not None
262 |             and self._read is not self.DEFAULT_TIMEOUT
263 |         ):
264 |             # In case the connect timeout has not yet been established.
265 |             if self._start_connect is None:
266 |                 return self._read
267 |             return max(0, min(self.total - self.get_connect_duration(), self._read))
268 |         elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT:
269 |             return max(0, self.total - self.get_connect_duration())
270 |         else:
271 |             return self._read
272 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/box.py:
--------------------------------------------------------------------------------

```python
  1 | import sys
  2 | from typing import TYPE_CHECKING, Iterable, List
  3 | 
  4 | if sys.version_info >= (3, 8):
  5 |     from typing import Literal
  6 | else:
  7 |     from pip._vendor.typing_extensions import Literal  # pragma: no cover
  8 | 
  9 | 
 10 | from ._loop import loop_last
 11 | 
 12 | if TYPE_CHECKING:
 13 |     from pip._vendor.rich.console import ConsoleOptions
 14 | 
 15 | 
 16 | class Box:
 17 |     """Defines characters to render boxes.
 18 | 
 19 |     ┌─┬┐ top
 20 |     │ ││ head
 21 |     ├─┼┤ head_row
 22 |     │ ││ mid
 23 |     ├─┼┤ row
 24 |     ├─┼┤ foot_row
 25 |     │ ││ foot
 26 |     └─┴┘ bottom
 27 | 
 28 |     Args:
 29 |         box (str): Characters making up box.
 30 |         ascii (bool, optional): True if this box uses ascii characters only. Default is False.
 31 |     """
 32 | 
 33 |     def __init__(self, box: str, *, ascii: bool = False) -> None:
 34 |         self._box = box
 35 |         self.ascii = ascii
 36 |         line1, line2, line3, line4, line5, line6, line7, line8 = box.splitlines()
 37 |         # top
 38 |         self.top_left, self.top, self.top_divider, self.top_right = iter(line1)
 39 |         # head
 40 |         self.head_left, _, self.head_vertical, self.head_right = iter(line2)
 41 |         # head_row
 42 |         (
 43 |             self.head_row_left,
 44 |             self.head_row_horizontal,
 45 |             self.head_row_cross,
 46 |             self.head_row_right,
 47 |         ) = iter(line3)
 48 | 
 49 |         # mid
 50 |         self.mid_left, _, self.mid_vertical, self.mid_right = iter(line4)
 51 |         # row
 52 |         self.row_left, self.row_horizontal, self.row_cross, self.row_right = iter(line5)
 53 |         # foot_row
 54 |         (
 55 |             self.foot_row_left,
 56 |             self.foot_row_horizontal,
 57 |             self.foot_row_cross,
 58 |             self.foot_row_right,
 59 |         ) = iter(line6)
 60 |         # foot
 61 |         self.foot_left, _, self.foot_vertical, self.foot_right = iter(line7)
 62 |         # bottom
 63 |         self.bottom_left, self.bottom, self.bottom_divider, self.bottom_right = iter(
 64 |             line8
 65 |         )
 66 | 
 67 |     def __repr__(self) -> str:
 68 |         return "Box(...)"
 69 | 
 70 |     def __str__(self) -> str:
 71 |         return self._box
 72 | 
 73 |     def substitute(self, options: "ConsoleOptions", safe: bool = True) -> "Box":
 74 |         """Substitute this box for another if it won't render due to platform issues.
 75 | 
 76 |         Args:
 77 |             options (ConsoleOptions): Console options used in rendering.
 78 |             safe (bool, optional): Substitute this for another Box if there are known problems
 79 |                 displaying on the platform (currently only relevant on Windows). Default is True.
 80 | 
 81 |         Returns:
 82 |             Box: A different Box or the same Box.
 83 |         """
 84 |         box = self
 85 |         if options.legacy_windows and safe:
 86 |             box = LEGACY_WINDOWS_SUBSTITUTIONS.get(box, box)
 87 |         if options.ascii_only and not box.ascii:
 88 |             box = ASCII
 89 |         return box
 90 | 
 91 |     def get_plain_headed_box(self) -> "Box":
 92 |         """If this box uses special characters for the borders of the header, then
 93 |         return the equivalent box that does not.
 94 | 
 95 |         Returns:
 96 |             Box: The most similar Box that doesn't use header-specific box characters.
 97 |                 If the current Box already satisfies this criterion, then it's returned.
 98 |         """
 99 |         return PLAIN_HEADED_SUBSTITUTIONS.get(self, self)
100 | 
101 |     def get_top(self, widths: Iterable[int]) -> str:
102 |         """Get the top of a simple box.
103 | 
104 |         Args:
105 |             widths (List[int]): Widths of columns.
106 | 
107 |         Returns:
108 |             str: A string of box characters.
109 |         """
110 | 
111 |         parts: List[str] = []
112 |         append = parts.append
113 |         append(self.top_left)
114 |         for last, width in loop_last(widths):
115 |             append(self.top * width)
116 |             if not last:
117 |                 append(self.top_divider)
118 |         append(self.top_right)
119 |         return "".join(parts)
120 | 
121 |     def get_row(
122 |         self,
123 |         widths: Iterable[int],
124 |         level: Literal["head", "row", "foot", "mid"] = "row",
125 |         edge: bool = True,
126 |     ) -> str:
127 |         """Get the top of a simple box.
128 | 
129 |         Args:
130 |             width (List[int]): Widths of columns.
131 | 
132 |         Returns:
133 |             str: A string of box characters.
134 |         """
135 |         if level == "head":
136 |             left = self.head_row_left
137 |             horizontal = self.head_row_horizontal
138 |             cross = self.head_row_cross
139 |             right = self.head_row_right
140 |         elif level == "row":
141 |             left = self.row_left
142 |             horizontal = self.row_horizontal
143 |             cross = self.row_cross
144 |             right = self.row_right
145 |         elif level == "mid":
146 |             left = self.mid_left
147 |             horizontal = " "
148 |             cross = self.mid_vertical
149 |             right = self.mid_right
150 |         elif level == "foot":
151 |             left = self.foot_row_left
152 |             horizontal = self.foot_row_horizontal
153 |             cross = self.foot_row_cross
154 |             right = self.foot_row_right
155 |         else:
156 |             raise ValueError("level must be 'head', 'row' or 'foot'")
157 | 
158 |         parts: List[str] = []
159 |         append = parts.append
160 |         if edge:
161 |             append(left)
162 |         for last, width in loop_last(widths):
163 |             append(horizontal * width)
164 |             if not last:
165 |                 append(cross)
166 |         if edge:
167 |             append(right)
168 |         return "".join(parts)
169 | 
170 |     def get_bottom(self, widths: Iterable[int]) -> str:
171 |         """Get the bottom of a simple box.
172 | 
173 |         Args:
174 |             widths (List[int]): Widths of columns.
175 | 
176 |         Returns:
177 |             str: A string of box characters.
178 |         """
179 | 
180 |         parts: List[str] = []
181 |         append = parts.append
182 |         append(self.bottom_left)
183 |         for last, width in loop_last(widths):
184 |             append(self.bottom * width)
185 |             if not last:
186 |                 append(self.bottom_divider)
187 |         append(self.bottom_right)
188 |         return "".join(parts)
189 | 
190 | 
191 | # fmt: off
192 | ASCII: Box = Box(
193 |     "+--+\n"
194 |     "| ||\n"
195 |     "|-+|\n"
196 |     "| ||\n"
197 |     "|-+|\n"
198 |     "|-+|\n"
199 |     "| ||\n"
200 |     "+--+\n",
201 |     ascii=True,
202 | )
203 | 
204 | ASCII2: Box = Box(
205 |     "+-++\n"
206 |     "| ||\n"
207 |     "+-++\n"
208 |     "| ||\n"
209 |     "+-++\n"
210 |     "+-++\n"
211 |     "| ||\n"
212 |     "+-++\n",
213 |     ascii=True,
214 | )
215 | 
216 | ASCII_DOUBLE_HEAD: Box = Box(
217 |     "+-++\n"
218 |     "| ||\n"
219 |     "+=++\n"
220 |     "| ||\n"
221 |     "+-++\n"
222 |     "+-++\n"
223 |     "| ||\n"
224 |     "+-++\n",
225 |     ascii=True,
226 | )
227 | 
228 | SQUARE: Box = Box(
229 |     "┌─┬┐\n"
230 |     "│ ││\n"
231 |     "├─┼┤\n"
232 |     "│ ││\n"
233 |     "├─┼┤\n"
234 |     "├─┼┤\n"
235 |     "│ ││\n"
236 |     "└─┴┘\n"
237 | )
238 | 
239 | SQUARE_DOUBLE_HEAD: Box = Box(
240 |     "┌─┬┐\n"
241 |     "│ ││\n"
242 |     "╞═╪╡\n"
243 |     "│ ││\n"
244 |     "├─┼┤\n"
245 |     "├─┼┤\n"
246 |     "│ ││\n"
247 |     "└─┴┘\n"
248 | )
249 | 
250 | MINIMAL: Box = Box(
251 |     "  ╷ \n"
252 |     "  │ \n"
253 |     "╶─┼╴\n"
254 |     "  │ \n"
255 |     "╶─┼╴\n"
256 |     "╶─┼╴\n"
257 |     "  │ \n"
258 |     "  ╵ \n"
259 | )
260 | 
261 | 
262 | MINIMAL_HEAVY_HEAD: Box = Box(
263 |     "  ╷ \n"
264 |     "  │ \n"
265 |     "╺━┿╸\n"
266 |     "  │ \n"
267 |     "╶─┼╴\n"
268 |     "╶─┼╴\n"
269 |     "  │ \n"
270 |     "  ╵ \n"
271 | )
272 | 
273 | MINIMAL_DOUBLE_HEAD: Box = Box(
274 |     "  ╷ \n"
275 |     "  │ \n"
276 |     " ═╪ \n"
277 |     "  │ \n"
278 |     " ─┼ \n"
279 |     " ─┼ \n"
280 |     "  │ \n"
281 |     "  ╵ \n"
282 | )
283 | 
284 | 
285 | SIMPLE: Box = Box(
286 |     "    \n"
287 |     "    \n"
288 |     " ── \n"
289 |     "    \n"
290 |     "    \n"
291 |     " ── \n"
292 |     "    \n"
293 |     "    \n"
294 | )
295 | 
296 | SIMPLE_HEAD: Box = Box(
297 |     "    \n"
298 |     "    \n"
299 |     " ── \n"
300 |     "    \n"
301 |     "    \n"
302 |     "    \n"
303 |     "    \n"
304 |     "    \n"
305 | )
306 | 
307 | 
308 | SIMPLE_HEAVY: Box = Box(
309 |     "    \n"
310 |     "    \n"
311 |     " ━━ \n"
312 |     "    \n"
313 |     "    \n"
314 |     " ━━ \n"
315 |     "    \n"
316 |     "    \n"
317 | )
318 | 
319 | 
320 | HORIZONTALS: Box = Box(
321 |     " ── \n"
322 |     "    \n"
323 |     " ── \n"
324 |     "    \n"
325 |     " ── \n"
326 |     " ── \n"
327 |     "    \n"
328 |     " ── \n"
329 | )
330 | 
331 | ROUNDED: Box = Box(
332 |     "╭─┬╮\n"
333 |     "│ ││\n"
334 |     "├─┼┤\n"
335 |     "│ ││\n"
336 |     "├─┼┤\n"
337 |     "├─┼┤\n"
338 |     "│ ││\n"
339 |     "╰─┴╯\n"
340 | )
341 | 
342 | HEAVY: Box = Box(
343 |     "┏━┳┓\n"
344 |     "┃ ┃┃\n"
345 |     "┣━╋┫\n"
346 |     "┃ ┃┃\n"
347 |     "┣━╋┫\n"
348 |     "┣━╋┫\n"
349 |     "┃ ┃┃\n"
350 |     "┗━┻┛\n"
351 | )
352 | 
353 | HEAVY_EDGE: Box = Box(
354 |     "┏━┯┓\n"
355 |     "┃ │┃\n"
356 |     "┠─┼┨\n"
357 |     "┃ │┃\n"
358 |     "┠─┼┨\n"
359 |     "┠─┼┨\n"
360 |     "┃ │┃\n"
361 |     "┗━┷┛\n"
362 | )
363 | 
364 | HEAVY_HEAD: Box = Box(
365 |     "┏━┳┓\n"
366 |     "┃ ┃┃\n"
367 |     "┡━╇┩\n"
368 |     "│ ││\n"
369 |     "├─┼┤\n"
370 |     "├─┼┤\n"
371 |     "│ ││\n"
372 |     "└─┴┘\n"
373 | )
374 | 
375 | DOUBLE: Box = Box(
376 |     "╔═╦╗\n"
377 |     "║ ║║\n"
378 |     "╠═╬╣\n"
379 |     "║ ║║\n"
380 |     "╠═╬╣\n"
381 |     "╠═╬╣\n"
382 |     "║ ║║\n"
383 |     "╚═╩╝\n"
384 | )
385 | 
386 | DOUBLE_EDGE: Box = Box(
387 |     "╔═╤╗\n"
388 |     "║ │║\n"
389 |     "╟─┼╢\n"
390 |     "║ │║\n"
391 |     "╟─┼╢\n"
392 |     "╟─┼╢\n"
393 |     "║ │║\n"
394 |     "╚═╧╝\n"
395 | )
396 | 
397 | MARKDOWN: Box = Box(
398 |     "    \n"
399 |     "| ||\n"
400 |     "|-||\n"
401 |     "| ||\n"
402 |     "|-||\n"
403 |     "|-||\n"
404 |     "| ||\n"
405 |     "    \n",
406 |     ascii=True,
407 | )
408 | # fmt: on
409 | 
410 | # Map Boxes that don't render with raster fonts on to equivalent that do
411 | LEGACY_WINDOWS_SUBSTITUTIONS = {
412 |     ROUNDED: SQUARE,
413 |     MINIMAL_HEAVY_HEAD: MINIMAL,
414 |     SIMPLE_HEAVY: SIMPLE,
415 |     HEAVY: SQUARE,
416 |     HEAVY_EDGE: SQUARE,
417 |     HEAVY_HEAD: SQUARE,
418 | }
419 | 
420 | # Map headed boxes to their headerless equivalents
421 | PLAIN_HEADED_SUBSTITUTIONS = {
422 |     HEAVY_HEAD: SQUARE,
423 |     SQUARE_DOUBLE_HEAD: SQUARE,
424 |     MINIMAL_DOUBLE_HEAD: MINIMAL,
425 |     MINIMAL_HEAVY_HEAD: MINIMAL,
426 |     ASCII_DOUBLE_HEAD: ASCII2,
427 | }
428 | 
429 | 
430 | if __name__ == "__main__":  # pragma: no cover
431 |     from pip._vendor.rich.columns import Columns
432 |     from pip._vendor.rich.panel import Panel
433 | 
434 |     from . import box as box
435 |     from .console import Console
436 |     from .table import Table
437 |     from .text import Text
438 | 
439 |     console = Console(record=True)
440 | 
441 |     BOXES = [
442 |         "ASCII",
443 |         "ASCII2",
444 |         "ASCII_DOUBLE_HEAD",
445 |         "SQUARE",
446 |         "SQUARE_DOUBLE_HEAD",
447 |         "MINIMAL",
448 |         "MINIMAL_HEAVY_HEAD",
449 |         "MINIMAL_DOUBLE_HEAD",
450 |         "SIMPLE",
451 |         "SIMPLE_HEAD",
452 |         "SIMPLE_HEAVY",
453 |         "HORIZONTALS",
454 |         "ROUNDED",
455 |         "HEAVY",
456 |         "HEAVY_EDGE",
457 |         "HEAVY_HEAD",
458 |         "DOUBLE",
459 |         "DOUBLE_EDGE",
460 |         "MARKDOWN",
461 |     ]
462 | 
463 |     console.print(Panel("[bold green]Box Constants", style="green"), justify="center")
464 |     console.print()
465 | 
466 |     columns = Columns(expand=True, padding=2)
467 |     for box_name in sorted(BOXES):
468 |         table = Table(
469 |             show_footer=True, style="dim", border_style="not dim", expand=True
470 |         )
471 |         table.add_column("Header 1", "Footer 1")
472 |         table.add_column("Header 2", "Footer 2")
473 |         table.add_row("Cell", "Cell")
474 |         table.add_row("Cell", "Cell")
475 |         table.box = getattr(box, box_name)
476 |         table.title = Text(f"box.{box_name}", style="magenta")
477 |         columns.add_renderable(table)
478 |     console.print(columns)
479 | 
480 |     # console.save_svg("box.svg")
481 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/requests/auth.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | requests.auth
  3 | ~~~~~~~~~~~~~
  4 | 
  5 | This module contains the authentication handlers for Requests.
  6 | """
  7 | 
  8 | import hashlib
  9 | import os
 10 | import re
 11 | import threading
 12 | import time
 13 | import warnings
 14 | from base64 import b64encode
 15 | 
 16 | from ._internal_utils import to_native_string
 17 | from .compat import basestring, str, urlparse
 18 | from .cookies import extract_cookies_to_jar
 19 | from .utils import parse_dict_header
 20 | 
 21 | CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded"
 22 | CONTENT_TYPE_MULTI_PART = "multipart/form-data"
 23 | 
 24 | 
 25 | def _basic_auth_str(username, password):
 26 |     """Returns a Basic Auth string."""
 27 | 
 28 |     # "I want us to put a big-ol' comment on top of it that
 29 |     # says that this behaviour is dumb but we need to preserve
 30 |     # it because people are relying on it."
 31 |     #    - Lukasa
 32 |     #
 33 |     # These are here solely to maintain backwards compatibility
 34 |     # for things like ints. This will be removed in 3.0.0.
 35 |     if not isinstance(username, basestring):
 36 |         warnings.warn(
 37 |             "Non-string usernames will no longer be supported in Requests "
 38 |             "3.0.0. Please convert the object you've passed in ({!r}) to "
 39 |             "a string or bytes object in the near future to avoid "
 40 |             "problems.".format(username),
 41 |             category=DeprecationWarning,
 42 |         )
 43 |         username = str(username)
 44 | 
 45 |     if not isinstance(password, basestring):
 46 |         warnings.warn(
 47 |             "Non-string passwords will no longer be supported in Requests "
 48 |             "3.0.0. Please convert the object you've passed in ({!r}) to "
 49 |             "a string or bytes object in the near future to avoid "
 50 |             "problems.".format(type(password)),
 51 |             category=DeprecationWarning,
 52 |         )
 53 |         password = str(password)
 54 |     # -- End Removal --
 55 | 
 56 |     if isinstance(username, str):
 57 |         username = username.encode("latin1")
 58 | 
 59 |     if isinstance(password, str):
 60 |         password = password.encode("latin1")
 61 | 
 62 |     authstr = "Basic " + to_native_string(
 63 |         b64encode(b":".join((username, password))).strip()
 64 |     )
 65 | 
 66 |     return authstr
 67 | 
 68 | 
 69 | class AuthBase:
 70 |     """Base class that all auth implementations derive from"""
 71 | 
 72 |     def __call__(self, r):
 73 |         raise NotImplementedError("Auth hooks must be callable.")
 74 | 
 75 | 
 76 | class HTTPBasicAuth(AuthBase):
 77 |     """Attaches HTTP Basic Authentication to the given Request object."""
 78 | 
 79 |     def __init__(self, username, password):
 80 |         self.username = username
 81 |         self.password = password
 82 | 
 83 |     def __eq__(self, other):
 84 |         return all(
 85 |             [
 86 |                 self.username == getattr(other, "username", None),
 87 |                 self.password == getattr(other, "password", None),
 88 |             ]
 89 |         )
 90 | 
 91 |     def __ne__(self, other):
 92 |         return not self == other
 93 | 
 94 |     def __call__(self, r):
 95 |         r.headers["Authorization"] = _basic_auth_str(self.username, self.password)
 96 |         return r
 97 | 
 98 | 
 99 | class HTTPProxyAuth(HTTPBasicAuth):
100 |     """Attaches HTTP Proxy Authentication to a given Request object."""
101 | 
102 |     def __call__(self, r):
103 |         r.headers["Proxy-Authorization"] = _basic_auth_str(self.username, self.password)
104 |         return r
105 | 
106 | 
107 | class HTTPDigestAuth(AuthBase):
108 |     """Attaches HTTP Digest Authentication to the given Request object."""
109 | 
110 |     def __init__(self, username, password):
111 |         self.username = username
112 |         self.password = password
113 |         # Keep state in per-thread local storage
114 |         self._thread_local = threading.local()
115 | 
116 |     def init_per_thread_state(self):
117 |         # Ensure state is initialized just once per-thread
118 |         if not hasattr(self._thread_local, "init"):
119 |             self._thread_local.init = True
120 |             self._thread_local.last_nonce = ""
121 |             self._thread_local.nonce_count = 0
122 |             self._thread_local.chal = {}
123 |             self._thread_local.pos = None
124 |             self._thread_local.num_401_calls = None
125 | 
126 |     def build_digest_header(self, method, url):
127 |         """
128 |         :rtype: str
129 |         """
130 | 
131 |         realm = self._thread_local.chal["realm"]
132 |         nonce = self._thread_local.chal["nonce"]
133 |         qop = self._thread_local.chal.get("qop")
134 |         algorithm = self._thread_local.chal.get("algorithm")
135 |         opaque = self._thread_local.chal.get("opaque")
136 |         hash_utf8 = None
137 | 
138 |         if algorithm is None:
139 |             _algorithm = "MD5"
140 |         else:
141 |             _algorithm = algorithm.upper()
142 |         # lambdas assume digest modules are imported at the top level
143 |         if _algorithm == "MD5" or _algorithm == "MD5-SESS":
144 | 
145 |             def md5_utf8(x):
146 |                 if isinstance(x, str):
147 |                     x = x.encode("utf-8")
148 |                 return hashlib.md5(x).hexdigest()
149 | 
150 |             hash_utf8 = md5_utf8
151 |         elif _algorithm == "SHA":
152 | 
153 |             def sha_utf8(x):
154 |                 if isinstance(x, str):
155 |                     x = x.encode("utf-8")
156 |                 return hashlib.sha1(x).hexdigest()
157 | 
158 |             hash_utf8 = sha_utf8
159 |         elif _algorithm == "SHA-256":
160 | 
161 |             def sha256_utf8(x):
162 |                 if isinstance(x, str):
163 |                     x = x.encode("utf-8")
164 |                 return hashlib.sha256(x).hexdigest()
165 | 
166 |             hash_utf8 = sha256_utf8
167 |         elif _algorithm == "SHA-512":
168 | 
169 |             def sha512_utf8(x):
170 |                 if isinstance(x, str):
171 |                     x = x.encode("utf-8")
172 |                 return hashlib.sha512(x).hexdigest()
173 | 
174 |             hash_utf8 = sha512_utf8
175 | 
176 |         KD = lambda s, d: hash_utf8(f"{s}:{d}")  # noqa:E731
177 | 
178 |         if hash_utf8 is None:
179 |             return None
180 | 
181 |         # XXX not implemented yet
182 |         entdig = None
183 |         p_parsed = urlparse(url)
184 |         #: path is request-uri defined in RFC 2616 which should not be empty
185 |         path = p_parsed.path or "/"
186 |         if p_parsed.query:
187 |             path += f"?{p_parsed.query}"
188 | 
189 |         A1 = f"{self.username}:{realm}:{self.password}"
190 |         A2 = f"{method}:{path}"
191 | 
192 |         HA1 = hash_utf8(A1)
193 |         HA2 = hash_utf8(A2)
194 | 
195 |         if nonce == self._thread_local.last_nonce:
196 |             self._thread_local.nonce_count += 1
197 |         else:
198 |             self._thread_local.nonce_count = 1
199 |         ncvalue = f"{self._thread_local.nonce_count:08x}"
200 |         s = str(self._thread_local.nonce_count).encode("utf-8")
201 |         s += nonce.encode("utf-8")
202 |         s += time.ctime().encode("utf-8")
203 |         s += os.urandom(8)
204 | 
205 |         cnonce = hashlib.sha1(s).hexdigest()[:16]
206 |         if _algorithm == "MD5-SESS":
207 |             HA1 = hash_utf8(f"{HA1}:{nonce}:{cnonce}")
208 | 
209 |         if not qop:
210 |             respdig = KD(HA1, f"{nonce}:{HA2}")
211 |         elif qop == "auth" or "auth" in qop.split(","):
212 |             noncebit = f"{nonce}:{ncvalue}:{cnonce}:auth:{HA2}"
213 |             respdig = KD(HA1, noncebit)
214 |         else:
215 |             # XXX handle auth-int.
216 |             return None
217 | 
218 |         self._thread_local.last_nonce = nonce
219 | 
220 |         # XXX should the partial digests be encoded too?
221 |         base = (
222 |             f'username="{self.username}", realm="{realm}", nonce="{nonce}", '
223 |             f'uri="{path}", response="{respdig}"'
224 |         )
225 |         if opaque:
226 |             base += f', opaque="{opaque}"'
227 |         if algorithm:
228 |             base += f', algorithm="{algorithm}"'
229 |         if entdig:
230 |             base += f', digest="{entdig}"'
231 |         if qop:
232 |             base += f', qop="auth", nc={ncvalue}, cnonce="{cnonce}"'
233 | 
234 |         return f"Digest {base}"
235 | 
236 |     def handle_redirect(self, r, **kwargs):
237 |         """Reset num_401_calls counter on redirects."""
238 |         if r.is_redirect:
239 |             self._thread_local.num_401_calls = 1
240 | 
241 |     def handle_401(self, r, **kwargs):
242 |         """
243 |         Takes the given response and tries digest-auth, if needed.
244 | 
245 |         :rtype: requests.Response
246 |         """
247 | 
248 |         # If response is not 4xx, do not auth
249 |         # See https://github.com/psf/requests/issues/3772
250 |         if not 400 <= r.status_code < 500:
251 |             self._thread_local.num_401_calls = 1
252 |             return r
253 | 
254 |         if self._thread_local.pos is not None:
255 |             # Rewind the file position indicator of the body to where
256 |             # it was to resend the request.
257 |             r.request.body.seek(self._thread_local.pos)
258 |         s_auth = r.headers.get("www-authenticate", "")
259 | 
260 |         if "digest" in s_auth.lower() and self._thread_local.num_401_calls < 2:
261 |             self._thread_local.num_401_calls += 1
262 |             pat = re.compile(r"digest ", flags=re.IGNORECASE)
263 |             self._thread_local.chal = parse_dict_header(pat.sub("", s_auth, count=1))
264 | 
265 |             # Consume content and release the original connection
266 |             # to allow our new request to reuse the same one.
267 |             r.content
268 |             r.close()
269 |             prep = r.request.copy()
270 |             extract_cookies_to_jar(prep._cookies, r.request, r.raw)
271 |             prep.prepare_cookies(prep._cookies)
272 | 
273 |             prep.headers["Authorization"] = self.build_digest_header(
274 |                 prep.method, prep.url
275 |             )
276 |             _r = r.connection.send(prep, **kwargs)
277 |             _r.history.append(r)
278 |             _r.request = prep
279 | 
280 |             return _r
281 | 
282 |         self._thread_local.num_401_calls = 1
283 |         return r
284 | 
285 |     def __call__(self, r):
286 |         # Initialize per-thread state, if needed
287 |         self.init_per_thread_state()
288 |         # If we have a saved nonce, skip the 401
289 |         if self._thread_local.last_nonce:
290 |             r.headers["Authorization"] = self.build_digest_header(r.method, r.url)
291 |         try:
292 |             self._thread_local.pos = r.body.tell()
293 |         except AttributeError:
294 |             # In the case of HTTPDigestAuth being reused and the body of
295 |             # the previous request was a file-like object, pos has the
296 |             # file position of the previous body. Ensure it's set to
297 |             # None.
298 |             self._thread_local.pos = None
299 |         r.register_hook("response", self.handle_401)
300 |         r.register_hook("response", self.handle_redirect)
301 |         self._thread_local.num_401_calls = 1
302 | 
303 |         return r
304 | 
305 |     def __eq__(self, other):
306 |         return all(
307 |             [
308 |                 self.username == getattr(other, "username", None),
309 |                 self.password == getattr(other, "password", None),
310 |             ]
311 |         )
312 | 
313 |     def __ne__(self, other):
314 |         return not self == other
315 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/requests/auth.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | requests.auth
  3 | ~~~~~~~~~~~~~
  4 | 
  5 | This module contains the authentication handlers for Requests.
  6 | """
  7 | 
  8 | import hashlib
  9 | import os
 10 | import re
 11 | import threading
 12 | import time
 13 | import warnings
 14 | from base64 import b64encode
 15 | 
 16 | from ._internal_utils import to_native_string
 17 | from .compat import basestring, str, urlparse
 18 | from .cookies import extract_cookies_to_jar
 19 | from .utils import parse_dict_header
 20 | 
 21 | CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded"
 22 | CONTENT_TYPE_MULTI_PART = "multipart/form-data"
 23 | 
 24 | 
 25 | def _basic_auth_str(username, password):
 26 |     """Returns a Basic Auth string."""
 27 | 
 28 |     # "I want us to put a big-ol' comment on top of it that
 29 |     # says that this behaviour is dumb but we need to preserve
 30 |     # it because people are relying on it."
 31 |     #    - Lukasa
 32 |     #
 33 |     # These are here solely to maintain backwards compatibility
 34 |     # for things like ints. This will be removed in 3.0.0.
 35 |     if not isinstance(username, basestring):
 36 |         warnings.warn(
 37 |             "Non-string usernames will no longer be supported in Requests "
 38 |             "3.0.0. Please convert the object you've passed in ({!r}) to "
 39 |             "a string or bytes object in the near future to avoid "
 40 |             "problems.".format(username),
 41 |             category=DeprecationWarning,
 42 |         )
 43 |         username = str(username)
 44 | 
 45 |     if not isinstance(password, basestring):
 46 |         warnings.warn(
 47 |             "Non-string passwords will no longer be supported in Requests "
 48 |             "3.0.0. Please convert the object you've passed in ({!r}) to "
 49 |             "a string or bytes object in the near future to avoid "
 50 |             "problems.".format(type(password)),
 51 |             category=DeprecationWarning,
 52 |         )
 53 |         password = str(password)
 54 |     # -- End Removal --
 55 | 
 56 |     if isinstance(username, str):
 57 |         username = username.encode("latin1")
 58 | 
 59 |     if isinstance(password, str):
 60 |         password = password.encode("latin1")
 61 | 
 62 |     authstr = "Basic " + to_native_string(
 63 |         b64encode(b":".join((username, password))).strip()
 64 |     )
 65 | 
 66 |     return authstr
 67 | 
 68 | 
 69 | class AuthBase:
 70 |     """Base class that all auth implementations derive from"""
 71 | 
 72 |     def __call__(self, r):
 73 |         raise NotImplementedError("Auth hooks must be callable.")
 74 | 
 75 | 
 76 | class HTTPBasicAuth(AuthBase):
 77 |     """Attaches HTTP Basic Authentication to the given Request object."""
 78 | 
 79 |     def __init__(self, username, password):
 80 |         self.username = username
 81 |         self.password = password
 82 | 
 83 |     def __eq__(self, other):
 84 |         return all(
 85 |             [
 86 |                 self.username == getattr(other, "username", None),
 87 |                 self.password == getattr(other, "password", None),
 88 |             ]
 89 |         )
 90 | 
 91 |     def __ne__(self, other):
 92 |         return not self == other
 93 | 
 94 |     def __call__(self, r):
 95 |         r.headers["Authorization"] = _basic_auth_str(self.username, self.password)
 96 |         return r
 97 | 
 98 | 
 99 | class HTTPProxyAuth(HTTPBasicAuth):
100 |     """Attaches HTTP Proxy Authentication to a given Request object."""
101 | 
102 |     def __call__(self, r):
103 |         r.headers["Proxy-Authorization"] = _basic_auth_str(self.username, self.password)
104 |         return r
105 | 
106 | 
107 | class HTTPDigestAuth(AuthBase):
108 |     """Attaches HTTP Digest Authentication to the given Request object."""
109 | 
110 |     def __init__(self, username, password):
111 |         self.username = username
112 |         self.password = password
113 |         # Keep state in per-thread local storage
114 |         self._thread_local = threading.local()
115 | 
116 |     def init_per_thread_state(self):
117 |         # Ensure state is initialized just once per-thread
118 |         if not hasattr(self._thread_local, "init"):
119 |             self._thread_local.init = True
120 |             self._thread_local.last_nonce = ""
121 |             self._thread_local.nonce_count = 0
122 |             self._thread_local.chal = {}
123 |             self._thread_local.pos = None
124 |             self._thread_local.num_401_calls = None
125 | 
126 |     def build_digest_header(self, method, url):
127 |         """
128 |         :rtype: str
129 |         """
130 | 
131 |         realm = self._thread_local.chal["realm"]
132 |         nonce = self._thread_local.chal["nonce"]
133 |         qop = self._thread_local.chal.get("qop")
134 |         algorithm = self._thread_local.chal.get("algorithm")
135 |         opaque = self._thread_local.chal.get("opaque")
136 |         hash_utf8 = None
137 | 
138 |         if algorithm is None:
139 |             _algorithm = "MD5"
140 |         else:
141 |             _algorithm = algorithm.upper()
142 |         # lambdas assume digest modules are imported at the top level
143 |         if _algorithm == "MD5" or _algorithm == "MD5-SESS":
144 | 
145 |             def md5_utf8(x):
146 |                 if isinstance(x, str):
147 |                     x = x.encode("utf-8")
148 |                 return hashlib.md5(x).hexdigest()
149 | 
150 |             hash_utf8 = md5_utf8
151 |         elif _algorithm == "SHA":
152 | 
153 |             def sha_utf8(x):
154 |                 if isinstance(x, str):
155 |                     x = x.encode("utf-8")
156 |                 return hashlib.sha1(x).hexdigest()
157 | 
158 |             hash_utf8 = sha_utf8
159 |         elif _algorithm == "SHA-256":
160 | 
161 |             def sha256_utf8(x):
162 |                 if isinstance(x, str):
163 |                     x = x.encode("utf-8")
164 |                 return hashlib.sha256(x).hexdigest()
165 | 
166 |             hash_utf8 = sha256_utf8
167 |         elif _algorithm == "SHA-512":
168 | 
169 |             def sha512_utf8(x):
170 |                 if isinstance(x, str):
171 |                     x = x.encode("utf-8")
172 |                 return hashlib.sha512(x).hexdigest()
173 | 
174 |             hash_utf8 = sha512_utf8
175 | 
176 |         KD = lambda s, d: hash_utf8(f"{s}:{d}")  # noqa:E731
177 | 
178 |         if hash_utf8 is None:
179 |             return None
180 | 
181 |         # XXX not implemented yet
182 |         entdig = None
183 |         p_parsed = urlparse(url)
184 |         #: path is request-uri defined in RFC 2616 which should not be empty
185 |         path = p_parsed.path or "/"
186 |         if p_parsed.query:
187 |             path += f"?{p_parsed.query}"
188 | 
189 |         A1 = f"{self.username}:{realm}:{self.password}"
190 |         A2 = f"{method}:{path}"
191 | 
192 |         HA1 = hash_utf8(A1)
193 |         HA2 = hash_utf8(A2)
194 | 
195 |         if nonce == self._thread_local.last_nonce:
196 |             self._thread_local.nonce_count += 1
197 |         else:
198 |             self._thread_local.nonce_count = 1
199 |         ncvalue = f"{self._thread_local.nonce_count:08x}"
200 |         s = str(self._thread_local.nonce_count).encode("utf-8")
201 |         s += nonce.encode("utf-8")
202 |         s += time.ctime().encode("utf-8")
203 |         s += os.urandom(8)
204 | 
205 |         cnonce = hashlib.sha1(s).hexdigest()[:16]
206 |         if _algorithm == "MD5-SESS":
207 |             HA1 = hash_utf8(f"{HA1}:{nonce}:{cnonce}")
208 | 
209 |         if not qop:
210 |             respdig = KD(HA1, f"{nonce}:{HA2}")
211 |         elif qop == "auth" or "auth" in qop.split(","):
212 |             noncebit = f"{nonce}:{ncvalue}:{cnonce}:auth:{HA2}"
213 |             respdig = KD(HA1, noncebit)
214 |         else:
215 |             # XXX handle auth-int.
216 |             return None
217 | 
218 |         self._thread_local.last_nonce = nonce
219 | 
220 |         # XXX should the partial digests be encoded too?
221 |         base = (
222 |             f'username="{self.username}", realm="{realm}", nonce="{nonce}", '
223 |             f'uri="{path}", response="{respdig}"'
224 |         )
225 |         if opaque:
226 |             base += f', opaque="{opaque}"'
227 |         if algorithm:
228 |             base += f', algorithm="{algorithm}"'
229 |         if entdig:
230 |             base += f', digest="{entdig}"'
231 |         if qop:
232 |             base += f', qop="auth", nc={ncvalue}, cnonce="{cnonce}"'
233 | 
234 |         return f"Digest {base}"
235 | 
236 |     def handle_redirect(self, r, **kwargs):
237 |         """Reset num_401_calls counter on redirects."""
238 |         if r.is_redirect:
239 |             self._thread_local.num_401_calls = 1
240 | 
241 |     def handle_401(self, r, **kwargs):
242 |         """
243 |         Takes the given response and tries digest-auth, if needed.
244 | 
245 |         :rtype: requests.Response
246 |         """
247 | 
248 |         # If response is not 4xx, do not auth
249 |         # See https://github.com/psf/requests/issues/3772
250 |         if not 400 <= r.status_code < 500:
251 |             self._thread_local.num_401_calls = 1
252 |             return r
253 | 
254 |         if self._thread_local.pos is not None:
255 |             # Rewind the file position indicator of the body to where
256 |             # it was to resend the request.
257 |             r.request.body.seek(self._thread_local.pos)
258 |         s_auth = r.headers.get("www-authenticate", "")
259 | 
260 |         if "digest" in s_auth.lower() and self._thread_local.num_401_calls < 2:
261 |             self._thread_local.num_401_calls += 1
262 |             pat = re.compile(r"digest ", flags=re.IGNORECASE)
263 |             self._thread_local.chal = parse_dict_header(pat.sub("", s_auth, count=1))
264 | 
265 |             # Consume content and release the original connection
266 |             # to allow our new request to reuse the same one.
267 |             r.content
268 |             r.close()
269 |             prep = r.request.copy()
270 |             extract_cookies_to_jar(prep._cookies, r.request, r.raw)
271 |             prep.prepare_cookies(prep._cookies)
272 | 
273 |             prep.headers["Authorization"] = self.build_digest_header(
274 |                 prep.method, prep.url
275 |             )
276 |             _r = r.connection.send(prep, **kwargs)
277 |             _r.history.append(r)
278 |             _r.request = prep
279 | 
280 |             return _r
281 | 
282 |         self._thread_local.num_401_calls = 1
283 |         return r
284 | 
285 |     def __call__(self, r):
286 |         # Initialize per-thread state, if needed
287 |         self.init_per_thread_state()
288 |         # If we have a saved nonce, skip the 401
289 |         if self._thread_local.last_nonce:
290 |             r.headers["Authorization"] = self.build_digest_header(r.method, r.url)
291 |         try:
292 |             self._thread_local.pos = r.body.tell()
293 |         except AttributeError:
294 |             # In the case of HTTPDigestAuth being reused and the body of
295 |             # the previous request was a file-like object, pos has the
296 |             # file position of the previous body. Ensure it's set to
297 |             # None.
298 |             self._thread_local.pos = None
299 |         r.register_hook("response", self.handle_401)
300 |         r.register_hook("response", self.handle_redirect)
301 |         self._thread_local.num_401_calls = 1
302 | 
303 |         return r
304 | 
305 |     def __eq__(self, other):
306 |         return all(
307 |             [
308 |                 self.username == getattr(other, "username", None),
309 |                 self.password == getattr(other, "password", None),
310 |             ]
311 |         )
312 | 
313 |     def __ne__(self, other):
314 |         return not self == other
315 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/soupsieve/css_types.py:
--------------------------------------------------------------------------------

```python
  1 | """CSS selector structure items."""
  2 | from __future__ import annotations
  3 | import copyreg
  4 | from .pretty import pretty
  5 | from typing import Any, Iterator, Hashable, Pattern, Iterable, Mapping
  6 | 
  7 | __all__ = (
  8 |     'Selector',
  9 |     'SelectorNull',
 10 |     'SelectorTag',
 11 |     'SelectorAttribute',
 12 |     'SelectorContains',
 13 |     'SelectorNth',
 14 |     'SelectorLang',
 15 |     'SelectorList',
 16 |     'Namespaces',
 17 |     'CustomSelectors'
 18 | )
 19 | 
 20 | 
 21 | SEL_EMPTY = 0x1
 22 | SEL_ROOT = 0x2
 23 | SEL_DEFAULT = 0x4
 24 | SEL_INDETERMINATE = 0x8
 25 | SEL_SCOPE = 0x10
 26 | SEL_DIR_LTR = 0x20
 27 | SEL_DIR_RTL = 0x40
 28 | SEL_IN_RANGE = 0x80
 29 | SEL_OUT_OF_RANGE = 0x100
 30 | SEL_DEFINED = 0x200
 31 | SEL_PLACEHOLDER_SHOWN = 0x400
 32 | 
 33 | 
 34 | class Immutable:
 35 |     """Immutable."""
 36 | 
 37 |     __slots__: tuple[str, ...] = ('_hash',)
 38 | 
 39 |     _hash: int
 40 | 
 41 |     def __init__(self, **kwargs: Any) -> None:
 42 |         """Initialize."""
 43 | 
 44 |         temp = []
 45 |         for k, v in kwargs.items():
 46 |             temp.append(type(v))
 47 |             temp.append(v)
 48 |             super().__setattr__(k, v)
 49 |         super().__setattr__('_hash', hash(tuple(temp)))
 50 | 
 51 |     @classmethod
 52 |     def __base__(cls) -> type[Immutable]:
 53 |         """Get base class."""
 54 | 
 55 |         return cls
 56 | 
 57 |     def __eq__(self, other: Any) -> bool:
 58 |         """Equal."""
 59 | 
 60 |         return (
 61 |             isinstance(other, self.__base__()) and
 62 |             all(getattr(other, key) == getattr(self, key) for key in self.__slots__ if key != '_hash')
 63 |         )
 64 | 
 65 |     def __ne__(self, other: Any) -> bool:
 66 |         """Equal."""
 67 | 
 68 |         return (
 69 |             not isinstance(other, self.__base__()) or
 70 |             any(getattr(other, key) != getattr(self, key) for key in self.__slots__ if key != '_hash')
 71 |         )
 72 | 
 73 |     def __hash__(self) -> int:
 74 |         """Hash."""
 75 | 
 76 |         return self._hash
 77 | 
 78 |     def __setattr__(self, name: str, value: Any) -> None:
 79 |         """Prevent mutability."""
 80 | 
 81 |         raise AttributeError(f"'{self.__class__.__name__}' is immutable")
 82 | 
 83 |     def __repr__(self) -> str:  # pragma: no cover
 84 |         """Representation."""
 85 | 
 86 |         r = ', '.join([f"{k}={getattr(self, k)!r}" for k in self.__slots__[:-1]])
 87 |         return f"{self.__class__.__name__}({r})"
 88 | 
 89 |     __str__ = __repr__
 90 | 
 91 |     def pretty(self) -> None:  # pragma: no cover
 92 |         """Pretty print."""
 93 | 
 94 |         print(pretty(self))
 95 | 
 96 | 
 97 | class ImmutableDict(Mapping[Any, Any]):
 98 |     """Hashable, immutable dictionary."""
 99 | 
100 |     def __init__(
101 |         self,
102 |         arg: dict[Any, Any] | Iterable[tuple[Any, Any]]
103 |     ) -> None:
104 |         """Initialize."""
105 | 
106 |         self._validate(arg)
107 |         self._d = dict(arg)
108 |         self._hash = hash(tuple([(type(x), x, type(y), y) for x, y in sorted(self._d.items())]))
109 | 
110 |     def _validate(self, arg: dict[Any, Any] | Iterable[tuple[Any, Any]]) -> None:
111 |         """Validate arguments."""
112 | 
113 |         if isinstance(arg, dict):
114 |             if not all(isinstance(v, Hashable) for v in arg.values()):
115 |                 raise TypeError(f'{self.__class__.__name__} values must be hashable')
116 |         elif not all(isinstance(k, Hashable) and isinstance(v, Hashable) for k, v in arg):
117 |             raise TypeError(f'{self.__class__.__name__} values must be hashable')
118 | 
119 |     def __iter__(self) -> Iterator[Any]:
120 |         """Iterator."""
121 | 
122 |         return iter(self._d)
123 | 
124 |     def __len__(self) -> int:
125 |         """Length."""
126 | 
127 |         return len(self._d)
128 | 
129 |     def __getitem__(self, key: Any) -> Any:
130 |         """Get item: `namespace['key']`."""
131 | 
132 |         return self._d[key]
133 | 
134 |     def __hash__(self) -> int:
135 |         """Hash."""
136 | 
137 |         return self._hash
138 | 
139 |     def __repr__(self) -> str:  # pragma: no cover
140 |         """Representation."""
141 | 
142 |         return f"{self._d!r}"
143 | 
144 |     __str__ = __repr__
145 | 
146 | 
147 | class Namespaces(ImmutableDict):
148 |     """Namespaces."""
149 | 
150 |     def __init__(self, arg: dict[str, str] | Iterable[tuple[str, str]]) -> None:
151 |         """Initialize."""
152 | 
153 |         super().__init__(arg)
154 | 
155 |     def _validate(self, arg: dict[str, str] | Iterable[tuple[str, str]]) -> None:
156 |         """Validate arguments."""
157 | 
158 |         if isinstance(arg, dict):
159 |             if not all(isinstance(v, str) for v in arg.values()):
160 |                 raise TypeError(f'{self.__class__.__name__} values must be hashable')
161 |         elif not all(isinstance(k, str) and isinstance(v, str) for k, v in arg):
162 |             raise TypeError(f'{self.__class__.__name__} keys and values must be Unicode strings')
163 | 
164 | 
165 | class CustomSelectors(ImmutableDict):
166 |     """Custom selectors."""
167 | 
168 |     def __init__(self, arg: dict[str, str] | Iterable[tuple[str, str]]) -> None:
169 |         """Initialize."""
170 | 
171 |         super().__init__(arg)
172 | 
173 |     def _validate(self, arg: dict[str, str] | Iterable[tuple[str, str]]) -> None:
174 |         """Validate arguments."""
175 | 
176 |         if isinstance(arg, dict):
177 |             if not all(isinstance(v, str) for v in arg.values()):
178 |                 raise TypeError(f'{self.__class__.__name__} values must be hashable')
179 |         elif not all(isinstance(k, str) and isinstance(v, str) for k, v in arg):
180 |             raise TypeError(f'{self.__class__.__name__} keys and values must be Unicode strings')
181 | 
182 | 
183 | class Selector(Immutable):
184 |     """Selector."""
185 | 
186 |     __slots__ = (
187 |         'tag', 'ids', 'classes', 'attributes', 'nth', 'selectors',
188 |         'relation', 'rel_type', 'contains', 'lang', 'flags', '_hash'
189 |     )
190 | 
191 |     tag: SelectorTag | None
192 |     ids: tuple[str, ...]
193 |     classes: tuple[str, ...]
194 |     attributes: tuple[SelectorAttribute, ...]
195 |     nth: tuple[SelectorNth, ...]
196 |     selectors: tuple[SelectorList, ...]
197 |     relation: SelectorList
198 |     rel_type: str | None
199 |     contains: tuple[SelectorContains, ...]
200 |     lang: tuple[SelectorLang, ...]
201 |     flags: int
202 | 
203 |     def __init__(
204 |         self,
205 |         tag: SelectorTag | None,
206 |         ids: tuple[str, ...],
207 |         classes: tuple[str, ...],
208 |         attributes: tuple[SelectorAttribute, ...],
209 |         nth: tuple[SelectorNth, ...],
210 |         selectors: tuple[SelectorList, ...],
211 |         relation: SelectorList,
212 |         rel_type: str | None,
213 |         contains: tuple[SelectorContains, ...],
214 |         lang: tuple[SelectorLang, ...],
215 |         flags: int
216 |     ):
217 |         """Initialize."""
218 | 
219 |         super().__init__(
220 |             tag=tag,
221 |             ids=ids,
222 |             classes=classes,
223 |             attributes=attributes,
224 |             nth=nth,
225 |             selectors=selectors,
226 |             relation=relation,
227 |             rel_type=rel_type,
228 |             contains=contains,
229 |             lang=lang,
230 |             flags=flags
231 |         )
232 | 
233 | 
234 | class SelectorNull(Immutable):
235 |     """Null Selector."""
236 | 
237 |     def __init__(self) -> None:
238 |         """Initialize."""
239 | 
240 |         super().__init__()
241 | 
242 | 
243 | class SelectorTag(Immutable):
244 |     """Selector tag."""
245 | 
246 |     __slots__ = ("name", "prefix", "_hash")
247 | 
248 |     name: str
249 |     prefix: str | None
250 | 
251 |     def __init__(self, name: str, prefix: str | None) -> None:
252 |         """Initialize."""
253 | 
254 |         super().__init__(name=name, prefix=prefix)
255 | 
256 | 
257 | class SelectorAttribute(Immutable):
258 |     """Selector attribute rule."""
259 | 
260 |     __slots__ = ("attribute", "prefix", "pattern", "xml_type_pattern", "_hash")
261 | 
262 |     attribute: str
263 |     prefix: str
264 |     pattern: Pattern[str] | None
265 |     xml_type_pattern: Pattern[str] | None
266 | 
267 |     def __init__(
268 |         self,
269 |         attribute: str,
270 |         prefix: str,
271 |         pattern: Pattern[str] | None,
272 |         xml_type_pattern: Pattern[str] | None
273 |     ) -> None:
274 |         """Initialize."""
275 | 
276 |         super().__init__(
277 |             attribute=attribute,
278 |             prefix=prefix,
279 |             pattern=pattern,
280 |             xml_type_pattern=xml_type_pattern
281 |         )
282 | 
283 | 
284 | class SelectorContains(Immutable):
285 |     """Selector contains rule."""
286 | 
287 |     __slots__ = ("text", "own", "_hash")
288 | 
289 |     text: tuple[str, ...]
290 |     own: bool
291 | 
292 |     def __init__(self, text: Iterable[str], own: bool) -> None:
293 |         """Initialize."""
294 | 
295 |         super().__init__(text=tuple(text), own=own)
296 | 
297 | 
298 | class SelectorNth(Immutable):
299 |     """Selector nth type."""
300 | 
301 |     __slots__ = ("a", "n", "b", "of_type", "last", "selectors", "_hash")
302 | 
303 |     a: int
304 |     n: bool
305 |     b: int
306 |     of_type: bool
307 |     last: bool
308 |     selectors: SelectorList
309 | 
310 |     def __init__(self, a: int, n: bool, b: int, of_type: bool, last: bool, selectors: SelectorList) -> None:
311 |         """Initialize."""
312 | 
313 |         super().__init__(
314 |             a=a,
315 |             n=n,
316 |             b=b,
317 |             of_type=of_type,
318 |             last=last,
319 |             selectors=selectors
320 |         )
321 | 
322 | 
323 | class SelectorLang(Immutable):
324 |     """Selector language rules."""
325 | 
326 |     __slots__ = ("languages", "_hash",)
327 | 
328 |     languages: tuple[str, ...]
329 | 
330 |     def __init__(self, languages: Iterable[str]):
331 |         """Initialize."""
332 | 
333 |         super().__init__(languages=tuple(languages))
334 | 
335 |     def __iter__(self) -> Iterator[str]:
336 |         """Iterator."""
337 | 
338 |         return iter(self.languages)
339 | 
340 |     def __len__(self) -> int:  # pragma: no cover
341 |         """Length."""
342 | 
343 |         return len(self.languages)
344 | 
345 |     def __getitem__(self, index: int) -> str:  # pragma: no cover
346 |         """Get item."""
347 | 
348 |         return self.languages[index]
349 | 
350 | 
351 | class SelectorList(Immutable):
352 |     """Selector list."""
353 | 
354 |     __slots__ = ("selectors", "is_not", "is_html", "_hash")
355 | 
356 |     selectors: tuple[Selector | SelectorNull, ...]
357 |     is_not: bool
358 |     is_html: bool
359 | 
360 |     def __init__(
361 |         self,
362 |         selectors: Iterable[Selector | SelectorNull] | None = None,
363 |         is_not: bool = False,
364 |         is_html: bool = False
365 |     ) -> None:
366 |         """Initialize."""
367 | 
368 |         super().__init__(
369 |             selectors=tuple(selectors) if selectors is not None else (),
370 |             is_not=is_not,
371 |             is_html=is_html
372 |         )
373 | 
374 |     def __iter__(self) -> Iterator[Selector | SelectorNull]:
375 |         """Iterator."""
376 | 
377 |         return iter(self.selectors)
378 | 
379 |     def __len__(self) -> int:
380 |         """Length."""
381 | 
382 |         return len(self.selectors)
383 | 
384 |     def __getitem__(self, index: int) -> Selector | SelectorNull:
385 |         """Get item."""
386 | 
387 |         return self.selectors[index]
388 | 
389 | 
390 | def _pickle(p: Any) -> Any:
391 |     return p.__base__(), tuple([getattr(p, s) for s in p.__slots__[:-1]])
392 | 
393 | 
394 | def pickle_register(obj: Any) -> None:
395 |     """Allow object to be pickled."""
396 | 
397 |     copyreg.pickle(obj, _pickle)
398 | 
399 | 
400 | pickle_register(Selector)
401 | pickle_register(SelectorNull)
402 | pickle_register(SelectorTag)
403 | pickle_register(SelectorAttribute)
404 | pickle_register(SelectorContains)
405 | pickle_register(SelectorNth)
406 | pickle_register(SelectorLang)
407 | pickle_register(SelectorList)
408 | 
```
Page 37/168FirstPrevNextLast