#
tokens: 49967/50000 3/808 files (page 61/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 61 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/_internal/vcs/git.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | import os.path
  3 | import pathlib
  4 | import re
  5 | import urllib.parse
  6 | import urllib.request
  7 | from dataclasses import replace
  8 | from typing import List, Optional, Tuple
  9 | 
 10 | from pip._internal.exceptions import BadCommand, InstallationError
 11 | from pip._internal.utils.misc import HiddenText, display_path, hide_url
 12 | from pip._internal.utils.subprocess import make_command
 13 | from pip._internal.vcs.versioncontrol import (
 14 |     AuthInfo,
 15 |     RemoteNotFoundError,
 16 |     RemoteNotValidError,
 17 |     RevOptions,
 18 |     VersionControl,
 19 |     find_path_to_project_root_from_repo_root,
 20 |     vcs,
 21 | )
 22 | 
 23 | urlsplit = urllib.parse.urlsplit
 24 | urlunsplit = urllib.parse.urlunsplit
 25 | 
 26 | 
 27 | logger = logging.getLogger(__name__)
 28 | 
 29 | 
 30 | GIT_VERSION_REGEX = re.compile(
 31 |     r"^git version "  # Prefix.
 32 |     r"(\d+)"  # Major.
 33 |     r"\.(\d+)"  # Dot, minor.
 34 |     r"(?:\.(\d+))?"  # Optional dot, patch.
 35 |     r".*$"  # Suffix, including any pre- and post-release segments we don't care about.
 36 | )
 37 | 
 38 | HASH_REGEX = re.compile("^[a-fA-F0-9]{40}$")
 39 | 
 40 | # SCP (Secure copy protocol) shorthand. e.g. '[email protected]:foo/bar.git'
 41 | SCP_REGEX = re.compile(
 42 |     r"""^
 43 |     # Optional user, e.g. 'git@'
 44 |     (\w+@)?
 45 |     # Server, e.g. 'github.com'.
 46 |     ([^/:]+):
 47 |     # The server-side path. e.g. 'user/project.git'. Must start with an
 48 |     # alphanumeric character so as not to be confusable with a Windows paths
 49 |     # like 'C:/foo/bar' or 'C:\foo\bar'.
 50 |     (\w[^:]*)
 51 |     $""",
 52 |     re.VERBOSE,
 53 | )
 54 | 
 55 | 
 56 | def looks_like_hash(sha: str) -> bool:
 57 |     return bool(HASH_REGEX.match(sha))
 58 | 
 59 | 
 60 | class Git(VersionControl):
 61 |     name = "git"
 62 |     dirname = ".git"
 63 |     repo_name = "clone"
 64 |     schemes = (
 65 |         "git+http",
 66 |         "git+https",
 67 |         "git+ssh",
 68 |         "git+git",
 69 |         "git+file",
 70 |     )
 71 |     # Prevent the user's environment variables from interfering with pip:
 72 |     # https://github.com/pypa/pip/issues/1130
 73 |     unset_environ = ("GIT_DIR", "GIT_WORK_TREE")
 74 |     default_arg_rev = "HEAD"
 75 | 
 76 |     @staticmethod
 77 |     def get_base_rev_args(rev: str) -> List[str]:
 78 |         return [rev]
 79 | 
 80 |     def is_immutable_rev_checkout(self, url: str, dest: str) -> bool:
 81 |         _, rev_options = self.get_url_rev_options(hide_url(url))
 82 |         if not rev_options.rev:
 83 |             return False
 84 |         if not self.is_commit_id_equal(dest, rev_options.rev):
 85 |             # the current commit is different from rev,
 86 |             # which means rev was something else than a commit hash
 87 |             return False
 88 |         # return False in the rare case rev is both a commit hash
 89 |         # and a tag or a branch; we don't want to cache in that case
 90 |         # because that branch/tag could point to something else in the future
 91 |         is_tag_or_branch = bool(self.get_revision_sha(dest, rev_options.rev)[0])
 92 |         return not is_tag_or_branch
 93 | 
 94 |     def get_git_version(self) -> Tuple[int, ...]:
 95 |         version = self.run_command(
 96 |             ["version"],
 97 |             command_desc="git version",
 98 |             show_stdout=False,
 99 |             stdout_only=True,
100 |         )
101 |         match = GIT_VERSION_REGEX.match(version)
102 |         if not match:
103 |             logger.warning("Can't parse git version: %s", version)
104 |             return ()
105 |         return (int(match.group(1)), int(match.group(2)))
106 | 
107 |     @classmethod
108 |     def get_current_branch(cls, location: str) -> Optional[str]:
109 |         """
110 |         Return the current branch, or None if HEAD isn't at a branch
111 |         (e.g. detached HEAD).
112 |         """
113 |         # git-symbolic-ref exits with empty stdout if "HEAD" is a detached
114 |         # HEAD rather than a symbolic ref.  In addition, the -q causes the
115 |         # command to exit with status code 1 instead of 128 in this case
116 |         # and to suppress the message to stderr.
117 |         args = ["symbolic-ref", "-q", "HEAD"]
118 |         output = cls.run_command(
119 |             args,
120 |             extra_ok_returncodes=(1,),
121 |             show_stdout=False,
122 |             stdout_only=True,
123 |             cwd=location,
124 |         )
125 |         ref = output.strip()
126 | 
127 |         if ref.startswith("refs/heads/"):
128 |             return ref[len("refs/heads/") :]
129 | 
130 |         return None
131 | 
132 |     @classmethod
133 |     def get_revision_sha(cls, dest: str, rev: str) -> Tuple[Optional[str], bool]:
134 |         """
135 |         Return (sha_or_none, is_branch), where sha_or_none is a commit hash
136 |         if the revision names a remote branch or tag, otherwise None.
137 | 
138 |         Args:
139 |           dest: the repository directory.
140 |           rev: the revision name.
141 |         """
142 |         # Pass rev to pre-filter the list.
143 |         output = cls.run_command(
144 |             ["show-ref", rev],
145 |             cwd=dest,
146 |             show_stdout=False,
147 |             stdout_only=True,
148 |             on_returncode="ignore",
149 |         )
150 |         refs = {}
151 |         # NOTE: We do not use splitlines here since that would split on other
152 |         #       unicode separators, which can be maliciously used to install a
153 |         #       different revision.
154 |         for line in output.strip().split("\n"):
155 |             line = line.rstrip("\r")
156 |             if not line:
157 |                 continue
158 |             try:
159 |                 ref_sha, ref_name = line.split(" ", maxsplit=2)
160 |             except ValueError:
161 |                 # Include the offending line to simplify troubleshooting if
162 |                 # this error ever occurs.
163 |                 raise ValueError(f"unexpected show-ref line: {line!r}")
164 | 
165 |             refs[ref_name] = ref_sha
166 | 
167 |         branch_ref = f"refs/remotes/origin/{rev}"
168 |         tag_ref = f"refs/tags/{rev}"
169 | 
170 |         sha = refs.get(branch_ref)
171 |         if sha is not None:
172 |             return (sha, True)
173 | 
174 |         sha = refs.get(tag_ref)
175 | 
176 |         return (sha, False)
177 | 
178 |     @classmethod
179 |     def _should_fetch(cls, dest: str, rev: str) -> bool:
180 |         """
181 |         Return true if rev is a ref or is a commit that we don't have locally.
182 | 
183 |         Branches and tags are not considered in this method because they are
184 |         assumed to be always available locally (which is a normal outcome of
185 |         ``git clone`` and ``git fetch --tags``).
186 |         """
187 |         if rev.startswith("refs/"):
188 |             # Always fetch remote refs.
189 |             return True
190 | 
191 |         if not looks_like_hash(rev):
192 |             # Git fetch would fail with abbreviated commits.
193 |             return False
194 | 
195 |         if cls.has_commit(dest, rev):
196 |             # Don't fetch if we have the commit locally.
197 |             return False
198 | 
199 |         return True
200 | 
201 |     @classmethod
202 |     def resolve_revision(
203 |         cls, dest: str, url: HiddenText, rev_options: RevOptions
204 |     ) -> RevOptions:
205 |         """
206 |         Resolve a revision to a new RevOptions object with the SHA1 of the
207 |         branch, tag, or ref if found.
208 | 
209 |         Args:
210 |           rev_options: a RevOptions object.
211 |         """
212 |         rev = rev_options.arg_rev
213 |         # The arg_rev property's implementation for Git ensures that the
214 |         # rev return value is always non-None.
215 |         assert rev is not None
216 | 
217 |         sha, is_branch = cls.get_revision_sha(dest, rev)
218 | 
219 |         if sha is not None:
220 |             rev_options = rev_options.make_new(sha)
221 |             rev_options = replace(rev_options, branch_name=(rev if is_branch else None))
222 | 
223 |             return rev_options
224 | 
225 |         # Do not show a warning for the common case of something that has
226 |         # the form of a Git commit hash.
227 |         if not looks_like_hash(rev):
228 |             logger.warning(
229 |                 "Did not find branch or tag '%s', assuming revision or ref.",
230 |                 rev,
231 |             )
232 | 
233 |         if not cls._should_fetch(dest, rev):
234 |             return rev_options
235 | 
236 |         # fetch the requested revision
237 |         cls.run_command(
238 |             make_command("fetch", "-q", url, rev_options.to_args()),
239 |             cwd=dest,
240 |         )
241 |         # Change the revision to the SHA of the ref we fetched
242 |         sha = cls.get_revision(dest, rev="FETCH_HEAD")
243 |         rev_options = rev_options.make_new(sha)
244 | 
245 |         return rev_options
246 | 
247 |     @classmethod
248 |     def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool:
249 |         """
250 |         Return whether the current commit hash equals the given name.
251 | 
252 |         Args:
253 |           dest: the repository directory.
254 |           name: a string name.
255 |         """
256 |         if not name:
257 |             # Then avoid an unnecessary subprocess call.
258 |             return False
259 | 
260 |         return cls.get_revision(dest) == name
261 | 
262 |     def fetch_new(
263 |         self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int
264 |     ) -> None:
265 |         rev_display = rev_options.to_display()
266 |         logger.info("Cloning %s%s to %s", url, rev_display, display_path(dest))
267 |         if verbosity <= 0:
268 |             flags: Tuple[str, ...] = ("--quiet",)
269 |         elif verbosity == 1:
270 |             flags = ()
271 |         else:
272 |             flags = ("--verbose", "--progress")
273 |         if self.get_git_version() >= (2, 17):
274 |             # Git added support for partial clone in 2.17
275 |             # https://git-scm.com/docs/partial-clone
276 |             # Speeds up cloning by functioning without a complete copy of repository
277 |             self.run_command(
278 |                 make_command(
279 |                     "clone",
280 |                     "--filter=blob:none",
281 |                     *flags,
282 |                     url,
283 |                     dest,
284 |                 )
285 |             )
286 |         else:
287 |             self.run_command(make_command("clone", *flags, url, dest))
288 | 
289 |         if rev_options.rev:
290 |             # Then a specific revision was requested.
291 |             rev_options = self.resolve_revision(dest, url, rev_options)
292 |             branch_name = getattr(rev_options, "branch_name", None)
293 |             logger.debug("Rev options %s, branch_name %s", rev_options, branch_name)
294 |             if branch_name is None:
295 |                 # Only do a checkout if the current commit id doesn't match
296 |                 # the requested revision.
297 |                 if not self.is_commit_id_equal(dest, rev_options.rev):
298 |                     cmd_args = make_command(
299 |                         "checkout",
300 |                         "-q",
301 |                         rev_options.to_args(),
302 |                     )
303 |                     self.run_command(cmd_args, cwd=dest)
304 |             elif self.get_current_branch(dest) != branch_name:
305 |                 # Then a specific branch was requested, and that branch
306 |                 # is not yet checked out.
307 |                 track_branch = f"origin/{branch_name}"
308 |                 cmd_args = [
309 |                     "checkout",
310 |                     "-b",
311 |                     branch_name,
312 |                     "--track",
313 |                     track_branch,
314 |                 ]
315 |                 self.run_command(cmd_args, cwd=dest)
316 |         else:
317 |             sha = self.get_revision(dest)
318 |             rev_options = rev_options.make_new(sha)
319 | 
320 |         logger.info("Resolved %s to commit %s", url, rev_options.rev)
321 | 
322 |         #: repo may contain submodules
323 |         self.update_submodules(dest)
324 | 
325 |     def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None:
326 |         self.run_command(
327 |             make_command("config", "remote.origin.url", url),
328 |             cwd=dest,
329 |         )
330 |         cmd_args = make_command("checkout", "-q", rev_options.to_args())
331 |         self.run_command(cmd_args, cwd=dest)
332 | 
333 |         self.update_submodules(dest)
334 | 
335 |     def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None:
336 |         # First fetch changes from the default remote
337 |         if self.get_git_version() >= (1, 9):
338 |             # fetch tags in addition to everything else
339 |             self.run_command(["fetch", "-q", "--tags"], cwd=dest)
340 |         else:
341 |             self.run_command(["fetch", "-q"], cwd=dest)
342 |         # Then reset to wanted revision (maybe even origin/master)
343 |         rev_options = self.resolve_revision(dest, url, rev_options)
344 |         cmd_args = make_command("reset", "--hard", "-q", rev_options.to_args())
345 |         self.run_command(cmd_args, cwd=dest)
346 |         #: update submodules
347 |         self.update_submodules(dest)
348 | 
349 |     @classmethod
350 |     def get_remote_url(cls, location: str) -> str:
351 |         """
352 |         Return URL of the first remote encountered.
353 | 
354 |         Raises RemoteNotFoundError if the repository does not have a remote
355 |         url configured.
356 |         """
357 |         # We need to pass 1 for extra_ok_returncodes since the command
358 |         # exits with return code 1 if there are no matching lines.
359 |         stdout = cls.run_command(
360 |             ["config", "--get-regexp", r"remote\..*\.url"],
361 |             extra_ok_returncodes=(1,),
362 |             show_stdout=False,
363 |             stdout_only=True,
364 |             cwd=location,
365 |         )
366 |         remotes = stdout.splitlines()
367 |         try:
368 |             found_remote = remotes[0]
369 |         except IndexError:
370 |             raise RemoteNotFoundError
371 | 
372 |         for remote in remotes:
373 |             if remote.startswith("remote.origin.url "):
374 |                 found_remote = remote
375 |                 break
376 |         url = found_remote.split(" ")[1]
377 |         return cls._git_remote_to_pip_url(url.strip())
378 | 
379 |     @staticmethod
380 |     def _git_remote_to_pip_url(url: str) -> str:
381 |         """
382 |         Convert a remote url from what git uses to what pip accepts.
383 | 
384 |         There are 3 legal forms **url** may take:
385 | 
386 |             1. A fully qualified url: ssh://[email protected]/foo/bar.git
387 |             2. A local project.git folder: /path/to/bare/repository.git
388 |             3. SCP shorthand for form 1: [email protected]:foo/bar.git
389 | 
390 |         Form 1 is output as-is. Form 2 must be converted to URI and form 3 must
391 |         be converted to form 1.
392 | 
393 |         See the corresponding test test_git_remote_url_to_pip() for examples of
394 |         sample inputs/outputs.
395 |         """
396 |         if re.match(r"\w+://", url):
397 |             # This is already valid. Pass it though as-is.
398 |             return url
399 |         if os.path.exists(url):
400 |             # A local bare remote (git clone --mirror).
401 |             # Needs a file:// prefix.
402 |             return pathlib.PurePath(url).as_uri()
403 |         scp_match = SCP_REGEX.match(url)
404 |         if scp_match:
405 |             # Add an ssh:// prefix and replace the ':' with a '/'.
406 |             return scp_match.expand(r"ssh://\1\2/\3")
407 |         # Otherwise, bail out.
408 |         raise RemoteNotValidError(url)
409 | 
410 |     @classmethod
411 |     def has_commit(cls, location: str, rev: str) -> bool:
412 |         """
413 |         Check if rev is a commit that is available in the local repository.
414 |         """
415 |         try:
416 |             cls.run_command(
417 |                 ["rev-parse", "-q", "--verify", "sha^" + rev],
418 |                 cwd=location,
419 |                 log_failed_cmd=False,
420 |             )
421 |         except InstallationError:
422 |             return False
423 |         else:
424 |             return True
425 | 
426 |     @classmethod
427 |     def get_revision(cls, location: str, rev: Optional[str] = None) -> str:
428 |         if rev is None:
429 |             rev = "HEAD"
430 |         current_rev = cls.run_command(
431 |             ["rev-parse", rev],
432 |             show_stdout=False,
433 |             stdout_only=True,
434 |             cwd=location,
435 |         )
436 |         return current_rev.strip()
437 | 
438 |     @classmethod
439 |     def get_subdirectory(cls, location: str) -> Optional[str]:
440 |         """
441 |         Return the path to Python project root, relative to the repo root.
442 |         Return None if the project root is in the repo root.
443 |         """
444 |         # find the repo root
445 |         git_dir = cls.run_command(
446 |             ["rev-parse", "--git-dir"],
447 |             show_stdout=False,
448 |             stdout_only=True,
449 |             cwd=location,
450 |         ).strip()
451 |         if not os.path.isabs(git_dir):
452 |             git_dir = os.path.join(location, git_dir)
453 |         repo_root = os.path.abspath(os.path.join(git_dir, ".."))
454 |         return find_path_to_project_root_from_repo_root(location, repo_root)
455 | 
456 |     @classmethod
457 |     def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]:
458 |         """
459 |         Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'.
460 |         That's required because although they use SSH they sometimes don't
461 |         work with a ssh:// scheme (e.g. GitHub). But we need a scheme for
462 |         parsing. Hence we remove it again afterwards and return it as a stub.
463 |         """
464 |         # Works around an apparent Git bug
465 |         # (see https://article.gmane.org/gmane.comp.version-control.git/146500)
466 |         scheme, netloc, path, query, fragment = urlsplit(url)
467 |         if scheme.endswith("file"):
468 |             initial_slashes = path[: -len(path.lstrip("/"))]
469 |             newpath = initial_slashes + urllib.request.url2pathname(path).replace(
470 |                 "\\", "/"
471 |             ).lstrip("/")
472 |             after_plus = scheme.find("+") + 1
473 |             url = scheme[:after_plus] + urlunsplit(
474 |                 (scheme[after_plus:], netloc, newpath, query, fragment),
475 |             )
476 | 
477 |         if "://" not in url:
478 |             assert "file:" not in url
479 |             url = url.replace("git+", "git+ssh://")
480 |             url, rev, user_pass = super().get_url_rev_and_auth(url)
481 |             url = url.replace("ssh://", "")
482 |         else:
483 |             url, rev, user_pass = super().get_url_rev_and_auth(url)
484 | 
485 |         return url, rev, user_pass
486 | 
487 |     @classmethod
488 |     def update_submodules(cls, location: str) -> None:
489 |         if not os.path.exists(os.path.join(location, ".gitmodules")):
490 |             return
491 |         cls.run_command(
492 |             ["submodule", "update", "--init", "--recursive", "-q"],
493 |             cwd=location,
494 |         )
495 | 
496 |     @classmethod
497 |     def get_repository_root(cls, location: str) -> Optional[str]:
498 |         loc = super().get_repository_root(location)
499 |         if loc:
500 |             return loc
501 |         try:
502 |             r = cls.run_command(
503 |                 ["rev-parse", "--show-toplevel"],
504 |                 cwd=location,
505 |                 show_stdout=False,
506 |                 stdout_only=True,
507 |                 on_returncode="raise",
508 |                 log_failed_cmd=False,
509 |             )
510 |         except BadCommand:
511 |             logger.debug(
512 |                 "could not determine if %s is under git control "
513 |                 "because git is not available",
514 |                 location,
515 |             )
516 |             return None
517 |         except InstallationError:
518 |             return None
519 |         return os.path.normpath(r.rstrip("\r\n"))
520 | 
521 |     @staticmethod
522 |     def should_add_vcs_url_prefix(repo_url: str) -> bool:
523 |         """In either https or ssh form, requirements must be prefixed with git+."""
524 |         return True
525 | 
526 | 
527 | vcs.register(Git)
528 | 
```

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

```python
  1 | import platform
  2 | import re
  3 | from colorsys import rgb_to_hls
  4 | from enum import IntEnum
  5 | from functools import lru_cache
  6 | from typing import TYPE_CHECKING, NamedTuple, Optional, Tuple
  7 | 
  8 | from ._palettes import EIGHT_BIT_PALETTE, STANDARD_PALETTE, WINDOWS_PALETTE
  9 | from .color_triplet import ColorTriplet
 10 | from .repr import Result, rich_repr
 11 | from .terminal_theme import DEFAULT_TERMINAL_THEME
 12 | 
 13 | if TYPE_CHECKING:  # pragma: no cover
 14 |     from .terminal_theme import TerminalTheme
 15 |     from .text import Text
 16 | 
 17 | 
 18 | WINDOWS = platform.system() == "Windows"
 19 | 
 20 | 
 21 | class ColorSystem(IntEnum):
 22 |     """One of the 3 color system supported by terminals."""
 23 | 
 24 |     STANDARD = 1
 25 |     EIGHT_BIT = 2
 26 |     TRUECOLOR = 3
 27 |     WINDOWS = 4
 28 | 
 29 |     def __repr__(self) -> str:
 30 |         return f"ColorSystem.{self.name}"
 31 | 
 32 |     def __str__(self) -> str:
 33 |         return repr(self)
 34 | 
 35 | 
 36 | class ColorType(IntEnum):
 37 |     """Type of color stored in Color class."""
 38 | 
 39 |     DEFAULT = 0
 40 |     STANDARD = 1
 41 |     EIGHT_BIT = 2
 42 |     TRUECOLOR = 3
 43 |     WINDOWS = 4
 44 | 
 45 |     def __repr__(self) -> str:
 46 |         return f"ColorType.{self.name}"
 47 | 
 48 | 
 49 | ANSI_COLOR_NAMES = {
 50 |     "black": 0,
 51 |     "red": 1,
 52 |     "green": 2,
 53 |     "yellow": 3,
 54 |     "blue": 4,
 55 |     "magenta": 5,
 56 |     "cyan": 6,
 57 |     "white": 7,
 58 |     "bright_black": 8,
 59 |     "bright_red": 9,
 60 |     "bright_green": 10,
 61 |     "bright_yellow": 11,
 62 |     "bright_blue": 12,
 63 |     "bright_magenta": 13,
 64 |     "bright_cyan": 14,
 65 |     "bright_white": 15,
 66 |     "grey0": 16,
 67 |     "gray0": 16,
 68 |     "navy_blue": 17,
 69 |     "dark_blue": 18,
 70 |     "blue3": 20,
 71 |     "blue1": 21,
 72 |     "dark_green": 22,
 73 |     "deep_sky_blue4": 25,
 74 |     "dodger_blue3": 26,
 75 |     "dodger_blue2": 27,
 76 |     "green4": 28,
 77 |     "spring_green4": 29,
 78 |     "turquoise4": 30,
 79 |     "deep_sky_blue3": 32,
 80 |     "dodger_blue1": 33,
 81 |     "green3": 40,
 82 |     "spring_green3": 41,
 83 |     "dark_cyan": 36,
 84 |     "light_sea_green": 37,
 85 |     "deep_sky_blue2": 38,
 86 |     "deep_sky_blue1": 39,
 87 |     "spring_green2": 47,
 88 |     "cyan3": 43,
 89 |     "dark_turquoise": 44,
 90 |     "turquoise2": 45,
 91 |     "green1": 46,
 92 |     "spring_green1": 48,
 93 |     "medium_spring_green": 49,
 94 |     "cyan2": 50,
 95 |     "cyan1": 51,
 96 |     "dark_red": 88,
 97 |     "deep_pink4": 125,
 98 |     "purple4": 55,
 99 |     "purple3": 56,
100 |     "blue_violet": 57,
101 |     "orange4": 94,
102 |     "grey37": 59,
103 |     "gray37": 59,
104 |     "medium_purple4": 60,
105 |     "slate_blue3": 62,
106 |     "royal_blue1": 63,
107 |     "chartreuse4": 64,
108 |     "dark_sea_green4": 71,
109 |     "pale_turquoise4": 66,
110 |     "steel_blue": 67,
111 |     "steel_blue3": 68,
112 |     "cornflower_blue": 69,
113 |     "chartreuse3": 76,
114 |     "cadet_blue": 73,
115 |     "sky_blue3": 74,
116 |     "steel_blue1": 81,
117 |     "pale_green3": 114,
118 |     "sea_green3": 78,
119 |     "aquamarine3": 79,
120 |     "medium_turquoise": 80,
121 |     "chartreuse2": 112,
122 |     "sea_green2": 83,
123 |     "sea_green1": 85,
124 |     "aquamarine1": 122,
125 |     "dark_slate_gray2": 87,
126 |     "dark_magenta": 91,
127 |     "dark_violet": 128,
128 |     "purple": 129,
129 |     "light_pink4": 95,
130 |     "plum4": 96,
131 |     "medium_purple3": 98,
132 |     "slate_blue1": 99,
133 |     "yellow4": 106,
134 |     "wheat4": 101,
135 |     "grey53": 102,
136 |     "gray53": 102,
137 |     "light_slate_grey": 103,
138 |     "light_slate_gray": 103,
139 |     "medium_purple": 104,
140 |     "light_slate_blue": 105,
141 |     "dark_olive_green3": 149,
142 |     "dark_sea_green": 108,
143 |     "light_sky_blue3": 110,
144 |     "sky_blue2": 111,
145 |     "dark_sea_green3": 150,
146 |     "dark_slate_gray3": 116,
147 |     "sky_blue1": 117,
148 |     "chartreuse1": 118,
149 |     "light_green": 120,
150 |     "pale_green1": 156,
151 |     "dark_slate_gray1": 123,
152 |     "red3": 160,
153 |     "medium_violet_red": 126,
154 |     "magenta3": 164,
155 |     "dark_orange3": 166,
156 |     "indian_red": 167,
157 |     "hot_pink3": 168,
158 |     "medium_orchid3": 133,
159 |     "medium_orchid": 134,
160 |     "medium_purple2": 140,
161 |     "dark_goldenrod": 136,
162 |     "light_salmon3": 173,
163 |     "rosy_brown": 138,
164 |     "grey63": 139,
165 |     "gray63": 139,
166 |     "medium_purple1": 141,
167 |     "gold3": 178,
168 |     "dark_khaki": 143,
169 |     "navajo_white3": 144,
170 |     "grey69": 145,
171 |     "gray69": 145,
172 |     "light_steel_blue3": 146,
173 |     "light_steel_blue": 147,
174 |     "yellow3": 184,
175 |     "dark_sea_green2": 157,
176 |     "light_cyan3": 152,
177 |     "light_sky_blue1": 153,
178 |     "green_yellow": 154,
179 |     "dark_olive_green2": 155,
180 |     "dark_sea_green1": 193,
181 |     "pale_turquoise1": 159,
182 |     "deep_pink3": 162,
183 |     "magenta2": 200,
184 |     "hot_pink2": 169,
185 |     "orchid": 170,
186 |     "medium_orchid1": 207,
187 |     "orange3": 172,
188 |     "light_pink3": 174,
189 |     "pink3": 175,
190 |     "plum3": 176,
191 |     "violet": 177,
192 |     "light_goldenrod3": 179,
193 |     "tan": 180,
194 |     "misty_rose3": 181,
195 |     "thistle3": 182,
196 |     "plum2": 183,
197 |     "khaki3": 185,
198 |     "light_goldenrod2": 222,
199 |     "light_yellow3": 187,
200 |     "grey84": 188,
201 |     "gray84": 188,
202 |     "light_steel_blue1": 189,
203 |     "yellow2": 190,
204 |     "dark_olive_green1": 192,
205 |     "honeydew2": 194,
206 |     "light_cyan1": 195,
207 |     "red1": 196,
208 |     "deep_pink2": 197,
209 |     "deep_pink1": 199,
210 |     "magenta1": 201,
211 |     "orange_red1": 202,
212 |     "indian_red1": 204,
213 |     "hot_pink": 206,
214 |     "dark_orange": 208,
215 |     "salmon1": 209,
216 |     "light_coral": 210,
217 |     "pale_violet_red1": 211,
218 |     "orchid2": 212,
219 |     "orchid1": 213,
220 |     "orange1": 214,
221 |     "sandy_brown": 215,
222 |     "light_salmon1": 216,
223 |     "light_pink1": 217,
224 |     "pink1": 218,
225 |     "plum1": 219,
226 |     "gold1": 220,
227 |     "navajo_white1": 223,
228 |     "misty_rose1": 224,
229 |     "thistle1": 225,
230 |     "yellow1": 226,
231 |     "light_goldenrod1": 227,
232 |     "khaki1": 228,
233 |     "wheat1": 229,
234 |     "cornsilk1": 230,
235 |     "grey100": 231,
236 |     "gray100": 231,
237 |     "grey3": 232,
238 |     "gray3": 232,
239 |     "grey7": 233,
240 |     "gray7": 233,
241 |     "grey11": 234,
242 |     "gray11": 234,
243 |     "grey15": 235,
244 |     "gray15": 235,
245 |     "grey19": 236,
246 |     "gray19": 236,
247 |     "grey23": 237,
248 |     "gray23": 237,
249 |     "grey27": 238,
250 |     "gray27": 238,
251 |     "grey30": 239,
252 |     "gray30": 239,
253 |     "grey35": 240,
254 |     "gray35": 240,
255 |     "grey39": 241,
256 |     "gray39": 241,
257 |     "grey42": 242,
258 |     "gray42": 242,
259 |     "grey46": 243,
260 |     "gray46": 243,
261 |     "grey50": 244,
262 |     "gray50": 244,
263 |     "grey54": 245,
264 |     "gray54": 245,
265 |     "grey58": 246,
266 |     "gray58": 246,
267 |     "grey62": 247,
268 |     "gray62": 247,
269 |     "grey66": 248,
270 |     "gray66": 248,
271 |     "grey70": 249,
272 |     "gray70": 249,
273 |     "grey74": 250,
274 |     "gray74": 250,
275 |     "grey78": 251,
276 |     "gray78": 251,
277 |     "grey82": 252,
278 |     "gray82": 252,
279 |     "grey85": 253,
280 |     "gray85": 253,
281 |     "grey89": 254,
282 |     "gray89": 254,
283 |     "grey93": 255,
284 |     "gray93": 255,
285 | }
286 | 
287 | 
288 | class ColorParseError(Exception):
289 |     """The color could not be parsed."""
290 | 
291 | 
292 | RE_COLOR = re.compile(
293 |     r"""^
294 | \#([0-9a-f]{6})$|
295 | color\(([0-9]{1,3})\)$|
296 | rgb\(([\d\s,]+)\)$
297 | """,
298 |     re.VERBOSE,
299 | )
300 | 
301 | 
302 | @rich_repr
303 | class Color(NamedTuple):
304 |     """Terminal color definition."""
305 | 
306 |     name: str
307 |     """The name of the color (typically the input to Color.parse)."""
308 |     type: ColorType
309 |     """The type of the color."""
310 |     number: Optional[int] = None
311 |     """The color number, if a standard color, or None."""
312 |     triplet: Optional[ColorTriplet] = None
313 |     """A triplet of color components, if an RGB color."""
314 | 
315 |     def __rich__(self) -> "Text":
316 |         """Displays the actual color if Rich printed."""
317 |         from .style import Style
318 |         from .text import Text
319 | 
320 |         return Text.assemble(
321 |             f"<color {self.name!r} ({self.type.name.lower()})",
322 |             ("⬤", Style(color=self)),
323 |             " >",
324 |         )
325 | 
326 |     def __rich_repr__(self) -> Result:
327 |         yield self.name
328 |         yield self.type
329 |         yield "number", self.number, None
330 |         yield "triplet", self.triplet, None
331 | 
332 |     @property
333 |     def system(self) -> ColorSystem:
334 |         """Get the native color system for this color."""
335 |         if self.type == ColorType.DEFAULT:
336 |             return ColorSystem.STANDARD
337 |         return ColorSystem(int(self.type))
338 | 
339 |     @property
340 |     def is_system_defined(self) -> bool:
341 |         """Check if the color is ultimately defined by the system."""
342 |         return self.system not in (ColorSystem.EIGHT_BIT, ColorSystem.TRUECOLOR)
343 | 
344 |     @property
345 |     def is_default(self) -> bool:
346 |         """Check if the color is a default color."""
347 |         return self.type == ColorType.DEFAULT
348 | 
349 |     def get_truecolor(
350 |         self, theme: Optional["TerminalTheme"] = None, foreground: bool = True
351 |     ) -> ColorTriplet:
352 |         """Get an equivalent color triplet for this color.
353 | 
354 |         Args:
355 |             theme (TerminalTheme, optional): Optional terminal theme, or None to use default. Defaults to None.
356 |             foreground (bool, optional): True for a foreground color, or False for background. Defaults to True.
357 | 
358 |         Returns:
359 |             ColorTriplet: A color triplet containing RGB components.
360 |         """
361 | 
362 |         if theme is None:
363 |             theme = DEFAULT_TERMINAL_THEME
364 |         if self.type == ColorType.TRUECOLOR:
365 |             assert self.triplet is not None
366 |             return self.triplet
367 |         elif self.type == ColorType.EIGHT_BIT:
368 |             assert self.number is not None
369 |             return EIGHT_BIT_PALETTE[self.number]
370 |         elif self.type == ColorType.STANDARD:
371 |             assert self.number is not None
372 |             return theme.ansi_colors[self.number]
373 |         elif self.type == ColorType.WINDOWS:
374 |             assert self.number is not None
375 |             return WINDOWS_PALETTE[self.number]
376 |         else:  # self.type == ColorType.DEFAULT:
377 |             assert self.number is None
378 |             return theme.foreground_color if foreground else theme.background_color
379 | 
380 |     @classmethod
381 |     def from_ansi(cls, number: int) -> "Color":
382 |         """Create a Color number from it's 8-bit ansi number.
383 | 
384 |         Args:
385 |             number (int): A number between 0-255 inclusive.
386 | 
387 |         Returns:
388 |             Color: A new Color instance.
389 |         """
390 |         return cls(
391 |             name=f"color({number})",
392 |             type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT),
393 |             number=number,
394 |         )
395 | 
396 |     @classmethod
397 |     def from_triplet(cls, triplet: "ColorTriplet") -> "Color":
398 |         """Create a truecolor RGB color from a triplet of values.
399 | 
400 |         Args:
401 |             triplet (ColorTriplet): A color triplet containing red, green and blue components.
402 | 
403 |         Returns:
404 |             Color: A new color object.
405 |         """
406 |         return cls(name=triplet.hex, type=ColorType.TRUECOLOR, triplet=triplet)
407 | 
408 |     @classmethod
409 |     def from_rgb(cls, red: float, green: float, blue: float) -> "Color":
410 |         """Create a truecolor from three color components in the range(0->255).
411 | 
412 |         Args:
413 |             red (float): Red component in range 0-255.
414 |             green (float): Green component in range 0-255.
415 |             blue (float): Blue component in range 0-255.
416 | 
417 |         Returns:
418 |             Color: A new color object.
419 |         """
420 |         return cls.from_triplet(ColorTriplet(int(red), int(green), int(blue)))
421 | 
422 |     @classmethod
423 |     def default(cls) -> "Color":
424 |         """Get a Color instance representing the default color.
425 | 
426 |         Returns:
427 |             Color: Default color.
428 |         """
429 |         return cls(name="default", type=ColorType.DEFAULT)
430 | 
431 |     @classmethod
432 |     @lru_cache(maxsize=1024)
433 |     def parse(cls, color: str) -> "Color":
434 |         """Parse a color definition."""
435 |         original_color = color
436 |         color = color.lower().strip()
437 | 
438 |         if color == "default":
439 |             return cls(color, type=ColorType.DEFAULT)
440 | 
441 |         color_number = ANSI_COLOR_NAMES.get(color)
442 |         if color_number is not None:
443 |             return cls(
444 |                 color,
445 |                 type=(ColorType.STANDARD if color_number < 16 else ColorType.EIGHT_BIT),
446 |                 number=color_number,
447 |             )
448 | 
449 |         color_match = RE_COLOR.match(color)
450 |         if color_match is None:
451 |             raise ColorParseError(f"{original_color!r} is not a valid color")
452 | 
453 |         color_24, color_8, color_rgb = color_match.groups()
454 |         if color_24:
455 |             triplet = ColorTriplet(
456 |                 int(color_24[0:2], 16), int(color_24[2:4], 16), int(color_24[4:6], 16)
457 |             )
458 |             return cls(color, ColorType.TRUECOLOR, triplet=triplet)
459 | 
460 |         elif color_8:
461 |             number = int(color_8)
462 |             if number > 255:
463 |                 raise ColorParseError(f"color number must be <= 255 in {color!r}")
464 |             return cls(
465 |                 color,
466 |                 type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT),
467 |                 number=number,
468 |             )
469 | 
470 |         else:  #  color_rgb:
471 |             components = color_rgb.split(",")
472 |             if len(components) != 3:
473 |                 raise ColorParseError(
474 |                     f"expected three components in {original_color!r}"
475 |                 )
476 |             red, green, blue = components
477 |             triplet = ColorTriplet(int(red), int(green), int(blue))
478 |             if not all(component <= 255 for component in triplet):
479 |                 raise ColorParseError(
480 |                     f"color components must be <= 255 in {original_color!r}"
481 |                 )
482 |             return cls(color, ColorType.TRUECOLOR, triplet=triplet)
483 | 
484 |     @lru_cache(maxsize=1024)
485 |     def get_ansi_codes(self, foreground: bool = True) -> Tuple[str, ...]:
486 |         """Get the ANSI escape codes for this color."""
487 |         _type = self.type
488 |         if _type == ColorType.DEFAULT:
489 |             return ("39" if foreground else "49",)
490 | 
491 |         elif _type == ColorType.WINDOWS:
492 |             number = self.number
493 |             assert number is not None
494 |             fore, back = (30, 40) if number < 8 else (82, 92)
495 |             return (str(fore + number if foreground else back + number),)
496 | 
497 |         elif _type == ColorType.STANDARD:
498 |             number = self.number
499 |             assert number is not None
500 |             fore, back = (30, 40) if number < 8 else (82, 92)
501 |             return (str(fore + number if foreground else back + number),)
502 | 
503 |         elif _type == ColorType.EIGHT_BIT:
504 |             assert self.number is not None
505 |             return ("38" if foreground else "48", "5", str(self.number))
506 | 
507 |         else:  # self.standard == ColorStandard.TRUECOLOR:
508 |             assert self.triplet is not None
509 |             red, green, blue = self.triplet
510 |             return ("38" if foreground else "48", "2", str(red), str(green), str(blue))
511 | 
512 |     @lru_cache(maxsize=1024)
513 |     def downgrade(self, system: ColorSystem) -> "Color":
514 |         """Downgrade a color system to a system with fewer colors."""
515 | 
516 |         if self.type in (ColorType.DEFAULT, system):
517 |             return self
518 |         # Convert to 8-bit color from truecolor color
519 |         if system == ColorSystem.EIGHT_BIT and self.system == ColorSystem.TRUECOLOR:
520 |             assert self.triplet is not None
521 |             _h, l, s = rgb_to_hls(*self.triplet.normalized)
522 |             # If saturation is under 15% assume it is grayscale
523 |             if s < 0.15:
524 |                 gray = round(l * 25.0)
525 |                 if gray == 0:
526 |                     color_number = 16
527 |                 elif gray == 25:
528 |                     color_number = 231
529 |                 else:
530 |                     color_number = 231 + gray
531 |                 return Color(self.name, ColorType.EIGHT_BIT, number=color_number)
532 | 
533 |             red, green, blue = self.triplet
534 |             six_red = red / 95 if red < 95 else 1 + (red - 95) / 40
535 |             six_green = green / 95 if green < 95 else 1 + (green - 95) / 40
536 |             six_blue = blue / 95 if blue < 95 else 1 + (blue - 95) / 40
537 | 
538 |             color_number = (
539 |                 16 + 36 * round(six_red) + 6 * round(six_green) + round(six_blue)
540 |             )
541 |             return Color(self.name, ColorType.EIGHT_BIT, number=color_number)
542 | 
543 |         # Convert to standard from truecolor or 8-bit
544 |         elif system == ColorSystem.STANDARD:
545 |             if self.system == ColorSystem.TRUECOLOR:
546 |                 assert self.triplet is not None
547 |                 triplet = self.triplet
548 |             else:  # self.system == ColorSystem.EIGHT_BIT
549 |                 assert self.number is not None
550 |                 triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number])
551 | 
552 |             color_number = STANDARD_PALETTE.match(triplet)
553 |             return Color(self.name, ColorType.STANDARD, number=color_number)
554 | 
555 |         elif system == ColorSystem.WINDOWS:
556 |             if self.system == ColorSystem.TRUECOLOR:
557 |                 assert self.triplet is not None
558 |                 triplet = self.triplet
559 |             else:  # self.system == ColorSystem.EIGHT_BIT
560 |                 assert self.number is not None
561 |                 if self.number < 16:
562 |                     return Color(self.name, ColorType.WINDOWS, number=self.number)
563 |                 triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number])
564 | 
565 |             color_number = WINDOWS_PALETTE.match(triplet)
566 |             return Color(self.name, ColorType.WINDOWS, number=color_number)
567 | 
568 |         return self
569 | 
570 | 
571 | def parse_rgb_hex(hex_color: str) -> ColorTriplet:
572 |     """Parse six hex characters in to RGB triplet."""
573 |     assert len(hex_color) == 6, "must be 6 characters"
574 |     color = ColorTriplet(
575 |         int(hex_color[0:2], 16), int(hex_color[2:4], 16), int(hex_color[4:6], 16)
576 |     )
577 |     return color
578 | 
579 | 
580 | def blend_rgb(
581 |     color1: ColorTriplet, color2: ColorTriplet, cross_fade: float = 0.5
582 | ) -> ColorTriplet:
583 |     """Blend one RGB color in to another."""
584 |     r1, g1, b1 = color1
585 |     r2, g2, b2 = color2
586 |     new_color = ColorTriplet(
587 |         int(r1 + (r2 - r1) * cross_fade),
588 |         int(g1 + (g2 - g1) * cross_fade),
589 |         int(b1 + (b2 - b1) * cross_fade),
590 |     )
591 |     return new_color
592 | 
593 | 
594 | if __name__ == "__main__":  # pragma: no cover
595 |     from .console import Console
596 |     from .table import Table
597 |     from .text import Text
598 | 
599 |     console = Console()
600 | 
601 |     table = Table(show_footer=False, show_edge=True)
602 |     table.add_column("Color", width=10, overflow="ellipsis")
603 |     table.add_column("Number", justify="right", style="yellow")
604 |     table.add_column("Name", style="green")
605 |     table.add_column("Hex", style="blue")
606 |     table.add_column("RGB", style="magenta")
607 | 
608 |     colors = sorted((v, k) for k, v in ANSI_COLOR_NAMES.items())
609 |     for color_number, name in colors:
610 |         if "grey" in name:
611 |             continue
612 |         color_cell = Text(" " * 10, style=f"on {name}")
613 |         if color_number < 16:
614 |             table.add_row(color_cell, f"{color_number}", Text(f'"{name}"'))
615 |         else:
616 |             color = EIGHT_BIT_PALETTE[color_number]  # type: ignore[has-type]
617 |             table.add_row(
618 |                 color_cell, str(color_number), Text(f'"{name}"'), color.hex, color.rgb
619 |             )
620 | 
621 |     console.print(table)
622 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/xpathInternals.h:
--------------------------------------------------------------------------------

```
  1 | /*
  2 |  * Summary: internal interfaces for XML Path Language implementation
  3 |  * Description: internal interfaces for XML Path Language implementation
  4 |  *              used to build new modules on top of XPath like XPointer and
  5 |  *              XSLT
  6 |  *
  7 |  * Copy: See Copyright for the status of this software.
  8 |  *
  9 |  * Author: Daniel Veillard
 10 |  */
 11 | 
 12 | #ifndef __XML_XPATH_INTERNALS_H__
 13 | #define __XML_XPATH_INTERNALS_H__
 14 | 
 15 | #include <stdio.h>
 16 | #include <libxml/xmlversion.h>
 17 | #include <libxml/xpath.h>
 18 | 
 19 | #ifdef LIBXML_XPATH_ENABLED
 20 | 
 21 | #ifdef __cplusplus
 22 | extern "C" {
 23 | #endif
 24 | 
 25 | /************************************************************************
 26 |  *									*
 27 |  *			Helpers						*
 28 |  *									*
 29 |  ************************************************************************/
 30 | 
 31 | /*
 32 |  * Many of these macros may later turn into functions. They
 33 |  * shouldn't be used in #ifdef's preprocessor instructions.
 34 |  */
 35 | /**
 36 |  * xmlXPathSetError:
 37 |  * @ctxt:  an XPath parser context
 38 |  * @err:  an xmlXPathError code
 39 |  *
 40 |  * Raises an error.
 41 |  */
 42 | #define xmlXPathSetError(ctxt, err)					\
 43 |     { xmlXPatherror((ctxt), __FILE__, __LINE__, (err));			\
 44 |       if ((ctxt) != NULL) (ctxt)->error = (err); }
 45 | 
 46 | /**
 47 |  * xmlXPathSetArityError:
 48 |  * @ctxt:  an XPath parser context
 49 |  *
 50 |  * Raises an XPATH_INVALID_ARITY error.
 51 |  */
 52 | #define xmlXPathSetArityError(ctxt)					\
 53 |     xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
 54 | 
 55 | /**
 56 |  * xmlXPathSetTypeError:
 57 |  * @ctxt:  an XPath parser context
 58 |  *
 59 |  * Raises an XPATH_INVALID_TYPE error.
 60 |  */
 61 | #define xmlXPathSetTypeError(ctxt)					\
 62 |     xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
 63 | 
 64 | /**
 65 |  * xmlXPathGetError:
 66 |  * @ctxt:  an XPath parser context
 67 |  *
 68 |  * Get the error code of an XPath context.
 69 |  *
 70 |  * Returns the context error.
 71 |  */
 72 | #define xmlXPathGetError(ctxt)	  ((ctxt)->error)
 73 | 
 74 | /**
 75 |  * xmlXPathCheckError:
 76 |  * @ctxt:  an XPath parser context
 77 |  *
 78 |  * Check if an XPath error was raised.
 79 |  *
 80 |  * Returns true if an error has been raised, false otherwise.
 81 |  */
 82 | #define xmlXPathCheckError(ctxt)  ((ctxt)->error != XPATH_EXPRESSION_OK)
 83 | 
 84 | /**
 85 |  * xmlXPathGetDocument:
 86 |  * @ctxt:  an XPath parser context
 87 |  *
 88 |  * Get the document of an XPath context.
 89 |  *
 90 |  * Returns the context document.
 91 |  */
 92 | #define xmlXPathGetDocument(ctxt)	((ctxt)->context->doc)
 93 | 
 94 | /**
 95 |  * xmlXPathGetContextNode:
 96 |  * @ctxt: an XPath parser context
 97 |  *
 98 |  * Get the context node of an XPath context.
 99 |  *
100 |  * Returns the context node.
101 |  */
102 | #define xmlXPathGetContextNode(ctxt)	((ctxt)->context->node)
103 | 
104 | XMLPUBFUN int
105 | 		xmlXPathPopBoolean	(xmlXPathParserContextPtr ctxt);
106 | XMLPUBFUN double
107 | 		xmlXPathPopNumber	(xmlXPathParserContextPtr ctxt);
108 | XMLPUBFUN xmlChar *
109 | 		xmlXPathPopString	(xmlXPathParserContextPtr ctxt);
110 | XMLPUBFUN xmlNodeSetPtr
111 | 		xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt);
112 | XMLPUBFUN void *
113 | 		xmlXPathPopExternal	(xmlXPathParserContextPtr ctxt);
114 | 
115 | /**
116 |  * xmlXPathReturnBoolean:
117 |  * @ctxt:  an XPath parser context
118 |  * @val:  a boolean
119 |  *
120 |  * Pushes the boolean @val on the context stack.
121 |  */
122 | #define xmlXPathReturnBoolean(ctxt, val)				\
123 |     valuePush((ctxt), xmlXPathNewBoolean(val))
124 | 
125 | /**
126 |  * xmlXPathReturnTrue:
127 |  * @ctxt:  an XPath parser context
128 |  *
129 |  * Pushes true on the context stack.
130 |  */
131 | #define xmlXPathReturnTrue(ctxt)   xmlXPathReturnBoolean((ctxt), 1)
132 | 
133 | /**
134 |  * xmlXPathReturnFalse:
135 |  * @ctxt:  an XPath parser context
136 |  *
137 |  * Pushes false on the context stack.
138 |  */
139 | #define xmlXPathReturnFalse(ctxt)  xmlXPathReturnBoolean((ctxt), 0)
140 | 
141 | /**
142 |  * xmlXPathReturnNumber:
143 |  * @ctxt:  an XPath parser context
144 |  * @val:  a double
145 |  *
146 |  * Pushes the double @val on the context stack.
147 |  */
148 | #define xmlXPathReturnNumber(ctxt, val)					\
149 |     valuePush((ctxt), xmlXPathNewFloat(val))
150 | 
151 | /**
152 |  * xmlXPathReturnString:
153 |  * @ctxt:  an XPath parser context
154 |  * @str:  a string
155 |  *
156 |  * Pushes the string @str on the context stack.
157 |  */
158 | #define xmlXPathReturnString(ctxt, str)					\
159 |     valuePush((ctxt), xmlXPathWrapString(str))
160 | 
161 | /**
162 |  * xmlXPathReturnEmptyString:
163 |  * @ctxt:  an XPath parser context
164 |  *
165 |  * Pushes an empty string on the stack.
166 |  */
167 | #define xmlXPathReturnEmptyString(ctxt)					\
168 |     valuePush((ctxt), xmlXPathNewCString(""))
169 | 
170 | /**
171 |  * xmlXPathReturnNodeSet:
172 |  * @ctxt:  an XPath parser context
173 |  * @ns:  a node-set
174 |  *
175 |  * Pushes the node-set @ns on the context stack.
176 |  */
177 | #define xmlXPathReturnNodeSet(ctxt, ns)					\
178 |     valuePush((ctxt), xmlXPathWrapNodeSet(ns))
179 | 
180 | /**
181 |  * xmlXPathReturnEmptyNodeSet:
182 |  * @ctxt:  an XPath parser context
183 |  *
184 |  * Pushes an empty node-set on the context stack.
185 |  */
186 | #define xmlXPathReturnEmptyNodeSet(ctxt)				\
187 |     valuePush((ctxt), xmlXPathNewNodeSet(NULL))
188 | 
189 | /**
190 |  * xmlXPathReturnExternal:
191 |  * @ctxt:  an XPath parser context
192 |  * @val:  user data
193 |  *
194 |  * Pushes user data on the context stack.
195 |  */
196 | #define xmlXPathReturnExternal(ctxt, val)				\
197 |     valuePush((ctxt), xmlXPathWrapExternal(val))
198 | 
199 | /**
200 |  * xmlXPathStackIsNodeSet:
201 |  * @ctxt: an XPath parser context
202 |  *
203 |  * Check if the current value on the XPath stack is a node set or
204 |  * an XSLT value tree.
205 |  *
206 |  * Returns true if the current object on the stack is a node-set.
207 |  */
208 | #define xmlXPathStackIsNodeSet(ctxt)					\
209 |     (((ctxt)->value != NULL)						\
210 |      && (((ctxt)->value->type == XPATH_NODESET)				\
211 |          || ((ctxt)->value->type == XPATH_XSLT_TREE)))
212 | 
213 | /**
214 |  * xmlXPathStackIsExternal:
215 |  * @ctxt: an XPath parser context
216 |  *
217 |  * Checks if the current value on the XPath stack is an external
218 |  * object.
219 |  *
220 |  * Returns true if the current object on the stack is an external
221 |  * object.
222 |  */
223 | #define xmlXPathStackIsExternal(ctxt)					\
224 | 	((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
225 | 
226 | /**
227 |  * xmlXPathEmptyNodeSet:
228 |  * @ns:  a node-set
229 |  *
230 |  * Empties a node-set.
231 |  */
232 | #define xmlXPathEmptyNodeSet(ns)					\
233 |     { while ((ns)->nodeNr > 0) (ns)->nodeTab[--(ns)->nodeNr] = NULL; }
234 | 
235 | /**
236 |  * CHECK_ERROR:
237 |  *
238 |  * Macro to return from the function if an XPath error was detected.
239 |  */
240 | #define CHECK_ERROR							\
241 |     if (ctxt->error != XPATH_EXPRESSION_OK) return
242 | 
243 | /**
244 |  * CHECK_ERROR0:
245 |  *
246 |  * Macro to return 0 from the function if an XPath error was detected.
247 |  */
248 | #define CHECK_ERROR0							\
249 |     if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
250 | 
251 | /**
252 |  * XP_ERROR:
253 |  * @X:  the error code
254 |  *
255 |  * Macro to raise an XPath error and return.
256 |  */
257 | #define XP_ERROR(X)							\
258 |     { xmlXPathErr(ctxt, X); return; }
259 | 
260 | /**
261 |  * XP_ERROR0:
262 |  * @X:  the error code
263 |  *
264 |  * Macro to raise an XPath error and return 0.
265 |  */
266 | #define XP_ERROR0(X)							\
267 |     { xmlXPathErr(ctxt, X); return(0); }
268 | 
269 | /**
270 |  * CHECK_TYPE:
271 |  * @typeval:  the XPath type
272 |  *
273 |  * Macro to check that the value on top of the XPath stack is of a given
274 |  * type.
275 |  */
276 | #define CHECK_TYPE(typeval)						\
277 |     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
278 |         XP_ERROR(XPATH_INVALID_TYPE)
279 | 
280 | /**
281 |  * CHECK_TYPE0:
282 |  * @typeval:  the XPath type
283 |  *
284 |  * Macro to check that the value on top of the XPath stack is of a given
285 |  * type. Return(0) in case of failure
286 |  */
287 | #define CHECK_TYPE0(typeval)						\
288 |     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
289 |         XP_ERROR0(XPATH_INVALID_TYPE)
290 | 
291 | /**
292 |  * CHECK_ARITY:
293 |  * @x:  the number of expected args
294 |  *
295 |  * Macro to check that the number of args passed to an XPath function matches.
296 |  */
297 | #define CHECK_ARITY(x)							\
298 |     if (ctxt == NULL) return;						\
299 |     if (nargs != (x))							\
300 |         XP_ERROR(XPATH_INVALID_ARITY);					\
301 |     if (ctxt->valueNr < (x))						\
302 |         XP_ERROR(XPATH_STACK_ERROR);
303 | 
304 | /**
305 |  * CAST_TO_STRING:
306 |  *
307 |  * Macro to try to cast the value on the top of the XPath stack to a string.
308 |  */
309 | #define CAST_TO_STRING							\
310 |     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))	\
311 |         xmlXPathStringFunction(ctxt, 1);
312 | 
313 | /**
314 |  * CAST_TO_NUMBER:
315 |  *
316 |  * Macro to try to cast the value on the top of the XPath stack to a number.
317 |  */
318 | #define CAST_TO_NUMBER							\
319 |     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))	\
320 |         xmlXPathNumberFunction(ctxt, 1);
321 | 
322 | /**
323 |  * CAST_TO_BOOLEAN:
324 |  *
325 |  * Macro to try to cast the value on the top of the XPath stack to a boolean.
326 |  */
327 | #define CAST_TO_BOOLEAN							\
328 |     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN))	\
329 |         xmlXPathBooleanFunction(ctxt, 1);
330 | 
331 | /*
332 |  * Variable Lookup forwarding.
333 |  */
334 | 
335 | XMLPUBFUN void
336 | 	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt,
337 | 					 xmlXPathVariableLookupFunc f,
338 | 					 void *data);
339 | 
340 | /*
341 |  * Function Lookup forwarding.
342 |  */
343 | 
344 | XMLPUBFUN void
345 | 	    xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt,
346 | 					 xmlXPathFuncLookupFunc f,
347 | 					 void *funcCtxt);
348 | 
349 | /*
350 |  * Error reporting.
351 |  */
352 | XMLPUBFUN void
353 | 		xmlXPatherror	(xmlXPathParserContextPtr ctxt,
354 | 				 const char *file,
355 | 				 int line,
356 | 				 int no);
357 | 
358 | XMLPUBFUN void
359 | 		xmlXPathErr	(xmlXPathParserContextPtr ctxt,
360 | 				 int error);
361 | 
362 | #ifdef LIBXML_DEBUG_ENABLED
363 | XMLPUBFUN void
364 | 		xmlXPathDebugDumpObject	(FILE *output,
365 | 					 xmlXPathObjectPtr cur,
366 | 					 int depth);
367 | XMLPUBFUN void
368 | 	    xmlXPathDebugDumpCompExpr(FILE *output,
369 | 					 xmlXPathCompExprPtr comp,
370 | 					 int depth);
371 | #endif
372 | /**
373 |  * NodeSet handling.
374 |  */
375 | XMLPUBFUN int
376 | 		xmlXPathNodeSetContains		(xmlNodeSetPtr cur,
377 | 						 xmlNodePtr val);
378 | XMLPUBFUN xmlNodeSetPtr
379 | 		xmlXPathDifference		(xmlNodeSetPtr nodes1,
380 | 						 xmlNodeSetPtr nodes2);
381 | XMLPUBFUN xmlNodeSetPtr
382 | 		xmlXPathIntersection		(xmlNodeSetPtr nodes1,
383 | 						 xmlNodeSetPtr nodes2);
384 | 
385 | XMLPUBFUN xmlNodeSetPtr
386 | 		xmlXPathDistinctSorted		(xmlNodeSetPtr nodes);
387 | XMLPUBFUN xmlNodeSetPtr
388 | 		xmlXPathDistinct		(xmlNodeSetPtr nodes);
389 | 
390 | XMLPUBFUN int
391 | 		xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1,
392 | 						 xmlNodeSetPtr nodes2);
393 | 
394 | XMLPUBFUN xmlNodeSetPtr
395 | 		xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes,
396 | 						 xmlNodePtr node);
397 | XMLPUBFUN xmlNodeSetPtr
398 | 		xmlXPathLeadingSorted		(xmlNodeSetPtr nodes1,
399 | 						 xmlNodeSetPtr nodes2);
400 | XMLPUBFUN xmlNodeSetPtr
401 | 		xmlXPathNodeLeading		(xmlNodeSetPtr nodes,
402 | 						 xmlNodePtr node);
403 | XMLPUBFUN xmlNodeSetPtr
404 | 		xmlXPathLeading			(xmlNodeSetPtr nodes1,
405 | 						 xmlNodeSetPtr nodes2);
406 | 
407 | XMLPUBFUN xmlNodeSetPtr
408 | 		xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes,
409 | 						 xmlNodePtr node);
410 | XMLPUBFUN xmlNodeSetPtr
411 | 		xmlXPathTrailingSorted		(xmlNodeSetPtr nodes1,
412 | 						 xmlNodeSetPtr nodes2);
413 | XMLPUBFUN xmlNodeSetPtr
414 | 		xmlXPathNodeTrailing		(xmlNodeSetPtr nodes,
415 | 						 xmlNodePtr node);
416 | XMLPUBFUN xmlNodeSetPtr
417 | 		xmlXPathTrailing		(xmlNodeSetPtr nodes1,
418 | 						 xmlNodeSetPtr nodes2);
419 | 
420 | 
421 | /**
422 |  * Extending a context.
423 |  */
424 | 
425 | XMLPUBFUN int
426 | 		xmlXPathRegisterNs		(xmlXPathContextPtr ctxt,
427 | 						 const xmlChar *prefix,
428 | 						 const xmlChar *ns_uri);
429 | XMLPUBFUN const xmlChar *
430 | 		xmlXPathNsLookup		(xmlXPathContextPtr ctxt,
431 | 						 const xmlChar *prefix);
432 | XMLPUBFUN void
433 | 		xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt);
434 | 
435 | XMLPUBFUN int
436 | 		xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt,
437 | 						 const xmlChar *name,
438 | 						 xmlXPathFunction f);
439 | XMLPUBFUN int
440 | 		xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt,
441 | 						 const xmlChar *name,
442 | 						 const xmlChar *ns_uri,
443 | 						 xmlXPathFunction f);
444 | XMLPUBFUN int
445 | 		xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt,
446 | 						 const xmlChar *name,
447 | 						 xmlXPathObjectPtr value);
448 | XMLPUBFUN int
449 | 		xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt,
450 | 						 const xmlChar *name,
451 | 						 const xmlChar *ns_uri,
452 | 						 xmlXPathObjectPtr value);
453 | XMLPUBFUN xmlXPathFunction
454 | 		xmlXPathFunctionLookup		(xmlXPathContextPtr ctxt,
455 | 						 const xmlChar *name);
456 | XMLPUBFUN xmlXPathFunction
457 | 		xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt,
458 | 						 const xmlChar *name,
459 | 						 const xmlChar *ns_uri);
460 | XMLPUBFUN void
461 | 		xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt);
462 | XMLPUBFUN xmlXPathObjectPtr
463 | 		xmlXPathVariableLookup		(xmlXPathContextPtr ctxt,
464 | 						 const xmlChar *name);
465 | XMLPUBFUN xmlXPathObjectPtr
466 | 		xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt,
467 | 						 const xmlChar *name,
468 | 						 const xmlChar *ns_uri);
469 | XMLPUBFUN void
470 | 		xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
471 | 
472 | /**
473 |  * Utilities to extend XPath.
474 |  */
475 | XMLPUBFUN xmlXPathParserContextPtr
476 | 		  xmlXPathNewParserContext	(const xmlChar *str,
477 | 						 xmlXPathContextPtr ctxt);
478 | XMLPUBFUN void
479 | 		xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt);
480 | 
481 | /* TODO: remap to xmlXPathValuePop and Push. */
482 | XMLPUBFUN xmlXPathObjectPtr
483 | 		valuePop			(xmlXPathParserContextPtr ctxt);
484 | XMLPUBFUN int
485 | 		valuePush			(xmlXPathParserContextPtr ctxt,
486 | 						 xmlXPathObjectPtr value);
487 | 
488 | XMLPUBFUN xmlXPathObjectPtr
489 | 		xmlXPathNewString		(const xmlChar *val);
490 | XMLPUBFUN xmlXPathObjectPtr
491 | 		xmlXPathNewCString		(const char *val);
492 | XMLPUBFUN xmlXPathObjectPtr
493 | 		xmlXPathWrapString		(xmlChar *val);
494 | XMLPUBFUN xmlXPathObjectPtr
495 | 		xmlXPathWrapCString		(char * val);
496 | XMLPUBFUN xmlXPathObjectPtr
497 | 		xmlXPathNewFloat		(double val);
498 | XMLPUBFUN xmlXPathObjectPtr
499 | 		xmlXPathNewBoolean		(int val);
500 | XMLPUBFUN xmlXPathObjectPtr
501 | 		xmlXPathNewNodeSet		(xmlNodePtr val);
502 | XMLPUBFUN xmlXPathObjectPtr
503 | 		xmlXPathNewValueTree		(xmlNodePtr val);
504 | XMLPUBFUN int
505 | 		xmlXPathNodeSetAdd		(xmlNodeSetPtr cur,
506 | 						 xmlNodePtr val);
507 | XMLPUBFUN int
508 | 		xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur,
509 | 						 xmlNodePtr val);
510 | XMLPUBFUN int
511 | 		xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur,
512 | 						 xmlNodePtr node,
513 | 						 xmlNsPtr ns);
514 | XMLPUBFUN void
515 | 		xmlXPathNodeSetSort		(xmlNodeSetPtr set);
516 | 
517 | XMLPUBFUN void
518 | 		xmlXPathRoot			(xmlXPathParserContextPtr ctxt);
519 | XMLPUBFUN void
520 | 		xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt);
521 | XMLPUBFUN xmlChar *
522 | 		xmlXPathParseName		(xmlXPathParserContextPtr ctxt);
523 | XMLPUBFUN xmlChar *
524 | 		xmlXPathParseNCName		(xmlXPathParserContextPtr ctxt);
525 | 
526 | /*
527 |  * Existing functions.
528 |  */
529 | XMLPUBFUN double
530 | 		xmlXPathStringEvalNumber	(const xmlChar *str);
531 | XMLPUBFUN int
532 | 		xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
533 | 						 xmlXPathObjectPtr res);
534 | XMLPUBFUN void
535 | 		xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt);
536 | XMLPUBFUN xmlNodeSetPtr
537 | 		xmlXPathNodeSetMerge		(xmlNodeSetPtr val1,
538 | 						 xmlNodeSetPtr val2);
539 | XMLPUBFUN void
540 | 		xmlXPathNodeSetDel		(xmlNodeSetPtr cur,
541 | 						 xmlNodePtr val);
542 | XMLPUBFUN void
543 | 		xmlXPathNodeSetRemove		(xmlNodeSetPtr cur,
544 | 						 int val);
545 | XMLPUBFUN xmlXPathObjectPtr
546 | 		xmlXPathNewNodeSetList		(xmlNodeSetPtr val);
547 | XMLPUBFUN xmlXPathObjectPtr
548 | 		xmlXPathWrapNodeSet		(xmlNodeSetPtr val);
549 | XMLPUBFUN xmlXPathObjectPtr
550 | 		xmlXPathWrapExternal		(void *val);
551 | 
552 | XMLPUBFUN int xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
553 | XMLPUBFUN int xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
554 | XMLPUBFUN int xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
555 | XMLPUBFUN void xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
556 | XMLPUBFUN void xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
557 | XMLPUBFUN void xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
558 | XMLPUBFUN void xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
559 | XMLPUBFUN void xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
560 | XMLPUBFUN void xmlXPathModValues(xmlXPathParserContextPtr ctxt);
561 | 
562 | XMLPUBFUN int xmlXPathIsNodeType(const xmlChar *name);
563 | 
564 | /*
565 |  * Some of the axis navigation routines.
566 |  */
567 | XMLPUBFUN xmlNodePtr xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
568 | 			xmlNodePtr cur);
569 | XMLPUBFUN xmlNodePtr xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
570 | 			xmlNodePtr cur);
571 | XMLPUBFUN xmlNodePtr xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
572 | 			xmlNodePtr cur);
573 | XMLPUBFUN xmlNodePtr xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
574 | 			xmlNodePtr cur);
575 | XMLPUBFUN xmlNodePtr xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
576 | 			xmlNodePtr cur);
577 | XMLPUBFUN xmlNodePtr xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
578 | 			xmlNodePtr cur);
579 | XMLPUBFUN xmlNodePtr xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
580 | 			xmlNodePtr cur);
581 | XMLPUBFUN xmlNodePtr xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
582 | 			xmlNodePtr cur);
583 | XMLPUBFUN xmlNodePtr xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
584 | 			xmlNodePtr cur);
585 | XMLPUBFUN xmlNodePtr xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
586 | 			xmlNodePtr cur);
587 | XMLPUBFUN xmlNodePtr xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
588 | 			xmlNodePtr cur);
589 | XMLPUBFUN xmlNodePtr xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
590 | 			xmlNodePtr cur);
591 | XMLPUBFUN xmlNodePtr xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
592 | 			xmlNodePtr cur);
593 | /*
594 |  * The official core of XPath functions.
595 |  */
596 | XMLPUBFUN void xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
597 | XMLPUBFUN void xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
598 | XMLPUBFUN void xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
599 | XMLPUBFUN void xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
600 | XMLPUBFUN void xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
601 | XMLPUBFUN void xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
602 | XMLPUBFUN void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
603 | XMLPUBFUN void xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
604 | XMLPUBFUN void xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
605 | XMLPUBFUN void xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
606 | XMLPUBFUN void xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
607 | XMLPUBFUN void xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
608 | XMLPUBFUN void xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
609 | XMLPUBFUN void xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
610 | XMLPUBFUN void xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
611 | XMLPUBFUN void xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
612 | XMLPUBFUN void xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
613 | XMLPUBFUN void xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
614 | XMLPUBFUN void xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
615 | XMLPUBFUN void xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
616 | XMLPUBFUN void xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
617 | XMLPUBFUN void xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
618 | XMLPUBFUN void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
619 | XMLPUBFUN void xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
620 | XMLPUBFUN void xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
621 | XMLPUBFUN void xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
622 | 
623 | /**
624 |  * Really internal functions
625 |  */
626 | XMLPUBFUN void xmlXPathNodeSetFreeNs(xmlNsPtr ns);
627 | 
628 | #ifdef __cplusplus
629 | }
630 | #endif
631 | 
632 | #endif /* LIBXML_XPATH_ENABLED */
633 | #endif /* ! __XML_XPATH_INTERNALS_H__ */
634 | 
```
Page 61/168FirstPrevNextLast