diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 27272175..1a46fb37 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -12,7 +12,17 @@ applyTo: '/**'
* Always run `make lint` after code changes — runs taplo, isort, black, ruff, and mypy
* Never edit `readme.md` directly — it is generated from `docs/index.md` via `make docs`
-* To install all dependencies (including all optional extras) run `make install-dev` — runs `uv sync --all-extras`
+* To install all dependencies (including all optional extras) run `make install-dev`
+* Do not modify code unless the developer explicitly asks for a code change.
+* Never change code that works unless you have been asked by the developer to do so,
+ or you have a good reason to believe the code is wrong.
+* Concentrate on fixing the problem, not on making the code look nice unless you are
+ extremely confident that your code style is better than the original and that the original code style
+ is not serving a purpose (e.g. readability, consistency with other code, etc.).
+ If you are unsure, ask the developer or leave the code style as it is.
+
+## Run Tests
+
* To run all tests use `make test` — runs all tests in the `tests/` directory using pytest
* To run a specific test file, use `uv run pytest tests/path/to/test_file.py`
@@ -29,16 +39,26 @@ applyTo: '/**'
* Documentation is built using [mkdocs](https://www.mkdocs.org/) and stored in the `docs/` directory. The documentation source files are written in markdown format.
* Split prose into short paragraphs (one idea per paragraph) separated by blank lines. Never write a wall-of-text paragraph that strings together mechanism, rationale, caveats and usage advice. This applies to mkdocs tutorials, theory pages and long docstrings.
* Do not use dashes (em dashes, en dashes, or hyphens used as dashes) in documentation files or docstrings. Use colons, parentheses, or restructure the sentence instead.
+* Always use `Annotated(..., Doc("..."))` for docstrings in code, never use triple-quoted strings below the definition of a function or class. For example:
+ ```python
+ from typing_extensions import Annotated, Doc
+
+ def foo(x: Annotated[int, Doc("This is the docstring for x")]) -> float:
+ """This is the docstring for foo"""
+ return float(x)
+ ```
+* Do not use Docstrings with markdown text that may genereate headings (e.g. `# Heading`, `## Heading`, etc.)
* Math in documentation and docstrings: always use `\begin{equation}...\end{equation}` for any formula or equation. Use `$...$` only for brief inline references to variables (e.g. $F$, $K$). Do not use `$$...$$`, `` `...` ``, or RST syntax (`.. math::`, `:math:`).
* Math notation convention: use $\Phi$ for the characteristic function and $\phi$ for the characteristic exponent, where $\Phi = e^{-\phi}$.
* Glossary entries in `docs/glossary.md` must be kept in alphabetical order.
-* Do not repeat concept definitions inline in tutorials or docstrings — link to the glossary instead using a relative markdown link (e.g. `[moneyness](../glossary.md#moneyness)`).
+* Do not repeat concept definitions inline in tutorials or docstrings, link to the glossary instead using a relative markdown link (e.g. `[moneyness](../glossary.md#moneyness)`).
+* Use relative links for all mkdocs page links (e.g. `[Option Pricing](../theory/option_pricing.md)`) — prefer relative over absolute URLs to keep links shorter and portable.
* Prefer mkdocstrings relative cross-references whenever the target is visible from the current scope: write `[label][.member]` (same class) or `[label][..Sibling]` (same module) instead of repeating the fully-qualified path. Use the full path only when the target lives in a different module than the current docstring.
* To rebuild doc examples run `uv run ./dev/build-examples` — runs all scripts in `docs/examples/` and writes their output to `docs/examples_output/`
## Pydantic models
-* Always document Pydantic fields with `Field(description=...)` — never use a docstring below a field assignment
+* Always document Pydantic fields with `Field(description=...)`, never use a docstring below a field assignment
* Split long description strings across lines using implicit string concatenation rather than shortening the text
* When a docstring line exceeds the line length limit, split it across multiple lines rather than shortening the text
diff --git a/.gitignore b/.gitignore
index cd81b872..b6d9e488 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,5 +38,8 @@ _build
# builds
app/docs
+app/examples
+app/frontend/node_modules
+app/frontend/src/.observablehq
docs/assets/examples
docs/examples/output
diff --git a/Makefile b/Makefile
index 269b9883..8f2b1f12 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,10 @@ help:
@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##//'
@echo ================================================================================
+.PHONY: app-serve
+app-serve: ## serve app
+ @MICRO_SERVICE_HOST=127.0.0.1 uv run python -m app
+
.PHONY: docs
docs: ## build documentation
@cp docs/index.md readme.md
@@ -20,8 +24,17 @@ docs-examples: ## Regenerate docs examples
@uv run ./dev/build-examples
.PHONY: docs-serve
-docs-serve: ## serve documentation
- @uv run mkdocs serve --livereload --watch quantflow --watch docs
+docs-serve: ## serve docs, examples, and API with auto-reload
+ @bash ./dev/docs-serve
+
+.PHONY: frontend-build
+frontend-build: ## build Observable frontend examples
+ @rm -rf app/examples
+ @npm --prefix app/frontend run build
+
+.PHONY: frontend-serve
+frontend-serve: ## serve Observable frontend with auto-reload
+ @bash ./dev/frontend-serve
.PHONY: install-dev
install-dev: ## Install development dependencies
diff --git a/app/__init__.py b/app/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/app/__main__.py b/app/__main__.py
index 46ff3c59..6a356f78 100644
--- a/app/__main__.py
+++ b/app/__main__.py
@@ -1,45 +1,82 @@
import os
-from pathlib import Path
-import marimo
+from dotenv import load_dotenv
from fastapi import APIRouter, FastAPI
+from fastapi.middleware.cors import CORSMiddleware
+from fastapi.openapi.docs import get_redoc_html
+from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
+from fluid.utils import log
-from app.utils.paths import APP_PATH, head_snippet
+from app.utils.paths import APP_PATH
+from quantflow import __version__
-PORT = int(os.environ.get("MICRO_SERVICE_PORT", "8001"))
-status_router = APIRouter()
+from .api.cointegration import cointegration_router
+from .api.deps import instrument_app
+from .api.heston import heston_router
+from .api.hurst import hurst_router
+from .api.rates import rates_router
+from .api.sampling import sampling_router
+from .api.smoother import smoother_router
+from .api.status import status_router
+from .api.volatility import volatility_router
+from .utils.static import HtmlFallbackStaticFiles
def crate_app() -> FastAPI:
- # Create a marimo asgi app
- html_head = head_snippet(APP_PATH / "docs")
- server = marimo.create_asgi_app(include_code=True, html_head=html_head)
- for path in APP_PATH.glob("*.py"):
- if path.name.startswith("_"):
- continue
- dashed = path.stem.replace("_", "-")
- server = server.with_app(path=f"/{dashed}", root=f"./app/{path.name}")
- # Create a FastAPI app
- app = FastAPI()
- app.include_router(status_router)
- app.mount("/examples", server.build())
- app.mount("/", StaticFiles(directory=APP_PATH / "docs", html=True), name="static")
- return app
-
+ load_dotenv()
+ log.config()
+ app = FastAPI(
+ version=__version__,
+ title="Quantflow API",
+ description="API for Quantflow",
+ )
+ instrument_app(app)
+ cors_origins = [
+ origin.strip()
+ for origin in os.environ.get("QUANTFLOW_CORS_ORIGINS", "").split(",")
+ if origin.strip()
+ ]
+ if cors_origins:
+ app.add_middleware(
+ CORSMiddleware,
+ allow_origins=cors_origins,
+ allow_credentials=True,
+ allow_methods=["*"],
+ allow_headers=["*"],
+ )
-@status_router.get("/status")
-async def service_status() -> dict:
- return {"status": "ok"}
+ api = APIRouter(prefix="/.api")
+ @api.get("/redoc", include_in_schema=False)
+ async def api_redoc() -> HTMLResponse:
+ return get_redoc_html(
+ openapi_url="/openapi.json",
+ title="Quantflow API",
+ )
-@status_router.get("/ready")
-async def service_ready() -> dict:
- return {"status": "ok"}
+ api.include_router(cointegration_router)
+ api.include_router(heston_router)
+ api.include_router(hurst_router)
+ api.include_router(rates_router)
+ api.include_router(sampling_router)
+ api.include_router(smoother_router)
+ api.include_router(volatility_router)
+ app.include_router(api)
+ app.include_router(status_router, include_in_schema=False)
+ app.mount(
+ "/examples",
+ HtmlFallbackStaticFiles(directory=APP_PATH / "examples", html=True),
+ name="examples",
+ )
+ app.mount("/", StaticFiles(directory=APP_PATH / "docs", html=True), name="static")
+ return app
# Run the server
if __name__ == "__main__":
import uvicorn
- uvicorn.run(crate_app(), host="0.0.0.0", port=PORT)
+ PORT = int(os.environ.get("MICRO_SERVICE_PORT", "8001"))
+ HOST = os.environ.get("MICRO_SERVICE_HOST", "0.0.0.0")
+ uvicorn.run(crate_app(), host=HOST, port=PORT)
diff --git a/app/api/__init__.py b/app/api/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/app/api/cointegration.py b/app/api/cointegration.py
new file mode 100644
index 00000000..6e2778b8
--- /dev/null
+++ b/app/api/cointegration.py
@@ -0,0 +1,61 @@
+from fastapi import APIRouter, Query
+from pydantic import BaseModel, Field
+
+from quantflow.data.fmp import FMP
+
+cointegration_router = APIRouter()
+
+
+class CointegrationResponse(BaseModel):
+ dates: list[str] = Field(description="Date strings")
+ residuals: list[float] = Field(description="Cointegration residual values")
+ deltas: list[float] = Field(
+ description="Cointegrating vector (eigenvector for largest eigenvalue)"
+ )
+
+
+@cointegration_router.get("/cointegration")
+async def cointegration(
+ frequency: str = Query(
+ "daily",
+ description="Price frequency",
+ enum=["1min", "5min", "15min", "30min", "1hour", "4hour", "daily"],
+ ),
+) -> CointegrationResponse:
+ import numpy as np
+ from statsmodels.tsa.vector_ar.vecm import coint_johansen
+
+ # daily uses the EOD endpoint (frequency=None)
+ freq = None if frequency == "daily" else frequency
+
+ async with FMP() as cli:
+ btc = await cli.prices("BTCUSD", convert_to_date=True, frequency=freq)
+ eth = await cli.prices("ETHUSD", convert_to_date=True, frequency=freq)
+ sol = await cli.prices("SOLUSD", convert_to_date=True, frequency=freq)
+
+ btc = btc.set_index("date")
+ eth = eth.set_index("date")
+ sol = sol.set_index("date")
+
+ prices_3 = (
+ btc[["close"]]
+ .join(eth[["close"]], lsuffix="_btc", rsuffix="_eth")
+ .join(sol[["close"]])
+ )
+ prices_3.columns = ["btc_close", "eth_close", "sol_close"]
+ prices_3 = prices_3.dropna()
+
+ log_prices_3 = np.log(prices_3)
+ johansen_result = coint_johansen(log_prices_3, det_order=0, k_ar_diff=1)
+ deltas = johansen_result.evec[:, 0]
+
+ residuals = log_prices_3.dot(deltas)
+ residual_mean = residuals.mean()
+ residuals = residuals - residual_mean
+
+ dates = [str(d)[:10] for d in residuals.index]
+ return CointegrationResponse(
+ dates=dates,
+ residuals=[float(v) for v in residuals.values],
+ deltas=[float(v) for v in deltas],
+ )
diff --git a/app/api/deps.py b/app/api/deps.py
new file mode 100644
index 00000000..31a215aa
--- /dev/null
+++ b/app/api/deps.py
@@ -0,0 +1,55 @@
+import json
+from collections.abc import Awaitable, Callable
+from dataclasses import dataclass
+from typing import Annotated, Generic, TypeVar, cast
+
+from fastapi import Depends, FastAPI, Request
+from fluid.utils import log
+from fluid.utils.redis import FluidRedis
+from pydantic import BaseModel
+from redis import Redis
+
+M = TypeVar("M", bound=BaseModel)
+logger = log.get_logger(__name__)
+
+
+def instrument_app(app: FastAPI) -> None:
+ """Instrument the app with the necessary dependencies"""
+ redis = FluidRedis.create()
+ app.state.redis = redis.redis_cli
+ app.router.on_shutdown.append(redis.close)
+
+
+def get_redis(request: Request) -> Redis:
+ """Get the redis client from the app state"""
+ if not hasattr(request.app.state, "redis"):
+ raise RuntimeError("Redis client not found in app state")
+ return cast(Redis, request.app.state.redis)
+
+
+@dataclass
+class RedisCache(Generic[M]):
+ redis: Redis
+ Model: type[M]
+ key: str
+ ttl: int = 60
+
+ async def from_cache(self, loader: Callable[[], Awaitable[M]]) -> M:
+ """Get a value from the cache"""
+ value = await self.redis.get(self.key)
+ if value is None:
+ return await self.set_cache(await loader())
+ try:
+ return self.Model.model_validate_json(value)
+ except json.JSONDecodeError:
+ logger.exception(f"Failed to decode cache value for key {self.key}")
+ return await self.set_cache(await loader())
+
+ async def set_cache(self, value: M) -> M:
+ """Set a value in the cache"""
+ payload = value.model_dump_json()
+ await self.redis.set(self.key, payload, ex=self.ttl)
+ return value
+
+
+RedisDep = Annotated[Redis, Depends(get_redis)]
diff --git a/app/api/heston.py b/app/api/heston.py
new file mode 100644
index 00000000..62bb08c6
--- /dev/null
+++ b/app/api/heston.py
@@ -0,0 +1,80 @@
+import numpy as np
+from fastapi import APIRouter, Query
+from pydantic import BaseModel, Field
+
+from quantflow.options.pricer import OptionPricer
+from quantflow.sp.heston import HestonJ
+from quantflow.sp.jump_diffusion import JumpDiffusion
+from quantflow.utils.distributions import DoubleExponential
+
+heston_router = APIRouter()
+
+
+class VolSurfaceGridResponse(BaseModel):
+ moneyness: list[float] = Field(description="Moneyness grid values")
+ ttm: list[float] = Field(description="Time to maturity grid values")
+ implied_vol: list[list[float]] = Field(
+ description="Implied vol grid (rows=ttm, cols=moneyness)"
+ )
+
+
+@heston_router.get("/heston-vol-surface")
+async def heston_vol_surface(
+ model: str = Query(
+ "jd",
+ description="Model type",
+ enum=["jd", "hj"],
+ ),
+ vol: float = Query(0.4, description="Long term volatility", ge=0.1, le=0.8),
+ sigma: float = Query(0.5, description="Vol of vol", ge=0.1, le=2.0),
+ kappa: float = Query(0.5, description="Variance mean reversion", ge=0.1, le=2.0),
+ rho: float = Query(0.0, description="Correlation", ge=-0.6, le=0.6),
+ r: float = Query(1.0, description="Initial vol ratio", ge=0.6, le=1.6),
+ jump_fraction: float = Query(0.5, description="Jump fraction", ge=0.1, le=0.9),
+ jump_intensity: float = Query(
+ 10.0, description="Jump intensity", ge=10.0, le=100.0
+ ),
+ jump_asymmetry: float = Query(
+ 0.0, description="Jump asymmetry (log kappa)", ge=-2.0, le=2.0
+ ),
+) -> VolSurfaceGridResponse:
+ pricer: OptionPricer
+ if model == "jd":
+ vm_jd = JumpDiffusion.create(
+ DoubleExponential,
+ vol=vol,
+ jump_fraction=jump_fraction,
+ jump_intensity=jump_intensity,
+ jump_asymmetry=jump_asymmetry,
+ )
+ pricer = OptionPricer(model=vm_jd)
+ else:
+ st = sigma / vol
+ k = max(kappa, 0.5 * st * st)
+ vm_hj = HestonJ.create(
+ DoubleExponential,
+ rate=r,
+ vol=vol,
+ sigma=sigma,
+ kappa=k,
+ rho=rho,
+ jump_fraction=jump_fraction,
+ jump_intensity=jump_intensity,
+ jump_asymmetry=jump_asymmetry,
+ )
+ pricer = OptionPricer(model=vm_hj)
+ ttm_arr = np.linspace(0.1, 1.0, 10)
+ moneyness_arr = np.linspace(-0.5, 0.5, 51)
+ implied = np.zeros((len(ttm_arr), len(moneyness_arr)))
+ for i, t in enumerate(ttm_arr):
+ maturity = pricer.maturity(float(t))
+ vols = maturity.prices(moneyness_arr * np.sqrt(t))["implied_vol"].values
+ # replace NaN/Inf/negative with 0
+ vols = np.where(np.isfinite(vols) & (vols > 0), vols, 0.0)
+ implied[i, :] = vols
+
+ return VolSurfaceGridResponse(
+ moneyness=[float(m) for m in moneyness_arr],
+ ttm=[float(t) for t in ttm_arr],
+ implied_vol=[[float(v) for v in row] for row in implied],
+ )
diff --git a/app/api/hurst.py b/app/api/hurst.py
new file mode 100644
index 00000000..2082bb2f
--- /dev/null
+++ b/app/api/hurst.py
@@ -0,0 +1,157 @@
+import math
+from collections import defaultdict
+from typing import Any
+
+import numpy as np
+import pandas as pd
+from fastapi import APIRouter, Query
+from pydantic import BaseModel, Field
+
+from quantflow.sp.ou import Vasicek
+from quantflow.sp.wiener import WienerProcess
+from quantflow.ta.ohlc import OHLC
+
+hurst_router = APIRouter()
+
+DEFAULT_PERIODS = ("10s", "20s", "30s", "1m", "2m", "3m", "5m", "10m", "30m")
+VASICEK_PERIODS = ("10m", "20m", "30m", "1h")
+
+
+class HurstWienerResponse(BaseModel):
+ dates: list[str] = Field(description="Datetime strings for the path")
+ values: list[float] = Field(description="Path values")
+ hurst_exponent: float = Field(description="Realized variance Hurst exponent")
+ realized_std: float = Field(description="Realized standard deviation (scaled)")
+ estimator_periods: list[str] = Field(
+ description="Sampling periods for range-based estimators"
+ )
+ estimator_pk: list[float] = Field(description="Parkinson volatility estimates")
+ estimator_gk: list[float] = Field(description="Garman-Klass volatility estimates")
+ estimator_rs: list[float] = Field(
+ description="Rogers-Satchell volatility estimates"
+ )
+ ohlc_hurst_pk: float = Field(description="OHLC Hurst exponent (Parkinson)")
+ ohlc_hurst_gk: float = Field(description="OHLC Hurst exponent (Garman-Klass)")
+ ohlc_hurst_rs: float = Field(description="OHLC Hurst exponent (Rogers-Satchell)")
+
+
+class HurstVasicekResponse(BaseModel):
+ dates: list[str] = Field(description="Datetime strings for the path")
+ values: list[float] = Field(description="Path values")
+ hurst_realized: float = Field(description="Hurst exponent from realized variance")
+ hurst_pk: float = Field(description="Hurst exponent (Parkinson)")
+ hurst_gk: float = Field(description="Hurst exponent (Garman-Klass)")
+ hurst_rs: float = Field(description="Hurst exponent (Rogers-Satchell)")
+
+
+def _range_std(pdf: Any, range_seconds: float, seconds_in_day: int) -> float:
+ variance = pdf.mean()
+ variance = seconds_in_day * variance / range_seconds
+ return math.sqrt(variance)
+
+
+def _ohlc_hurst(df: pd.DataFrame, serie: str, periods: tuple) -> dict[str, float]:
+ template = OHLC(
+ serie=serie,
+ period="10m",
+ rogers_satchell_variance=True,
+ parkinson_variance=True,
+ garman_klass_variance=True,
+ )
+ estimator_names = ("pk", "gk", "rs")
+ time_range = []
+ estimators: dict[str, list] = defaultdict(list)
+ for period in periods:
+ ohlc = template.model_copy(update=dict(period=period))
+ rf = ohlc(df)
+ ts = pd.to_timedelta(period).to_pytimedelta().total_seconds()
+ time_range.append(ts)
+ for name in estimator_names:
+ estimators[name].append(rf[f"{serie}_{name}"].mean())
+ result = {}
+ for name in estimator_names:
+ result[name] = (
+ float(np.polyfit(np.log(time_range), np.log(estimators[name]), 1)[0]) / 2.0
+ )
+ return result
+
+
+@hurst_router.get("/hurst-wiener")
+async def hurst_wiener(
+ sigma: float = Query(2.0, description="Wiener process volatility", ge=0.1, le=10),
+) -> HurstWienerResponse:
+ from quantflow.utils.dates import start_of_day
+
+ seconds_in_day = 24 * 60 * 60
+ wiener = WienerProcess(sigma=sigma)
+ paths = wiener.sample(n=1, time_horizon=1, time_steps=seconds_in_day)
+ wiener_df = paths.as_datetime_df(start=start_of_day(), unit="d").reset_index()
+
+ dates = [str(d) for d in wiener_df.iloc[:, 0]]
+ values = [float(v) for v in wiener_df.iloc[:, 1]]
+ hurst_exp = float(paths.hurst_exponent())
+ realized_std = float(paths.paths_std(scaled=True)[0])
+
+ periods = list(DEFAULT_PERIODS)
+ pk_vals = []
+ gk_vals = []
+ rs_vals = []
+ template = OHLC(
+ serie="0",
+ period="10m",
+ rogers_satchell_variance=True,
+ parkinson_variance=True,
+ garman_klass_variance=True,
+ )
+ for period in periods:
+ ohlc = template.model_copy(update=dict(period=period))
+ rf = ohlc(wiener_df)
+ ts = pd.to_timedelta(period).to_pytimedelta().total_seconds()
+ pk_vals.append(_range_std(rf["0_pk"], ts, seconds_in_day))
+ gk_vals.append(_range_std(rf["0_gk"], ts, seconds_in_day))
+ rs_vals.append(_range_std(rf["0_rs"], ts, seconds_in_day))
+
+ ohlc_hurst = _ohlc_hurst(wiener_df, "0", DEFAULT_PERIODS)
+
+ return HurstWienerResponse(
+ dates=dates,
+ values=values,
+ hurst_exponent=hurst_exp,
+ realized_std=realized_std,
+ estimator_periods=periods,
+ estimator_pk=pk_vals,
+ estimator_gk=gk_vals,
+ estimator_rs=rs_vals,
+ ohlc_hurst_pk=ohlc_hurst["pk"],
+ ohlc_hurst_gk=ohlc_hurst["gk"],
+ ohlc_hurst_rs=ohlc_hurst["rs"],
+ )
+
+
+@hurst_router.get("/hurst-vasicek")
+async def hurst_vasicek(
+ kappa: float = Query(10.0, description="Mean reversion speed", ge=1.0, le=500.0),
+) -> HurstVasicekResponse:
+ from quantflow.utils.dates import start_of_day
+
+ p = Vasicek(kappa=kappa)
+ paths = p.sample(n=1, time_horizon=1, time_steps=24 * 60 * 6)
+ hurst_real = float(paths.hurst_exponent())
+
+ pdf = pd.DataFrame(
+ {"0": paths.path(0)}, index=paths.dates(start=start_of_day())
+ ).reset_index()
+
+ ohlc_h = _ohlc_hurst(pdf, "0", VASICEK_PERIODS)
+
+ dates = [str(d) for d in pdf.iloc[:, 0]]
+ values = [float(v) for v in pdf.iloc[:, 1]]
+
+ return HurstVasicekResponse(
+ dates=dates,
+ values=values,
+ hurst_realized=hurst_real,
+ hurst_pk=ohlc_h["pk"],
+ hurst_gk=ohlc_h["gk"],
+ hurst_rs=ohlc_h["rs"],
+ )
diff --git a/app/api/rates.py b/app/api/rates.py
new file mode 100644
index 00000000..b4549b0e
--- /dev/null
+++ b/app/api/rates.py
@@ -0,0 +1,57 @@
+from typing import cast
+
+import numpy as np
+from fastapi import APIRouter, Query
+from pydantic import BaseModel, Field
+
+from quantflow.rates import AnyYieldCurve, YieldCurve
+
+rates_router = APIRouter()
+
+
+class YieldCurveResponse(BaseModel):
+ curve: AnyYieldCurve = Field(description="The fitted yield curve")
+ ttm: list[float] = Field(
+ description="List of time to maturities for the fitted curve"
+ )
+ rates: list[float] = Field(description="List of rates for the fitted curve")
+
+
+@rates_router.get("/yield-curve")
+async def yield_curve(
+ ttm: list[float] = Query(
+ ..., description="List of time to maturities corresponding to the rates"
+ ),
+ rates: list[float] = Query(
+ ..., description="List of rates to fit the Nelson-Siegel model"
+ ),
+ curve_type: str = Query(
+ "nelson_siegel",
+ description="Type of curve to fit",
+ enum=list(YieldCurve.curve_types()),
+ ),
+ max_ttm: float | None = Query(
+ None,
+ description=(
+ "Maximum time to maturity to consider for returning"
+ " the fitted curve. If not provided, the curve will be returned for all "
+ "time to maturities."
+ ),
+ ),
+ num_points: int = Query(
+ 100,
+ description=(
+ "Number of points to return for the fitted curve. Only used if max_ttm is "
+ "provided. Otherwise, the curve will be returned for all time "
+ "to maturities."
+ ),
+ ),
+) -> YieldCurveResponse:
+ curve_class = YieldCurve.get_curve_class(curve_type)
+ if curve_class is None:
+ raise ValueError(f"Unsupported curve type: {curve_type}")
+ curve = cast(AnyYieldCurve, curve_class.calibrate(ttm, rates))
+ if max_ttm is not None:
+ ttm = list(np.geomspace(1 / 365, max_ttm, num_points))
+ rates = [float(r) for r in np.atleast_1d(curve.continuously_compounded_rate(ttm))]
+ return YieldCurveResponse(curve=curve, ttm=ttm, rates=rates)
diff --git a/app/api/sampling.py b/app/api/sampling.py
new file mode 100644
index 00000000..f8050579
--- /dev/null
+++ b/app/api/sampling.py
@@ -0,0 +1,74 @@
+import numpy as np
+from fastapi import APIRouter, Query
+from pydantic import BaseModel, Field
+
+from quantflow.sp.ou import Vasicek
+from quantflow.sp.poisson import PoissonProcess
+from quantflow.utils import bins
+from quantflow.utils.distributions import DoubleExponential
+
+sampling_router = APIRouter()
+
+
+class SamplingResponse(BaseModel):
+ x: list[float] = Field(description="Bin centers")
+ simulation: list[float] = Field(description="Simulated PDF values")
+ analytical: list[float] = Field(description="Analytical PDF values")
+
+
+class DoubleExponentialResponse(SamplingResponse):
+ char_x: list[float] = Field(description="X values from characteristic function")
+ char_y: list[float] = Field(description="Y values from characteristic function")
+
+
+@sampling_router.get("/gaussian-sampling")
+async def gaussian_sampling(
+ kappa: float = Query(1.0, description="Mean reversion speed", ge=0.1, le=5.0),
+ samples: int = Query(1000, description="Number of sample paths", ge=100, le=10000),
+) -> SamplingResponse:
+ pr = Vasicek(rate=0.5, kappa=kappa)
+ paths = pr.sample(samples, 1, 1000)
+ pdf = paths.pdf(num_bins=50)
+ x = [float(v) for v in pdf.index]
+ simulation = [float(v) for v in pdf["pdf"]]
+ analytical = [float(v) for v in np.atleast_1d(pr.marginal(1).pdf(pdf.index))]
+ return SamplingResponse(x=x, simulation=simulation, analytical=analytical)
+
+
+@sampling_router.get("/poisson-sampling")
+async def poisson_sampling(
+ intensity: float = Query(2.0, description="Poisson intensity", ge=2.0, le=5.0),
+ samples: int = Query(1000, description="Number of sample paths", ge=100, le=10000),
+) -> SamplingResponse:
+ pr = PoissonProcess(intensity=intensity)
+ paths = pr.sample(samples, 1, 1000)
+ pdf = paths.pdf(delta=1)
+ x = [float(v) for v in pdf.index]
+ simulation = [float(v) for v in pdf["pdf"]]
+ analytical = [float(v) for v in np.atleast_1d(pr.marginal(1).pdf(pdf.index))]
+ return SamplingResponse(x=x, simulation=simulation, analytical=analytical)
+
+
+@sampling_router.get("/double-exponential-sampling")
+async def double_exponential_sampling(
+ log_kappa: float = Query(
+ 0.1, description="Log of asymmetry parameter", ge=-2.0, le=2.0
+ ),
+ samples: int = Query(1000, description="Number of samples", ge=100, le=10000),
+) -> DoubleExponentialResponse:
+ pr = DoubleExponential.from_moments(kappa=np.exp(log_kappa))
+ data = pr.sample(samples)
+ pdf = bins.pdf(data, num_bins=50, symmetric=0)
+ x = [float(v) for v in pdf.index]
+ simulation = [float(v) for v in pdf["pdf"]]
+ analytical = [float(v) for v in np.atleast_1d(pr.pdf(pdf.index))]
+ cha = pr.pdf_from_characteristic()
+ char_x = [float(v) for v in cha.x]
+ char_y = [float(v) for v in cha.y]
+ return DoubleExponentialResponse(
+ x=x,
+ simulation=simulation,
+ analytical=analytical,
+ char_x=char_x,
+ char_y=char_y,
+ )
diff --git a/app/api/smoother.py b/app/api/smoother.py
new file mode 100644
index 00000000..c499376b
--- /dev/null
+++ b/app/api/smoother.py
@@ -0,0 +1,50 @@
+from datetime import date
+
+from fastapi import APIRouter, Query
+from pydantic import BaseModel, Field
+
+from quantflow.data.fmp import FMP
+from quantflow.ta.ewma import EWMA
+from quantflow.ta.supersmoother import SuperSmoother
+
+smoother_router = APIRouter()
+
+
+class SmootherPoint(BaseModel):
+ date: str = Field(description="Date string")
+ close: float = Field(description="Close price")
+ supersmoother: float = Field(description="SuperSmoother filtered value")
+ ewma: float = Field(description="EWMA filtered value")
+
+
+class SmootherResponse(BaseModel):
+ data: list[SmootherPoint] = Field(description="Time series with smoothed values")
+
+
+@smoother_router.get("/supersmoother")
+async def supersmoother(
+ period: int = Query(10, description="Filter period", ge=2, le=100),
+ symbol: str = Query("BTCUSD", description="Ticker symbol"),
+) -> SmootherResponse:
+ async with FMP() as fmp:
+ prices = await fmp.prices(symbol, from_date=date(2024, 1, 1))
+ sm = (
+ prices[["date", "close"]]
+ .copy()
+ .sort_values("date", ascending=True)
+ .reset_index(drop=True)
+ )
+ smoother = SuperSmoother(period=period)
+ ewma = EWMA(period=period)
+ sm["supersmoother"] = sm["close"].apply(smoother.update)
+ sm["ewma"] = sm["close"].apply(ewma.update)
+ data = [
+ SmootherPoint(
+ date=str(row["date"]),
+ close=float(row["close"]),
+ supersmoother=float(row["supersmoother"]),
+ ewma=float(row["ewma"]),
+ )
+ for _, row in sm.iterrows()
+ ]
+ return SmootherResponse(data=data)
diff --git a/app/api/status.py b/app/api/status.py
new file mode 100644
index 00000000..6df04ed0
--- /dev/null
+++ b/app/api/status.py
@@ -0,0 +1,13 @@
+from fastapi import APIRouter
+
+status_router = APIRouter()
+
+
+@status_router.get("/status")
+async def service_status() -> dict:
+ return {"status": "ok"}
+
+
+@status_router.get("/ready")
+async def service_ready() -> dict:
+ return {"status": "ok"}
diff --git a/app/api/volatility.py b/app/api/volatility.py
new file mode 100644
index 00000000..f2bda01d
--- /dev/null
+++ b/app/api/volatility.py
@@ -0,0 +1,89 @@
+from functools import partial
+from typing import Any
+
+import numpy as np
+from fastapi import APIRouter, Query
+from pydantic import BaseModel, Field
+
+from quantflow.data.deribit import Deribit
+from quantflow.data.yahoo import Yahoo
+from quantflow.options.inputs import VolSurfaceInputs
+from quantflow.options.surface import OptionInfo, VolSurfaceLoader
+from quantflow.rates.nelson_siegel import NelsonSiegel
+
+from .deps import RedisCache, RedisDep
+from .rates import YieldCurveResponse
+
+volatility_router = APIRouter()
+
+DERIBIT_ASSETS = {"BTC", "ETH"}
+YAHOO_ASSETS = {"SPY", "AAPL", "NVDA"}
+ALL_ASSETS = sorted(DERIBIT_ASSETS) + sorted(YAHOO_ASSETS)
+
+
+class VolSurfaceResponse(BaseModel):
+ inputs: VolSurfaceInputs = Field(description="Volatility surface inputs")
+ options: list[OptionInfo] = Field(
+ description="List of option info with implied volatilities"
+ )
+ quote_curve: YieldCurveResponse = Field(
+ description="Quote discount curve with rates"
+ )
+ asset_curve: YieldCurveResponse = Field(
+ description="Asset discount curve with rates"
+ )
+
+
+@volatility_router.get("/volatility-surface")
+async def volatility_surface(
+ redis: RedisDep,
+ asset: str = Query(
+ "BTC",
+ description="Asset symbol",
+ enum=ALL_ASSETS,
+ ),
+) -> VolSurfaceResponse:
+ cache = RedisCache(
+ redis=redis,
+ Model=VolSurfaceResponse,
+ key=f"vol_surface:{asset}",
+ )
+ return await cache.from_cache(partial(_volatility_surface, asset))
+
+
+def _curve_response(curve: Any, max_ttm: float) -> YieldCurveResponse:
+ ttm = list(np.linspace(1 / 365, max_ttm, 50))
+ rates = [float(r) for r in np.atleast_1d(curve.continuously_compounded_rate(ttm))]
+ return YieldCurveResponse(curve=curve, ttm=ttm, rates=rates) # type: ignore[arg-type]
+
+
+async def _load_surface(asset: str) -> VolSurfaceLoader:
+ if asset in DERIBIT_ASSETS:
+ async with Deribit() as cli:
+ loader = await cli.volatility_surface_loader(asset.lower(), inverse=True)
+ loader.calibrate_curves(quote_curve=NelsonSiegel)
+ return loader
+ else:
+ async with Yahoo() as cli:
+ loader = await cli.volatility_surface_loader(asset)
+ loader.calibrate_curves(quote_curve=NelsonSiegel)
+ return loader
+
+
+async def _volatility_surface(asset: str) -> VolSurfaceResponse:
+ loader = await _load_surface(asset)
+ surface = loader.surface()
+ surface.bs()
+ surface.disable_outliers()
+
+ inputs = surface.inputs(converged=True)
+ options = [op.info() for op in surface.option_prices(converged=True)]
+
+ max_ttm = max(float(op.ttm) for op in options) if options else 1.0
+
+ return VolSurfaceResponse(
+ inputs=inputs,
+ options=options,
+ quote_curve=_curve_response(surface.quote_curve, max_ttm),
+ asset_curve=_curve_response(surface.asset_curve, max_ttm),
+ )
diff --git a/app/cointegration.py b/app/cointegration.py
deleted file mode 100644
index b6e9c9ba..00000000
--- a/app/cointegration.py
+++ /dev/null
@@ -1,164 +0,0 @@
-import marimo
-
-__generated_with = "0.19.7"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- # Cointegration Analysis of Cryptocurrencies
- """)
- return
-
-
-@app.cell
-def _(mo):
- from quantflow.data.fmp import FMP
-
- frequency = mo.ui.dropdown(
- options={x.name.replace("_", " "): x.value for x in FMP.freq},
- value="daily",
- label="Frequency",
- )
- frequency
- return FMP, frequency
-
-
-@app.cell
-async def _(FMP, frequency):
- async with FMP() as cli:
- btc = await cli.prices("BTCUSD", convert_to_date=True, frequency=frequency.value)
- eth = await cli.prices("ETHUSD", convert_to_date=True, frequency=frequency.value)
- sol = await cli.prices("SOLUSD", convert_to_date=True, frequency=frequency.value)
-
- btc = btc.set_index("date")
- eth = eth.set_index("date")
- sol = sol.set_index("date")
- return btc, eth, sol
-
-
-@app.cell
-def _(btc, eth, sol):
- # Merge the three price series on the date
- prices_3 = btc[['close']].join(eth[['close']], lsuffix='_btc', rsuffix='_eth').join(sol[['close']])
- prices_3.columns = ['btc_close', 'eth_close', 'sol_close']
- prices_3 = prices_3.dropna()
- prices_3
- return (prices_3,)
-
-
-@app.cell
-def _(prices_3):
- import numpy as np
- log_prices_3 = np.log(prices_3)
- return (log_prices_3,)
-
-
-@app.cell
-def _(log_prices_3):
- from statsmodels.tsa.vector_ar.vecm import coint_johansen
-
- # Perform the Johansen cointegration test
- # We choose det_order=0 for a constant term in the cointegrating relation
- # and k_ar_diff=1 for the number of lags in the VAR model.
- johansen_result = coint_johansen(log_prices_3, det_order=0, k_ar_diff=1)
- deltas = johansen_result.evec[:, 0]
- deltas
-
- return (deltas,)
-
-
-@app.cell
-def _(deltas, log_prices_3):
- residuals = log_prices_3.dot(deltas)
- residual_mean = residuals.mean()
- residuals = residuals - residual_mean
- return (residuals,)
-
-
-@app.cell
-def _(residuals):
- import pandas as pd
- import altair as alt
-
-
- # Create a DataFrame for plotting
- residuals_df = pd.DataFrame({
- "date": residuals.index,
- "residual": residuals.values
- })
-
- # Create the base chart
- base = alt.Chart(residuals_df).encode(
- x=alt.X('date:T', title='Date')
- ).properties(
- title='First Cointegration Residual of BTC, ETH, and SOL',
- width='container'
- )
-
- # Create the line chart for the residuals
- line = base.mark_line(color='steelblue').encode(
- y=alt.Y('residual:Q', title='Residual (Spread)'),
- tooltip=[
- alt.Tooltip('date:T', title='Date'),
- alt.Tooltip('residual:Q', title='Residual', format='.4f')
- ]
- )
-
- line.interactive()
- return
-
-
-@app.cell
-def _():
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- ### Why Pick the Largest Eigenvalue?
-
- In the Johansen cointegration test, the eigenvalues ($\lambda$) are sorted in descending order, and each one corresponds to a different potential cointegrating vector.
-
- **The magnitude of the eigenvalue represents the strength and stability of the corresponding cointegrating relationship.**
-
- 1. **Strongest Relationship:** The largest eigenvalue corresponds to the linear combination of the time series that is "most stationary." This means the resulting spread (the residuals) has the strongest tendency to revert to its mean over time.
- 2. **Statistical Significance:** The test statistics used in the Johansen test (the Trace test and the Maximum Eigenvalue test) are functions of these eigenvalues. These tests help us determine how many statistically significant cointegrating relationships exist, starting from the one associated with the largest eigenvalue.
- 3. **Practical Application:** For applications like pairs trading, we want to find the most reliable and predictable long-run equilibrium relationship. By choosing the cointegrating vector associated with the largest eigenvalue, we are selecting the portfolio of assets whose value is most likely to be mean-reverting, making it the best candidate for a statistical arbitrage strategy.
-
- In short, picking the largest eigenvalue is equivalent to picking the **most significant and stable cointegrating vector** found by the test.
- """)
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- ### Should You Use Log Prices?
-
- **Yes, using log prices is generally recommended** for cointegration analysis in finance. Here is why:
-
- 1. **Percentage vs. Absolute Changes:** Log-prices allow the model to work with **relative percentage changes** rather than absolute dollar amounts. This is crucial when assets trade at vastly different scales (e.g., BTC at \$60k vs. SOL at \$150).
- 2. **Variance Stabilization:** Financial time series often exhibit heteroscedasticity, meaning volatility increases as the price level rises. Log transformation helps stabilize this variance, making the data more suitable for linear statistical models.
- 3. **Linearization:** Standard cointegration tests (like Johansen or Engle-Granger) look for linear combinations. Real-world economic relationships between assets are often multiplicative (based on ratios); taking logarithms converts these into linear additive relationships.
- """)
- return
-
-
-@app.cell
-def _():
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/app/double_exponential_sampling.py b/app/double_exponential_sampling.py
deleted file mode 100644
index 4c95adfd..00000000
--- a/app/double_exponential_sampling.py
+++ /dev/null
@@ -1,81 +0,0 @@
-import marimo
-
-__generated_with = "0.19.7"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- # Double Exponential Sampling
-
- Here we sample the Asymmetric Laplace distribution, a.k.a double exponential
- We will set the mean to 0 and the variance to 1 so that the distribution is fully determined by the asymmetric parameter $\kappa$.
-
- ```python
- from quantflow.utils.distributions import DoubleExponential
- ```
- """)
- return
-
-
-@app.cell
-def _():
- from quantflow.utils.distributions import DoubleExponential
- from quantflow.utils import bins
- import numpy as np
-
- def simulate_double_exponential(log_kappa: float, samples: int):
- pr = DoubleExponential.from_moments(kappa=np.exp(log_kappa))
- data = pr.sample(samples)
- pdf = bins.pdf(data, num_bins=50, symmetric=0)
- pdf["simulation"] = pdf["pdf"]
- pdf["analytical"] = pr.pdf(pdf.index)
- cha = pr.pdf_from_characteristic()
- return pdf, cha
- return (simulate_double_exponential,)
-
-
-@app.cell
-def _(mo):
- samples = mo.ui.slider(start=100, stop=10000, step=100, value=1000, debounce=True, label="Samples")
- log_kappa = mo.ui.slider(start=-2, stop=2, step=0.1, value=0.1, debounce=True, label="Asymmetry - $\log \kappa$")
-
- controls = mo.hstack([samples, log_kappa], justify="start")
- controls
- return log_kappa, samples
-
-
-@app.cell
-def _(log_kappa, samples, simulate_double_exponential):
- df, cha = simulate_double_exponential(log_kappa.value, samples.value)
- return cha, df
-
-
-@app.cell
-def _(cha, df):
- import plotly.graph_objects as go
-
- simulation = go.Bar(x=df.index, y=df["simulation"], name="simulation")
- analytical = go.Scatter(x=df.index, y=df["analytical"], name="analytical")
- characteristic = go.Scatter(x=cha.x, y=cha.y, name="from characteristic", mode="markers")
- fig = go.Figure(data=[simulation, characteristic, analytical])
- fig
- return
-
-
-@app.cell
-def _():
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/app/frontend/observablehq.config.js b/app/frontend/observablehq.config.js
new file mode 100644
index 00000000..b678970e
--- /dev/null
+++ b/app/frontend/observablehq.config.js
@@ -0,0 +1,30 @@
+import {readFileSync} from "node:fs";
+import {resolve, dirname} from "node:path";
+import {fileURLToPath} from "node:url";
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+const apiOrigin = process.env.QUANTFLOW_API_ORIGIN || "";
+const headSnippet = readFileSync(resolve(__dirname, "../../docs/assets/logos/head-snippet.html"), "utf-8")
+ .trim()
+ .replace(/href="\//g, 'href="https://quantflow.quantmind.com/');
+
+export default {
+ title: "Quantflow Examples",
+ root: "src",
+ output: "../examples",
+ base: "/examples",
+ head: `\n${headSnippet}`,
+ style: "style.css",
+ pages: [{name: "Volatility Surface", path: "/volatility-surface"}, {name: "Yield Curve", path: "/yield-curve"}, {name: "Sampling", path: "/sampling"}, {name: "SuperSmoother", path: "/supersmoother"}, {name: "Cointegration", path: "/cointegration"}, {name: "Hurst Exponent", path: "/hurst"}, {name: "Heston Vol Surface", path: "/heston-vol-surface"}],
+ header: `
+
+ `,
+ footer: "Quantflow live examples"
+};
diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json
new file mode 100644
index 00000000..3e3a46da
--- /dev/null
+++ b/app/frontend/package-lock.json
@@ -0,0 +1,5062 @@
+{
+ "name": "quantflow-examples",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "quantflow-examples",
+ "dependencies": {
+ "@observablehq/framework": "^1.13.4",
+ "@observablehq/plot": "^0.6.17",
+ "d3": "^7.9.0"
+ },
+ "devDependencies": {
+ "concurrently": "^9.2.1",
+ "typescript": "^5.9.3"
+ }
+ },
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz",
+ "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==",
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ }
+ },
+ "node_modules/@asamuzakjp/dom-selector": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz",
+ "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "bidi-js": "^1.0.3",
+ "css-tree": "^2.3.1",
+ "is-potential-custom-element-name": "^1.0.1"
+ }
+ },
+ "node_modules/@clack/core": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.5.tgz",
+ "integrity": "sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "sisteransi": "^1.0.5"
+ }
+ },
+ "node_modules/@clack/prompts": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz",
+ "integrity": "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==",
+ "bundleDependencies": [
+ "is-unicode-supported"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@clack/core": "^0.3.3",
+ "is-unicode-supported": "*",
+ "picocolors": "^1.0.0",
+ "sisteransi": "^1.0.5"
+ }
+ },
+ "node_modules/@clack/prompts/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
+ "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz",
+ "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
+ "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.1.0",
+ "@csstools/css-calc": "^2.1.4"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
+ "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
+ "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
+ "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
+ "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
+ "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
+ "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
+ "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
+ "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
+ "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
+ "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
+ "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
+ "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
+ "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
+ "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
+ "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
+ "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
+ "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
+ "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
+ "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
+ "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
+ "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
+ "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
+ "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
+ "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
+ "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.4"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@observablehq/framework": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/@observablehq/framework/-/framework-1.13.4.tgz",
+ "integrity": "sha512-/qSEsd1R0n7wgVQHBpF8slShQhB2TDAWma1AllddYb3e1T72mm6dMSL3PaVUNx3Tx2lM3wXjPxcAH431yvdTHw==",
+ "license": "ISC",
+ "dependencies": {
+ "@clack/prompts": "^0.7.0",
+ "@observablehq/inputs": "^0.12.0",
+ "@observablehq/inspector": "^5.0.1",
+ "@observablehq/runtime": "^6.0.0",
+ "@rollup/plugin-commonjs": "^25.0.7",
+ "@rollup/plugin-json": "^6.1.0",
+ "@rollup/plugin-node-resolve": "^15.2.3",
+ "@rollup/plugin-virtual": "^3.0.2",
+ "@sindresorhus/slugify": "^2.2.1",
+ "acorn": "^8.11.2",
+ "acorn-walk": "^8.3.0",
+ "ci-info": "^4.0.0",
+ "cross-spawn": "^7.0.3",
+ "d3-array": "^3.2.4",
+ "d3-hierarchy": "^3.1.2",
+ "esbuild": "^0.27.3",
+ "fast-array-diff": "^1.1.0",
+ "fast-deep-equal": "^3.1.3",
+ "glob": "^10.3.10",
+ "gray-matter": "^4.0.3",
+ "he": "^1.2.0",
+ "highlight.js": "^11.8.0",
+ "is-docker": "^3.0.0",
+ "is-wsl": "^3.1.0",
+ "jsdom": "^23.2.0",
+ "jszip": "^3.10.1",
+ "markdown-it": "^14.0.0",
+ "markdown-it-anchor": "^8.6.7",
+ "mime": "^4.0.0",
+ "minisearch": "^6.3.0",
+ "open": "^10.1.0",
+ "picocolors": "^1.1.1",
+ "pkg-dir": "^8.0.0",
+ "resolve.exports": "^2.0.2",
+ "rollup": "^4.6.0",
+ "rollup-plugin-esbuild": "^6.1.0",
+ "semver": "^7.5.4",
+ "send": "^0.19.0",
+ "tar": "^7.5.9",
+ "tar-stream": "^3.1.6",
+ "tsx": "^4.7.1",
+ "untildify": "^5.0.0",
+ "wrap-ansi": "^9.0.0",
+ "ws": "^8.14.2"
+ },
+ "bin": {
+ "observable": "dist/bin/observable.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@observablehq/inputs": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@observablehq/inputs/-/inputs-0.12.0.tgz",
+ "integrity": "sha512-1ln7+PYe31cMx00K9awVbiCscQM0THnXRJ/AEzd+FfTA25Gu3KRWknAGECxU49QzHyKqiXpLl5LCg3XtYm70eQ==",
+ "license": "ISC",
+ "dependencies": {
+ "htl": "^0.3.1",
+ "isoformat": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=14.5.0"
+ }
+ },
+ "node_modules/@observablehq/inspector": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@observablehq/inspector/-/inspector-5.0.1.tgz",
+ "integrity": "sha512-euwWxwDa6KccU4G3D2JBD7GI/2McJh/z7HHEzJKbj2TDa7zhI37eTbTxiwE9rgTWBagvVBel+hAmnJRYBYOv2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "isoformat": "^0.2.0"
+ }
+ },
+ "node_modules/@observablehq/plot": {
+ "version": "0.6.17",
+ "resolved": "https://registry.npmjs.org/@observablehq/plot/-/plot-0.6.17.tgz",
+ "integrity": "sha512-/qaXP/7mc4MUS0s4cPPFASDRjtsWp85/TbfsciqDgU1HwYixbSbbytNuInD8AcTYC3xaxACgVX06agdfQy9W+g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3": "^7.9.0",
+ "interval-tree-1d": "^1.0.0",
+ "isoformat": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@observablehq/runtime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@observablehq/runtime/-/runtime-6.0.0.tgz",
+ "integrity": "sha512-t3UXP69O0JK20HY/neF4/DDDSDorwo92As806Y1pNTgTmj1NtoPyVpesYzfH31gTFOFrXC2cArV+wLpebMk9eA==",
+ "license": "ISC"
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs": {
+ "version": "25.0.8",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz",
+ "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==",
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "commondir": "^1.0.1",
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.30.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.68.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": {
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
+ "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@rollup/plugin-json": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
+ "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-node-resolve": {
+ "version": "15.3.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz",
+ "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==",
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.78.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-virtual": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz",
+ "integrity": "sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
+ "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz",
+ "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz",
+ "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz",
+ "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz",
+ "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz",
+ "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz",
+ "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz",
+ "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz",
+ "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz",
+ "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz",
+ "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz",
+ "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz",
+ "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz",
+ "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz",
+ "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz",
+ "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz",
+ "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz",
+ "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz",
+ "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz",
+ "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz",
+ "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz",
+ "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz",
+ "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz",
+ "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz",
+ "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz",
+ "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sindresorhus/slugify": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz",
+ "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/transliterate": "^1.0.0",
+ "escape-string-regexp": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@sindresorhus/transliterate": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz",
+ "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "license": "MIT"
+ },
+ "node_modules/acorn": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.5",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
+ "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/b4a": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz",
+ "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react-native-b4a": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-b4a": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/bare-events": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.3.tgz",
+ "integrity": "sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "bare-abort-controller": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/bare-fs": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz",
+ "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-events": "^2.5.4",
+ "bare-path": "^3.0.0",
+ "bare-stream": "^2.6.4",
+ "bare-url": "^2.2.2",
+ "fast-fifo": "^1.3.2"
+ },
+ "engines": {
+ "bare": ">=1.16.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/bare-os": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.1.tgz",
+ "integrity": "sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "bare": ">=1.14.0"
+ }
+ },
+ "node_modules/bare-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
+ "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-os": "^3.0.1"
+ }
+ },
+ "node_modules/bare-stream": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.1.tgz",
+ "integrity": "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "streamx": "^2.25.0",
+ "teex": "^1.0.1"
+ },
+ "peerDependencies": {
+ "bare-abort-controller": "*",
+ "bare-buffer": "*",
+ "bare-events": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ },
+ "bare-buffer": {
+ "optional": true
+ },
+ "bare-events": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/bare-url": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.3.tgz",
+ "integrity": "sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-path": "^3.0.0"
+ }
+ },
+ "node_modules/bidi-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz",
+ "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==",
+ "license": "MIT",
+ "dependencies": {
+ "require-from-string": "^2.0.2"
+ }
+ },
+ "node_modules/binary-search-bounds": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz",
+ "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==",
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
+ "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/bundle-name": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
+ "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "run-applescript": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "license": "MIT"
+ },
+ "node_modules/concurrently": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz",
+ "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "4.1.2",
+ "rxjs": "7.8.2",
+ "shell-quote": "1.8.3",
+ "supports-color": "8.1.1",
+ "tree-kill": "1.2.2",
+ "yargs": "17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/cssstyle": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz",
+ "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@asamuzakjp/css-color": "^3.2.0",
+ "rrweb-cssom": "^0.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/cssstyle/node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "license": "MIT"
+ },
+ "node_modules/d3": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
+ "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "3",
+ "d3-axis": "3",
+ "d3-brush": "3",
+ "d3-chord": "3",
+ "d3-color": "3",
+ "d3-contour": "4",
+ "d3-delaunay": "6",
+ "d3-dispatch": "3",
+ "d3-drag": "3",
+ "d3-dsv": "3",
+ "d3-ease": "3",
+ "d3-fetch": "3",
+ "d3-force": "3",
+ "d3-format": "3",
+ "d3-geo": "3",
+ "d3-hierarchy": "3",
+ "d3-interpolate": "3",
+ "d3-path": "3",
+ "d3-polygon": "3",
+ "d3-quadtree": "3",
+ "d3-random": "3",
+ "d3-scale": "4",
+ "d3-scale-chromatic": "3",
+ "d3-selection": "3",
+ "d3-shape": "3",
+ "d3-time": "3",
+ "d3-time-format": "4",
+ "d3-timer": "3",
+ "d3-transition": "3",
+ "d3-zoom": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-axis": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-brush": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+ "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "3",
+ "d3-transition": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-chord": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+ "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-contour": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+ "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-delaunay": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+ "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+ "license": "ISC",
+ "dependencies": {
+ "delaunator": "5"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dispatch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-drag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-selection": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dsv": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+ "license": "ISC",
+ "dependencies": {
+ "commander": "7",
+ "iconv-lite": "0.6",
+ "rw": "1"
+ },
+ "bin": {
+ "csv2json": "bin/dsv2json.js",
+ "csv2tsv": "bin/dsv2dsv.js",
+ "dsv2dsv": "bin/dsv2dsv.js",
+ "dsv2json": "bin/dsv2json.js",
+ "json2csv": "bin/json2dsv.js",
+ "json2dsv": "bin/json2dsv.js",
+ "json2tsv": "bin/json2dsv.js",
+ "tsv2csv": "bin/dsv2dsv.js",
+ "tsv2json": "bin/dsv2json.js"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-fetch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+ "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dsv": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+ "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-geo": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+ "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-polygon": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+ "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-random": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+ "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale-chromatic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+ "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-selection": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-transition": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-dispatch": "1 - 3",
+ "d3-ease": "1 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "d3-selection": "2 - 3"
+ }
+ },
+ "node_modules/d3-zoom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "2 - 3",
+ "d3-transition": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "license": "MIT"
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/default-browser": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
+ "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
+ "license": "MIT",
+ "dependencies": {
+ "bundle-name": "^4.1.0",
+ "default-browser-id": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-browser-id": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
+ "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/delaunator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
+ "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
+ "license": "ISC",
+ "dependencies": {
+ "robust-predicates": "^3.0.2"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "license": "MIT"
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "license": "MIT"
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz",
+ "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.7",
+ "@esbuild/android-arm": "0.27.7",
+ "@esbuild/android-arm64": "0.27.7",
+ "@esbuild/android-x64": "0.27.7",
+ "@esbuild/darwin-arm64": "0.27.7",
+ "@esbuild/darwin-x64": "0.27.7",
+ "@esbuild/freebsd-arm64": "0.27.7",
+ "@esbuild/freebsd-x64": "0.27.7",
+ "@esbuild/linux-arm": "0.27.7",
+ "@esbuild/linux-arm64": "0.27.7",
+ "@esbuild/linux-ia32": "0.27.7",
+ "@esbuild/linux-loong64": "0.27.7",
+ "@esbuild/linux-mips64el": "0.27.7",
+ "@esbuild/linux-ppc64": "0.27.7",
+ "@esbuild/linux-riscv64": "0.27.7",
+ "@esbuild/linux-s390x": "0.27.7",
+ "@esbuild/linux-x64": "0.27.7",
+ "@esbuild/netbsd-arm64": "0.27.7",
+ "@esbuild/netbsd-x64": "0.27.7",
+ "@esbuild/openbsd-arm64": "0.27.7",
+ "@esbuild/openbsd-x64": "0.27.7",
+ "@esbuild/openharmony-arm64": "0.27.7",
+ "@esbuild/sunos-x64": "0.27.7",
+ "@esbuild/win32-arm64": "0.27.7",
+ "@esbuild/win32-ia32": "0.27.7",
+ "@esbuild/win32-x64": "0.27.7"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-array-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-array-diff/-/fast-array-diff-1.1.0.tgz",
+ "integrity": "sha512-muSPyZa/yHCoDQhah9th57AmLENB1nekbrUoLAqOpQXdl1Kw8VbH24Syl5XLscaQJlx7KRU95bfTDPvVB5BJvw==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "license": "MIT"
+ },
+ "node_modules/find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
+ "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz",
+ "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==",
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gray-matter": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
+ "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-yaml": "^3.13.1",
+ "kind-of": "^6.0.2",
+ "section-matter": "^1.0.0",
+ "strip-bom-string": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "11.11.1",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
+ "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/htl": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/htl/-/htl-0.3.1.tgz",
+ "integrity": "sha512-1LBtd+XhSc+++jpOOt0lCcEycXs/zTQSupOISnVAUmvGBpV7DH+C2M6hwV7zWYfpTMMg9ch4NO0lHiOTAMHdVA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "license": "MIT"
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/interval-tree-1d": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/interval-tree-1d/-/interval-tree-1d-1.0.4.tgz",
+ "integrity": "sha512-wY8QJH+6wNI0uh4pDQzMvl+478Qh7Rl4qLmqiluxALlNvl+I+o5x38Pw3/z7mDPTPS1dQalZJXsmbvxx5gclhQ==",
+ "license": "MIT",
+ "dependencies": {
+ "binary-search-bounds": "^2.0.0"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.2",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
+ "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
+ "license": "MIT"
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "license": "MIT"
+ },
+ "node_modules/is-reference": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
+ "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
+ "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-inside-container": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/isoformat": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/isoformat/-/isoformat-0.2.1.tgz",
+ "integrity": "sha512-tFLRAygk9NqrRPhJSnNGh7g7oaVWDwR0wKh/GM2LgmPa50Eg4UfyaCO4I8k6EqJHl1/uh2RAD6g06n5ygEnrjQ==",
+ "license": "ISC"
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdom": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz",
+ "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@asamuzakjp/dom-selector": "^2.0.1",
+ "cssstyle": "^4.0.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.4.3",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.2",
+ "is-potential-custom-element-name": "^1.0.1",
+ "parse5": "^7.1.2",
+ "rrweb-cssom": "^0.6.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.1.3",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0",
+ "ws": "^8.16.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^2.11.2"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "license": "MIT",
+ "dependencies": {
+ "uc.micro": "^2.0.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/markdown-it": {
+ "version": "14.1.1",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz",
+ "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.mjs"
+ }
+ },
+ "node_modules/markdown-it-anchor": {
+ "version": "8.6.7",
+ "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
+ "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
+ "license": "Unlicense",
+ "peerDependencies": {
+ "@types/markdown-it": "*",
+ "markdown-it": "*"
+ }
+ },
+ "node_modules/markdown-it/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "license": "MIT"
+ },
+ "node_modules/mime": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz",
+ "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==",
+ "funding": [
+ "https://github.com/sponsors/broofa"
+ ],
+ "license": "MIT",
+ "bin": {
+ "mime": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minisearch": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz",
+ "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==",
+ "license": "MIT"
+ },
+ "node_modules/minizlib": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz",
+ "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/open": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
+ "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
+ "license": "MIT",
+ "dependencies": {
+ "default-browser": "^5.2.1",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "wsl-utils": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5/node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz",
+ "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "find-up-simple": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "license": "MIT"
+ },
+ "node_modules/psl": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+ "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/lupomontero"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "license": "MIT"
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "license": "MIT"
+ },
+ "node_modules/resolve": {
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/robust-predicates": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",
+ "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==",
+ "license": "Unlicense"
+ },
+ "node_modules/rollup": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.4.tgz",
+ "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.60.4",
+ "@rollup/rollup-android-arm64": "4.60.4",
+ "@rollup/rollup-darwin-arm64": "4.60.4",
+ "@rollup/rollup-darwin-x64": "4.60.4",
+ "@rollup/rollup-freebsd-arm64": "4.60.4",
+ "@rollup/rollup-freebsd-x64": "4.60.4",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.60.4",
+ "@rollup/rollup-linux-arm-musleabihf": "4.60.4",
+ "@rollup/rollup-linux-arm64-gnu": "4.60.4",
+ "@rollup/rollup-linux-arm64-musl": "4.60.4",
+ "@rollup/rollup-linux-loong64-gnu": "4.60.4",
+ "@rollup/rollup-linux-loong64-musl": "4.60.4",
+ "@rollup/rollup-linux-ppc64-gnu": "4.60.4",
+ "@rollup/rollup-linux-ppc64-musl": "4.60.4",
+ "@rollup/rollup-linux-riscv64-gnu": "4.60.4",
+ "@rollup/rollup-linux-riscv64-musl": "4.60.4",
+ "@rollup/rollup-linux-s390x-gnu": "4.60.4",
+ "@rollup/rollup-linux-x64-gnu": "4.60.4",
+ "@rollup/rollup-linux-x64-musl": "4.60.4",
+ "@rollup/rollup-openbsd-x64": "4.60.4",
+ "@rollup/rollup-openharmony-arm64": "4.60.4",
+ "@rollup/rollup-win32-arm64-msvc": "4.60.4",
+ "@rollup/rollup-win32-ia32-msvc": "4.60.4",
+ "@rollup/rollup-win32-x64-gnu": "4.60.4",
+ "@rollup/rollup-win32-x64-msvc": "4.60.4",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup-plugin-esbuild": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-6.2.1.tgz",
+ "integrity": "sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "es-module-lexer": "^1.6.0",
+ "get-tsconfig": "^4.10.0",
+ "unplugin-utils": "^0.2.4"
+ },
+ "engines": {
+ "node": ">=14.18.0"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.18.0",
+ "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0"
+ }
+ },
+ "node_modules/rollup/node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "license": "MIT"
+ },
+ "node_modules/rrweb-cssom": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
+ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
+ "license": "MIT"
+ },
+ "node_modules/run-applescript": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
+ "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "license": "ISC",
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
+ },
+ "node_modules/section-matter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
+ "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz",
+ "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
+ "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "~0.5.2",
+ "http-errors": "~2.0.1",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "~2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "~2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
+ },
+ "node_modules/send/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "license": "MIT"
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "license": "MIT"
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/streamx": {
+ "version": "2.25.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz",
+ "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==",
+ "license": "MIT",
+ "dependencies": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.2.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "license": "MIT"
+ },
+ "node_modules/tar": {
+ "version": "7.5.15",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz",
+ "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.1.0",
+ "yallist": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz",
+ "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==",
+ "license": "MIT",
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "bare-fs": "^4.5.5",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ },
+ "node_modules/teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "license": "MIT",
+ "dependencies": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz",
+ "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+ "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tsx": {
+ "version": "4.22.3",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.3.tgz",
+ "integrity": "sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==",
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.28.0"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz",
+ "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/android-arm": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz",
+ "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/android-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz",
+ "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/android-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz",
+ "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz",
+ "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/darwin-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz",
+ "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz",
+ "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz",
+ "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-arm": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz",
+ "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz",
+ "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-ia32": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz",
+ "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-loong64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz",
+ "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz",
+ "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz",
+ "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz",
+ "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-s390x": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz",
+ "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/linux-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz",
+ "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz",
+ "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz",
+ "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz",
+ "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz",
+ "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz",
+ "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/sunos-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz",
+ "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/win32-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz",
+ "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/win32-ia32": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz",
+ "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/@esbuild/win32-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz",
+ "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tsx/node_modules/esbuild": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz",
+ "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.28.0",
+ "@esbuild/android-arm": "0.28.0",
+ "@esbuild/android-arm64": "0.28.0",
+ "@esbuild/android-x64": "0.28.0",
+ "@esbuild/darwin-arm64": "0.28.0",
+ "@esbuild/darwin-x64": "0.28.0",
+ "@esbuild/freebsd-arm64": "0.28.0",
+ "@esbuild/freebsd-x64": "0.28.0",
+ "@esbuild/linux-arm": "0.28.0",
+ "@esbuild/linux-arm64": "0.28.0",
+ "@esbuild/linux-ia32": "0.28.0",
+ "@esbuild/linux-loong64": "0.28.0",
+ "@esbuild/linux-mips64el": "0.28.0",
+ "@esbuild/linux-ppc64": "0.28.0",
+ "@esbuild/linux-riscv64": "0.28.0",
+ "@esbuild/linux-s390x": "0.28.0",
+ "@esbuild/linux-x64": "0.28.0",
+ "@esbuild/netbsd-arm64": "0.28.0",
+ "@esbuild/netbsd-x64": "0.28.0",
+ "@esbuild/openbsd-arm64": "0.28.0",
+ "@esbuild/openbsd-x64": "0.28.0",
+ "@esbuild/openharmony-arm64": "0.28.0",
+ "@esbuild/sunos-x64": "0.28.0",
+ "@esbuild/win32-arm64": "0.28.0",
+ "@esbuild/win32-ia32": "0.28.0",
+ "@esbuild/win32-x64": "0.28.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/uc.micro": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "license": "MIT"
+ },
+ "node_modules/universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/unplugin-utils": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.5.tgz",
+ "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/untildify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-5.0.0.tgz",
+ "integrity": "sha512-bOgQLUnd2G5rhzaTvh1VCI9Fo6bC5cLTpH17T5aFfamyXFYDbbdzN6IXdeoc3jBS7T9hNTmJtYUzJCJ2Xlc9gA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "license": "MIT",
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "license": "MIT",
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "^5.1.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.20.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz",
+ "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/wsl-utils": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
+ "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-wsl": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "license": "MIT"
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ }
+ }
+}
diff --git a/app/frontend/package.json b/app/frontend/package.json
new file mode 100644
index 00000000..856def32
--- /dev/null
+++ b/app/frontend/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "quantflow-examples",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "observable build",
+ "dev": "observable preview --host 0.0.0.0"
+ },
+ "dependencies": {
+ "@observablehq/framework": "^1.13.4",
+ "@observablehq/plot": "^0.6.17",
+ "d3": "^7.9.0"
+ },
+ "devDependencies": {
+ "concurrently": "^9.2.1",
+ "typescript": "^5.9.3"
+ }
+}
diff --git a/app/frontend/src/cointegration.md b/app/frontend/src/cointegration.md
new file mode 100644
index 00000000..81447007
--- /dev/null
+++ b/app/frontend/src/cointegration.md
@@ -0,0 +1,64 @@
+---
+title: Cointegration
+---
+
+# Cointegration Analysis of Cryptocurrencies
+
+Johansen cointegration test on BTC, ETH, and SOL log prices. The residual (spread) of the first cointegrating vector is plotted below.
+
+```js
+import {fetchJson} from "./lib/api.js";
+import * as Plot from "npm:@observablehq/plot";
+```
+
+```js
+const frequencyInput = Inputs.select(["daily", "4hour", "1hour", "30min", "15min", "5min", "1min"], {label: "Frequency", value: "daily"});
+const frequency = Generators.input(frequencyInput);
+```
+
+```js
+display(frequencyInput);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const data = await fetchJson(`/.api/cointegration?frequency=${frequency}`);
+```
+
+```js
+display(html`
Cointegrating vector (BTC, ETH, SOL): [${data.deltas.map(d => d.toFixed(4)).join(", ")}]
`);
+```
+
+```js
+const residuals = data.dates.map((d, i) => ({date: new Date(d), residual: data.residuals[i]}));
+
+display(Plot.plot({
+ width: 900,
+ height: 400,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Date", type: "utc"},
+ y: {label: "Residual (Spread)"},
+ marks: [
+ Plot.line(residuals, {x: "date", y: "residual", stroke: "var(--theme-foreground-focus)", strokeWidth: 1.5, tip: true}),
+ Plot.ruleY([0], {stroke: "var(--theme-foreground-muted)", strokeDasharray: "4,4"}),
+ ]
+}));
+```
+
+## Why Pick the Largest Eigenvalue?
+
+In the Johansen cointegration test, the eigenvalues are sorted in descending order, and each one corresponds to a different potential cointegrating vector. The magnitude of the eigenvalue represents the strength and stability of the corresponding cointegrating relationship.
+
+1. **Strongest Relationship:** The largest eigenvalue corresponds to the linear combination of the time series that is "most stationary." The resulting spread has the strongest tendency to revert to its mean.
+2. **Statistical Significance:** The test statistics (Trace and Maximum Eigenvalue tests) are functions of these eigenvalues, helping determine how many significant cointegrating relationships exist.
+3. **Practical Application:** For pairs trading, we want the most reliable long-run equilibrium. The vector associated with the largest eigenvalue gives the most mean-reverting portfolio.
+
+## Should You Use Log Prices?
+
+Yes, using log prices is generally recommended for cointegration analysis in finance:
+
+1. **Percentage vs. Absolute Changes:** Log prices work with relative percentage changes rather than absolute dollar amounts, which is crucial when assets trade at vastly different scales.
+2. **Variance Stabilization:** Log transformation helps stabilize variance in heteroscedastic financial data.
+3. **Linearization:** Real-world economic relationships between assets are often multiplicative; logarithms convert these into linear additive relationships suitable for the Johansen test.
diff --git a/app/frontend/src/heston-vol-surface.md b/app/frontend/src/heston-vol-surface.md
new file mode 100644
index 00000000..7c3b8782
--- /dev/null
+++ b/app/frontend/src/heston-vol-surface.md
@@ -0,0 +1,102 @@
+---
+title: Jump Diffusion Vol Surface
+---
+
+# Jump Diffusion Volatility Surface
+
+Compare a Jump Diffusion volatility surface with a Heston Stochastic Volatility with Jumps model.
+
+```js
+import {fetchJson} from "./lib/api.js";
+import * as Plot from "npm:@observablehq/plot";
+```
+
+```js
+const modelInput = Inputs.select(new Map([["Jump Diffusion", "jd"], ["Heston with Jumps", "hj"]]), {label: "Model", value: "jd"});
+const modelVal = Generators.input(modelInput);
+
+const volInput = Inputs.range([0.1, 0.8], {step: 0.01, value: 0.4, label: "Long term volatility"});
+const volVal = Generators.input(volInput);
+
+const sigmaInput = Inputs.range([0.1, 2], {step: 0.1, value: 0.5, label: "Vol of vol"});
+const sigmaVal = Generators.input(sigmaInput);
+
+const kappaInput = Inputs.range([0.1, 2], {step: 0.1, value: 0.5, label: "Variance mean reversion"});
+const kappaVal = Generators.input(kappaInput);
+
+const rhoInput = Inputs.range([-0.6, 0.6], {step: 0.1, value: 0, label: "Correlation"});
+const rhoVal = Generators.input(rhoInput);
+
+const rInput = Inputs.range([0.6, 1.6], {step: 0.1, value: 1.0, label: "Initial vol ratio"});
+const rVal = Generators.input(rInput);
+
+const jfInput = Inputs.range([0.1, 0.9], {step: 0.05, value: 0.5, label: "Jump fraction"});
+const jfVal = Generators.input(jfInput);
+
+const jiInput = Inputs.range([10, 100], {step: 5, value: 10, label: "Jump intensity"});
+const jiVal = Generators.input(jiInput);
+
+const jaInput = Inputs.range([-2, 2], {step: 0.1, value: 0, label: "Jump asymmetry"});
+const jaVal = Generators.input(jaInput);
+```
+
+```js
+display(html`
+ ${modelInput}${volInput}${rInput}${sigmaInput}${kappaInput}${rhoInput}${jfInput}${jiInput}${jaInput}
+
`);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const params = new URLSearchParams({
+ model: modelVal, vol: volVal, sigma: sigmaVal, kappa: kappaVal,
+ rho: rhoVal, r: rVal, jump_fraction: jfVal, jump_intensity: jiVal, jump_asymmetry: jaVal
+});
+const data = await fetchJson(`/.api/heston-vol-surface?${params}`);
+```
+
+## Volatility Smile
+
+```js
+const flat = data.ttm.flatMap((t, i) =>
+ data.moneyness.map((m, j) => ({ttm: t.toFixed(2), moneyness: m, implied_vol: data.implied_vol[i][j]}))
+).filter(d => d.implied_vol > 0);
+
+display(Plot.plot({
+ width: 800,
+ height: 450,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Moneyness"},
+ y: {label: "Implied Volatility", percent: true},
+ color: {type: "ordinal", scheme: "turbo", legend: true, label: "TTM"},
+ marks: [
+ Plot.line(flat, {x: "moneyness", y: "implied_vol", stroke: "ttm", strokeWidth: 1.5, tip: true}),
+ Plot.ruleX([0], {stroke: "var(--theme-foreground-muted)", strokeDasharray: "4,4"}),
+ ]
+}));
+```
+
+## Volatility Term Structure
+
+```js
+const atmByTtm = data.ttm.map((t, i) => {
+ const midIdx = Math.floor(data.moneyness.length / 2);
+ return {ttm: t, implied_vol: data.implied_vol[i][midIdx]};
+}).filter(d => d.implied_vol > 0);
+
+display(Plot.plot({
+ width: 800,
+ height: 350,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Time to Maturity"},
+ y: {label: "ATM Implied Volatility", percent: true},
+ marks: [
+ Plot.line(atmByTtm, {x: "ttm", y: "implied_vol", stroke: "var(--theme-foreground-focus)", strokeWidth: 2}),
+ Plot.dot(atmByTtm, {x: "ttm", y: "implied_vol", fill: "var(--theme-foreground-focus)", r: 4, tip: true}),
+ ]
+}));
+```
diff --git a/app/frontend/src/hurst.md b/app/frontend/src/hurst.md
new file mode 100644
index 00000000..1ba779a0
--- /dev/null
+++ b/app/frontend/src/hurst.md
@@ -0,0 +1,111 @@
+---
+title: Hurst Exponent
+---
+
+# Hurst Exponent
+
+The [Hurst exponent](https://en.wikipedia.org/wiki/Hurst_exponent) is a statistical measure used to uncover the long-term memory of a time series. It helps determine if a financial asset is purely random (H = 0.5), trending (H > 0.5), or mean-reverting (H < 0.5).
+
+```js
+import {fetchJson} from "./lib/api.js";
+import * as Plot from "npm:@observablehq/plot";
+```
+
+## Wiener Process
+
+We sample a Wiener process path over one day (one time step per second) and estimate the Hurst exponent from both realized variance and range-based OHLC estimators.
+
+```js
+const sigmaInput = Inputs.range([0.1, 10], {step: 0.1, value: 2.0, label: "Sigma (volatility)"});
+const sigma = Generators.input(sigmaInput);
+```
+
+```js
+display(sigmaInput);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const wiener = await fetchJson(`/.api/hurst-wiener?sigma=${sigma}`);
+```
+
+```js
+display(html`
+
Realized Std: ${wiener.realized_std.toFixed(4)}
+
Hurst (realized): ${wiener.hurst_exponent.toFixed(4)}
+
Hurst (Parkinson): ${wiener.ohlc_hurst_pk.toFixed(4)}
+
Hurst (Garman-Klass): ${wiener.ohlc_hurst_gk.toFixed(4)}
+
Hurst (Rogers-Satchell): ${wiener.ohlc_hurst_rs.toFixed(4)}
+
`);
+```
+
+### Range-based Volatility Estimators
+
+Volatility estimated from OHLC data using Parkinson (1980), Garman & Klass (1980), and Rogers & Satchell (1991) estimators across different sampling periods.
+
+```js
+const estData = wiener.estimator_periods.flatMap((p, i) => [
+ {period: p, value: wiener.estimator_pk[i], estimator: "Parkinson"},
+ {period: p, value: wiener.estimator_gk[i], estimator: "Garman-Klass"},
+ {period: p, value: wiener.estimator_rs[i], estimator: "Rogers-Satchell"},
+]);
+
+display(Plot.plot({
+ width: 800,
+ height: 400,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Sampling Period", type: "point"},
+ y: {label: "Estimated Volatility"},
+ color: {legend: true, label: "Estimator"},
+ marks: [
+ Plot.dot(estData, {x: "period", y: "value", fill: "estimator", r: 5, tip: true}),
+ Plot.ruleY([sigma], {stroke: "var(--theme-foreground-muted)", strokeDasharray: "4,4"}),
+ ]
+}));
+```
+
+## Mean-Reverting (Vasicek)
+
+For mean-reverting processes, the Hurst exponent is less than 0.5. Higher mean reversion (kappa) leads to a lower Hurst exponent.
+
+```js
+const kappaInput = Inputs.range([1, 500], {step: 1, value: 10, label: "Kappa (mean reversion)"});
+const kappa = Generators.input(kappaInput);
+```
+
+```js
+display(kappaInput);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const vasicek = await fetchJson(`/.api/hurst-vasicek?kappa=${kappa}`);
+```
+
+```js
+display(html`
+
Hurst (realized): ${vasicek.hurst_realized.toFixed(4)}
+
Hurst (Parkinson): ${vasicek.hurst_pk.toFixed(4)}
+
Hurst (Garman-Klass): ${vasicek.hurst_gk.toFixed(4)}
+
Hurst (Rogers-Satchell): ${vasicek.hurst_rs.toFixed(4)}
+
`);
+```
+
+```js
+const vasicekPath = vasicek.dates.map((d, i) => ({date: new Date(d), value: vasicek.values[i]}));
+
+display(Plot.plot({
+ width: 800,
+ height: 350,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Time", type: "utc"},
+ y: {label: "Value"},
+ marks: [
+ Plot.line(vasicekPath, {x: "date", y: "value", stroke: "var(--theme-foreground-focus)", strokeWidth: 1.5}),
+ ]
+}));
+```
diff --git a/app/frontend/src/index.md b/app/frontend/src/index.md
new file mode 100644
index 00000000..69acd785
--- /dev/null
+++ b/app/frontend/src/index.md
@@ -0,0 +1,18 @@
+---
+title: Quantflow examples
+---
+
+# Quantflow examples
+
+Interactive examples are built as static Observable pages and use the Quantflow
+FastAPI service for Python computations and market data.
+
+
diff --git a/app/frontend/src/lib/api.ts b/app/frontend/src/lib/api.ts
new file mode 100644
index 00000000..8ff581f0
--- /dev/null
+++ b/app/frontend/src/lib/api.ts
@@ -0,0 +1,15 @@
+function apiOrigin(): string {
+ return (
+ document
+ .querySelector('meta[name="quantflow-api-origin"]')
+ ?.getAttribute("content") || ""
+ );
+}
+
+export async function fetchJson(path: string): Promise {
+ const response = await fetch(`${apiOrigin()}${path}`);
+ if (!response.ok) {
+ throw new Error(`${response.status} ${response.statusText}: ${path}`);
+ }
+ return response.json() as Promise;
+}
diff --git a/app/frontend/src/sampling.md b/app/frontend/src/sampling.md
new file mode 100644
index 00000000..680b0537
--- /dev/null
+++ b/app/frontend/src/sampling.md
@@ -0,0 +1,138 @@
+---
+title: Sampling
+---
+
+# Sampling
+
+Monte Carlo sampling of stochastic processes compared against their analytical distributions.
+
+```js
+import {fetchJson} from "./lib/api.js";
+import * as Plot from "npm:@observablehq/plot";
+```
+
+## Gaussian (Vasicek)
+
+Sample the Gaussian OU (Vasicek) process for different mean reversion speeds and number of paths.
+
+```js
+const gKappaInput = Inputs.range([0.1, 5], {step: 0.1, value: 1.0, label: "Kappa (mean reversion)"});
+const gKappa = Generators.input(gKappaInput);
+
+const gSamplesInput = Inputs.range([100, 10000], {step: 100, value: 1000, label: "Samples"});
+const gSamples = Generators.input(gSamplesInput);
+```
+
+```js
+display(html`${gKappaInput}${gSamplesInput}
`);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const gaussianData = await fetchJson(`/.api/gaussian-sampling?kappa=${gKappa}&samples=${gSamples}`);
+```
+
+```js
+const gBarData = gaussianData.x.map((x, i) => ({x, y: gaussianData.simulation[i]}));
+const gLineData = gaussianData.x.map((x, i) => ({x, y: gaussianData.analytical[i]}));
+const gBinWidth = gaussianData.x[1] - gaussianData.x[0];
+
+display(Plot.plot({
+ width: 800,
+ height: 450,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Value"},
+ y: {label: "Density"},
+ marks: [
+ Plot.rectY(gBarData, {x1: d => d.x - gBinWidth / 2, x2: d => d.x + gBinWidth / 2, y: "y", fill: "var(--theme-foreground-muted)", fillOpacity: 0.6, tip: true}),
+ Plot.line(gLineData, {x: "x", y: "y", stroke: "var(--theme-foreground-focus)", strokeWidth: 2}),
+ ]
+}));
+```
+
+## Poisson
+
+Evaluate the Monte Carlo simulation for the Poisson process against the analytical PDF.
+
+```js
+const pIntensityInput = Inputs.range([2, 5], {step: 0.1, value: 2.0, label: "Intensity (λ)"});
+const pIntensity = Generators.input(pIntensityInput);
+
+const pSamplesInput = Inputs.range([100, 10000], {step: 100, value: 1000, label: "Samples"});
+const pSamples = Generators.input(pSamplesInput);
+```
+
+```js
+display(html`${pIntensityInput}${pSamplesInput}
`);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const poissonData = await fetchJson(`/.api/poisson-sampling?intensity=${pIntensity}&samples=${pSamples}`);
+```
+
+```js
+const pBarSim = poissonData.x.map((x, i) => ({x, y: poissonData.simulation[i], type: "Simulation"}));
+const pBarAna = poissonData.x.map((x, i) => ({x, y: poissonData.analytical[i], type: "Analytical"}));
+const pBinWidth = poissonData.x.length > 1 ? poissonData.x[1] - poissonData.x[0] : 1;
+
+display(Plot.plot({
+ width: 800,
+ height: 450,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Value"},
+ y: {label: "Probability"},
+ color: {legend: true, label: "Source"},
+ marks: [
+ Plot.barY(pBarSim, {x: "x", y: "y", fill: "var(--theme-foreground-muted)", fillOpacity: 0.6, dx: -2, tip: true}),
+ Plot.barY(pBarAna, {x: "x", y: "y", fill: "var(--theme-foreground-focus)", fillOpacity: 0.6, dx: 2}),
+ ]
+}));
+```
+
+## Double Exponential
+
+Sample the Asymmetric Laplace (double exponential) distribution with mean 0 and variance 1, parameterised by the asymmetry parameter κ.
+
+```js
+const deLogKappaInput = Inputs.range([-2, 2], {step: 0.1, value: 0.1, label: "log(κ) asymmetry"});
+const deLogKappa = Generators.input(deLogKappaInput);
+
+const deSamplesInput = Inputs.range([100, 10000], {step: 100, value: 1000, label: "Samples"});
+const deSamples = Generators.input(deSamplesInput);
+```
+
+```js
+display(html`${deLogKappaInput}${deSamplesInput}
`);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const deData = await fetchJson(`/.api/double-exponential-sampling?log_kappa=${deLogKappa}&samples=${deSamples}`);
+```
+
+```js
+const deBarData = deData.x.map((x, i) => ({x, y: deData.simulation[i]}));
+const deLineData = deData.x.map((x, i) => ({x, y: deData.analytical[i]}));
+const deCharData = deData.char_x.map((x, i) => ({x, y: deData.char_y[i]}));
+const deBinWidth = deData.x[1] - deData.x[0];
+
+display(Plot.plot({
+ width: 800,
+ height: 450,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Value"},
+ y: {label: "Density"},
+ marks: [
+ Plot.rectY(deBarData, {x1: d => d.x - deBinWidth / 2, x2: d => d.x + deBinWidth / 2, y: "y", fill: "var(--theme-foreground-muted)", fillOpacity: 0.6, tip: true}),
+ Plot.line(deLineData, {x: "x", y: "y", stroke: "var(--theme-foreground-focus)", strokeWidth: 2}),
+ Plot.dot(deCharData, {x: "x", y: "y", fill: "var(--theme-accent)", r: 3}),
+ ]
+}));
+```
diff --git a/app/frontend/src/style.css b/app/frontend/src/style.css
new file mode 100644
index 00000000..ca0e8527
--- /dev/null
+++ b/app/frontend/src/style.css
@@ -0,0 +1,76 @@
+@import url("observablehq:default.css");
+@import url("observablehq:theme-slate.css");
+
+:root {
+ --observablehq-header-height: 3rem;
+ --theme-background-b: #1E2129;
+ --theme-foreground: #ffffffd1;
+ --theme-foreground-focus: #00ccb8;
+ --qf-primary: #009688;
+ --qf-accent: #ffc107;
+ font-family: Roboto, Helvetica, Arial, sans-serif;
+}
+
+#observablehq-header {
+ background: var(--qf-primary);
+ color: #fff;
+ padding: 0;
+ margin: 0;
+ left: 0 !important;
+ right: 0 !important;
+ border-bottom: none;
+}
+
+.qf-header-inner {
+ display: flex;
+ align-items: center;
+ padding: 0.4rem 0.8rem;
+ width: 100%;
+}
+
+.qf-header-logo {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ text-decoration: none;
+ color: #fff !important;
+}
+
+.qf-header-logo img {
+ height: 1.5rem;
+ width: auto;
+}
+
+.qf-header-title {
+ font-size: 0.9rem;
+ font-weight: 700;
+ white-space: nowrap;
+}
+
+.qf-header-spacer {
+ flex: 1;
+}
+
+.qf-header-link {
+ color: #ffffffcc !important;
+ font-size: 0.8rem;
+ text-decoration: none;
+}
+
+.qf-header-link:hover {
+ color: #fff !important;
+}
+
+.card {
+ border: 1px solid var(--theme-foreground-faintest);
+ border-radius: 0.4rem;
+ color: var(--theme-foreground);
+ display: block;
+ font-weight: 600;
+ padding: 1rem;
+ text-decoration: none;
+}
+
+.card:hover {
+ border-color: var(--qf-primary);
+}
diff --git a/app/frontend/src/supersmoother.md b/app/frontend/src/supersmoother.md
new file mode 100644
index 00000000..681d75d2
--- /dev/null
+++ b/app/frontend/src/supersmoother.md
@@ -0,0 +1,48 @@
+---
+title: SuperSmoother & EWMA
+---
+
+# SuperSmoother & EWMA
+
+Compare the SuperSmoother and EWMA filters applied to BTCUSD daily close prices.
+
+```js
+import {fetchJson} from "./lib/api.js";
+import * as Plot from "npm:@observablehq/plot";
+```
+
+```js
+const periodInput = Inputs.range([2, 100], {step: 1, value: 10, label: "Period"});
+const period = Generators.input(periodInput);
+```
+
+```js
+display(periodInput);
+```
+
+```js
+await new Promise(r => setTimeout(r, 300));
+const result = await fetchJson(`/.api/supersmoother?period=${period}`);
+```
+
+```js
+const long = result.data.flatMap(d => [
+ {date: d.date, price: d.close, signal: "Close"},
+ {date: d.date, price: d.supersmoother, signal: "SuperSmoother"},
+ {date: d.date, price: d.ewma, signal: "EWMA"},
+]);
+
+display(Plot.plot({
+ width: 900,
+ height: 450,
+ marginLeft: 70,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Date", type: "utc"},
+ y: {label: "Price (USD)"},
+ color: {legend: true, label: "Signal", domain: ["Close", "SuperSmoother", "EWMA"], range: ["#4c78a8", "#f58518", "#e45756"]},
+ marks: [
+ Plot.line(long, {x: "date", y: "price", stroke: "signal", strokeWidth: 1.5, tip: true}),
+ ]
+}));
+```
diff --git a/app/frontend/src/volatility-surface.md b/app/frontend/src/volatility-surface.md
new file mode 100644
index 00000000..adbbb58b
--- /dev/null
+++ b/app/frontend/src/volatility-surface.md
@@ -0,0 +1,184 @@
+---
+title: Volatility Surface
+---
+
+# Volatility Surface
+
+Live implied volatility surface from market options data. Crypto assets (BTC, ETH) use [Deribit](https://www.deribit.com/); equities (SPY, AAPL, NVDA) use [Yahoo Finance](https://finance.yahoo.com/).
+
+```js
+import {fetchJson} from "./lib/api.js";
+import * as Plot from "npm:@observablehq/plot";
+import * as d3 from "npm:d3";
+```
+
+```js
+const assetInput = Inputs.select(["BTC", "ETH", "SPY", "AAPL", "NVDA"], {label: "Asset", value: "BTC"});
+const asset = Generators.input(assetInput);
+```
+
+```js
+display(assetInput);
+```
+
+```js
+const data = await fetchJson(`/.api/volatility-surface?asset=${asset}`);
+```
+
+```js
+// Options come pre-computed from the API with all fields
+const options = data.options;
+
+// Unique maturities sorted by date
+const maturities = [...new Set(options.map(d => d.maturity))].sort();
+
+// Parse numeric fields (API returns Decimals as strings)
+const enriched = options.map(d => ({
+ ...d,
+ strike: parseFloat(d.strike),
+ forward: parseFloat(d.forward),
+ log_strike: parseFloat(d.log_strike),
+ moneyness: parseFloat(d.moneyness),
+ ttm: parseFloat(d.ttm),
+ implied_vol: parseFloat(d.implied_vol),
+ price_bp: parseFloat(d.price_bp),
+ open_interest: parseFloat(d.open_interest),
+ volume: parseFloat(d.volume),
+}));
+
+// Get spot from inputs
+const spotInput = data.inputs.inputs.find(d => d.security_type === "spot");
+const spotMid = spotInput ? (parseFloat(spotInput.bid) + parseFloat(spotInput.ask)) / 2 : null;
+```
+
+```js
+const refDate = new Date(data.inputs.quote_curve.ref_date);
+const formatDate = d3.utcFormat("%d %b %Y %H:%M:%S UTC");
+display(html`${formatDate(refDate)} · Spot: ${spotMid ? d3.format(",.0f")(spotMid) : "N/A"} USD · ${enriched.length} options across ${maturities.length} maturities
`);
+```
+
+```js
+const downloadInputs = () => {
+ const blob = new Blob([JSON.stringify(data.inputs, null, 2)], {type: "application/json"});
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = url;
+ a.download = `volsurface_${asset}_${d3.utcFormat("%Y%m%d_%H%M%S")(refDate)}.json`;
+ a.click();
+ URL.revokeObjectURL(url);
+};
+
+display(html``);
+```
+
+```js
+const maturityInput = Inputs.select(
+ [null, ...maturities],
+ {label: "Maturity", value: null, format: d => d === null ? "All" : d.slice(0, 10)}
+);
+const selectedMaturity = Generators.input(maturityInput);
+
+const xAxisInput = Inputs.select(
+ ["moneyness", "log_strike", "strike"],
+ {label: "X-Axis", value: "moneyness", format: d => ({moneyness: "Moneyness", log_strike: "Log Strike", strike: "Strike"}[d])}
+);
+const xAxis = Generators.input(xAxisInput);
+```
+
+```js
+display(html`${maturityInput}${xAxisInput}
`);
+```
+
+## Volatility Smile
+
+```js
+const smileData = selectedMaturity === null
+ ? enriched
+ : enriched.filter(d => d.maturity === selectedMaturity);
+
+const xLabel = {moneyness: "Moneyness (log(K/F) / √T)", log_strike: "Log Strike (log K/F)", strike: "Strike"}[xAxis];
+
+display(Plot.plot({
+ width: 800,
+ height: 450,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: xLabel},
+ y: {label: "Implied Volatility", percent: true},
+ color: {
+ type: "ordinal",
+ domain: maturities,
+ scheme: "turbo",
+ legend: selectedMaturity === null,
+ label: "Maturity",
+ tickFormat: d => d.slice(5, 10)
+ },
+ marks: [
+ Plot.dot(smileData, {
+ x: xAxis,
+ y: "implied_vol",
+ fill: "maturity",
+ r: 3,
+ opacity: 0.8,
+ tip: true
+ }),
+ Plot.ruleY([0]),
+ ...(xAxis === "moneyness" ? [Plot.ruleX([0], {stroke: "var(--theme-foreground-muted)", strokeDasharray: "4,4"})] : [])
+ ]
+}));
+```
+
+## Volatility Term Structure
+
+```js
+// ATM vol per maturity (closest to moneyness = 0)
+const atmByMaturity = maturities.map(m => {
+ const slice = enriched.filter(d => d.maturity === m);
+ const atm = slice.reduce((best, d) => Math.abs(d.moneyness) < Math.abs(best.moneyness) ? d : best);
+ return {maturity: m, implied_vol: atm.implied_vol};
+});
+
+display(Plot.plot({
+ width: 800,
+ height: 350,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Maturity", type: "point"},
+ y: {label: "ATM Implied Volatility", percent: true},
+ marks: [
+ Plot.line(atmByMaturity, {x: "maturity", y: "implied_vol", stroke: "var(--theme-foreground-focus)", strokeWidth: 2}),
+ Plot.dot(atmByMaturity, {
+ x: "maturity",
+ y: "implied_vol",
+ fill: "var(--theme-foreground-focus)",
+ r: 5,
+ tip: true
+ })
+ ]
+}));
+```
+
+## Discount Curves
+
+```js
+const quoteCurve = data.quote_curve.ttm.map((t, i) => ({ttm: t, rate: data.quote_curve.rates[i], curve: "Quote"}));
+const assetCurve = data.asset_curve.ttm.map((t, i) => ({ttm: t, rate: data.asset_curve.rates[i], curve: "Asset"}));
+const curveData = [...quoteCurve, ...assetCurve];
+
+display(Plot.plot({
+ width: 800,
+ height: 350,
+ marginLeft: 60,
+ marginBottom: 50,
+ style: {background: "transparent"},
+ x: {label: "Time to Maturity (years)"},
+ y: {label: "Rate", percent: true},
+ color: {legend: true, label: "Curve"},
+ marks: [
+ Plot.line(curveData, {x: "ttm", y: "rate", stroke: "curve", strokeWidth: 2}),
+ Plot.ruleY([0], {stroke: "var(--theme-foreground-muted)", strokeDasharray: "4,4"})
+ ]
+}));
+```
diff --git a/app/frontend/src/yield-curve.md b/app/frontend/src/yield-curve.md
new file mode 100644
index 00000000..e8498367
--- /dev/null
+++ b/app/frontend/src/yield-curve.md
@@ -0,0 +1,142 @@
+---
+title: Yield Curve
+---
+
+# Yield Curve
+
+Fit a yield curve to a set of interest rates. Drag the points to change the input rates.
+
+```js
+import {fetchJson} from "./lib/api.js";
+import * as Plot from "npm:@observablehq/plot";
+import * as d3 from "npm:d3";
+```
+
+```js
+const curveType = view(Inputs.select(["nelson_siegel", "vasicek_curve"], {label: "Curve type"}));
+```
+
+```js
+const defaultRates = [
+ {ttm: 1/365, rate: 0.043},
+ {ttm: 7/365, rate: 0.043},
+ {ttm: 1/12, rate: 0.044},
+ {ttm: 0.25, rate: 0.045},
+ {ttm: 0.5, rate: 0.046},
+ {ttm: 1, rate: 0.047},
+ {ttm: 2, rate: 0.043},
+ {ttm: 3, rate: 0.041},
+ {ttm: 5, rate: 0.040},
+ {ttm: 7, rate: 0.041},
+ {ttm: 10, rate: 0.043},
+ {ttm: 20, rate: 0.048},
+ {ttm: 30, rate: 0.049}
+];
+
+const inputRates = Mutable(defaultRates);
+const setInputRates = (v) => inputRates.value = v;
+```
+
+```js
+const params = new URLSearchParams();
+for (const {ttm, rate} of inputRates) {
+ params.append("ttm", ttm);
+ params.append("rates", rate);
+}
+params.set("curve_type", curveType);
+params.set("max_ttm", "30");
+params.set("num_points", "200");
+
+const result = await fetchJson(`/.api/yield-curve?${params}`);
+```
+
+```js
+const fittedData = result.ttm
+ .map((t, i) => ({ttm: t, rate: result.rates[i]}))
+ .filter(d => d.ttm >= 1/365);
+```
+
+```js
+const width = 640;
+const height = 400;
+const marginTop = 30;
+const marginRight = 20;
+const marginBottom = 40;
+const marginLeft = 50;
+
+const x = d3.scaleLog()
+ .domain([1/365, 32])
+ .range([marginLeft, width - marginRight]);
+
+const y = d3.scaleLinear()
+ .domain([0.02, 0.06])
+ .range([height - marginBottom, marginTop]);
+
+const svg = d3.create("svg")
+ .attr("width", width)
+ .attr("height", height)
+ .attr("viewBox", [0, 0, width, height])
+ .attr("style", "max-width: 100%; height: auto;");
+
+svg.append("g")
+ .attr("transform", `translate(0,${height - marginBottom})`)
+ .call(d3.axisBottom(x)
+ .tickValues([1/365, 1/52, 1/12, 0.25, 0.5, 1, 2, 5, 10, 30])
+ .tickFormat(d => d < 1/12 ? `${Math.round(d*365)}d` : d < 1 ? `${Math.round(d*12)}m` : `${d}y`)
+ )
+ .append("text")
+ .attr("x", width / 2)
+ .attr("y", 35)
+ .attr("fill", "currentColor")
+ .attr("text-anchor", "middle")
+ .text("Time to Maturity (years)");
+
+svg.append("g")
+ .attr("transform", `translate(${marginLeft},0)`)
+ .call(d3.axisLeft(y).tickFormat(d3.format(".1%")))
+ .append("text")
+ .attr("x", -marginLeft + 10)
+ .attr("y", marginTop - 15)
+ .attr("fill", "currentColor")
+ .attr("text-anchor", "start")
+ .text("Rate");
+
+const line = d3.line()
+ .x(d => x(d.ttm))
+ .y(d => y(d.rate));
+
+const curvePath = svg.append("path")
+ .datum(fittedData)
+ .attr("fill", "none")
+ .attr("stroke", "var(--qf-primary)")
+ .attr("stroke-width", 2)
+ .attr("d", line);
+
+const points = [...inputRates];
+
+svg.selectAll("circle")
+ .data(points)
+ .join("circle")
+ .attr("cx", d => x(d.ttm))
+ .attr("cy", d => y(d.rate))
+ .attr("r", 7)
+ .attr("fill", "var(--qf-accent)")
+ .attr("cursor", "ns-resize")
+ .call(d3.drag()
+ .on("drag", function(event, d) {
+ const newRate = y.invert(event.y);
+ const clamped = Math.max(0.001, Math.min(0.1, newRate));
+ d.rate = clamped;
+ d3.select(this).attr("cy", y(clamped));
+ })
+ .on("end", function() {
+ setInputRates(points.map(p => ({ttm: p.ttm, rate: p.rate})));
+ })
+ );
+
+display(svg.node());
+```
+
+```js
+display(result.curve);
+```
\ No newline at end of file
diff --git a/app/gaussian_sampling.py b/app/gaussian_sampling.py
deleted file mode 100644
index 465ceead..00000000
--- a/app/gaussian_sampling.py
+++ /dev/null
@@ -1,91 +0,0 @@
- import marimo
-
-__generated_with = "0.19.7"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- # Gaussian Sampling
-
- Here we sample the gaussian OU process for different mean reversion speed and number of paths.
- """)
- return
-
-
-@app.cell
-def _(mo):
- import inspect
- from quantflow.sp.ou import Vasicek
- import pandas as pd
-
- def simulate_vasicek(kappa: float, samples: int) -> pd.DataFrame:
- pr = Vasicek(rate=0.5, kappa=kappa)
- paths = pr.sample(samples, 1, 1000)
- pdf = paths.pdf(num_bins=50)
- pdf["simulation"] = pdf["pdf"]
- pdf["analytical"] = pr.marginal(1).pdf(pdf.index)
- return pdf
-
- # 1. Get the source code of your function
- # Note: The function must be defined in a previous cell or imported
- try:
- source_code = inspect.getsource(simulate_vasicek)
- except OSError:
- source_code = "# Code not available (source file not found)"
-
- # 2. Display it inside an accordion so it doesn't clutter the view
- mo.accordion({
- "Show Simulation Code": mo.md(f"```python\n{source_code}\n```")
- })
- return (simulate_vasicek,)
-
-
-@app.cell
-def _(mo):
- samples = mo.ui.slider(start=100, stop=10000, step=100, value=1000, debounce=True, full_width=True)
- kappa = mo.ui.slider(start=0.1, stop=5, step=0.1, debounce=True, full_width=True)
-
- def input_label(text):
- return mo.Html(f"{text}")
-
- controls = mo.vstack([
- mo.hstack([input_label("Samples:"), samples], align="center"),
- mo.hstack([input_label("Kappa (Mean reversion):"), kappa], align="center")
- ])
- controls
- return kappa, samples
-
-
-@app.cell
-def _(kappa, samples, simulate_vasicek):
- df = simulate_vasicek(kappa=kappa.value, samples=samples.value)
- return (df,)
-
-
-@app.cell
-def _(df):
- import plotly.graph_objects as go
- simulation = go.Bar(x=df.index, y=df["simulation"], name="simulation")
- analytical = go.Scatter(x=df.index, y=df["analytical"], name="analytical")
- fig = go.Figure(data=[simulation, analytical])
- fig
- return
-
-
-@app.cell
-def _():
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/app/heston_vol_surface.py b/app/heston_vol_surface.py
deleted file mode 100644
index 75cf8ec3..00000000
--- a/app/heston_vol_surface.py
+++ /dev/null
@@ -1,165 +0,0 @@
-import marimo
-
-__generated_with = "0.22.0"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell(hide_code=True)
-def _(mo):
- mo.md(r"""
- ## Jump Diffusion
-
- We conside a Jump Diffuxion volatility surface and compare it with a more powerful Hest Stochastioc volatility with Jumps.
- """)
- return
-
-
-@app.cell
-def _(mo):
- from quantflow.sp.jump_diffusion import JumpDiffusion
- from quantflow.sp.heston import HestonJ
- from quantflow.utils.distributions import DoubleExponential
- from quantflow.options.pricer import OptionPricer
- import numpy as np
-
-
- models = dict(jd="Jump Diffusion", hj="Heston with Jumps")
- model = mo.ui.dropdown({v: n for n, v in models.items()}, value="Jump Diffusion", label="model")
- vol = mo.ui.slider(start=0.1, stop=0.8, value=0.4, debounce=True, label="Long term volatility")
- sigma = mo.ui.slider(start=0.1, stop=2, step=0.1, value=0.5, debounce=True, label="vol of vol")
- kappa = mo.ui.slider(start=0.1, stop=2, step=0.5, value=0.5, debounce=True, label="Variance mean reversion")
- rho = mo.ui.slider(start=-0.6, stop=0.6, step=0.1, value=0, debounce=True, label="Correlation")
- r = mo.ui.slider(start=0.6, stop=1.6, step=0.1, value=1, debounce=True, label="Initial vol")
- jump_fraction = mo.ui.slider(start=0.1, stop=0.9, step=0.05, value=0.5, debounce=True, label="Jump Fraction")
- jump_intensity = mo.ui.slider(start=10, stop=100, step=5, debounce=True, label="Jump Intensity")
- jump_asymmetry = mo.ui.slider(start=-2, stop=2, step=0.1, value=0, debounce=True, label="Jump Asymmetry")
-
-
- class Surface:
-
- def __init__(self):
- self.fig = None
-
- @property
- def scene_camera(self):
- return self.fig.layout["scene"]["camera"] if self.fig is not None else None
-
- def plot(self, model, pr):
- name = models[model]
- self.fig = pr.plot3d(
- ttm=np.linspace(start=0.1, stop=1.0, num=10),
- title=f"Implied Volatility Surface: {name}",
- scene_camera=self.scene_camera
- )
- return self.fig
-
- surface = Surface()
- return (
- DoubleExponential,
- HestonJ,
- JumpDiffusion,
- OptionPricer,
- jump_asymmetry,
- jump_fraction,
- jump_intensity,
- kappa,
- model,
- r,
- rho,
- sigma,
- surface,
- vol,
- )
-
-
-@app.cell
-def _(
- DoubleExponential,
- HestonJ,
- JumpDiffusion,
- OptionPricer,
- jump_asymmetry,
- jump_fraction,
- jump_intensity,
- kappa,
- model,
- r,
- rho,
- sigma,
- vol,
-):
- def get_model(value: str):
- match value:
- case "jd":
- return JumpDiffusion.create(
- DoubleExponential,
- vol=vol.value,
- jump_fraction=jump_fraction.value,
- jump_intensity=jump_intensity.value,
- jump_asymmetry=jump_asymmetry.value,
- )
- case "hj":
- st = sigma.value/vol.value
- k = max((kappa.value, 0.5*st*st))
- return HestonJ.create(
- DoubleExponential,
- rate=r.value,
- vol=vol.value,
- sigma=sigma.value,
- kappa=k,
- rho=rho.value,
- jump_fraction=jump_fraction.value,
- jump_intensity=jump_intensity.value,
- jump_asymmetry=jump_asymmetry.value,
- )
- case _:
- raise ValueError(f"Mode {value} not supported")
-
- vm = get_model(model.value)
- pricer = OptionPricer(model=vm)
- return (pricer,)
-
-
-@app.cell
-def _(
- jump_asymmetry,
- jump_fraction,
- jump_intensity,
- kappa,
- mo,
- model,
- r,
- rho,
- sigma,
- vol,
-):
- mo.vstack([
- mo.hstack([jump_fraction, jump_intensity, jump_asymmetry]),
- mo.hstack([vol, sigma, kappa]),
- mo.hstack([rho, r, model]),
- ])
- return
-
-
-@app.cell
-def _(model, pricer, surface):
- fig = surface.plot(model.value, pricer)
- fig
- return
-
-
-@app.cell
-def _():
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/app/hurst.py b/app/hurst.py
deleted file mode 100644
index 3b296b87..00000000
--- a/app/hurst.py
+++ /dev/null
@@ -1,327 +0,0 @@
-import marimo
-
-__generated_with = "0.19.7"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- # Hurst Exponent
-
- The [Hurst exponent](https://en.wikipedia.org/wiki/Hurst_exponent) is a statistical measure used to uncover the long-term memory of a time series. It helps determine if a financial asset is purely random, trending, or mean-reverting.
-
- The intuition is based on how the volatility of a time series scales with time. If a time series $x_t$ follows a standard Brownian motion (a Random Walk), the variance of the changes increases linearly with the time.
-
- \begin{align}
- \text{Var}(x_{t_2} - x_{t_1}) &\propto t_2 - t_1 \\
- &\propto \Delta t^{2H}\\
- H &= 0.5
- \end{align}
-
- where $H$ is the Hurst exponent.
-
- Trending time-series have a Hurst exponent H > 0.5, while mean reverting time-series have H < 0.5. Understanding in which regime a time-series is can be useful for trading strategies.
-
- These are some references to understand the Hurst exponent and its applications:
-
- * [Hurst Exponent for Algorithmic Trading](https://robotwealth.com/demystifying-the-hurst-exponent-part-1/)
- * [Basics of Statistical Mean Reversion Testing](https://www.quantstart.com/articles/Basics-of-Statistical-Mean-Reversion-Testing/)
-
- ## Estimate from OHLC data
-
- We want to construct a mechanism to estimate the Hurst exponent via OHLC data because it is widely available from data providers and easily constructed as an online signal during trading.
-
- In order to evaluate results against known solutions, we consider the Wiener process as generator of timeseries.
-
- We use the **WienerProcess** from the stochastic process library and sample one path over a time horizon of 1 (day) with a time step every second.
- """)
- return
-
-
-@app.cell
-def _(mo):
- regenerate_btn = mo.ui.run_button(label="Regenerate Path", kind="info")
- regenerate_btn
- return (regenerate_btn,)
-
-
-@app.cell
-def _(regenerate_btn):
- from quantflow.sp.wiener import WienerProcess
- from quantflow.utils import plot
- from quantflow.utils.dates import start_of_day
-
- regenerate_btn
-
- wiener = WienerProcess(sigma=2.0)
- wiener_paths = wiener.sample(n=1, time_horizon=1, time_steps=24*60*60)
- wiener_df = wiener_paths.as_datetime_df(start=start_of_day(), unit="d").reset_index()
-
- plot.plot_lines(
- wiener_df,
- x=wiener_df.columns[0],
- y=wiener_df.columns[1],
- title="Wiener Process Path",
- labels={"value": "Value", "variable": "Path", wiener_df.columns[0]: "Date"},
- )
- return plot, start_of_day, wiener_df, wiener_paths
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- In order to down-sample the timeseries, we need to convert it into a dataframe with dates as indices.
- """)
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- ### Realized Variance
-
- At this point we estimate the standard deviation using the **realized variance** along the path (we use the **scaled** flag so that the standard deviation is scaled by the square-root of time step, in this way it removes the dependency on the time step size).
- The value should be close to the **sigma** of the WienerProcess defined above.
- """)
- return
-
-
-@app.cell
-def _(wiener_paths):
- float(wiener_paths.paths_std(scaled=True)[0])
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- The evaluation of the hurst exponent is done by calculating the variance for several time windows and by fitting a line to the log-log plot of the variance vs the time window.
- """)
- return
-
-
-@app.cell
-def _(wiener_paths):
- wiener_paths.hurst_exponent()
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- As expected, the Hurst exponent should be close to 0.5, since we have calculated the exponent from the paths of a Wiener process.
- """)
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- ### Range-based Variance Estimators
-
- We now turn our attention to range-based variance estimators. These estimators depends on OHLC timeseries, which are widely available from data providers such as [FMP](https://site.financialmodelingprep.com/).
- To analyze range-based variance estimators, we use he **quantflow.ta.OHLC** tool which allows to down-sample a timeserie to OHLC series and estimate variance with three different estimators
-
- * **Parkinson** (1980)
- * **Garman & Klass** (1980)
- * **Rogers & Satchell** (1991)
-
- See [molnar](/bibliography/#molnar) for a detailed overview of the properties of range-based estimators.
-
- For this we build an OHLC estimator as template and use it to create OHLC estimators for different periods.
- """)
- return
-
-
-@app.cell
-def _(wiener_df):
- import pandas as pd
- import polars as pl
- import math
- from quantflow.ta.ohlc import OHLC
- template = OHLC(
- serie="0",
- period="10m",
- rogers_satchell_variance=True,
- parkinson_variance=True,
- garman_klass_variance=True
- )
- seconds_in_day = 24*60*60
-
- def rstd(pdf: pl.Series, range_seconds: float) -> float:
- """Calculate the standard deviation from a range-based variance estimator"""
- variance = pdf.mean()
- # scale the variance by the number of seconds in the period
- variance = seconds_in_day * variance / range_seconds
- return math.sqrt(variance)
-
- results = []
- for period in ("10s", "20s", "30s", "1m", "2m", "3m", "5m", "10m", "30m"):
- ohlc = template.model_copy(update=dict(period=period))
- rf = ohlc(wiener_df)
- ts = pd.to_timedelta(period).to_pytimedelta().total_seconds()
- data = dict(period=period)
- for name in ("pk", "gk", "rs"):
- estimator = rf[f"0_{name}"]
- data[name] = rstd(estimator, ts)
- results.append(data)
- vdf = pd.DataFrame(results).set_index("period")
- return OHLC, pd, vdf
-
-
-@app.cell
-def _(plot, vdf):
- # Create a scatter plot comparing the three estimators
- # We use the dataframe index (period) for the x-axis and the columns for the y-axis
- fig2 = plot.plot_scatter(
- vdf,
- x=vdf.index,
- y=vdf.columns,
- title="Range-based Volatility Estimators vs Sampling Period",
- labels={
- "period": "Sampling Period",
- "value": "Estimated Volatility (Annualized)",
- "variable": "Estimator"
- },
- )
-
- # Increase marker size and add opacity for better visibility
- fig2.update_traces(marker=dict(size=10, opacity=0.8))
-
- # Add hover lines to easily compare values at the same period
- fig2.update_layout(hovermode="x unified")
-
- fig2
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- These numbers are different from the realized variance because they are based on the range of the prices, not on the actual prices. The realized variance is a more direct measure of the volatility of the process, while the range-based estimators are more robust to market microstructure noise.
-
- The Parkinson estimator is always higher than both the Garman-Klass and Rogers-Satchell estimators, the reason is due to the use of the high and low prices only, which are always further apart than the open and close prices. The GK and RS estimators are similar and are more accurate than the Parkinson estimator, especially for greater periods.
-
- To estimate the Hurst exponent with the range-based estimators, we calculate the variance of the log of the range for different time windows and fit a line to the log-log plot of the variance vs the time window.
- """)
- return
-
-
-@app.cell
-def _(OHLC, pd):
- from typing import Sequence
- import numpy as np
- from collections import defaultdict
- from quantflow.ta.base import DataFrame
-
- default_periods = ("10s", "20s", "30s", "1m", "2m", "3m", "5m", "10m", "30m")
-
- def ohlc_hurst_exponent(
- df: DataFrame,
- series: Sequence[str],
- periods: Sequence[str] = default_periods,
- ) -> DataFrame:
- results = {}
- estimator_names = ("pk", "gk", "rs")
- for serie in series:
- template = OHLC(
- serie=serie,
- period="10m",
- rogers_satchell_variance=True,
- parkinson_variance=True,
- garman_klass_variance=True
- )
- time_range = []
- estimators = defaultdict(list)
- for period in periods:
- ohlc = template.model_copy(update=dict(period=period))
- rf = ohlc(df)
- ts = pd.to_timedelta(period).to_pytimedelta().total_seconds()
- time_range.append(ts)
- for name in estimator_names:
- estimators[name].append(rf[f"{serie}_{name}"].mean())
- results[serie] = [float(np.polyfit(np.log(time_range), np.log(estimators[name]), 1)[0])/2.0 for name in estimator_names]
- return pd.DataFrame(results, index=estimator_names)
- return (ohlc_hurst_exponent,)
-
-
-@app.cell
-def _(ohlc_hurst_exponent, wiener_df):
- ohlc_hurst_exponent(wiener_df, series=["0"])
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- The Hurst exponent should be close to 0.5, since we have calculated the exponent from the paths of a Wiener process. But it is not exactly 0.5 because the range-based estimators are not the same as the realized variance. Interestingly, the Parkinson estimator gives a Hurst exponent closer to 0.5 than the Garman-Klass and Rogers-Satchell estimators.
-
- ## Mean Reverting Time Series
-
- We now turn our attention to mean reverting time series, where the Hurst exponent is less than 0.5.
- """)
- return
-
-
-@app.cell
-def _(pd, regenerate_vasicek, start_of_day):
- from quantflow.sp.ou import Vasicek
- regenerate_vasicek
- p = Vasicek(kappa=2)
- paths = {f"kappa={k}": Vasicek(kappa=float(k)).sample(n=1, time_horizon=1, time_steps=24*60*6) for k in (1, 10, 50, 100, 500)}
- pdf = pd.DataFrame({k: p.path(0) for k, p in paths.items()}, index=paths["kappa=1"].dates(start=start_of_day()))
- pdf.plot()
- return paths, pdf
-
-
-@app.cell
-def _(mo):
- regenerate_vasicek = mo.ui.run_button(label="Regenerate Paths", kind="info")
- regenerate_vasicek
- return (regenerate_vasicek,)
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- ~We can now estimate the Hurst exponent from the realized variance. As we can see the Hurst exponent decreases as we increase the mean reversion parameter.
- """)
- return
-
-
-@app.cell
-def _(paths, pd):
- pd.DataFrame({k: [p.hurst_exponent()] for k, p in paths.items()})
- return
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- And we can also estimate the Hurst exponent from the range-based estimators. As we can see the Hurst exponent decreases as we increase the mean reversion parameter along the same lines as the realized variance.
- """)
- return
-
-
-@app.cell
-def _(ohlc_hurst_exponent, paths, pdf):
- ohlc_hurst_exponent(pdf.reset_index(), list(paths), periods=("10m", "20m", "30m", "1h"))
- return
-
-
-@app.cell
-def _():
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/app/poisson_sampling.py b/app/poisson_sampling.py
deleted file mode 100644
index 6c2406b1..00000000
--- a/app/poisson_sampling.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import marimo
-
-__generated_with = "0.19.7"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell
-def _(mo):
- mo.md(r"""
- # Poisson Sampling
-
- Evaluate the MC simulation for The Poisson process against the analytical PDF.
- """)
- return
-
-
-@app.cell
-def _():
- from quantflow.sp.poisson import PoissonProcess
- import pandas as pd
-
- def simulate_poisson(intensity: float, samples: int) -> pd.DataFrame:
- pr = PoissonProcess(intensity=intensity)
- paths = pr.sample(samples, 1, 1000)
- pdf = paths.pdf(delta=1)
- pdf["simulation"] = pdf["pdf"]
- pdf["analytical"] = pr.marginal(1).pdf(pdf.index)
- return pdf
- return (simulate_poisson,)
-
-
-@app.cell
-def _(mo):
- samples = mo.ui.slider(start=100, stop=10000, step=100, value=1000, debounce=True, label="Samples")
- intensity = mo.ui.slider(start=2, stop=5, step=0.1, debounce=True, label="Poisson intensity $\lambda$")
-
- controls = mo.hstack([samples, intensity], justify="start")
- controls
- return intensity, samples
-
-
-@app.cell
-def _(intensity, samples, simulate_poisson):
- df = simulate_poisson(intensity=intensity.value, samples=samples.value)
- return (df,)
-
-
-@app.cell
-def _(df):
- import plotly.graph_objects as go
- simulation = go.Bar(x=df.index, y=df["simulation"], name="simulation")
- analytical = go.Bar(x=df.index, y=df["analytical"], name="analytical")
- fig = go.Figure(data=[simulation, analytical])
- fig
- return
-
-
-@app.cell
-def _():
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/app/supersmoother.py b/app/supersmoother.py
deleted file mode 100644
index dc0f9ed3..00000000
--- a/app/supersmoother.py
+++ /dev/null
@@ -1,110 +0,0 @@
-import marimo
-
-__generated_with = "0.19.7"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell(hide_code=True)
-def _(mo):
- mo.md(r"""
- # Supermsoother & EWMA
- """)
- return
-
-
-@app.cell
-def _():
- from quantflow.data.fmp import FMP
- fmp = FMP()
- return (fmp,)
-
-
-@app.cell
-async def _(fmp):
- from datetime import date
- data = await fmp.prices("BTCUSD", from_date=date(2024,1,1))
- data
- return (data,)
-
-
-@app.cell
-def _():
- import altair as alt
- import pandas as pd
- return (alt,)
-
-
-@app.cell
-def _(mo):
- period = mo.ui.slider(start=2, stop=100, step=1, value=10, label="Period:")
- period
- return (period,)
-
-
-@app.cell
-def _(data, period):
- from quantflow.ta.supersmoother import SuperSmoother
- from quantflow.ta.ewma import EWMA
- # create the filters
- smoother = SuperSmoother(period=period.value)
- ewma = EWMA(period=period.value)
- # sort dates ascending
- sm = data[["date", "close"]].copy().sort_values("date", ascending=True).reset_index(drop=True)
- sm["supersmoother"] = sm["close"].apply(smoother.update)
- sm["ewma"] = sm["close"].apply(ewma.update)
- return (sm,)
-
-
-@app.cell
-def _(alt, sm):
- # Melt the dataframe to a long format suitable for Altair
- sm_long = sm.melt(
- id_vars=['date'],
- value_vars=['close', 'supersmoother', "ewma"],
- var_name='Signal',
- value_name='Price'
- )
-
- # Create the chart with both SuperSmoothers
- line_chart_combined = alt.Chart(sm_long).mark_line().encode(
- x=alt.X('date:T', title='Date'),
- y=alt.Y('Price:Q', title='Price (USD)', scale=alt.Scale(zero=False)),
- color=alt.Color('Signal:N', title='Signal',
- scale=alt.Scale(
- domain=['close', 'supersmoother', 'ewma'],
- range=['#4c78a8', '#f58518', '#e45756']) # Vega-Lite default palette
- ),
- tooltip=[
- alt.Tooltip('date:T', title='Date'),
- alt.Tooltip('Signal:N', title='Signal'),
- alt.Tooltip('Price:Q', title='Price', format='$,.2f')
- ]
- ).properties(
- title='BTCUSD Close Price vs. SuperSmoothers'
- ).interactive()
-
- line_chart_combined
- return
-
-
-@app.cell
-def _(sm):
- sm
- return
-
-
-@app.cell
-def _():
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/app/utils/__init__.py b/app/utils/__init__.py
index ffd18da2..e69de29b 100644
--- a/app/utils/__init__.py
+++ b/app/utils/__init__.py
@@ -1,12 +0,0 @@
-import marimo as mo
-import pandas as pd
-
-pd.options.plotting.backend = "plotly"
-
-def nav_menu():
- return mo.nav_menu(
- {
- "/": "Quantflow",
- "/api": "API Reference",
- }
- )
diff --git a/app/utils/paths.py b/app/utils/paths.py
index 4ef2f26d..c1243083 100644
--- a/app/utils/paths.py
+++ b/app/utils/paths.py
@@ -1,4 +1,5 @@
from pathlib import Path
+from typing import Any
APP_PATH = Path(__file__).parent.parent
@@ -7,7 +8,7 @@ def head_snippet(path: Path) -> str:
return (path / "assets" / "logos" / "head-snippet.html").read_text()
-def on_post_page(output: str, page, config) -> str:
+def on_post_page(output: str, page: Any, config: Any) -> str:
"""Hook to inject custom HTML into the head of each page in mkdocs build."""
snippet = head_snippet(APP_PATH.parent / "docs")
return output.replace("", f"{snippet}", 1)
diff --git a/app/utils/static.py b/app/utils/static.py
new file mode 100644
index 00000000..b9175d9c
--- /dev/null
+++ b/app/utils/static.py
@@ -0,0 +1,15 @@
+from typing import Any
+
+from fastapi.staticfiles import StaticFiles
+from starlette.exceptions import HTTPException
+from starlette.responses import Response
+
+
+class HtmlFallbackStaticFiles(StaticFiles):
+ async def get_response(self, path: str, scope: Any) -> Response:
+ try:
+ return await super().get_response(path, scope)
+ except HTTPException as e:
+ if e.status_code == 404:
+ return await super().get_response(path + ".html", scope)
+ raise
diff --git a/app/volatility_surface.py b/app/volatility_surface.py
deleted file mode 100644
index b0ac27eb..00000000
--- a/app/volatility_surface.py
+++ /dev/null
@@ -1,118 +0,0 @@
-import marimo
-
-__generated_with = "0.22.0"
-app = marimo.App(width="medium")
-
-
-@app.cell
-def _():
- import marimo as mo
- from app.utils import nav_menu
- nav_menu()
- return (mo,)
-
-
-@app.cell(hide_code=True)
-def _(mo):
- mo.md(r"""
- # Volatility Surface
-
- In this notebook we illustrate the use of the Volatility Surface tool in the library. We use [deribit](https://docs.deribit.com/) options on ETHUSD as example.
-
- The library provide a [VolSurfaceLoader](api/options/vol_surface/#quantflow.options.surface.VolSurfaceLoader) for Deribit:
-
- ```python
- import pandas as pd
- from quantflow.data.deribit import Deribit
-
- async with Deribit() as cli:
- loader = await cli.volatility_surface_loader("eth", exclude_open_interest=0)
-
- # build the volatility surface
- surface = loader.surface()
- # calculate black implied volatilities
- surface.bs()
- # disable outliers
- surface.disable_outliers()
- # display inputs - only options with converged implied volatility
- surface_inputs = surface.inputs(converged=True)
- pd.DataFrame([i.model_dump() for i in surface_inputs.inputs])
- ```
- """)
- return
-
-
-@app.cell
-def _(mo):
- asset = mo.ui.dropdown(["btc", "eth", "sol"], value="btc", label="asset")
- inverse = mo.ui.checkbox(value=True, label="Inverse options")
- mo.hstack([asset, inverse])
- return asset, inverse
-
-
-@app.cell
-async def _(asset, inverse, mo):
- import pandas as pd
- from quantflow.data.deribit import Deribit
-
- async with Deribit() as cli:
- loader = await cli.volatility_surface_loader(
- asset.value,
- inverse=inverse.value,
- use_perp=not inverse.value
- )
-
- # build the volatility surface
- surface = loader.surface()
- # calculate black implied volatilities
- surface.bs()
- # disable outliers
- surface.disable_outliers()
- #
- def int_or_none(v):
- try:
- return int(v)
- except TypeError:
- return None
-
- maturites = [c.maturity for c in surface.maturities]
- maturity_dropdown = mo.ui.dropdown(
- options={m.strftime("%Y-%m-%d"): i for i, m in enumerate(maturites)},
- label="Maturity"
- )
- maturity_dropdown
- return int_or_none, maturity_dropdown, pd, surface
-
-
-@app.cell
-def _(int_or_none, maturity_dropdown, surface):
- index = int_or_none(maturity_dropdown.value)
- surface.plot3d(index=index)
- return (index,)
-
-
-@app.cell
-def _(index, pd, surface):
- # display inputs - only options with converged implied volatility
- surface_inputs = surface.inputs(converged=True, index=index)
- pd.DataFrame([i.model_dump() for i in surface_inputs.inputs])
- return
-
-
-@app.cell
-def _(surface):
- ts = surface.term_structure()
- ts
- return (ts,)
-
-
-@app.cell
-def _(ts):
- from quantflow.utils import plot
-
- plot.plot_lines(ts, x="ttm", y="rate_percent")
- return
-
-
-if __name__ == "__main__":
- app.run()
diff --git a/dev/api-serve b/dev/api-serve
new file mode 100755
index 00000000..c14a5586
--- /dev/null
+++ b/dev/api-serve
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+set -e
+
+API_PORT=${API_PORT:-8001}
+
+echo "API: http://127.0.0.1:${API_PORT}"
+
+uv run uvicorn \
+ app.__main__:crate_app \
+ --factory \
+ --host 127.0.0.1 \
+ --port ${API_PORT} \
+ --reload \
+ --reload-dir app \
+ --reload-dir quantflow
diff --git a/dev/docs-serve b/dev/docs-serve
new file mode 100755
index 00000000..4e44b39b
--- /dev/null
+++ b/dev/docs-serve
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+set -e
+
+OBSERVABLE_PORT=${OBSERVABLE_PORT:-3001}
+DOCS_PORT=${DOCS_PORT:-8000}
+API_PORT=${API_PORT:-8001}
+FRONTEND_ORIGIN=${FRONTEND_ORIGIN:-http://127.0.0.1:${OBSERVABLE_PORT}}
+QUANTFLOW_API_ORIGIN=${QUANTFLOW_API_ORIGIN:-http://127.0.0.1:${API_PORT}}
+
+npm --prefix app/frontend exec concurrently -- \
+ --kill-others \
+ --names docs,examples,api \
+ --prefix "[{name}]" \
+ "DOCS_PORT=${DOCS_PORT} bash ./dev/mkdocs-serve" \
+ "OBSERVABLE_PORT=${OBSERVABLE_PORT} QUANTFLOW_API_ORIGIN=${QUANTFLOW_API_ORIGIN} bash ./dev/frontend-serve" \
+ "API_PORT=${API_PORT} QUANTFLOW_CORS_ORIGINS=${FRONTEND_ORIGIN} bash ./dev/api-serve"
diff --git a/dev/frontend-serve b/dev/frontend-serve
new file mode 100755
index 00000000..a18a3676
--- /dev/null
+++ b/dev/frontend-serve
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+set -e
+
+OBSERVABLE_PORT=${OBSERVABLE_PORT:-3001}
+
+echo "Examples: http://127.0.0.1:${OBSERVABLE_PORT}"
+
+npm --prefix app/frontend run dev -- --host 127.0.0.1 --port ${OBSERVABLE_PORT}
diff --git a/dev/lint b/dev/lint
index adfca376..2cde4b93 100755
--- a/dev/lint
+++ b/dev/lint
@@ -5,7 +5,7 @@ ISORT_ARGS="-c"
BLACK_ARG="--check"
RUFF_ARG=""
TAPLO_ARG="format --check"
-PACKAGES="quantflow quantflow_tests docs/examples"
+PACKAGES="quantflow quantflow_tests docs/examples app/api app/utils app/__main__.py"
if [ "$1" = "fix" ] ; then
ISORT_ARGS=""
diff --git a/dev/mkdocs-serve b/dev/mkdocs-serve
new file mode 100755
index 00000000..a6209383
--- /dev/null
+++ b/dev/mkdocs-serve
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+set -e
+
+DOCS_PORT=${DOCS_PORT:-8000}
+
+echo "Documentation: http://127.0.0.1:${DOCS_PORT}"
+
+uv run mkdocs serve \
+ --dev-addr 127.0.0.1:${DOCS_PORT} \
+ --livereload \
+ --watch quantflow \
+ --watch docs
diff --git a/dev/quantflow.dockerfile b/dev/quantflow.dockerfile
index c9c11afe..7c52811e 100644
--- a/dev/quantflow.dockerfile
+++ b/dev/quantflow.dockerfile
@@ -13,7 +13,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
COPY pyproject.toml uv.lock readme.md ./
# Install dependencies (no root package, with needed extras)
-RUN uv sync --frozen --no-install-project --extra ai --extra book --extra docs --extra data
+RUN uv sync --frozen --no-install-project --extra ai --extra docs --extra data
# Copy source, generate example outputs and images, then build docs
COPY mkdocs.yml ./
diff --git a/dev/serve-info b/dev/serve-info
new file mode 100644
index 00000000..82461c8c
--- /dev/null
+++ b/dev/serve-info
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+set -e
+
+OBSERVABLE_PORT=${OBSERVABLE_PORT:-3001}
+DOCS_PORT=${DOCS_PORT:-8000}
+API_PORT=${API_PORT:-8001}
+
+echo "Documentation: http://127.0.0.1:${DOCS_PORT}"
+echo "Examples: http://127.0.0.1:${OBSERVABLE_PORT}"
+echo "API: http://127.0.0.1:${API_PORT}"
diff --git a/docs/api/data/index.md b/docs/api/data/index.md
index db925569..5ea40949 100644
--- a/docs/api/data/index.md
+++ b/docs/api/data/index.md
@@ -19,7 +19,7 @@ pip install quantflow[data]
| [Financial Modeling Prep](fmp.md) | Equity prices, company profiles, and sector data |
| [FRED](fred.md) | US macroeconomic time series from the St. Louis Fed |
| [Federal Reserve](fed.md) | Federal Reserve H.15 selected interest rate data |
-| [Yahoo](yahoo.md) | Equity option chains from Yahoo Finance |
+| [Yahoo](yahoo.md) | Equity prices and option chains from Yahoo Finance |
## Usage
diff --git a/docs/api/options/black.md b/docs/api/options/black.md
index 5107fdbd..9da130af 100644
--- a/docs/api/options/black.md
+++ b/docs/api/options/black.md
@@ -3,10 +3,10 @@
Here we define the [log strike](../../glossary.md#log-strike) `k` as
\begin{equation}
- k = \log{\frac{K}{F}}
+ k = \log{\frac{K}{F_\tau}}
\end{equation}
-where $K$ is the strike price and $F$ is the forward price of the underlying asset.
+where $K$ is the strike price and $F_\tau$ is the forward price of the underlying asset at time to maturity $\tau$.
::: quantflow.options.bs.black_price
diff --git a/docs/api/options/calibration.md b/docs/api/options/calibration.md
index b2eadd87..022ebd48 100644
--- a/docs/api/options/calibration.md
+++ b/docs/api/options/calibration.md
@@ -1,5 +1,7 @@
# Vol Model Calibration
+::: quantflow.options.calibration.base.ResidualKind
+
::: quantflow.options.calibration.base.OptionEntry
::: quantflow.options.calibration.base.VolModelCalibration
diff --git a/docs/api/options/parity.md b/docs/api/options/parity.md
new file mode 100644
index 00000000..35f2fa9b
--- /dev/null
+++ b/docs/api/options/parity.md
@@ -0,0 +1,6 @@
+# Put-Call Parity
+
+
+::: quantflow.options.parity.PutCallParity
+
+::: quantflow.options.parity.PutCallParities
diff --git a/docs/api/options/vol_surface.md b/docs/api/options/vol_surface.md
index 666a753b..cc52999e 100644
--- a/docs/api/options/vol_surface.md
+++ b/docs/api/options/vol_surface.md
@@ -19,8 +19,6 @@
::: quantflow.options.surface.FwdPrice
-::: quantflow.options.surface.ImpliedFwdPrice
-
::: quantflow.options.surface.Strike
::: quantflow.options.surface.OptionArrays
diff --git a/docs/api/rates/index.md b/docs/api/rates/index.md
index bb62d8ed..bea75bc9 100644
--- a/docs/api/rates/index.md
+++ b/docs/api/rates/index.md
@@ -1 +1,17 @@
# Interest Rates
+
+The `quantflow.rates` module provides primitives for interest rate modelling: flat rates, yield curves, and curve fitting.
+
+The central concept is the [discount factor](../../glossary.md#discount-factor) $D_\tau$, the present value of one unit of currency paid at time $\tau$. Every class in this module exposes a `discount_factor` method that computes $D_\tau$ from the configured rate or curve.
+
+**[Rate](interest_rate.md)** represents a spot or forward interest rate with a chosen compounding frequency (continuous by default) and day count convention. It supports continuous and periodic compounding and can be bootstrapped directly from a spot/forward pair.
+
+**[YieldCurve](yield_curve.md)** is the abstract base for term-structure models. It defines the interface via `discount_factor` and `instantaneous_forward_rate`, with the two quantities linked by
+
+\begin{equation}
+ f(\tau) = -\frac{\partial \ln D_\tau}{\partial \tau}
+\end{equation}
+
+**[NelsonSiegel](nelson_siegel.md)** is a concrete `YieldCurve` implementation that fits a smooth parametric curve to observed zero-coupon rates using the Nelson-Siegel functional form.
+
+**[Options Discounting](options.md)** provides `YieldCurveCalibration`, the base class for fitting a yield curve to discount factors, and `OptionsDiscountingCalibration`, which bootstraps asset and quote curves from put-call parity observations.
diff --git a/docs/api/rates/nelson_siegel.md b/docs/api/rates/nelson_siegel.md
new file mode 100644
index 00000000..9b30a719
--- /dev/null
+++ b/docs/api/rates/nelson_siegel.md
@@ -0,0 +1,3 @@
+# Nelson Siegel Curve
+
+::: quantflow.rates.nelson_siegel.NelsonSiegel
diff --git a/docs/api/rates/options.md b/docs/api/rates/options.md
new file mode 100644
index 00000000..9e403bd5
--- /dev/null
+++ b/docs/api/rates/options.md
@@ -0,0 +1,5 @@
+# Options Discounting
+
+::: quantflow.rates.options.YieldCurveCalibration
+
+::: quantflow.rates.options.OptionsDiscountingCalibration
diff --git a/docs/api/rates/yield_curve.md b/docs/api/rates/yield_curve.md
index f2f41c8b..77e74ce3 100644
--- a/docs/api/rates/yield_curve.md
+++ b/docs/api/rates/yield_curve.md
@@ -2,5 +2,3 @@
::: quantflow.rates.yield_curve.YieldCurve
-
-::: quantflow.rates.nelson_siegel.NelsonSiegel
diff --git a/docs/examples/fixtures/volsurface_btc.json b/docs/examples/fixtures/volsurface_btc.json
index 35d4d689..e045ae02 100644
--- a/docs/examples/fixtures/volsurface_btc.json
+++ b/docs/examples/fixtures/volsurface_btc.json
@@ -1,5347 +1,5150 @@
{
- "asset": "BTC",
- "ref_date": "2026-04-27T08:54:57.694519Z",
+ "asset": "btc",
+ "asset_curve": {
+ "ref_date": "2026-05-21T10:04:10.269985Z",
+ "curve_type": "no_discount"
+ },
+ "quote_curve": {
+ "ref_date": "2026-05-21T10:04:10.269985Z",
+ "curve_type": "nelson_siegel",
+ "beta1": "-1.3242608183",
+ "beta2": "1.3324170039",
+ "beta3": "1.6559934427",
+ "lambda_": "0.3139300004"
+ },
"inputs": [
{
- "bid": "77775.5",
- "ask": "77776",
- "open_interest": "987675860",
- "volume": "434177180",
+ "bid": "77596.5",
+ "ask": "77597",
+ "open_interest": "1010106310",
+ "volume": "310861580",
"security_type": "spot"
},
{
- "bid": "77688.0",
- "ask": "77847.5",
- "open_interest": "0",
- "volume": "0",
- "maturity": "2026-04-28T08:00:00Z",
+ "bid": "77567.5",
+ "ask": "77570",
+ "open_interest": "6770230",
+ "volume": "2446790",
+ "maturity": "2026-05-22T08:00:00Z",
"security_type": "forward"
},
{
"bid": "0.0001",
"ask": "0.0002",
- "open_interest": "112.9",
- "volume": "1727.33",
- "strike": "73000",
- "maturity": "2026-04-28T08:00:00Z",
+ "open_interest": "1003",
+ "volume": "27274.34",
+ "strike": "74000",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5375622",
- "iv_ask": "0.5919214",
+ "iv_bid": "0.429617",
+ "iv_ask": "0.4756913",
"inverse": true
},
{
- "bid": "0.0004",
- "ask": "0.0006",
- "open_interest": "250.8",
- "volume": "1424.59",
+ "bid": "0.0003",
+ "ask": "0.0004",
+ "open_interest": "428.6",
+ "volume": "3943.98",
"strike": "75000",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4188391",
- "iv_ask": "0.4554825",
+ "iv_bid": "0.3867369",
+ "iv_ask": "0.408779",
"inverse": true
},
{
- "bid": "0.0006",
- "ask": "0.0008",
- "open_interest": "49.3",
- "volume": "3460.73",
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "76.4",
+ "volume": "4231.52",
"strike": "75500",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3889021",
- "iv_ask": "0.4165291",
+ "iv_bid": "0.3437617",
+ "iv_ask": "0.3761377",
"inverse": true
},
{
- "bid": "0.001",
- "ask": "0.0012",
- "open_interest": "100.2",
- "volume": "8113.88",
+ "bid": "0.0008",
+ "ask": "0.0011",
+ "open_interest": "656.6",
+ "volume": "10576.95",
"strike": "76000",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3668268",
- "iv_ask": "0.3868547",
+ "iv_bid": "0.3290538",
+ "iv_ask": "0.360526",
"inverse": true
},
{
- "bid": "0.0016",
+ "bid": "0.0015",
"ask": "0.0019",
- "open_interest": "66.7",
- "volume": "8226.51",
+ "open_interest": "86.5",
+ "volume": "10478.47",
"strike": "76500",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3392663",
- "iv_ask": "0.3616924",
+ "iv_bid": "0.3105365",
+ "iv_ask": "0.3401717",
"inverse": true
},
{
- "bid": "0.0028",
- "ask": "0.0032",
- "open_interest": "98.1",
- "volume": "26045.32",
+ "bid": "0.0029",
+ "ask": "0.0033",
+ "open_interest": "432.3",
+ "volume": "20894.33",
"strike": "77000",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3235727",
- "iv_ask": "0.3467574",
+ "iv_bid": "0.3008514",
+ "iv_ask": "0.3236012",
"inverse": true
},
{
- "bid": "0.0048",
+ "bid": "0.005",
"ask": "0.0055",
- "open_interest": "63.7",
- "volume": "24109.03",
+ "open_interest": "70.9",
+ "volume": "34549.57",
"strike": "77500",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3117853",
- "iv_ask": "0.3467488",
+ "iv_bid": "0.2813215",
+ "iv_ask": "0.3064808",
"inverse": true
},
{
- "bid": "0.005",
- "ask": "0.0055",
- "open_interest": "45.5",
- "volume": "20438.49",
+ "bid": "0.0032",
+ "ask": "0.0036",
+ "open_interest": "460.9",
+ "volume": "46727.7",
"strike": "78000",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3111888",
- "iv_ask": "0.3359649",
+ "iv_bid": "0.2696848",
+ "iv_ask": "0.291074",
"inverse": true
},
{
- "bid": "0.0032",
- "ask": "0.0035",
- "open_interest": "38.8",
- "volume": "16645.2",
+ "bid": "0.0015",
+ "ask": "0.0019",
+ "open_interest": "200.2",
+ "volume": "10400.16",
"strike": "78500",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.335916",
- "iv_ask": "0.3526992",
+ "iv_bid": "0.2713719",
+ "iv_ask": "0.2990356",
"inverse": true
},
{
- "bid": "0.0017",
- "ask": "0.0021",
- "open_interest": "70.5",
- "volume": "12791.91",
+ "bid": "0.0008",
+ "ask": "0.0009",
+ "open_interest": "517.3",
+ "volume": "23993.21",
"strike": "79000",
- "maturity": "2026-04-28T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3353014",
- "iv_ask": "0.3637628",
- "inverse": true
- },
- {
- "bid": "0.001",
- "ask": "0.0012",
- "open_interest": "33.7",
- "volume": "9985.45",
- "strike": "79500",
- "maturity": "2026-04-28T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.353494",
- "iv_ask": "0.3729134",
- "inverse": true
- },
- {
- "bid": "0.0005",
- "ask": "0.0007",
- "open_interest": "304.8",
- "volume": "11838.5",
- "strike": "80000",
- "maturity": "2026-04-28T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3582481",
- "iv_ask": "0.3870258",
- "inverse": true
- },
- {
- "bid": "0.0003",
- "ask": "0.0004",
- "open_interest": "78",
- "volume": "8399.42",
- "strike": "80500",
- "maturity": "2026-04-28T08:00:00Z",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3787766",
- "iv_ask": "0.4001093",
+ "iv_bid": "0.2935461",
+ "iv_ask": "0.3037228",
"inverse": true
},
{
"bid": "0.0002",
"ask": "0.0003",
- "open_interest": "67.7",
- "volume": "2909.5",
- "strike": "81000",
- "maturity": "2026-04-28T08:00:00Z",
+ "open_interest": "1156.4",
+ "volume": "33764.55",
+ "strike": "80000",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4046507",
- "iv_ask": "0.4333609",
+ "iv_bid": "0.3264002",
+ "iv_ask": "0.3512333",
"inverse": true
},
{
"bid": "0.0001",
"ask": "0.0002",
- "open_interest": "101.3",
- "volume": "2441.79",
- "strike": "82000",
- "maturity": "2026-04-28T08:00:00Z",
+ "open_interest": "994.5",
+ "volume": "1787.07",
+ "strike": "81000",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4573552",
- "iv_ask": "0.5047645",
+ "iv_bid": "0.3911805",
+ "iv_ask": "0.4336455",
"inverse": true
},
{
- "bid": "77700.0",
- "ask": "77815.0",
- "open_interest": "0",
- "volume": "0",
- "maturity": "2026-04-29T08:00:00Z",
+ "bid": "77255",
+ "ask": "77627.5",
+ "open_interest": "54290",
+ "volume": "6260",
+ "maturity": "2026-05-23T08:00:00Z",
"security_type": "forward"
},
{
"bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "78.1",
- "volume": "949.38",
- "strike": "70000",
- "maturity": "2026-04-29T08:00:00Z",
+ "ask": "0.0002",
+ "open_interest": "28.2",
+ "volume": "69.95",
+ "strike": "72000",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5886027",
- "iv_ask": "0.6803194",
+ "iv_bid": "0.4418664",
+ "iv_ask": "0.485088",
"inverse": true
},
{
"bid": "0.0002",
"ask": "0.0004",
- "open_interest": "8.8",
- "volume": "187.38",
- "strike": "71000",
- "maturity": "2026-04-29T08:00:00Z",
- "option_type": "put",
- "security_type": "option",
- "iv_bid": "0.5664797",
- "iv_ask": "0.6280995",
- "inverse": true
- },
- {
- "bid": "0.0002",
- "ask": "0.0005",
- "open_interest": "3.6",
- "volume": "60.16",
- "strike": "72000",
- "maturity": "2026-04-29T08:00:00Z",
+ "open_interest": "84.1",
+ "volume": "1258.29",
+ "strike": "73000",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4902668",
- "iv_ask": "0.5665876",
+ "iv_bid": "0.407351",
+ "iv_ask": "0.4556122",
"inverse": true
},
{
"bid": "0.0004",
"ask": "0.0007",
- "open_interest": "46",
- "volume": "1682.65",
- "strike": "73000",
- "maturity": "2026-04-29T08:00:00Z",
- "option_type": "put",
- "security_type": "option",
- "iv_bid": "0.4623826",
- "iv_ask": "0.5127515",
- "inverse": true
- },
- {
- "bid": "0.0007",
- "ask": "0.001",
- "open_interest": "32.2",
- "volume": "1348.04",
+ "open_interest": "11.5",
+ "volume": "371.77",
"strike": "74000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4220138",
- "iv_ask": "0.4563569",
+ "iv_bid": "0.3700709",
+ "iv_ask": "0.4133213",
"inverse": true
},
{
- "bid": "0.001",
- "ask": "0.0012",
- "open_interest": "20.1",
- "volume": "929.25",
+ "bid": "0.0007",
+ "ask": "0.0009",
+ "open_interest": "27.8",
+ "volume": "200.7",
"strike": "74500",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.407718",
- "iv_ask": "0.4263311",
+ "iv_bid": "0.3663527",
+ "iv_ask": "0.3878956",
"inverse": true
},
{
- "bid": "0.0013",
- "ask": "0.0016",
- "open_interest": "52.2",
- "volume": "2394.27",
+ "bid": "0.001",
+ "ask": "0.0013",
+ "open_interest": "26.7",
+ "volume": "4071.74",
"strike": "75000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3835137",
- "iv_ask": "0.4062553",
+ "iv_bid": "0.3473141",
+ "iv_ask": "0.3721851",
"inverse": true
},
{
- "bid": "0.0019",
- "ask": "0.0023",
- "open_interest": "10.9",
- "volume": "2131.48",
+ "bid": "0.0016",
+ "ask": "0.0019",
+ "open_interest": "32.7",
+ "volume": "6591.67",
"strike": "75500",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3709432",
- "iv_ask": "0.3950226",
+ "iv_bid": "0.3387223",
+ "iv_ask": "0.3577577",
"inverse": true
},
{
- "bid": "0.0028",
- "ask": "0.003",
- "open_interest": "30.5",
- "volume": "7010.16",
+ "bid": "0.0025",
+ "ask": "0.0028",
+ "open_interest": "7.8",
+ "volume": "1423.38",
"strike": "76000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3606688",
- "iv_ask": "0.3706205",
+ "iv_bid": "0.3300149",
+ "iv_ask": "0.3451084",
"inverse": true
},
{
- "bid": "0.0041",
- "ask": "0.0044",
- "open_interest": "165.7",
- "volume": "6172.95",
+ "bid": "0.0038",
+ "ask": "0.0041",
+ "open_interest": "25.6",
+ "volume": "9566.44",
"strike": "76500",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.352067",
- "iv_ask": "0.3646061",
+ "iv_bid": "0.3208607",
+ "iv_ask": "0.333405",
"inverse": true
},
{
- "bid": "0.006",
- "ask": "0.0065",
- "open_interest": "44.6",
- "volume": "17287.94",
+ "bid": "0.0055",
+ "ask": "0.006",
+ "open_interest": "3.9",
+ "volume": "1481.76",
"strike": "77000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.34822",
- "iv_ask": "0.3666432",
+ "iv_bid": "0.3069603",
+ "iv_ask": "0.3253663",
"inverse": true
},
{
"bid": "0.008",
"ask": "0.009",
- "open_interest": "19.8",
- "volume": "8876.2",
+ "open_interest": "18.3",
+ "volume": "13806.5",
"strike": "77500",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3275722",
- "iv_ask": "0.362119",
+ "iv_bid": "0.2989107",
+ "iv_ask": "0.3336076",
"inverse": true
},
{
- "bid": "0.0085",
- "ask": "0.009",
- "open_interest": "13.9",
- "volume": "9131.59",
+ "bid": "0.006",
+ "ask": "0.007",
+ "open_interest": "329.4",
+ "volume": "147856.15",
"strike": "78000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3407638",
- "iv_ask": "0.3579606",
+ "iv_bid": "0.2874394",
+ "iv_ask": "0.3229204",
"inverse": true
},
{
- "bid": "0.006",
- "ask": "0.0065",
- "open_interest": "6.2",
- "volume": "5492.23",
+ "bid": "0.0039",
+ "ask": "0.0043",
+ "open_interest": "20.5",
+ "volume": "7080.72",
"strike": "78500",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3423951",
- "iv_ask": "0.3606088",
+ "iv_bid": "0.2913542",
+ "iv_ask": "0.3072174",
"inverse": true
},
{
- "bid": "0.0041",
- "ask": "0.0044",
- "open_interest": "5",
- "volume": "4461.19",
+ "bid": "0.0023",
+ "ask": "0.0027",
+ "open_interest": "37.4",
+ "volume": "5866.37",
"strike": "79000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3443416",
- "iv_ask": "0.3566525",
+ "iv_bid": "0.28883",
+ "iv_ask": "0.3081595",
"inverse": true
},
{
- "bid": "0.0027",
- "ask": "0.0029",
- "open_interest": "21.4",
- "volume": "15740.49",
+ "bid": "0.0013",
+ "ask": "0.0017",
+ "open_interest": "15.1",
+ "volume": "612.35",
"strike": "79500",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3458753",
- "iv_ask": "0.3556803",
+ "iv_bid": "0.2890175",
+ "iv_ask": "0.3142938",
"inverse": true
},
{
- "bid": "0.0018",
- "ask": "0.002",
- "open_interest": "136.9",
- "volume": "46707.64",
+ "bid": "0.0009",
+ "ask": "0.001",
+ "open_interest": "41.3",
+ "volume": "1458",
"strike": "80000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.352621",
- "iv_ask": "0.3647188",
+ "iv_bid": "0.3084363",
+ "iv_ask": "0.3168659",
"inverse": true
},
{
- "bid": "0.0012",
- "ask": "0.0015",
- "open_interest": "57",
- "volume": "21009.19",
+ "bid": "0.0005",
+ "ask": "0.0007",
+ "open_interest": "4",
+ "volume": "293.59",
"strike": "80500",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3609259",
- "iv_ask": "0.3835217",
+ "iv_bid": "0.3113354",
+ "iv_ask": "0.3346143",
"inverse": true
},
{
- "bid": "0.0008",
- "ask": "0.001",
- "open_interest": "31.3",
- "volume": "7861.02",
+ "bid": "0.0003",
+ "ask": "0.0005",
+ "open_interest": "63.4",
+ "volume": "587.34",
"strike": "81000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3699856",
- "iv_ask": "0.3896471",
+ "iv_bid": "0.320528",
+ "iv_ask": "0.3524184",
"inverse": true
},
{
- "bid": "0.0004",
- "ask": "0.0006",
- "open_interest": "3.6",
- "volume": "428.85",
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "33",
+ "volume": "681.71",
"strike": "82000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3969482",
- "iv_ask": "0.4280958",
+ "iv_bid": "0.33562",
+ "iv_ask": "0.3945901",
"inverse": true
},
{
- "bid": "0.0002",
- "ask": "0.0004",
- "open_interest": "22.9",
- "volume": "905.57",
+ "bid": "0.0001",
+ "ask": "0.0002",
+ "open_interest": "2.6",
+ "volume": "48.27",
"strike": "83000",
- "maturity": "2026-04-29T08:00:00Z",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4214744",
- "iv_ask": "0.4699667",
+ "iv_bid": "0.3986911",
+ "iv_ask": "0.4379765",
"inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "10.1",
- "volume": "523.75",
- "strike": "84000",
- "maturity": "2026-04-29T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.4439978",
- "iv_ask": "0.5163625",
- "inverse": true
+ "bid": "77270",
+ "ask": "77835",
+ "open_interest": "10410",
+ "volume": "10150",
+ "maturity": "2026-05-24T08:00:00Z",
+ "security_type": "forward"
},
{
"bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "13.4",
- "volume": "171.28",
- "strike": "85000",
- "maturity": "2026-04-29T08:00:00Z",
- "option_type": "call",
+ "ask": "0.0002",
+ "open_interest": "1.5",
+ "volume": "30.39",
+ "strike": "70000",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.5028555",
- "iv_ask": "0.5823179",
+ "iv_bid": "0.4748059",
+ "iv_ask": "0.5185349",
"inverse": true
},
{
- "bid": "77709.5",
- "ask": "77821.5",
- "open_interest": "0",
- "volume": "0",
- "maturity": "2026-04-30T08:00:00Z",
- "security_type": "forward"
- },
- {
- "bid": "0.0003",
- "ask": "0.0005",
- "open_interest": "56.5",
- "volume": "2535.67",
- "strike": "69000",
- "maturity": "2026-04-30T08:00:00Z",
+ "bid": "0.0001",
+ "ask": "0.0002",
+ "open_interest": "10.6",
+ "volume": "2.33",
+ "strike": "71000",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6190282",
- "iv_ask": "0.6685198",
+ "iv_bid": "0.416506",
+ "iv_ask": "0.4559338",
"inverse": true
},
{
- "bid": "0.0004",
- "ask": "0.0006",
- "open_interest": "0.1",
- "volume": "3.9",
- "strike": "70000",
- "maturity": "2026-04-30T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "8.8",
+ "volume": "25.56",
+ "strike": "72000",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5787191",
- "iv_ask": "0.6181027",
+ "iv_bid": "0.3932479",
+ "iv_ask": "0.4378054",
"inverse": true
},
{
- "bid": "0.0006",
- "ask": "0.0008",
- "open_interest": "0.4",
- "volume": "21.79",
- "strike": "71000",
- "maturity": "2026-04-30T08:00:00Z",
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "27.4",
+ "volume": "518.23",
+ "strike": "73000",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5476061",
- "iv_ask": "0.5768897",
+ "iv_bid": "0.3693727",
+ "iv_ask": "0.397771",
"inverse": true
},
{
"bid": "0.0008",
"ask": "0.001",
- "open_interest": "0.7",
- "volume": "45.13",
- "strike": "72000",
- "maturity": "2026-04-30T08:00:00Z",
+ "open_interest": "112.5",
+ "volume": "9228",
+ "strike": "74000",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5033645",
- "iv_ask": "0.5263468",
+ "iv_bid": "0.3448846",
+ "iv_ask": "0.3626844",
"inverse": true
},
{
"bid": "0.0011",
"ask": "0.0014",
- "open_interest": "127.2",
- "volume": "13425.15",
- "strike": "73000",
- "maturity": "2026-04-30T08:00:00Z",
- "option_type": "put",
- "security_type": "option",
- "iv_bid": "0.4592521",
- "iv_ask": "0.4852733",
- "inverse": true
- },
- {
- "bid": "0.0018",
- "ask": "0.002",
- "open_interest": "26",
- "volume": "4001.11",
- "strike": "74000",
- "maturity": "2026-04-30T08:00:00Z",
+ "open_interest": "9.3",
+ "volume": "501.87",
+ "strike": "74500",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4306846",
- "iv_ask": "0.4433194",
+ "iv_bid": "0.3301382",
+ "iv_ask": "0.3512342",
"inverse": true
},
{
- "bid": "0.0029",
- "ask": "0.0033",
- "open_interest": "32.2",
- "volume": "8385.22",
+ "bid": "0.0016",
+ "ask": "0.0019",
+ "open_interest": "59.9",
+ "volume": "7354.21",
"strike": "75000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3990423",
- "iv_ask": "0.4174519",
+ "iv_bid": "0.3199972",
+ "iv_ask": "0.3368257",
"inverse": true
},
{
- "bid": "0.0038",
- "ask": "0.0042",
- "open_interest": "19.5",
- "volume": "8779.89",
+ "bid": "0.0022",
+ "ask": "0.0026",
+ "open_interest": "29.2",
+ "volume": "7246.7",
"strike": "75500",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3873955",
- "iv_ask": "0.4033429",
+ "iv_bid": "0.3046823",
+ "iv_ask": "0.3230649",
"inverse": true
},
{
- "bid": "0.005",
- "ask": "0.0055",
- "open_interest": "18.1",
- "volume": "6707.94",
+ "bid": "0.0033",
+ "ask": "0.0036",
+ "open_interest": "5.9",
+ "volume": "2617.8",
"strike": "76000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3772585",
- "iv_ask": "0.3947663",
+ "iv_bid": "0.2995157",
+ "iv_ask": "0.3109128",
"inverse": true
},
{
- "bid": "0.0065",
- "ask": "0.0075",
- "open_interest": "3.5",
- "volume": "2969.98",
+ "bid": "0.0047",
+ "ask": "0.0055",
+ "open_interest": "4.3",
+ "volume": "3662.7",
"strike": "76500",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.366274",
- "iv_ask": "0.3977172",
+ "iv_bid": "0.290402",
+ "iv_ask": "0.3163913",
"inverse": true
},
{
- "bid": "0.0085",
- "ask": "0.009",
- "open_interest": "17.1",
- "volume": "13690.5",
+ "bid": "0.0065",
+ "ask": "0.0075",
+ "open_interest": "10.3",
+ "volume": "6978.72",
"strike": "77000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3586642",
- "iv_ask": "0.3732924",
+ "iv_bid": "0.2788022",
+ "iv_ask": "0.3082419",
"inverse": true
},
{
- "bid": "0.011",
- "ask": "0.012",
- "open_interest": "26.7",
- "volume": "22941.75",
+ "bid": "0.009",
+ "ask": "0.01",
+ "open_interest": "25.3",
+ "volume": "25783.65",
"strike": "77500",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3521661",
- "iv_ask": "0.3801943",
+ "iv_bid": "0.2707164",
+ "iv_ask": "0.2988297",
"inverse": true
},
{
- "bid": "0.0115",
- "ask": "0.012",
- "open_interest": "114.8",
- "volume": "125803.96",
+ "bid": "0.007",
+ "ask": "0.008",
+ "open_interest": "12.6",
+ "volume": "12412.58",
"strike": "78000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3598777",
- "iv_ask": "0.3738297",
+ "iv_bid": "0.2614019",
+ "iv_ask": "0.289999",
"inverse": true
},
{
- "bid": "0.0085",
- "ask": "0.0095",
- "open_interest": "18",
- "volume": "21300.07",
+ "bid": "0.0048",
+ "ask": "0.0055",
+ "open_interest": "3.4",
+ "volume": "1501.51",
"strike": "78500",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3508133",
- "iv_ask": "0.3796688",
+ "iv_bid": "0.2645518",
+ "iv_ask": "0.2863374",
"inverse": true
},
{
- "bid": "0.0065",
- "ask": "0.007",
- "open_interest": "112",
- "volume": "142139.84",
+ "bid": "0.0031",
+ "ask": "0.0035",
+ "open_interest": "14.2",
+ "volume": "5268.42",
"strike": "79000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3565683",
- "iv_ask": "0.37206",
+ "iv_bid": "0.2645833",
+ "iv_ask": "0.2791584",
"inverse": true
},
{
- "bid": "0.0048",
- "ask": "0.0055",
- "open_interest": "82.4",
- "volume": "56724.13",
+ "bid": "0.002",
+ "ask": "0.0022",
+ "open_interest": "25.4",
+ "volume": "2653.6",
"strike": "79500",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3584929",
- "iv_ask": "0.3824691",
+ "iv_bid": "0.2687246",
+ "iv_ask": "0.2777732",
"inverse": true
},
{
- "bid": "0.0034",
- "ask": "0.0038",
- "open_interest": "24",
- "volume": "11431.76",
+ "bid": "0.0013",
+ "ask": "0.0015",
+ "open_interest": "25.8",
+ "volume": "3810.16",
"strike": "80000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3573297",
- "iv_ask": "0.3732309",
+ "iv_bid": "0.2754615",
+ "iv_ask": "0.2869724",
"inverse": true
},
{
- "bid": "0.0024",
- "ask": "0.0028",
- "open_interest": "160",
- "volume": "72073.42",
+ "bid": "0.0008",
+ "ask": "0.001",
+ "open_interest": "0.9",
+ "volume": "76.81",
"strike": "80500",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3589487",
- "iv_ask": "0.3777727",
+ "iv_bid": "0.2794076",
+ "iv_ask": "0.2947166",
"inverse": true
},
{
- "bid": "0.0017",
- "ask": "0.0019",
- "open_interest": "14.6",
- "volume": "5405.8",
- "strike": "81000",
- "maturity": "2026-04-30T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3629189",
- "iv_ask": "0.3744968",
- "inverse": true
- },
- {
- "bid": "0.0012",
- "ask": "0.0014",
- "open_interest": "1.9",
- "volume": "195.91",
- "strike": "81500",
- "maturity": "2026-04-30T08:00:00Z",
+ "bid": "0.0005",
+ "ask": "0.0007",
+ "open_interest": "63.7",
+ "volume": "2239.71",
+ "strike": "81000",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3677125",
- "iv_ask": "0.3819824",
+ "iv_bid": "0.2854745",
+ "iv_ask": "0.3059472",
"inverse": true
},
{
- "bid": "0.0008",
- "ask": "0.001",
- "open_interest": "42.8",
- "volume": "6840.17",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "0.4",
+ "volume": "12.39",
"strike": "82000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3687651",
- "iv_ask": "0.3870011",
+ "iv_bid": "0.2998333",
+ "iv_ask": "0.335726",
"inverse": true
},
{
- "bid": "0.0004",
- "ask": "0.0006",
- "open_interest": "33.7",
- "volume": "3504.41",
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "0.1",
+ "volume": "1.56",
"strike": "83000",
- "maturity": "2026-04-30T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3819902",
- "iv_ask": "0.4104745",
- "inverse": true
- },
- {
- "bid": "0.0002",
- "ask": "0.0004",
- "open_interest": "50.6",
- "volume": "3508.83",
- "strike": "84000",
- "maturity": "2026-04-30T08:00:00Z",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3955028",
- "iv_ask": "0.4392871",
+ "iv_bid": "0.3230049",
+ "iv_ask": "0.3772798",
"inverse": true
},
{
"bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "46.2",
- "volume": "2409.81",
- "strike": "85000",
- "maturity": "2026-04-30T08:00:00Z",
+ "ask": "0.0002",
+ "open_interest": "2.3",
+ "volume": "42.78",
+ "strike": "84000",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4088416",
- "iv_ask": "0.4734637",
+ "iv_bid": "0.3725421",
+ "iv_ask": "0.4080264",
"inverse": true
},
{
- "bid": "77730",
- "ask": "77732.5",
- "open_interest": "30198620",
- "volume": "5038760",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "77275",
+ "ask": "77840",
+ "open_interest": "0",
+ "volume": "0",
+ "maturity": "2026-05-25T08:00:00Z",
"security_type": "forward"
},
{
"bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "996.5",
- "volume": "1651.85",
- "strike": "65000",
- "maturity": "2026-05-01T08:00:00Z",
+ "ask": "0.0002",
+ "open_interest": "20",
+ "volume": "155.41",
+ "strike": "69000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6662974",
- "iv_ask": "0.7605",
+ "iv_bid": "0.4602006",
+ "iv_ask": "0.5015937",
"inverse": true
},
{
"bid": "0.0001",
"ask": "0.0002",
- "open_interest": "774.4",
- "volume": "460.43",
- "strike": "66000",
- "maturity": "2026-05-01T08:00:00Z",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "70000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.614914",
- "iv_ask": "0.6671515",
+ "iv_bid": "0.4097721",
+ "iv_ask": "0.4475098",
"inverse": true
},
{
- "bid": "0.0003",
- "ask": "0.0005",
- "open_interest": "551.5",
- "volume": "13.36",
- "strike": "68000",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0003",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "71000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5898027",
- "iv_ask": "0.6359126",
+ "iv_bid": "0.3934965",
+ "iv_ask": "0.4173482",
"inverse": true
},
{
"bid": "0.0004",
- "ask": "0.0006",
- "open_interest": "213.5",
- "volume": "1598.06",
- "strike": "69000",
- "maturity": "2026-05-01T08:00:00Z",
- "option_type": "put",
- "security_type": "option",
- "iv_bid": "0.5565995",
- "iv_ask": "0.5934968",
- "inverse": true
- },
- {
- "bid": "0.0005",
- "ask": "0.0007",
- "open_interest": "1573.6",
- "volume": "1174.28",
- "strike": "70000",
- "maturity": "2026-05-01T08:00:00Z",
+ "ask": "0.0005",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "72000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5166318",
- "iv_ask": "0.5469371",
+ "iv_bid": "0.3778649",
+ "iv_ask": "0.3925531",
"inverse": true
},
{
- "bid": "0.0008",
- "ask": "0.0011",
- "open_interest": "447.3",
- "volume": "1654.46",
- "strike": "71000",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "0.0007",
+ "ask": "0.0009",
+ "open_interest": "1.2",
+ "volume": "74.52",
+ "strike": "73000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4968149",
- "iv_ask": "0.5286282",
+ "iv_bid": "0.3538191",
+ "iv_ask": "0.3725539",
"inverse": true
},
{
- "bid": "0.0012",
- "ask": "0.0014",
- "open_interest": "1153.7",
- "volume": "20262.68",
- "strike": "72000",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "0.0014",
+ "ask": "0.0015",
+ "open_interest": "5.8",
+ "volume": "672.77",
+ "strike": "74000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4707589",
- "iv_ask": "0.487009",
+ "iv_bid": "0.3397653",
+ "iv_ask": "0.3458473",
"inverse": true
},
{
- "bid": "0.0017",
- "ask": "0.002",
- "open_interest": "679",
- "volume": "3836.82",
- "strike": "73000",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "0.0026",
+ "ask": "0.0029",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "75000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4374705",
- "iv_ask": "0.4559868",
+ "iv_bid": "0.3215794",
+ "iv_ask": "0.3338328",
"inverse": true
},
{
- "bid": "0.0027",
- "ask": "0.0031",
- "open_interest": "431.6",
- "volume": "6673.85",
- "strike": "74000",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "0.0035",
+ "ask": "0.0039",
+ "open_interest": "0.2",
+ "volume": "49.79",
+ "strike": "75500",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.415717",
- "iv_ask": "0.4340148",
+ "iv_bid": "0.3120235",
+ "iv_ask": "0.3259059",
"inverse": true
},
{
- "bid": "0.0044",
- "ask": "0.0047",
- "open_interest": "584.5",
- "volume": "64541.48",
- "strike": "75000",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "0.0048",
+ "ask": "0.0055",
+ "open_interest": "53.9",
+ "volume": "19215.72",
+ "strike": "76000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3987878",
- "iv_ask": "0.4093333",
+ "iv_bid": "0.3060527",
+ "iv_ask": "0.3270361",
"inverse": true
},
{
- "bid": "0.007",
- "ask": "0.0075",
- "open_interest": "1073.9",
- "volume": "30847.2",
- "strike": "76000",
- "maturity": "2026-05-01T08:00:00Z",
+ "bid": "0.0065",
+ "ask": "0.007",
+ "open_interest": "0.2",
+ "volume": "93.26",
+ "strike": "76500",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3816549",
- "iv_ask": "0.395859",
+ "iv_bid": "0.3006115",
+ "iv_ask": "0.3141044",
"inverse": true
},
{
- "bid": "0.011",
- "ask": "0.0115",
- "open_interest": "565.5",
- "volume": "89851.21",
+ "bid": "0.0085",
+ "ask": "0.0095",
+ "open_interest": "0",
+ "volume": "0",
"strike": "77000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3685241",
- "iv_ask": "0.3809728",
+ "iv_bid": "0.2914305",
+ "iv_ask": "0.316497",
"inverse": true
},
{
- "bid": "0.0135",
- "ask": "0.0145",
- "open_interest": "6.3",
- "volume": "7191.7",
+ "bid": "0.011",
+ "ask": "0.012",
+ "open_interest": "0",
+ "volume": "0",
"strike": "77500",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3600164",
- "iv_ask": "0.3841877",
+ "iv_bid": "0.2823985",
+ "iv_ask": "0.3066479",
"inverse": true
},
{
- "bid": "0.0135",
- "ask": "0.014",
- "open_interest": "520.4",
- "volume": "84779.86",
+ "bid": "0.009",
+ "ask": "0.01",
+ "open_interest": "0.9",
+ "volume": "767.01",
"strike": "78000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3642812",
- "iv_ask": "0.3763406",
+ "iv_bid": "0.2745331",
+ "iv_ask": "0.2990391",
"inverse": true
},
{
- "bid": "0.0105",
- "ask": "0.011",
- "open_interest": "0.2",
- "volume": "155.35",
+ "bid": "0.0065",
+ "ask": "0.0075",
+ "open_interest": "0.1",
+ "volume": "50.42",
"strike": "78500",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3573817",
- "iv_ask": "0.3697657",
+ "iv_bid": "0.2732062",
+ "iv_ask": "0.2991565",
"inverse": true
},
{
- "bid": "0.008",
- "ask": "0.009",
- "open_interest": "471.1",
- "volume": "209444.25",
+ "bid": "0.0049",
+ "ask": "0.0055",
+ "open_interest": "0.5",
+ "volume": "216.24",
"strike": "79000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3519466",
- "iv_ask": "0.3780838",
+ "iv_bid": "0.282447",
+ "iv_ask": "0.2995996",
"inverse": true
},
{
- "bid": "0.0047",
- "ask": "0.005",
- "open_interest": "1442.7",
- "volume": "137543.46",
+ "bid": "0.0034",
+ "ask": "0.0037",
+ "open_interest": "1.8",
+ "volume": "553.88",
+ "strike": "79500",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.2823709",
+ "iv_ask": "0.2923432",
+ "inverse": true
+ },
+ {
+ "bid": "0.0023",
+ "ask": "0.0027",
+ "open_interest": "4.2",
+ "volume": "933.71",
"strike": "80000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3553669",
- "iv_ask": "0.3649151",
+ "iv_bid": "0.2827487",
+ "iv_ask": "0.2986393",
"inverse": true
},
{
- "bid": "0.0025",
- "ask": "0.0028",
- "open_interest": "491.3",
- "volume": "110407.93",
+ "bid": "0.0016",
+ "ask": "0.0019",
+ "open_interest": "0.1",
+ "volume": "15.58",
+ "strike": "80500",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.2876692",
+ "iv_ask": "0.3023128",
+ "inverse": true
+ },
+ {
+ "bid": "0.0011",
+ "ask": "0.0013",
+ "open_interest": "1.6",
+ "volume": "161.97",
"strike": "81000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3540833",
- "iv_ask": "0.3669875",
+ "iv_bid": "0.2925095",
+ "iv_ask": "0.3048741",
"inverse": true
},
{
- "bid": "0.0014",
- "ask": "0.0016",
- "open_interest": "825.1",
- "volume": "69654.05",
+ "bid": "0.0006",
+ "ask": "0.0007",
+ "open_interest": "2.1",
+ "volume": "114.46",
"strike": "82000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.364147",
- "iv_ask": "0.3763902",
+ "iv_bid": "0.3120796",
+ "iv_ask": "0.3217238",
"inverse": true
},
{
- "bid": "0.0008",
- "ask": "0.0009",
- "open_interest": "667.4",
- "volume": "8398.29",
+ "bid": "0.0003",
+ "ask": "0.0005",
+ "open_interest": "0",
+ "volume": "0",
"strike": "83000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3771286",
- "iv_ask": "0.3862035",
+ "iv_bid": "0.3254275",
+ "iv_ask": "0.354409",
"inverse": true
},
{
- "bid": "0.0004",
- "ask": "0.0006",
- "open_interest": "129.8",
- "volume": "3924.17",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "0",
+ "volume": "0",
"strike": "84000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3816245",
- "iv_ask": "0.408895",
+ "iv_bid": "0.3519634",
+ "iv_ask": "0.3906923",
"inverse": true
},
{
- "bid": "0.0003",
- "ask": "0.0005",
- "open_interest": "954.6",
- "volume": "415.26",
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "0",
+ "volume": "0",
"strike": "85000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4110852",
- "iv_ask": "0.4453186",
+ "iv_bid": "0.3629208",
+ "iv_ask": "0.4200007",
"inverse": true
},
{
- "bid": "0.0002",
+ "bid": "0.0001",
"ask": "0.0003",
- "open_interest": "39.2",
- "volume": "306.28",
+ "open_interest": "0",
+ "volume": "0",
"strike": "86000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4312223",
- "iv_ask": "0.4561907",
+ "iv_bid": "0.4034472",
+ "iv_ask": "0.4652873",
"inverse": true
},
{
"bid": "0.0001",
"ask": "0.0003",
- "open_interest": "205.4",
- "volume": "155.2",
+ "open_interest": "0",
+ "volume": "0",
"strike": "87000",
- "maturity": "2026-05-01T08:00:00Z",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4347883",
- "iv_ask": "0.5001501",
+ "iv_bid": "0.4430337",
+ "iv_ask": "0.5094337",
"inverse": true
},
{
- "bid": "77755",
- "ask": "77757.5",
- "open_interest": "2718240",
- "volume": "2864240",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "77615",
+ "ask": "77617.5",
+ "open_interest": "96001750",
+ "volume": "6722440",
+ "maturity": "2026-05-29T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.001",
- "ask": "0.0012",
- "open_interest": "217.3",
- "volume": "1119.53",
- "strike": "65000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0001",
+ "ask": "0.0002",
+ "open_interest": "293.6",
+ "volume": "125.36",
+ "strike": "58000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5487305",
- "iv_ask": "0.5664115",
+ "iv_bid": "0.733615",
+ "iv_ask": "0.7905761",
"inverse": true
},
{
- "bid": "0.0012",
- "ask": "0.0014",
- "open_interest": "370.2",
- "volume": "5839.88",
- "strike": "66000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0001",
+ "ask": "0.0002",
+ "open_interest": "338.8",
+ "volume": "1.56",
+ "strike": "59000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5257564",
- "iv_ask": "0.5409071",
+ "iv_bid": "0.6942328",
+ "iv_ask": "0.7486132",
"inverse": true
},
{
- "bid": "0.0018",
- "ask": "0.002",
- "open_interest": "1041.1",
- "volume": "14507.73",
- "strike": "68000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0001",
+ "ask": "0.0002",
+ "open_interest": "1979.6",
+ "volume": "926.56",
+ "strike": "60000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4824045",
- "iv_ask": "0.493292",
+ "iv_bid": "0.65537",
+ "iv_ask": "0.7071899",
"inverse": true
},
{
- "bid": "0.0029",
- "ask": "0.0032",
- "open_interest": "108.4",
- "volume": "3075.54",
- "strike": "70000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0001",
+ "ask": "0.0002",
+ "open_interest": "303.5",
+ "volume": "0",
+ "strike": "61000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4446109",
- "iv_ask": "0.455945",
+ "iv_bid": "0.6169972",
+ "iv_ask": "0.6662741",
"inverse": true
},
{
- "bid": "0.0038",
- "ask": "0.0041",
- "open_interest": "137",
- "volume": "11800.49",
- "strike": "71000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "303.5",
+ "volume": "209.54",
+ "strike": "62000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4289334",
- "iv_ask": "0.4383776",
+ "iv_bid": "0.579085",
+ "iv_ask": "0.6578869",
"inverse": true
},
{
- "bid": "0.005",
- "ask": "0.0055",
- "open_interest": "170.8",
- "volume": "22088.81",
- "strike": "72000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0003",
+ "open_interest": "424.9",
+ "volume": "3107.24",
+ "strike": "63000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4139109",
- "iv_ask": "0.4270395",
+ "iv_bid": "0.5858339",
+ "iv_ask": "0.6162078",
"inverse": true
},
{
- "bid": "0.0065",
- "ask": "0.007",
- "open_interest": "192.5",
- "volume": "6559.66",
- "strike": "73000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "363.1",
+ "volume": "3.12",
+ "strike": "64000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3974257",
- "iv_ask": "0.4086612",
+ "iv_bid": "0.5462422",
+ "iv_ask": "0.5976688",
"inverse": true
},
{
- "bid": "0.0085",
- "ask": "0.0095",
- "open_interest": "621.5",
- "volume": "42889.31",
- "strike": "74000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0003",
+ "ask": "0.0005",
+ "open_interest": "2450.1",
+ "volume": "1217.8",
+ "strike": "65000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3820314",
- "iv_ask": "0.4013904",
+ "iv_bid": "0.5340454",
+ "iv_ask": "0.5735944",
"inverse": true
},
{
- "bid": "0.012",
- "ask": "0.0125",
- "open_interest": "255.4",
- "volume": "107071.38",
- "strike": "75000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "1059.4",
+ "volume": "2275.24",
+ "strike": "66000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3824536",
- "iv_ask": "0.3909715",
+ "iv_bid": "0.5136121",
+ "iv_ask": "0.5456127",
"inverse": true
},
{
- "bid": "0.0155",
- "ask": "0.0165",
- "open_interest": "87.3",
- "volume": "28202.41",
- "strike": "76000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0006",
+ "ask": "0.0007",
+ "open_interest": "1112.1",
+ "volume": "66.84",
+ "strike": "67000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3687289",
- "iv_ask": "0.3842928",
+ "iv_bid": "0.5020094",
+ "iv_ask": "0.514634",
"inverse": true
},
{
- "bid": "0.0205",
- "ask": "0.021",
- "open_interest": "293.6",
- "volume": "56530.03",
- "strike": "77000",
- "maturity": "2026-05-08T08:00:00Z",
+ "bid": "0.0008",
+ "ask": "0.0009",
+ "open_interest": "1307.3",
+ "volume": "1371.15",
+ "strike": "68000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3643546",
- "iv_ask": "0.3717117",
+ "iv_bid": "0.4812067",
+ "iv_ask": "0.491222",
"inverse": true
},
{
- "bid": "0.0235",
- "ask": "0.0245",
- "open_interest": "441.7",
- "volume": "106843.94",
- "strike": "78000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3616212",
- "iv_ask": "0.3760875",
- "inverse": true
- },
- {
- "bid": "0.0175",
- "ask": "0.0185",
- "open_interest": "271.8",
- "volume": "250080.7",
- "strike": "79000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.354168",
- "iv_ask": "0.368993",
- "inverse": true
- },
- {
- "bid": "0.013",
- "ask": "0.0135",
- "open_interest": "574.4",
- "volume": "90683.65",
- "strike": "80000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3537403",
- "iv_ask": "0.3616659",
- "inverse": true
- },
- {
- "bid": "0.0095",
- "ask": "0.01",
- "open_interest": "438.6",
- "volume": "44904.99",
- "strike": "81000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.354583",
- "iv_ask": "0.36338",
- "inverse": true
- },
- {
- "bid": "0.0065",
- "ask": "0.007",
- "open_interest": "913.3",
- "volume": "154210.98",
- "strike": "82000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3493293",
- "iv_ask": "0.3595734",
- "inverse": true
- },
- {
- "bid": "0.0031",
- "ask": "0.0034",
- "open_interest": "939.8",
- "volume": "93358.52",
- "strike": "84000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3520139",
- "iv_ask": "0.3611368",
- "inverse": true
- },
- {
- "bid": "0.0021",
- "ask": "0.0024",
- "open_interest": "1483.1",
- "volume": "57029.06",
- "strike": "85000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
+ "bid": "0.001",
+ "ask": "0.0013",
+ "open_interest": "843.4",
+ "volume": "2506.83",
+ "strike": "69000",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3542017",
- "iv_ask": "0.3657113",
+ "iv_bid": "0.4543972",
+ "iv_ask": "0.477926",
"inverse": true
},
{
- "bid": "0.0015",
+ "bid": "0.0014",
"ask": "0.0017",
- "open_interest": "302.6",
- "volume": "10072.55",
- "strike": "86000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3614836",
- "iv_ask": "0.3711836",
- "inverse": true
- },
- {
- "bid": "0.0004",
- "ask": "0.0006",
- "open_interest": "479.2",
- "volume": "8258.29",
- "strike": "90000",
- "maturity": "2026-05-08T08:00:00Z",
- "option_type": "call",
+ "open_interest": "3544.9",
+ "volume": "28177.55",
+ "strike": "70000",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3908739",
- "iv_ask": "0.4149628",
+ "iv_bid": "0.4366525",
+ "iv_ask": "0.4551727",
"inverse": true
},
{
- "bid": "77701.5",
- "ask": "77862.0",
- "open_interest": "0",
- "volume": "0",
- "maturity": "2026-05-15T08:00:00Z",
- "security_type": "forward"
- },
- {
- "bid": "0.0023",
- "ask": "0.0026",
- "open_interest": "124.9",
- "volume": "813.5",
- "strike": "65000",
- "maturity": "2026-05-15T08:00:00Z",
+ "bid": "0.002",
+ "ask": "0.0023",
+ "open_interest": "1810",
+ "volume": "15470.38",
+ "strike": "71000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5021365",
- "iv_ask": "0.5152999",
+ "iv_bid": "0.4207728",
+ "iv_ask": "0.4352691",
"inverse": true
},
{
- "bid": "0.006",
- "ask": "0.0065",
- "open_interest": "70.3",
- "volume": "18603.75",
- "strike": "70000",
- "maturity": "2026-05-15T08:00:00Z",
+ "bid": "0.0029",
+ "ask": "0.0032",
+ "open_interest": "1169.4",
+ "volume": "1468.49",
+ "strike": "72000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4268486",
- "iv_ask": "0.4377581",
+ "iv_bid": "0.4068536",
+ "iv_ask": "0.4182367",
"inverse": true
},
{
- "bid": "0.0095",
- "ask": "0.0105",
- "open_interest": "124.6",
- "volume": "9119.02",
- "strike": "72000",
- "maturity": "2026-05-15T08:00:00Z",
+ "bid": "0.0042",
+ "ask": "0.0045",
+ "open_interest": "980",
+ "volume": "5561.06",
+ "strike": "73000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4077988",
- "iv_ask": "0.4244853",
+ "iv_bid": "0.3937874",
+ "iv_ask": "0.4028787",
"inverse": true
},
{
- "bid": "0.015",
- "ask": "0.016",
- "open_interest": "129.5",
- "volume": "39340.5",
+ "bid": "0.0055",
+ "ask": "0.0065",
+ "open_interest": "2478.8",
+ "volume": "44786.16",
"strike": "74000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3929067",
- "iv_ask": "0.4064881",
+ "iv_bid": "0.3676371",
+ "iv_ask": "0.3927052",
"inverse": true
},
{
- "bid": "0.019",
- "ask": "0.0195",
- "open_interest": "50.7",
- "volume": "41847.1",
+ "bid": "0.008",
+ "ask": "0.009",
+ "open_interest": "5082.6",
+ "volume": "91033.07",
"strike": "75000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.390482",
- "iv_ask": "0.3967645",
+ "iv_bid": "0.3568048",
+ "iv_ask": "0.3779735",
"inverse": true
},
{
- "bid": "0.023",
- "ask": "0.024",
- "open_interest": "32",
- "volume": "49361.37",
+ "bid": "0.0115",
+ "ask": "0.0125",
+ "open_interest": "1627.4",
+ "volume": "103099.78",
"strike": "76000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3796642",
- "iv_ask": "0.3915336",
+ "iv_bid": "0.3477398",
+ "iv_ask": "0.366378",
"inverse": true
},
{
- "bid": "0.0285",
- "ask": "0.0295",
- "open_interest": "108.7",
- "volume": "56828.82",
+ "bid": "0.016",
+ "ask": "0.017",
+ "open_interest": "826",
+ "volume": "41062.04",
"strike": "77000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.3781084",
- "iv_ask": "0.3895557",
+ "iv_bid": "0.3366352",
+ "iv_ask": "0.3539406",
"inverse": true
},
{
- "bid": "0.032",
- "ask": "0.0325",
- "open_interest": "176.4",
- "volume": "141630.22",
+ "bid": "0.017",
+ "ask": "0.018",
+ "open_interest": "918.2",
+ "volume": "387262.01",
"strike": "78000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3768078",
- "iv_ask": "0.3824578",
+ "iv_bid": "0.3293645",
+ "iv_ask": "0.3464361",
"inverse": true
},
{
- "bid": "0.0255",
- "ask": "0.0265",
- "open_interest": "43.4",
- "volume": "48689",
+ "bid": "0.0115",
+ "ask": "0.0125",
+ "open_interest": "752.3",
+ "volume": "42604.93",
"strike": "79000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3671444",
- "iv_ask": "0.378566",
+ "iv_bid": "0.322708",
+ "iv_ask": "0.340735",
"inverse": true
},
{
- "bid": "0.0205",
- "ask": "0.0215",
- "open_interest": "85",
- "volume": "25163.88",
+ "bid": "0.0075",
+ "ask": "0.008",
+ "open_interest": "6866.8",
+ "volume": "90507.57",
"strike": "80000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3656068",
- "iv_ask": "0.3774266",
+ "iv_bid": "0.3196261",
+ "iv_ask": "0.3298768",
"inverse": true
},
{
- "bid": "0.016",
- "ask": "0.017",
- "open_interest": "42.2",
- "volume": "7730.4",
+ "bid": "0.0048",
+ "ask": "0.005",
+ "open_interest": "1913.4",
+ "volume": "72252.34",
"strike": "81000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3609931",
- "iv_ask": "0.3735362",
+ "iv_bid": "0.3206313",
+ "iv_ask": "0.3256201",
"inverse": true
},
{
- "bid": "0.0125",
- "ask": "0.0135",
- "open_interest": "85.7",
- "volume": "9669.77",
+ "bid": "0.003",
+ "ask": "0.0032",
+ "open_interest": "2466",
+ "volume": "404269.51",
"strike": "82000",
- "maturity": "2026-05-15T08:00:00Z",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3600389",
- "iv_ask": "0.3736357",
+ "iv_bid": "0.3230775",
+ "iv_ask": "0.329457",
"inverse": true
},
{
- "bid": "0.0075",
- "ask": "0.008",
- "open_interest": "460.4",
- "volume": "13417.51",
- "strike": "84000",
- "maturity": "2026-05-15T08:00:00Z",
+ "bid": "0.0019",
+ "ask": "0.002",
+ "open_interest": "1402.3",
+ "volume": "13095.04",
+ "strike": "83000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3615357",
- "iv_ask": "0.3700621",
+ "iv_bid": "0.3291435",
+ "iv_ask": "0.3333866",
"inverse": true
},
{
- "bid": "0.0043",
- "ask": "0.0046",
- "open_interest": "88.4",
- "volume": "7720.93",
- "strike": "86000",
- "maturity": "2026-05-15T08:00:00Z",
+ "bid": "0.0011",
+ "ask": "0.0014",
+ "open_interest": "1957",
+ "volume": "17424.15",
+ "strike": "84000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3628801",
- "iv_ask": "0.3698054",
+ "iv_bid": "0.3299835",
+ "iv_ask": "0.3472624",
"inverse": true
},
{
- "bid": "0.0015",
- "ask": "0.0018",
- "open_interest": "129.4",
- "volume": "2242.32",
- "strike": "90000",
- "maturity": "2026-05-15T08:00:00Z",
+ "bid": "0.0008",
+ "ask": "0.0011",
+ "open_interest": "2822.4",
+ "volume": "20253.4",
+ "strike": "85000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3782631",
- "iv_ask": "0.3918298",
+ "iv_bid": "0.346729",
+ "iv_ask": "0.3684132",
"inverse": true
},
{
"bid": "0.0005",
- "ask": "0.0007",
- "open_interest": "6.1",
- "volume": "22.62",
- "strike": "95000",
- "maturity": "2026-05-15T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.4108303",
- "iv_ask": "0.4310875",
- "inverse": true
- },
- {
- "bid": "77812.5",
- "ask": "77815",
- "open_interest": "67350560",
- "volume": "9387130",
- "maturity": "2026-05-29T08:00:00Z",
- "security_type": "forward"
- },
- {
- "bid": "0.0007",
- "ask": "0.0009",
- "open_interest": "739.1",
- "volume": "249.12",
- "strike": "48000",
+ "ask": "0.0008",
+ "open_interest": "1091.7",
+ "volume": "3790",
+ "strike": "86000",
"maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.7241261",
- "iv_ask": "0.749391",
+ "iv_bid": "0.3532887",
+ "iv_ask": "0.38247",
"inverse": true
},
{
- "bid": "0.0008",
- "ask": "0.001",
- "open_interest": "1250.9",
- "volume": "2674.89",
- "strike": "50000",
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "729",
+ "volume": "693.45",
+ "strike": "87000",
"maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.6812462",
- "iv_ask": "0.7031067",
+ "iv_bid": "0.3732087",
+ "iv_ask": "0.3975479",
"inverse": true
},
{
- "bid": "0.0011",
- "ask": "0.0013",
- "open_interest": "496.1",
- "volume": "47.67",
- "strike": "52000",
+ "bid": "0.0004",
+ "ask": "0.0005",
+ "open_interest": "931.8",
+ "volume": "194.38",
+ "strike": "88000",
"maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.6567867",
- "iv_ask": "0.6737252",
+ "iv_bid": "0.4044815",
+ "iv_ask": "0.4182131",
"inverse": true
},
{
- "bid": "0.0014",
- "ask": "0.0016",
- "open_interest": "472.3",
- "volume": "991.8",
- "strike": "54000",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "414",
+ "volume": "216.27",
+ "strike": "89000",
"maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.6255369",
- "iv_ask": "0.6392689",
+ "iv_bid": "0.3963949",
+ "iv_ask": "0.4350493",
"inverse": true
},
{
- "bid": "0.0018",
- "ask": "0.002",
- "open_interest": "525.2",
- "volume": "142",
- "strike": "56000",
+ "bid": "0.0003",
+ "ask": "0.0004",
+ "open_interest": "1902.4",
+ "volume": "3275.9",
+ "strike": "90000",
"maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.5957779",
- "iv_ask": "0.6068514",
+ "iv_bid": "0.4469673",
+ "iv_ask": "0.4649646",
"inverse": true
},
{
- "bid": "0.002",
- "ask": "0.0023",
- "open_interest": "527.5",
- "volume": "1373.33",
- "strike": "57000",
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "1034.3",
+ "volume": "342.53",
+ "strike": "92000",
"maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.5789308",
- "iv_ask": "0.593825",
+ "iv_bid": "0.4422465",
+ "iv_ask": "0.5033281",
"inverse": true
},
{
- "bid": "0.0023",
- "ask": "0.0026",
- "open_interest": "282.7",
- "volume": "148.52",
- "strike": "58000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
- "security_type": "option",
- "iv_bid": "0.5657187",
- "iv_ask": "0.579027",
- "inverse": true
+ "bid": "77622.5",
+ "ask": "77625",
+ "open_interest": "8424810",
+ "volume": "2094940",
+ "maturity": "2026-06-05T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.0026",
- "ask": "0.0029",
- "open_interest": "346",
- "volume": "84.41",
- "strike": "59000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0014",
+ "ask": "0.0017",
+ "open_interest": "257.5",
+ "volume": "4812.81",
+ "strike": "65000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5507657",
- "iv_ask": "0.5627731",
+ "iv_bid": "0.4955249",
+ "iv_ask": "0.5140271",
"inverse": true
},
{
- "bid": "0.003",
- "ask": "0.0033",
- "open_interest": "852",
- "volume": "10889.66",
- "strike": "60000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0018",
+ "ask": "0.0019",
+ "open_interest": "0.9",
+ "volume": "133.58",
+ "strike": "66000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5380795",
- "iv_ask": "0.5488048",
+ "iv_bid": "0.4828669",
+ "iv_ask": "0.4881512",
"inverse": true
},
{
- "bid": "0.0034",
- "ask": "0.0038",
- "open_interest": "290.6",
- "volume": "262.53",
- "strike": "61000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0028",
+ "ask": "0.0031",
+ "open_interest": "520.6",
+ "volume": "150947.3",
+ "strike": "68000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5234718",
- "iv_ask": "0.5362842",
+ "iv_bid": "0.4517302",
+ "iv_ask": "0.462836",
"inverse": true
},
{
- "bid": "0.0039",
- "ask": "0.0043",
- "open_interest": "347.7",
- "volume": "304.55",
- "strike": "62000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0046",
+ "ask": "0.0048",
+ "open_interest": "268.5",
+ "volume": "11455.2",
+ "strike": "70000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5102348",
- "iv_ask": "0.5217509",
+ "iv_bid": "0.4267441",
+ "iv_ask": "0.4320624",
"inverse": true
},
{
- "bid": "0.0045",
- "ask": "0.0049",
- "open_interest": "275.5",
- "volume": "3685.61",
- "strike": "63000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.007",
+ "ask": "0.0075",
+ "open_interest": "109.1",
+ "volume": "15346.65",
+ "strike": "72000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4977308",
- "iv_ask": "0.5080668",
+ "iv_bid": "0.3923341",
+ "iv_ask": "0.4023312",
"inverse": true
},
{
- "bid": "0.005",
- "ask": "0.0055",
- "open_interest": "344.9",
- "volume": "17058.37",
- "strike": "64000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.009",
+ "ask": "0.01",
+ "open_interest": "2.3",
+ "volume": "1259.06",
+ "strike": "73000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4807026",
- "iv_ask": "0.4924656",
+ "iv_bid": "0.380996",
+ "iv_ask": "0.3983532",
"inverse": true
},
{
- "bid": "0.006",
- "ask": "0.0065",
- "open_interest": "967.7",
- "volume": "20444.21",
- "strike": "65000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.012",
+ "ask": "0.0125",
+ "open_interest": "125.3",
+ "volume": "24915.61",
+ "strike": "74000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.473088",
- "iv_ask": "0.4835113",
+ "iv_bid": "0.377332",
+ "iv_ask": "0.3850406",
"inverse": true
},
{
- "bid": "0.007",
- "ask": "0.0075",
- "open_interest": "767.4",
- "volume": "38202.78",
- "strike": "66000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.015",
+ "ask": "0.016",
+ "open_interest": "180.5",
+ "volume": "6412.82",
+ "strike": "75000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4622161",
- "iv_ask": "0.4715945",
+ "iv_bid": "0.3637011",
+ "iv_ask": "0.3777339",
"inverse": true
},
{
- "bid": "0.008",
- "ask": "0.009",
- "open_interest": "381.4",
- "volume": "19427.36",
- "strike": "67000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0195",
+ "ask": "0.02",
+ "open_interest": "632.3",
+ "volume": "13857.69",
+ "strike": "76000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4486493",
- "iv_ask": "0.4655219",
+ "iv_bid": "0.3608082",
+ "iv_ask": "0.3673447",
"inverse": true
},
{
- "bid": "0.0095",
- "ask": "0.01",
- "open_interest": "695.2",
- "volume": "2533.12",
- "strike": "68000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0245",
+ "ask": "0.025",
+ "open_interest": "169",
+ "volume": "44354.62",
+ "strike": "77000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4405757",
- "iv_ask": "0.4482546",
+ "iv_bid": "0.35328",
+ "iv_ask": "0.3595495",
"inverse": true
},
{
- "bid": "0.011",
- "ask": "0.012",
- "open_interest": "660.7",
- "volume": "8364.57",
- "strike": "69000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0255",
+ "ask": "0.026",
+ "open_interest": "154.4",
+ "volume": "76667.56",
+ "strike": "78000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.429087",
- "iv_ask": "0.4430004",
+ "iv_bid": "0.3442852",
+ "iv_ask": "0.3504889",
"inverse": true
},
{
- "bid": "0.013",
- "ask": "0.014",
- "open_interest": "3084.5",
- "volume": "36353.17",
- "strike": "70000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0195",
+ "ask": "0.0205",
+ "open_interest": "184.7",
+ "volume": "16347.49",
+ "strike": "79000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.4210971",
- "iv_ask": "0.4337965",
+ "iv_bid": "0.3372516",
+ "iv_ask": "0.3499487",
"inverse": true
},
{
- "bid": "0.0155",
- "ask": "0.0165",
- "open_interest": "360.6",
- "volume": "36300.47",
- "strike": "71000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0145",
+ "ask": "0.0155",
+ "open_interest": "519.7",
+ "volume": "86265.15",
+ "strike": "80000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.4153419",
- "iv_ask": "0.4269854",
+ "iv_bid": "0.3307813",
+ "iv_ask": "0.3442524",
"inverse": true
},
{
- "bid": "0.0185",
- "ask": "0.019",
- "open_interest": "1096.9",
- "volume": "20156",
- "strike": "72000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0105",
+ "ask": "0.0115",
+ "open_interest": "343.2",
+ "volume": "20160.47",
+ "strike": "81000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.4109078",
- "iv_ask": "0.4163026",
+ "iv_bid": "0.3253839",
+ "iv_ask": "0.3402158",
"inverse": true
},
{
- "bid": "0.0215",
- "ask": "0.0225",
- "open_interest": "479.9",
- "volume": "673656.53",
- "strike": "73000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0075",
+ "ask": "0.008",
+ "open_interest": "433",
+ "volume": "60267.48",
+ "strike": "82000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.4021122",
- "iv_ask": "0.412195",
+ "iv_bid": "0.3225841",
+ "iv_ask": "0.3310965",
"inverse": true
},
{
- "bid": "0.0255",
- "ask": "0.0265",
- "open_interest": "1841.2",
- "volume": "36817.48",
- "strike": "74000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0055",
+ "ask": "0.006",
+ "open_interest": "72.6",
+ "volume": "5481.62",
+ "strike": "83000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.3989167",
- "iv_ask": "0.4084237",
+ "iv_bid": "0.3257491",
+ "iv_ask": "0.3356494",
"inverse": true
},
{
- "bid": "0.03",
- "ask": "0.0305",
- "open_interest": "991.1",
- "volume": "84666.73",
- "strike": "75000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0039",
+ "ask": "0.0043",
+ "open_interest": "99",
+ "volume": "1220.48",
+ "strike": "84000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.3956157",
- "iv_ask": "0.400154",
+ "iv_bid": "0.3267716",
+ "iv_ask": "0.3363094",
"inverse": true
},
{
- "bid": "0.035",
- "ask": "0.0355",
- "open_interest": "981.3",
- "volume": "90930.8",
- "strike": "76000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.0028",
+ "ask": "0.0032",
+ "open_interest": "595.7",
+ "volume": "158700.42",
+ "strike": "85000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.3920165",
- "iv_ask": "0.396398",
+ "iv_bid": "0.3302033",
+ "iv_ask": "0.3417768",
"inverse": true
},
{
- "bid": "0.0405",
- "ask": "0.041",
- "open_interest": "241.5",
- "volume": "303035.32",
- "strike": "77000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "put",
+ "bid": "0.002",
+ "ask": "0.0023",
+ "open_interest": "177.4",
+ "volume": "1256.25",
+ "strike": "86000",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.3879827",
- "iv_ask": "0.3922652",
+ "iv_bid": "0.3338807",
+ "iv_ask": "0.3446652",
"inverse": true
},
{
- "bid": "0.044",
- "ask": "0.045",
- "open_interest": "1029.4",
- "volume": "413684.52",
- "strike": "78000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0011",
+ "ask": "0.0014",
+ "open_interest": "603.4",
+ "volume": "2413.16",
+ "strike": "88000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3825106",
- "iv_ask": "0.390987",
+ "iv_bid": "0.3470625",
+ "iv_ask": "0.3631434",
"inverse": true
},
{
- "bid": "0.038",
- "ask": "0.039",
- "open_interest": "330.9",
- "volume": "93354.3",
- "strike": "79000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0007",
+ "ask": "0.0008",
+ "open_interest": "54.3",
+ "volume": "177.63",
+ "strike": "90000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3803055",
- "iv_ask": "0.3888008",
+ "iv_bid": "0.3678199",
+ "iv_ask": "0.3758029",
"inverse": true
},
{
- "bid": "0.0325",
- "ask": "0.0335",
- "open_interest": "7198.7",
- "volume": "14159.05",
- "strike": "80000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0003",
+ "open_interest": "276.8",
+ "volume": "0",
+ "strike": "95000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3774939",
- "iv_ask": "0.3861169",
+ "iv_bid": "0.4047617",
+ "iv_ask": "0.4250875",
"inverse": true
},
{
- "bid": "0.0275",
- "ask": "0.0285",
- "open_interest": "1002.5",
- "volume": "58284.14",
- "strike": "81000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.374137",
- "iv_ask": "0.3830036",
- "inverse": true
+ "bid": "77572.5",
+ "ask": "77670",
+ "open_interest": "3160",
+ "volume": "3170",
+ "maturity": "2026-06-12T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.023",
- "ask": "0.024",
- "open_interest": "4595.2",
- "volume": "260884.82",
- "strike": "82000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
+ "bid": "0.0029",
+ "ask": "0.0033",
+ "open_interest": "1",
+ "volume": "489.73",
+ "strike": "65000",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3703197",
- "iv_ask": "0.3795593",
+ "iv_bid": "0.4740863",
+ "iv_ask": "0.488063",
"inverse": true
},
{
- "bid": "0.0195",
- "ask": "0.02",
- "open_interest": "864.3",
- "volume": "129161.75",
- "strike": "83000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
+ "bid": "0.0075",
+ "ask": "0.008",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "70000",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3710584",
- "iv_ask": "0.3759287",
+ "iv_bid": "0.4106372",
+ "iv_ask": "0.4197066",
"inverse": true
},
{
- "bid": "0.016",
- "ask": "0.017",
- "open_interest": "2237.3",
- "volume": "207661.75",
- "strike": "84000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
+ "bid": "0.0115",
+ "ask": "0.012",
+ "open_interest": "1.8",
+ "volume": "1570.52",
+ "strike": "72000",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.367117",
- "iv_ask": "0.3775085",
+ "iv_bid": "0.3937229",
+ "iv_ask": "0.4009085",
"inverse": true
},
{
- "bid": "0.013",
- "ask": "0.014",
- "open_interest": "1754",
- "volume": "20347.15",
- "strike": "85000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
+ "bid": "0.017",
+ "ask": "0.018",
+ "open_interest": "0.2",
+ "volume": "264.25",
+ "strike": "74000",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3634411",
- "iv_ask": "0.3746992",
+ "iv_bid": "0.3739904",
+ "iv_ask": "0.3859807",
"inverse": true
},
{
- "bid": "0.011",
- "ask": "0.0115",
- "open_interest": "708.9",
- "volume": "27863.79",
- "strike": "86000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
+ "bid": "0.021",
+ "ask": "0.022",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "75000",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3667496",
- "iv_ask": "0.3728768",
+ "iv_bid": "0.3693841",
+ "iv_ask": "0.3805748",
"inverse": true
},
{
- "bid": "0.009",
- "ask": "0.0095",
- "open_interest": "215.5",
- "volume": "116228.33",
- "strike": "87000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
+ "bid": "0.0255",
+ "ask": "0.0265",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "76000",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3660756",
- "iv_ask": "0.3728294",
+ "iv_bid": "0.3630418",
+ "iv_ask": "0.3736895",
"inverse": true
},
{
- "bid": "0.007",
- "ask": "0.008",
- "open_interest": "812.7",
- "volume": "11422.71",
- "strike": "88000",
- "maturity": "2026-05-29T08:00:00Z",
- "option_type": "call",
+ "bid": "0.0305",
+ "ask": "0.0315",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "77000",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
"security_type": "option",
- "iv_bid": "0.3605964",
- "iv_ask": "0.3756909",
+ "iv_bid": "0.3546863",
+ "iv_ask": "0.365016",
"inverse": true
},
{
- "bid": "0.0048",
- "ask": "0.0055",
- "open_interest": "1147.9",
- "volume": "152285.26",
- "strike": "90000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.032",
+ "ask": "0.033",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "78000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3654597",
- "iv_ask": "0.3786821",
+ "iv_bid": "0.3493457",
+ "iv_ask": "0.3595761",
"inverse": true
},
{
- "bid": "0.0032",
- "ask": "0.0035",
- "open_interest": "533.7",
- "volume": "7006.13",
- "strike": "92000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.026",
+ "ask": "0.027",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "79000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3685609",
- "iv_ask": "0.3759941",
+ "iv_bid": "0.3448915",
+ "iv_ask": "0.3552505",
"inverse": true
},
{
- "bid": "0.0022",
- "ask": "0.0024",
- "open_interest": "1158.7",
- "volume": "2448.17",
- "strike": "94000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0205",
+ "ask": "0.0215",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "80000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3746106",
- "iv_ask": "0.3810515",
+ "iv_bid": "0.3375731",
+ "iv_ask": "0.348317",
"inverse": true
},
{
- "bid": "0.0018",
- "ask": "0.0021",
- "open_interest": "1463",
- "volume": "1559.6",
- "strike": "95000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0165",
+ "ask": "0.017",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "81000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3767028",
- "iv_ask": "0.3876312",
+ "iv_bid": "0.3384761",
+ "iv_ask": "0.344171",
"inverse": true
},
{
- "bid": "0.0014",
- "ask": "0.0015",
- "open_interest": "205.8",
- "volume": "5771.38",
- "strike": "96000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0125",
+ "ask": "0.0135",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "82000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3755968",
- "iv_ask": "0.3800562",
+ "iv_bid": "0.3313625",
+ "iv_ask": "0.3437451",
"inverse": true
},
{
- "bid": "0.0011",
- "ask": "0.0012",
- "open_interest": "1441.5",
- "volume": "220.47",
- "strike": "98000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "1.3",
+ "volume": "801.68",
+ "strike": "84000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3898627",
- "iv_ask": "0.3952896",
+ "iv_bid": "0.3318968",
+ "iv_ask": "0.347283",
"inverse": true
},
{
- "bid": "0.0008",
- "ask": "0.0009",
- "open_interest": "283.4",
- "volume": "204.77",
- "strike": "100000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0044",
+ "ask": "0.0048",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "86000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3984549",
- "iv_ask": "0.4053762",
+ "iv_bid": "0.3346273",
+ "iv_ask": "0.3429262",
"inverse": true
},
{
- "bid": "0.0003",
- "ask": "0.0005",
- "open_interest": "871.6",
- "volume": "7905.91",
- "strike": "105000",
- "maturity": "2026-05-29T08:00:00Z",
+ "bid": "0.0015",
+ "ask": "0.0019",
+ "open_interest": "15.6",
+ "volume": "2045.73",
+ "strike": "90000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4084979",
- "iv_ask": "0.4345937",
+ "iv_bid": "0.345667",
+ "iv_ask": "0.3618859",
"inverse": true
},
{
- "bid": "77920",
- "ask": "77922.5",
- "open_interest": "588089150",
- "volume": "6932390",
+ "bid": "77697.5",
+ "ask": "77700",
+ "open_interest": "587314120",
+ "volume": "20900300",
"maturity": "2026-06-26T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.0013",
- "ask": "0.0016",
- "open_interest": "1700.5",
- "volume": "5327.23",
- "strike": "40000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option",
- "iv_bid": "0.7705258",
- "iv_ask": "0.7944322",
- "inverse": true
- },
- {
- "bid": "0.002",
- "ask": "0.0023",
- "open_interest": "1859.9",
- "volume": "0",
+ "bid": "0.0005",
+ "ask": "0.0006",
+ "open_interest": "1872.9",
+ "volume": "15.56",
"strike": "45000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6913868",
- "iv_ask": "0.7074736",
+ "iv_bid": "0.7312121",
+ "iv_ask": "0.7480836",
"inverse": true
},
{
- "bid": "0.0032",
- "ask": "0.0035",
- "open_interest": "2511.2",
- "volume": "868.37",
+ "bid": "0.001",
+ "ask": "0.0011",
+ "open_interest": "2406.4",
+ "volume": "41.88",
"strike": "50000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6231686",
- "iv_ask": "0.6338104",
+ "iv_bid": "0.6612595",
+ "iv_ask": "0.6705402",
"inverse": true
},
{
- "bid": "0.005",
- "ask": "0.0055",
- "open_interest": "1334.6",
- "volume": "14343.48",
+ "bid": "0.0018",
+ "ask": "0.002",
+ "open_interest": "1285.8",
+ "volume": "178.72",
"strike": "55000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5567148",
- "iv_ask": "0.568612",
+ "iv_bid": "0.5861374",
+ "iv_ask": "0.5969319",
"inverse": true
},
{
- "bid": "0.007",
- "ask": "0.0075",
- "open_interest": "562.1",
- "volume": "14669.57",
+ "bid": "0.0026",
+ "ask": "0.0028",
+ "open_interest": "812",
+ "volume": "1412.77",
"strike": "58000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5270521",
- "iv_ask": "0.5362689",
+ "iv_bid": "0.5438646",
+ "iv_ask": "0.5517577",
"inverse": true
},
{
- "bid": "0.009",
- "ask": "0.0095",
- "open_interest": "4488.5",
- "volume": "891477.33",
+ "bid": "0.0034",
+ "ask": "0.0036",
+ "open_interest": "4113.1",
+ "volume": "4933.32",
"strike": "60000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5120157",
- "iv_ask": "0.5197543",
+ "iv_bid": "0.5184896",
+ "iv_ask": "0.5248414",
"inverse": true
},
{
- "bid": "0.0105",
- "ask": "0.0115",
- "open_interest": "975.9",
- "volume": "46965.67",
+ "bid": "0.0044",
+ "ask": "0.0046",
+ "open_interest": "997.5",
+ "volume": "609.94",
"strike": "62000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4839094",
- "iv_ask": "0.4973974",
+ "iv_bid": "0.4921997",
+ "iv_ask": "0.4973638",
"inverse": true
},
{
- "bid": "0.0135",
- "ask": "0.014",
- "open_interest": "351.5",
- "volume": "13461.97",
+ "bid": "0.0055",
+ "ask": "0.006",
+ "open_interest": "767.6",
+ "volume": "193.87",
"strike": "64000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.47048",
- "iv_ask": "0.476281",
+ "iv_bid": "0.4617876",
+ "iv_ask": "0.4723854",
"inverse": true
},
{
- "bid": "0.015",
- "ask": "0.016",
- "open_interest": "1857.7",
- "volume": "376167.1",
+ "bid": "0.0065",
+ "ask": "0.007",
+ "open_interest": "1848.6",
+ "volume": "58465.03",
"strike": "65000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4610231",
- "iv_ask": "0.4717971",
+ "iv_bid": "0.453227",
+ "iv_ask": "0.4626974",
"inverse": true
},
{
- "bid": "0.017",
- "ask": "0.018",
- "open_interest": "984.4",
- "volume": "14762.43",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "1157.7",
+ "volume": "837.76",
"strike": "66000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.455103",
- "iv_ask": "0.4651352",
+ "iv_bid": "0.441873",
+ "iv_ask": "0.4588076",
"inverse": true
},
{
- "bid": "0.0215",
- "ask": "0.022",
- "open_interest": "2331.5",
- "volume": "15414.79",
+ "bid": "0.0105",
+ "ask": "0.011",
+ "open_interest": "1804.1",
+ "volume": "261786.55",
"strike": "68000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4418524",
- "iv_ask": "0.4462776",
+ "iv_bid": "0.426679",
+ "iv_ask": "0.4336515",
"inverse": true
},
{
- "bid": "0.027",
- "ask": "0.0275",
- "open_interest": "2642.7",
- "volume": "25180.56",
+ "bid": "0.0145",
+ "ask": "0.015",
+ "open_interest": "2693.4",
+ "volume": "156262.54",
"strike": "70000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4289799",
- "iv_ask": "0.4329336",
+ "iv_bid": "0.4114612",
+ "iv_ask": "0.4172817",
"inverse": true
},
{
- "bid": "0.034",
- "ask": "0.035",
- "open_interest": "1834.5",
- "volume": "54826.62",
+ "bid": "0.0195",
+ "ask": "0.0205",
+ "open_interest": "2788.3",
+ "volume": "46272.92",
"strike": "72000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4189497",
- "iv_ask": "0.4261325",
+ "iv_bid": "0.3936792",
+ "iv_ask": "0.4036897",
"inverse": true
},
{
- "bid": "0.0425",
- "ask": "0.0435",
- "open_interest": "364.5",
- "volume": "20003.28",
+ "bid": "0.0265",
+ "ask": "0.027",
+ "open_interest": "1539.6",
+ "volume": "31915.53",
"strike": "74000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4101679",
- "iv_ask": "0.4168459",
+ "iv_bid": "0.3805915",
+ "iv_ask": "0.385045",
"inverse": true
},
{
- "bid": "0.0475",
- "ask": "0.0485",
- "open_interest": "2108.6",
- "volume": "223992.04",
+ "bid": "0.031",
+ "ask": "0.0315",
+ "open_interest": "2072.4",
+ "volume": "8294.88",
"strike": "75000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4071464",
- "iv_ask": "0.4136411",
+ "iv_bid": "0.376697",
+ "iv_ask": "0.3809547",
"inverse": true
},
{
- "bid": "0.0525",
- "ask": "0.0535",
- "open_interest": "687.1",
- "volume": "327012.65",
+ "bid": "0.0355",
+ "ask": "0.0365",
+ "open_interest": "1697.8",
+ "volume": "38046.47",
"strike": "76000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4016744",
- "iv_ask": "0.4080308",
+ "iv_bid": "0.3684674",
+ "iv_ask": "0.3767064",
"inverse": true
},
{
- "bid": "0.0635",
- "ask": "0.0645",
- "open_interest": "1441.2",
- "volume": "34976.14",
+ "bid": "0.043",
+ "ask": "0.044",
+ "open_interest": "1809.7",
+ "volume": "328917.75",
"strike": "78000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3960528",
- "iv_ask": "0.4022545",
+ "iv_bid": "0.3585696",
+ "iv_ask": "0.3665627",
"inverse": true
},
{
- "bid": "0.0515",
- "ask": "0.0525",
- "open_interest": "3569.8",
- "volume": "2513250",
+ "bid": "0.0315",
+ "ask": "0.032",
+ "open_interest": "3958.1",
+ "volume": "477882.47",
"strike": "80000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3907505",
- "iv_ask": "0.3969573",
+ "iv_bid": "0.352804",
+ "iv_ask": "0.3568861",
"inverse": true
},
{
- "bid": "0.0415",
- "ask": "0.0425",
- "open_interest": "628.9",
- "volume": "54016.85",
+ "bid": "0.022",
+ "ask": "0.023",
+ "open_interest": "3064.7",
+ "volume": "248114.98",
"strike": "82000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3880683",
- "iv_ask": "0.3944372",
+ "iv_bid": "0.3447232",
+ "iv_ask": "0.3535177",
"inverse": true
},
{
- "bid": "0.033",
- "ask": "0.0335",
- "open_interest": "621.1",
- "volume": "54173.91",
+ "bid": "0.015",
+ "ask": "0.016",
+ "open_interest": "1095.7",
+ "volume": "220482.13",
"strike": "84000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3854263",
- "iv_ask": "0.3887765",
+ "iv_bid": "0.3399865",
+ "iv_ask": "0.3499685",
"inverse": true
},
{
- "bid": "0.029",
- "ask": "0.03",
- "open_interest": "4113.3",
- "volume": "793351.7",
+ "bid": "0.0125",
+ "ask": "0.0135",
+ "open_interest": "4598.5",
+ "volume": "126055.1",
"strike": "85000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3821867",
- "iv_ask": "0.3891201",
+ "iv_bid": "0.3408542",
+ "iv_ask": "0.351629",
"inverse": true
},
{
- "bid": "0.0255",
- "ask": "0.0265",
- "open_interest": "380.4",
- "volume": "6595.8",
+ "bid": "0.01",
+ "ask": "0.011",
+ "open_interest": "1109.5",
+ "volume": "7148.1",
"strike": "86000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3800176",
- "iv_ask": "0.3872386",
+ "iv_bid": "0.3373432",
+ "iv_ask": "0.3492113",
"inverse": true
},
{
- "bid": "0.02",
- "ask": "0.0205",
- "open_interest": "1700.4",
- "volume": "1400183.63",
+ "bid": "0.007",
+ "ask": "0.0075",
+ "open_interest": "1974.1",
+ "volume": "16982.56",
"strike": "88000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3800168",
- "iv_ask": "0.3839904",
- "inverse": true
- },
- {
- "bid": "0.015",
- "ask": "0.016",
- "open_interest": "6366.2",
- "volume": "54063.27",
- "strike": "90000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3751772",
- "iv_ask": "0.384126",
- "inverse": true
- },
- {
- "bid": "0.0115",
- "ask": "0.0125",
- "open_interest": "165.3",
- "volume": "18050.06",
- "strike": "92000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3752646",
- "iv_ask": "0.3854642",
- "inverse": true
- },
- {
- "bid": "0.0075",
- "ask": "0.008",
- "open_interest": "3273.8",
- "volume": "48362.74",
- "strike": "95000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3741708",
- "iv_ask": "0.3806715",
- "inverse": true
- },
- {
- "bid": "0.004",
- "ask": "0.0042",
- "open_interest": "3712.3",
- "volume": "21691.86",
- "strike": "100000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.382784",
- "iv_ask": "0.3867213",
- "inverse": true
- },
- {
- "bid": "0.0021",
- "ask": "0.0023",
- "open_interest": "1825.8",
- "volume": "8512.31",
- "strike": "105000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.3902033",
- "iv_ask": "0.3963578",
+ "iv_bid": "0.3430513",
+ "iv_ask": "0.3502962",
"inverse": true
},
- {
- "bid": "0.0011",
- "ask": "0.0014",
- "open_interest": "1453.8",
- "volume": "3311.61",
- "strike": "110000",
+ {
+ "bid": "0.0047",
+ "ask": "0.0049",
+ "open_interest": "5606.5",
+ "volume": "516356.96",
+ "strike": "90000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3972395",
- "iv_ask": "0.4115515",
+ "iv_bid": "0.345534",
+ "iv_ask": "0.3492293",
"inverse": true
},
{
- "bid": "0.0006",
- "ask": "0.0008",
- "open_interest": "2391.3",
- "volume": "515.9",
- "strike": "115000",
+ "bid": "0.0031",
+ "ask": "0.0033",
+ "open_interest": "651",
+ "volume": "7902.37",
+ "strike": "92000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4058538",
- "iv_ask": "0.4210114",
+ "iv_bid": "0.3476826",
+ "iv_ask": "0.3524896",
"inverse": true
},
{
- "bid": "0.0004",
- "ask": "0.0007",
- "open_interest": "2121.6",
- "volume": "3.89",
- "strike": "120000",
+ "bid": "0.0021",
+ "ask": "0.0024",
+ "open_interest": "128",
+ "volume": "157.03",
+ "strike": "94000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4228396",
- "iv_ask": "0.4519006",
+ "iv_bid": "0.3524808",
+ "iv_ask": "0.3617506",
"inverse": true
},
{
- "bid": "0.0003",
- "ask": "0.0006",
- "open_interest": "1877.2",
- "volume": "0",
- "strike": "125000",
+ "bid": "0.0019",
+ "ask": "0.002",
+ "open_interest": "3914.1",
+ "volume": "58056.38",
+ "strike": "95000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4431012",
- "iv_ask": "0.4789481",
+ "iv_bid": "0.361102",
+ "iv_ask": "0.3645497",
"inverse": true
},
{
- "bid": "0.0003",
- "ask": "0.0004",
- "open_interest": "1532.4",
- "volume": "64.54",
- "strike": "130000",
+ "bid": "0.0009",
+ "ask": "0.0011",
+ "open_interest": "3792.4",
+ "volume": "242.72",
+ "strike": "100000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4749204",
- "iv_ask": "0.4897225",
+ "iv_bid": "0.3843633",
+ "iv_ask": "0.3961793",
"inverse": true
},
{
- "bid": "0.0002",
- "ask": "0.0003",
- "open_interest": "819.1",
- "volume": "2.33",
- "strike": "135000",
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "1486.9",
+ "volume": "123.9",
+ "strike": "105000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4852468",
- "iv_ask": "0.5052415",
+ "iv_bid": "0.4005138",
+ "iv_ask": "0.4215658",
"inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "742.6",
- "volume": "128.7",
- "strike": "140000",
+ "bid": "0.0003",
+ "ask": "0.0005",
+ "open_interest": "1335",
+ "volume": "0",
+ "strike": "110000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4820369",
- "iv_ask": "0.5342025",
+ "iv_bid": "0.4384558",
+ "iv_ask": "0.4656032",
"inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "595.4",
- "volume": "14.21",
- "strike": "145000",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "2510.2",
+ "volume": "0",
+ "strike": "115000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5076161",
- "iv_ask": "0.5401968",
+ "iv_bid": "0.4662348",
+ "iv_ask": "0.5027862",
"inverse": true
},
{
"bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "2595.8",
+ "ask": "0.0004",
+ "open_interest": "2689.7",
"volume": "0",
- "strike": "150000",
+ "strike": "120000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5321674",
- "iv_ask": "0.588503",
+ "iv_bid": "0.4775807",
+ "iv_ask": "0.5495393",
"inverse": true
},
{
"bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "254.9",
+ "ask": "0.0004",
+ "open_interest": "1875.4",
"volume": "0",
- "strike": "155000",
+ "strike": "125000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5557704",
- "iv_ask": "0.6140355",
+ "iv_bid": "0.5172833",
+ "iv_ask": "0.5938204",
"inverse": true
},
{
"bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "1221.2",
+ "ask": "0.0003",
+ "open_interest": "1493.3",
"volume": "0",
- "strike": "160000",
+ "strike": "130000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5784956",
- "iv_ask": "0.6145991",
+ "iv_bid": "0.5550711",
+ "iv_ask": "0.6166916",
"inverse": true
},
{
"bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "177",
+ "ask": "0.0003",
+ "open_interest": "881.7",
"volume": "0",
- "strike": "165000",
+ "strike": "135000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.6004055",
- "iv_ask": "0.6375765",
+ "iv_bid": "0.5911258",
+ "iv_ask": "0.6558426",
"inverse": true
},
{
"bid": "0.0001",
"ask": "0.0002",
- "open_interest": "753.2",
+ "open_interest": "732",
"volume": "0",
- "strike": "170000",
+ "strike": "140000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.6215564",
- "iv_ask": "0.6597485",
+ "iv_bid": "0.6256028",
+ "iv_ask": "0.6661626",
"inverse": true
},
{
"bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "1178.8",
- "volume": "0",
- "strike": "180000",
+ "ask": "0.0003",
+ "open_interest": "589.1",
+ "volume": "15.45",
+ "strike": "145000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.661777",
- "iv_ask": "0.7018874",
+ "iv_bid": "0.658636",
+ "iv_ask": "0.7290331",
"inverse": true
},
{
- "bid": "78012.0",
- "ask": "78185.5",
- "open_interest": "0",
- "volume": "0",
+ "bid": "77830",
+ "ask": "77847.5",
+ "open_interest": "5813390",
+ "volume": "845200",
"maturity": "2026-07-31T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.0125",
- "ask": "0.0135",
- "open_interest": "43.1",
- "volume": "1405.02",
+ "bid": "0.006",
+ "ask": "0.007",
+ "open_interest": "88.9",
+ "volume": "256.12",
+ "strike": "56000",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5097194",
+ "iv_ask": "0.5287411",
+ "inverse": true
+ },
+ {
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "169.6",
+ "volume": "9347.53",
"strike": "58000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4928138",
- "iv_ask": "0.5042139",
+ "iv_bid": "0.4919384",
+ "iv_ask": "0.5081114",
"inverse": true
},
{
- "bid": "0.0155",
- "ask": "0.0165",
- "open_interest": "38.6",
- "volume": "13565.91",
+ "bid": "0.0095",
+ "ask": "0.01",
+ "open_interest": "120.9",
+ "volume": "409.89",
"strike": "60000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4816157",
- "iv_ask": "0.4915485",
+ "iv_bid": "0.4766844",
+ "iv_ask": "0.4836297",
"inverse": true
},
{
- "bid": "0.019",
- "ask": "0.0195",
- "open_interest": "67.2",
- "volume": "53391.07",
+ "bid": "0.012",
+ "ask": "0.0125",
+ "open_interest": "431.8",
+ "volume": "19340.44",
"strike": "62000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4699701",
- "iv_ask": "0.4743675",
+ "iv_bid": "0.4620901",
+ "iv_ask": "0.468025",
"inverse": true
},
{
- "bid": "0.023",
- "ask": "0.0235",
- "open_interest": "17.3",
- "volume": "1552.84",
+ "bid": "0.015",
+ "ask": "0.0155",
+ "open_interest": "195",
+ "volume": "61326.6",
"strike": "64000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.457463",
- "iv_ask": "0.4613839",
+ "iv_bid": "0.4470167",
+ "iv_ask": "0.4521543",
"inverse": true
},
{
- "bid": "0.028",
- "ask": "0.0285",
- "open_interest": "8.8",
- "volume": "640.92",
+ "bid": "0.0185",
+ "ask": "0.0195",
+ "open_interest": "98.1",
+ "volume": "6788.44",
"strike": "66000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4473491",
- "iv_ask": "0.4508734",
+ "iv_bid": "0.4307497",
+ "iv_ask": "0.4397374",
"inverse": true
},
{
- "bid": "0.0305",
- "ask": "0.0315",
- "open_interest": "49.5",
- "volume": "1903.78",
+ "bid": "0.021",
+ "ask": "0.022",
+ "open_interest": "99.9",
+ "volume": "7997.5",
"strike": "67000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4402805",
- "iv_ask": "0.4469974",
+ "iv_bid": "0.4267865",
+ "iv_ask": "0.4352005",
"inverse": true
},
{
- "bid": "0.0335",
- "ask": "0.0345",
- "open_interest": "26.5",
- "volume": "238.29",
+ "bid": "0.0235",
+ "ask": "0.0245",
+ "open_interest": "257.6",
+ "volume": "3209.66",
"strike": "68000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4352386",
- "iv_ask": "0.441658",
+ "iv_bid": "0.420802",
+ "iv_ask": "0.4287368",
"inverse": true
},
{
- "bid": "0.037",
- "ask": "0.038",
- "open_interest": "26.9",
- "volume": "262.04",
+ "bid": "0.026",
+ "ask": "0.027",
+ "open_interest": "124.1",
+ "volume": "0",
"strike": "69000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4318989",
- "iv_ask": "0.4380467",
+ "iv_bid": "0.4130091",
+ "iv_ask": "0.4205365",
"inverse": true
},
{
- "bid": "0.0405",
- "ask": "0.0415",
- "open_interest": "20.1",
- "volume": "16806.44",
+ "bid": "0.0295",
+ "ask": "0.03",
+ "open_interest": "733.5",
+ "volume": "30409.52",
"strike": "70000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4270392",
- "iv_ask": "0.4329541",
+ "iv_bid": "0.4107304",
+ "iv_ask": "0.4143027",
"inverse": true
},
{
- "bid": "0.0445",
- "ask": "0.0455",
- "open_interest": "0.2",
- "volume": "666.55",
+ "bid": "0.0325",
+ "ask": "0.0335",
+ "open_interest": "89.1",
+ "volume": "780.56",
"strike": "71000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4236284",
- "iv_ask": "0.4293353",
+ "iv_bid": "0.4028269",
+ "iv_ask": "0.4096516",
"inverse": true
},
{
- "bid": "0.049",
- "ask": "0.05",
- "open_interest": "3.2",
- "volume": "361.22",
+ "bid": "0.0365",
+ "ask": "0.0375",
+ "open_interest": "383.4",
+ "volume": "58255.75",
"strike": "72000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4214726",
- "iv_ask": "0.4269974",
+ "iv_bid": "0.3997415",
+ "iv_ask": "0.4062813",
"inverse": true
},
{
- "bid": "0.0535",
- "ask": "0.0545",
- "open_interest": "0.3",
- "volume": "1240.9",
+ "bid": "0.0405",
+ "ask": "0.0415",
+ "open_interest": "53.5",
+ "volume": "21449.97",
"strike": "73000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4177374",
- "iv_ask": "0.4231095",
+ "iv_bid": "0.3945086",
+ "iv_ask": "0.4008148",
"inverse": true
},
{
- "bid": "0.0585",
- "ask": "0.0595",
- "open_interest": "8.5",
- "volume": "0",
+ "bid": "0.045",
+ "ask": "0.046",
+ "open_interest": "130.4",
+ "volume": "371.83",
"strike": "74000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4151357",
- "iv_ask": "0.4203781",
+ "iv_bid": "0.3903181",
+ "iv_ask": "0.3964291",
"inverse": true
},
{
- "bid": "0.0635",
- "ask": "0.0645",
- "open_interest": "2.2",
- "volume": "471.15",
+ "bid": "0.05",
+ "ask": "0.0505",
+ "open_interest": "337.8",
+ "volume": "381447.32",
"strike": "75000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4109944",
- "iv_ask": "0.416131",
+ "iv_bid": "0.3870014",
+ "iv_ask": "0.3899788",
"inverse": true
},
{
- "bid": "0.069",
- "ask": "0.0705",
- "open_interest": "0.3",
- "volume": "1030.72",
+ "bid": "0.055",
+ "ask": "0.056",
+ "open_interest": "400.1",
+ "volume": "2242.39",
"strike": "76000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4078978",
- "iv_ask": "0.4154751",
+ "iv_bid": "0.3815221",
+ "iv_ask": "0.3873571",
"inverse": true
},
{
- "bid": "0.075",
- "ask": "0.0765",
- "open_interest": "8.2",
- "volume": "46759.25",
+ "bid": "0.061",
+ "ask": "0.062",
+ "open_interest": "53.5",
+ "volume": "15760.08",
"strike": "77000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4057753",
- "iv_ask": "0.413257",
+ "iv_bid": "0.3796833",
+ "iv_ask": "0.385434",
"inverse": true
},
{
- "bid": "0.0815",
- "ask": "0.0825",
- "open_interest": "24",
- "volume": "0",
+ "bid": "0.065",
+ "ask": "0.066",
+ "open_interest": "255",
+ "volume": "161998.55",
"strike": "78000",
"maturity": "2026-07-31T08:00:00Z",
- "option_type": "put",
+ "option_type": "call",
"security_type": "option",
- "iv_bid": "0.404587",
- "iv_ask": "0.4095311",
+ "iv_bid": "0.37513",
+ "iv_ask": "0.3808316",
"inverse": true
},
{
- "bid": "0.0765",
- "ask": "0.0775",
- "open_interest": "0",
- "volume": "0",
+ "bid": "0.0585",
+ "ask": "0.0595",
+ "open_interest": "145.7",
+ "volume": "7476.58",
"strike": "79000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4020575",
- "iv_ask": "0.4069774",
+ "iv_bid": "0.3708304",
+ "iv_ask": "0.3765173",
"inverse": true
},
{
- "bid": "0.0705",
- "ask": "0.0715",
- "open_interest": "138.9",
- "volume": "267403.7",
+ "bid": "0.0525",
+ "ask": "0.0535",
+ "open_interest": "944.7",
+ "volume": "462038.01",
"strike": "80000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3993124",
- "iv_ask": "0.4042273",
+ "iv_bid": "0.3671482",
+ "iv_ask": "0.3728559",
"inverse": true
},
{
- "bid": "0.065",
- "ask": "0.066",
- "open_interest": "0.1",
- "volume": "0",
+ "bid": "0.0475",
+ "ask": "0.0485",
+ "open_interest": "818.7",
+ "volume": "51556.24",
"strike": "81000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3975185",
- "iv_ask": "0.4024473",
+ "iv_bid": "0.3669694",
+ "iv_ask": "0.3727311",
"inverse": true
},
{
- "bid": "0.06",
- "ask": "0.061",
- "open_interest": "13.9",
- "volume": "0",
+ "bid": "0.0425",
+ "ask": "0.0435",
+ "open_interest": "974.1",
+ "volume": "42233.75",
"strike": "82000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3967051",
- "iv_ask": "0.4016662",
+ "iv_bid": "0.3646151",
+ "iv_ask": "0.3704674",
"inverse": true
},
{
- "bid": "0.055",
- "ask": "0.056",
- "open_interest": "2",
- "volume": "4581.03",
+ "bid": "0.038",
+ "ask": "0.039",
+ "open_interest": "382.5",
+ "volume": "1542.4",
"strike": "83000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3944221",
- "iv_ask": "0.3994351",
+ "iv_bid": "0.3630191",
+ "iv_ask": "0.3689977",
"inverse": true
},
{
- "bid": "0.0505",
- "ask": "0.0515",
- "open_interest": "1.1",
+ "bid": "0.034",
+ "ask": "0.0345",
+ "open_interest": "87.9",
"volume": "0",
"strike": "84000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3931913",
- "iv_ask": "0.3982745",
+ "iv_bid": "0.3623045",
+ "iv_ask": "0.3653772",
"inverse": true
},
{
- "bid": "0.046",
- "ask": "0.0475",
- "open_interest": "3.5",
- "volume": "0",
+ "bid": "0.03",
+ "ask": "0.031",
+ "open_interest": "619.2",
+ "volume": "221575.57",
"strike": "85000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3905105",
- "iv_ask": "0.3982701",
+ "iv_bid": "0.3594643",
+ "iv_ask": "0.3658145",
"inverse": true
},
{
- "bid": "0.042",
- "ask": "0.0435",
- "open_interest": "3.5",
- "volume": "12678.25",
+ "bid": "0.0265",
+ "ask": "0.0275",
+ "open_interest": "48.8",
+ "volume": "641.27",
"strike": "86000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3889773",
- "iv_ask": "0.3969027",
+ "iv_bid": "0.3576603",
+ "iv_ask": "0.3642618",
"inverse": true
},
{
- "bid": "0.0385",
- "ask": "0.0395",
- "open_interest": "5",
- "volume": "16185.96",
+ "bid": "0.0235",
+ "ask": "0.024",
+ "open_interest": "294.2",
+ "volume": "5736.86",
"strike": "87000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3887166",
- "iv_ask": "0.3941323",
+ "iv_bid": "0.3571286",
+ "iv_ask": "0.3605819",
"inverse": true
},
{
- "bid": "0.035",
- "ask": "0.036",
- "open_interest": "0.5",
- "volume": "841.8",
+ "bid": "0.0205",
+ "ask": "0.0215",
+ "open_interest": "232.6",
+ "volume": "156792.29",
"strike": "88000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3870983",
- "iv_ask": "0.3926691",
+ "iv_bid": "0.3545421",
+ "iv_ask": "0.361794",
"inverse": true
},
{
- "bid": "0.032",
- "ask": "0.033",
- "open_interest": "1.2",
+ "bid": "0.018",
+ "ask": "0.019",
+ "open_interest": "120.3",
"volume": "0",
"strike": "89000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3869391",
- "iv_ask": "0.3926805",
+ "iv_bid": "0.3535409",
+ "iv_ask": "0.3611957",
"inverse": true
},
{
- "bid": "0.029",
- "ask": "0.03",
- "open_interest": "334.3",
- "volume": "702111.4",
+ "bid": "0.016",
+ "ask": "0.0165",
+ "open_interest": "988.5",
+ "volume": "99813.86",
"strike": "90000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3854712",
- "iv_ask": "0.3914152",
+ "iv_bid": "0.3545589",
+ "iv_ask": "0.358619",
"inverse": true
},
{
- "bid": "0.0265",
- "ask": "0.0275",
- "open_interest": "5",
- "volume": "0",
+ "bid": "0.014",
+ "ask": "0.0145",
+ "open_interest": "266.6",
+ "volume": "2532.19",
"strike": "91000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3857126",
- "iv_ask": "0.391871",
+ "iv_bid": "0.3537972",
+ "iv_ask": "0.3581236",
"inverse": true
},
{
- "bid": "0.024",
- "ask": "0.025",
- "open_interest": "5.2",
- "volume": "0",
+ "bid": "0.0125",
+ "ask": "0.013",
+ "open_interest": "272.6",
+ "volume": "197.69",
"strike": "92000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3847205",
- "iv_ask": "0.3911306",
+ "iv_bid": "0.3556985",
+ "iv_ask": "0.3602919",
"inverse": true
},
{
- "bid": "0.0215",
- "ask": "0.0225",
- "open_interest": "0",
- "volume": "0",
+ "bid": "0.0105",
+ "ask": "0.0115",
+ "open_interest": "96.7",
+ "volume": "9799.23",
"strike": "93000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3824065",
- "iv_ask": "0.3891159",
+ "iv_bid": "0.3510342",
+ "iv_ask": "0.3609526",
"inverse": true
},
{
- "bid": "0.0195",
- "ask": "0.0205",
- "open_interest": "68.4",
- "volume": "81762.95",
+ "bid": "0.0095",
+ "ask": "0.01",
+ "open_interest": "836.2",
+ "volume": "6385.51",
"strike": "94000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3821924",
- "iv_ask": "0.3892072",
+ "iv_bid": "0.3546241",
+ "iv_ask": "0.3599375",
"inverse": true
},
{
- "bid": "0.016",
- "ask": "0.0165",
- "open_interest": "19.9",
- "volume": "133149.86",
+ "bid": "0.008",
+ "ask": "0.009",
+ "open_interest": "45",
+ "volume": "66.25",
+ "strike": "95000",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3511667",
+ "iv_ask": "0.3626681",
+ "inverse": true
+ },
+ {
+ "bid": "0.007",
+ "ask": "0.008",
+ "open_interest": "183.5",
+ "volume": "0",
"strike": "96000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3819147",
- "iv_ask": "0.3857958",
+ "iv_bid": "0.3517152",
+ "iv_ask": "0.3641281",
"inverse": true
},
{
- "bid": "0.013",
- "ask": "0.014",
- "open_interest": "1018.5",
- "volume": "15984.97",
+ "bid": "0.0055",
+ "ask": "0.006",
+ "open_interest": "1102.9",
+ "volume": "368.18",
"strike": "98000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3810492",
- "iv_ask": "0.3896375",
+ "iv_bid": "0.3552503",
+ "iv_ask": "0.3625767",
"inverse": true
},
{
- "bid": "0.0105",
- "ask": "0.011",
- "open_interest": "33.2",
- "volume": "17857.78",
+ "bid": "0.0043",
+ "ask": "0.0047",
+ "open_interest": "152.6",
+ "volume": "3528.56",
"strike": "100000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3801337",
- "iv_ask": "0.3850011",
+ "iv_bid": "0.3583671",
+ "iv_ask": "0.3652718",
"inverse": true
},
{
- "bid": "0.0085",
- "ask": "0.0095",
- "open_interest": "9.2",
- "volume": "4041.41",
+ "bid": "0.0034",
+ "ask": "0.0038",
+ "open_interest": "109.9",
+ "volume": "347.78",
"strike": "102000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.379947",
- "iv_ask": "0.3908171",
+ "iv_bid": "0.3622637",
+ "iv_ask": "0.3703492",
"inverse": true
},
{
- "bid": "0.007",
- "ask": "0.008",
- "open_interest": "11.4",
- "volume": "96898.84",
+ "bid": "0.0027",
+ "ask": "0.003",
+ "open_interest": "337.4",
+ "volume": "76946.24",
"strike": "104000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3816213",
- "iv_ask": "0.3938358",
+ "iv_bid": "0.3662936",
+ "iv_ask": "0.3734663",
+ "inverse": true
+ },
+ {
+ "bid": "0.0025",
+ "ask": "0.0028",
+ "open_interest": "362.8",
+ "volume": "1302.71",
+ "strike": "105000",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3707317",
+ "iv_ask": "0.3783452",
+ "inverse": true
+ },
+ {
+ "bid": "0.0022",
+ "ask": "0.0025",
+ "open_interest": "39.7",
+ "volume": "18.68",
+ "strike": "106000",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3717582",
+ "iv_ask": "0.3800736",
"inverse": true
},
{
- "bid": "0.0055",
- "ask": "0.0065",
- "open_interest": "12.9",
- "volume": "1866.75",
- "strike": "106000",
+ "bid": "0.0017",
+ "ask": "0.0021",
+ "open_interest": "244.1",
+ "volume": "1089.58",
+ "strike": "108000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3795041",
- "iv_ask": "0.3935809",
+ "iv_bid": "0.3737024",
+ "iv_ask": "0.3867538",
"inverse": true
},
{
- "bid": "0.004",
- "ask": "0.0043",
- "open_interest": "34",
- "volume": "490.85",
+ "bid": "0.0014",
+ "ask": "0.0017",
+ "open_interest": "137.6",
+ "volume": "0",
"strike": "110000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3885566",
- "iv_ask": "0.3940005",
+ "iv_bid": "0.3792555",
+ "iv_ask": "0.3907244",
"inverse": true
},
{
- "bid": "0.0024",
- "ask": "0.0029",
- "open_interest": "11.1",
- "volume": "497.37",
+ "bid": "0.001",
+ "ask": "0.0011",
+ "open_interest": "23.8",
+ "volume": "7.69",
"strike": "115000",
"maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3910344",
- "iv_ask": "0.4036299",
+ "iv_bid": "0.3996393",
+ "iv_ask": "0.4049242",
+ "inverse": true
+ },
+ {
+ "bid": "0.0005",
+ "ask": "0.0007",
+ "open_interest": "163.1",
+ "volume": "4.67",
+ "strike": "120000",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3996656",
+ "iv_ask": "0.416279",
"inverse": true
},
{
- "bid": "78407.5",
- "ask": "78410",
- "open_interest": "276427820",
- "volume": "7071210",
+ "bid": "78167.5",
+ "ask": "78170",
+ "open_interest": "289191460",
+ "volume": "3088870",
"maturity": "2026-09-25T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.0023",
- "ask": "0.0027",
- "open_interest": "1576.9",
- "volume": "103.03",
+ "bid": "0.0015",
+ "ask": "0.0018",
+ "open_interest": "1748.7",
+ "volume": "5732.93",
"strike": "30000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.7387981",
- "iv_ask": "0.7578277",
+ "iv_bid": "0.7540254",
+ "iv_ask": "0.7742621",
"inverse": true
},
{
- "bid": "0.0036",
- "ask": "0.004",
- "open_interest": "543.3",
- "volume": "544.4",
+ "bid": "0.0024",
+ "ask": "0.0027",
+ "open_interest": "546.3",
+ "volume": "20.9",
"strike": "35000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6780532",
- "iv_ask": "0.6908654",
+ "iv_bid": "0.6887831",
+ "iv_ask": "0.7020779",
"inverse": true
},
{
- "bid": "0.0055",
- "ask": "0.006",
- "open_interest": "1844.5",
- "volume": "357.77",
+ "bid": "0.0037",
+ "ask": "0.0041",
+ "open_interest": "2023.9",
+ "volume": "5282.55",
"strike": "40000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6249601",
- "iv_ask": "0.6360055",
+ "iv_bid": "0.6299359",
+ "iv_ask": "0.6418935",
"inverse": true
},
{
- "bid": "0.008",
- "ask": "0.0085",
- "open_interest": "1676.4",
- "volume": "444.41",
+ "bid": "0.006",
+ "ask": "0.0065",
+ "open_interest": "1629.2",
+ "volume": "186.8",
"strike": "45000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5737061",
- "iv_ask": "0.5817025",
+ "iv_bid": "0.5851877",
+ "iv_ask": "0.595219",
"inverse": true
},
{
- "bid": "0.012",
- "ask": "0.013",
- "open_interest": "3174",
- "volume": "14910.53",
+ "bid": "0.009",
+ "ask": "0.0095",
+ "open_interest": "3168.2",
+ "volume": "6377.66",
"strike": "50000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5328755",
- "iv_ask": "0.5443926",
+ "iv_bid": "0.5376121",
+ "iv_ask": "0.5447974",
"inverse": true
},
{
- "bid": "0.0185",
- "ask": "0.0195",
- "open_interest": "1520.4",
- "volume": "12538.34",
+ "bid": "0.014",
+ "ask": "0.0145",
+ "open_interest": "1833.4",
+ "volume": "445004.22",
"strike": "55000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5023818",
- "iv_ask": "0.5109083",
+ "iv_bid": "0.5004397",
+ "iv_ask": "0.5056182",
"inverse": true
},
{
- "bid": "0.02",
- "ask": "0.021",
- "open_interest": "102.9",
- "volume": "713.74",
+ "bid": "0.0155",
+ "ask": "0.016",
+ "open_interest": "106.6",
+ "volume": "120.8",
"strike": "56000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4957369",
- "iv_ask": "0.5038211",
+ "iv_bid": "0.4957336",
+ "iv_ask": "0.5005767",
"inverse": true
},
{
- "bid": "0.0235",
- "ask": "0.0245",
- "open_interest": "551.9",
- "volume": "174.49",
+ "bid": "0.0185",
+ "ask": "0.019",
+ "open_interest": "602.6",
+ "volume": "9110.88",
"strike": "58000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4840656",
- "iv_ask": "0.4913477",
+ "iv_bid": "0.4831756",
+ "iv_ask": "0.4874751",
"inverse": true
},
{
- "bid": "0.0275",
- "ask": "0.0285",
- "open_interest": "3852.1",
- "volume": "27987.2",
+ "bid": "0.0215",
+ "ask": "0.0225",
+ "open_interest": "3349.6",
+ "volume": "440069",
"strike": "60000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4727332",
- "iv_ask": "0.4793387",
+ "iv_bid": "0.4671972",
+ "iv_ask": "0.4749172",
"inverse": true
},
{
- "bid": "0.0325",
- "ask": "0.0335",
- "open_interest": "719.5",
- "volume": "11432.55",
+ "bid": "0.026",
+ "ask": "0.0265",
+ "open_interest": "827.2",
+ "volume": "18861.5",
"strike": "62000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4644218",
- "iv_ask": "0.470436",
+ "iv_bid": "0.45894",
+ "iv_ask": "0.46241",
"inverse": true
},
{
- "bid": "0.038",
- "ask": "0.039",
- "open_interest": "212.7",
- "volume": "1163.89",
+ "bid": "0.0305",
+ "ask": "0.032",
+ "open_interest": "184.5",
+ "volume": "1500.8",
"strike": "64000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4553685",
- "iv_ask": "0.4608988",
+ "iv_bid": "0.4464424",
+ "iv_ask": "0.4558838",
"inverse": true
},
{
- "bid": "0.0415",
- "ask": "0.0425",
- "open_interest": "460.2",
- "volume": "7438.92",
+ "bid": "0.0335",
+ "ask": "0.0345",
+ "open_interest": "627.8",
+ "volume": "40437.02",
"strike": "65000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.453539",
- "iv_ask": "0.4588471",
+ "iv_bid": "0.4433767",
+ "iv_ask": "0.4493944",
"inverse": true
},
{
- "bid": "0.0445",
- "ask": "0.0455",
- "open_interest": "114.2",
- "volume": "656.41",
+ "bid": "0.0365",
+ "ask": "0.0375",
+ "open_interest": "177.5",
+ "volume": "0",
"strike": "66000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.448075",
- "iv_ask": "0.4531978",
+ "iv_bid": "0.4391212",
+ "iv_ask": "0.4448873",
"inverse": true
},
{
- "bid": "0.052",
- "ask": "0.053",
- "open_interest": "576.2",
- "volume": "2371.39",
+ "bid": "0.0435",
+ "ask": "0.0445",
+ "open_interest": "561.7",
+ "volume": "21198.3",
"strike": "68000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.441974",
- "iv_ask": "0.4467614",
+ "iv_bid": "0.4327811",
+ "iv_ask": "0.4381104",
"inverse": true
},
{
- "bid": "0.0605",
- "ask": "0.0615",
- "open_interest": "1487.2",
- "volume": "64675.18",
+ "bid": "0.051",
+ "ask": "0.052",
+ "open_interest": "1446.8",
+ "volume": "118968.71",
"strike": "70000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4366797",
- "iv_ask": "0.4411965",
+ "iv_bid": "0.4244617",
+ "iv_ask": "0.42945",
"inverse": true
},
{
- "bid": "0.0695",
- "ask": "0.071",
- "open_interest": "261.1",
- "volume": "31282.09",
+ "bid": "0.06",
+ "ask": "0.061",
+ "open_interest": "277.9",
+ "volume": "24486.2",
"strike": "72000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4297844",
- "iv_ask": "0.4362407",
+ "iv_bid": "0.4189874",
+ "iv_ask": "0.423705",
"inverse": true
},
{
- "bid": "0.08",
- "ask": "0.081",
- "open_interest": "68.6",
- "volume": "6700.79",
+ "bid": "0.0695",
+ "ask": "0.0705",
+ "open_interest": "88.8",
+ "volume": "0",
"strike": "74000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4255159",
- "iv_ask": "0.4296568",
+ "iv_bid": "0.4112388",
+ "iv_ask": "0.4157551",
"inverse": true
},
{
- "bid": "0.0855",
- "ask": "0.0865",
- "open_interest": "3022.8",
- "volume": "670604",
+ "bid": "0.075",
+ "ask": "0.076",
+ "open_interest": "3024.3",
+ "volume": "12412.49",
"strike": "75000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4229795",
- "iv_ask": "0.4270557",
+ "iv_bid": "0.4090425",
+ "iv_ask": "0.4134802",
"inverse": true
},
{
- "bid": "0.091",
- "ask": "0.0925",
- "open_interest": "369.5",
- "volume": "0",
+ "bid": "0.08",
+ "ask": "0.0815",
+ "open_interest": "567.6",
+ "volume": "12494.14",
"strike": "76000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4195139",
- "iv_ask": "0.425547",
+ "iv_bid": "0.4034978",
+ "iv_ask": "0.4100583",
"inverse": true
},
{
- "bid": "0.1035",
- "ask": "0.1045",
- "open_interest": "252.9",
- "volume": "368973.54",
+ "bid": "0.092",
+ "ask": "0.0935",
+ "open_interest": "623.1",
+ "volume": "212534.55",
"strike": "78000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4158037",
- "iv_ask": "0.4197477",
+ "iv_bid": "0.3977517",
+ "iv_ask": "0.4041812",
"inverse": true
},
{
- "bid": "0.0965",
- "ask": "0.0975",
- "open_interest": "1788",
- "volume": "303998.18",
+ "bid": "0.0825",
+ "ask": "0.0835",
+ "open_interest": "2270.4",
+ "volume": "412339.64",
"strike": "80000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4115207",
- "iv_ask": "0.4154247",
+ "iv_bid": "0.3942133",
+ "iv_ask": "0.398465",
"inverse": true
},
{
- "bid": "0.086",
- "ask": "0.087",
- "open_interest": "985.2",
- "volume": "0",
+ "bid": "0.0715",
+ "ask": "0.0725",
+ "open_interest": "1428.7",
+ "volume": "14743.49",
"strike": "82000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4102988",
- "iv_ask": "0.414199",
+ "iv_bid": "0.3903293",
+ "iv_ask": "0.3945973",
"inverse": true
},
{
- "bid": "0.076",
- "ask": "0.077",
- "open_interest": "570.9",
- "volume": "12082.44",
+ "bid": "0.062",
+ "ask": "0.063",
+ "open_interest": "624.4",
+ "volume": "37259.74",
"strike": "84000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4075023",
- "iv_ask": "0.411433",
+ "iv_bid": "0.3884229",
+ "iv_ask": "0.3927561",
"inverse": true
},
{
- "bid": "0.071",
- "ask": "0.0725",
- "open_interest": "589.4",
- "volume": "17080.56",
+ "bid": "0.0575",
+ "ask": "0.0585",
+ "open_interest": "775.1",
+ "volume": "1366.21",
"strike": "85000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4047999",
- "iv_ask": "0.4107383",
+ "iv_bid": "0.3869298",
+ "iv_ask": "0.3913145",
"inverse": true
},
{
- "bid": "0.067",
- "ask": "0.068",
- "open_interest": "448",
+ "bid": "0.053",
+ "ask": "0.054",
+ "open_interest": "464.4",
"volume": "0",
"strike": "86000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4052159",
- "iv_ask": "0.4092107",
+ "iv_bid": "0.3843524",
+ "iv_ask": "0.3888036",
"inverse": true
},
{
- "bid": "0.059",
- "ask": "0.06",
- "open_interest": "306.5",
+ "bid": "0.0455",
+ "ask": "0.0465",
+ "open_interest": "323",
"volume": "0",
"strike": "88000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4036245",
- "iv_ask": "0.4077164",
+ "iv_bid": "0.3827502",
+ "iv_ask": "0.3873678",
"inverse": true
},
{
- "bid": "0.0515",
- "ask": "0.0525",
- "open_interest": "1433.9",
- "volume": "4157939.27",
+ "bid": "0.0385",
+ "ask": "0.0395",
+ "open_interest": "1627.1",
+ "volume": "8932.45",
"strike": "90000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4008612",
- "iv_ask": "0.4050876",
+ "iv_bid": "0.3793618",
+ "iv_ask": "0.3842081",
"inverse": true
},
{
- "bid": "0.045",
- "ask": "0.046",
- "open_interest": "307.8",
- "volume": "43549.7",
+ "bid": "0.033",
+ "ask": "0.034",
+ "open_interest": "530.1",
+ "volume": "2938.7",
"strike": "92000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3991974",
- "iv_ask": "0.4035926",
+ "iv_bid": "0.3793488",
+ "iv_ask": "0.3844671",
"inverse": true
},
{
- "bid": "0.0395",
- "ask": "0.04",
- "open_interest": "89.7",
- "volume": "60443.34",
+ "bid": "0.028",
+ "ask": "0.029",
+ "open_interest": "133.4",
+ "volume": "441.68",
"strike": "94000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3989996",
- "iv_ask": "0.4013002",
+ "iv_bid": "0.3782503",
+ "iv_ask": "0.3837088",
"inverse": true
},
{
- "bid": "0.0365",
- "ask": "0.0375",
- "open_interest": "482.3",
- "volume": "54697.29",
+ "bid": "0.0255",
+ "ask": "0.0265",
+ "open_interest": "1228.3",
+ "volume": "393.25",
"strike": "95000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3966385",
- "iv_ask": "0.4013613",
+ "iv_bid": "0.3762776",
+ "iv_ask": "0.3819479",
"inverse": true
},
{
- "bid": "0.034",
- "ask": "0.035",
- "open_interest": "114.4",
- "volume": "1963.53",
+ "bid": "0.0235",
+ "ask": "0.0245",
+ "open_interest": "194",
+ "volume": "0",
"strike": "96000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3958875",
- "iv_ask": "0.4007404",
+ "iv_bid": "0.3762327",
+ "iv_ask": "0.3821139",
"inverse": true
},
{
- "bid": "0.0295",
- "ask": "0.0305",
- "open_interest": "82.9",
- "volume": "37404.99",
+ "bid": "0.02",
+ "ask": "0.021",
+ "open_interest": "159",
+ "volume": "0",
"strike": "98000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3947589",
- "iv_ask": "0.3999035",
+ "iv_bid": "0.3766939",
+ "iv_ask": "0.3830441",
"inverse": true
},
{
- "bid": "0.0255",
- "ask": "0.0265",
- "open_interest": "3607.7",
- "volume": "25051.74",
+ "bid": "0.017",
+ "ask": "0.018",
+ "open_interest": "3887.7",
+ "volume": "8998.15",
"strike": "100000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3935173",
- "iv_ask": "0.3990043",
+ "iv_bid": "0.3772592",
+ "iv_ask": "0.3841538",
"inverse": true
},
{
- "bid": "0.018",
- "ask": "0.0185",
- "open_interest": "1003.3",
- "volume": "41824.99",
+ "bid": "0.0145",
+ "ask": "0.0155",
+ "open_interest": "44.1",
+ "volume": "0",
+ "strike": "102000",
+ "maturity": "2026-09-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3784069",
+ "iv_ask": "0.3859159",
+ "inverse": true
+ },
+ {
+ "bid": "0.011",
+ "ask": "0.012",
+ "open_interest": "1354",
+ "volume": "0",
"strike": "105000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3938507",
- "iv_ask": "0.3971326",
+ "iv_bid": "0.3765661",
+ "iv_ask": "0.385299",
"inverse": true
},
{
- "bid": "0.0125",
- "ask": "0.013",
- "open_interest": "1752.4",
- "volume": "24687.25",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "1496.2",
+ "volume": "1051.45",
"strike": "110000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3933668",
- "iv_ask": "0.3973912",
+ "iv_bid": "0.3816648",
+ "iv_ask": "0.3926917",
"inverse": true
},
{
- "bid": "0.0085",
- "ask": "0.009",
- "open_interest": "2039.5",
- "volume": "14708.22",
+ "bid": "0.0055",
+ "ask": "0.006",
+ "open_interest": "2420.3",
+ "volume": "1027.39",
"strike": "115000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.3918607",
- "iv_ask": "0.3969331",
+ "iv_bid": "0.3919664",
+ "iv_ask": "0.398899",
"inverse": true
},
{
- "bid": "0.0065",
- "ask": "0.007",
- "open_interest": "922.8",
- "volume": "2026.33",
+ "bid": "0.0039",
+ "ask": "0.0042",
+ "open_interest": "984.4",
+ "volume": "126.73",
"strike": "120000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4004925",
- "iv_ask": "0.4065865",
+ "iv_bid": "0.3984314",
+ "iv_ask": "0.4037731",
"inverse": true
},
{
- "bid": "0.0047",
- "ask": "0.0055",
- "open_interest": "2218.4",
- "volume": "203.19",
+ "bid": "0.0029",
+ "ask": "0.0033",
+ "open_interest": "2266.7",
+ "volume": "495.74",
"strike": "125000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4038175",
- "iv_ask": "0.4157425",
+ "iv_bid": "0.4072225",
+ "iv_ask": "0.4159936",
"inverse": true
},
{
- "bid": "0.0036",
- "ask": "0.0038",
- "open_interest": "2226.1",
- "volume": "351.74",
+ "bid": "0.0022",
+ "ask": "0.0025",
+ "open_interest": "1425.3",
+ "volume": "74.41",
"strike": "130000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4107317",
- "iv_ask": "0.4144832",
+ "iv_bid": "0.4161483",
+ "iv_ask": "0.4243203",
"inverse": true
},
{
- "bid": "0.0027",
- "ask": "0.0031",
- "open_interest": "146.6",
- "volume": "2608.55",
+ "bid": "0.0017",
+ "ask": "0.002",
+ "open_interest": "159.9",
+ "volume": "0",
"strike": "135000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4154483",
- "iv_ask": "0.4245169",
+ "iv_bid": "0.4250954",
+ "iv_ask": "0.4350339",
"inverse": true
},
{
- "bid": "0.0021",
- "ask": "0.0025",
- "open_interest": "1134.5",
- "volume": "4327.41",
+ "bid": "0.0013",
+ "ask": "0.0016",
+ "open_interest": "1137.2",
+ "volume": "0",
"strike": "140000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4218051",
- "iv_ask": "0.432708",
+ "iv_bid": "0.4324387",
+ "iv_ask": "0.4445829",
"inverse": true
},
{
- "bid": "0.0017",
- "ask": "0.002",
- "open_interest": "475.8",
+ "bid": "0.0011",
+ "ask": "0.0014",
+ "open_interest": "477.2",
"volume": "0",
"strike": "145000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4297655",
- "iv_ask": "0.4395167",
+ "iv_bid": "0.444507",
+ "iv_ask": "0.4584254",
"inverse": true
},
{
- "bid": "0.0013",
- "ask": "0.0015",
- "open_interest": "542.4",
- "volume": "35.08",
+ "bid": "0.0009",
+ "ask": "0.0011",
+ "open_interest": "758",
+ "volume": "0",
"strike": "150000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4337369",
- "iv_ask": "0.4418277",
+ "iv_bid": "0.4536976",
+ "iv_ask": "0.4648723",
"inverse": true
},
{
- "bid": "0.0011",
- "ask": "0.0013",
- "open_interest": "316.7",
- "volume": "10.28",
+ "bid": "0.0007",
+ "ask": "0.001",
+ "open_interest": "318.8",
+ "volume": "0",
"strike": "155000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4426635",
- "iv_ask": "0.4519309",
+ "iv_bid": "0.4593963",
+ "iv_ask": "0.4788539",
"inverse": true
},
{
- "bid": "0.0009",
- "ask": "0.0012",
- "open_interest": "830.5",
- "volume": "7.84",
+ "bid": "0.0006",
+ "ask": "0.0009",
+ "open_interest": "827.4",
+ "volume": "0",
"strike": "160000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4490589",
- "iv_ask": "0.4647861",
+ "iv_bid": "0.4694182",
+ "iv_ask": "0.491344",
"inverse": true
},
{
- "bid": "0.0008",
- "ask": "0.0012",
- "open_interest": "127.7",
+ "bid": "0.0005",
+ "ask": "0.0008",
+ "open_interest": "131.4",
"volume": "0",
"strike": "165000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4591254",
- "iv_ask": "0.4814855",
+ "iv_bid": "0.4772616",
+ "iv_ask": "0.5022968",
"inverse": true
},
{
- "bid": "0.0006",
- "ask": "0.0009",
- "open_interest": "368.9",
+ "bid": "0.0004",
+ "ask": "0.0007",
+ "open_interest": "352.5",
"volume": "0",
"strike": "170000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4599512",
- "iv_ask": "0.4810538",
+ "iv_bid": "0.482482",
+ "iv_ask": "0.5116173",
"inverse": true
},
{
- "bid": "0.0005",
- "ask": "0.0007",
- "open_interest": "1412",
- "volume": "18.81",
+ "bid": "0.0003",
+ "ask": "0.0006",
+ "open_interest": "1448.7",
+ "volume": "0",
"strike": "175000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4656563",
- "iv_ask": "0.4825423",
+ "iv_bid": "0.4842356",
+ "iv_ask": "0.5191386",
"inverse": true
},
{
- "bid": "0.0004",
- "ask": "0.0008",
- "open_interest": "751.7",
- "volume": "3.91",
+ "bid": "0.0003",
+ "ask": "0.0005",
+ "open_interest": "751.2",
+ "volume": "0",
"strike": "180000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.468996",
- "iv_ask": "0.5041863",
+ "iv_bid": "0.4989006",
+ "iv_ask": "0.524579",
"inverse": true
},
{
- "bid": "0.0003",
- "ask": "0.0007",
- "open_interest": "824.3",
+ "bid": "0.0002",
+ "ask": "0.0006",
+ "open_interest": "824.6",
"volume": "0",
"strike": "190000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4817765",
- "iv_ask": "0.524214",
+ "iv_bid": "0.507848",
+ "iv_ask": "0.564019",
"inverse": true
},
{
- "bid": "0.0002",
- "ask": "0.0006",
- "open_interest": "1128.2",
+ "bid": "0.0001",
+ "ask": "0.0004",
+ "open_interest": "1131.6",
"volume": "0",
"strike": "200000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.487836",
- "iv_ask": "0.5411607",
+ "iv_bid": "0.503566",
+ "iv_ask": "0.5683326",
"inverse": true
},
{
"bid": "0.0001",
"ask": "0.0003",
- "open_interest": "272.8",
+ "open_interest": "279.7",
"volume": "0",
"strike": "220000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5017463",
- "iv_ask": "0.5501913",
- "inverse": true
- },
- {
- "bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "249.5",
- "volume": "3.11",
- "strike": "240000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option",
- "iv_bid": "0.5389329",
- "iv_ask": "0.5697779",
+ "iv_bid": "0.548504",
+ "iv_ask": "0.6014345",
"inverse": true
},
{
- "bid": "79082.5",
- "ask": "79092.5",
- "open_interest": "121192440",
- "volume": "2532540",
+ "bid": "78887.5",
+ "ask": "78892.5",
+ "open_interest": "125882130",
+ "volume": "1281370",
"maturity": "2026-12-25T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.005",
- "ask": "0.006",
- "open_interest": "1404.7",
- "volume": "0",
+ "bid": "0.0047",
+ "ask": "0.0049",
+ "open_interest": "1603.5",
+ "volume": "1929.79",
"strike": "30000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6715134",
- "iv_ask": "0.6952157",
+ "iv_bid": "0.6979647",
+ "iv_ask": "0.7033441",
"inverse": true
},
{
- "bid": "0.008",
- "ask": "0.009",
- "open_interest": "2067.1",
- "volume": "2809.05",
+ "bid": "0.007",
+ "ask": "0.0075",
+ "open_interest": "2086.4",
+ "volume": "1155.98",
"strike": "35000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.6310269",
- "iv_ask": "0.6473544",
+ "iv_bid": "0.6448642",
+ "iv_ask": "0.6541921",
"inverse": true
},
{
- "bid": "0.012",
- "ask": "0.013",
- "open_interest": "2801.6",
- "volume": "3785.67",
+ "bid": "0.0105",
+ "ask": "0.011",
+ "open_interest": "3079.6",
+ "volume": "14963.8",
"strike": "40000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5928292",
- "iv_ask": "0.6046837",
+ "iv_bid": "0.6031506",
+ "iv_ask": "0.6098451",
"inverse": true
},
{
- "bid": "0.017",
- "ask": "0.018",
- "open_interest": "1982.1",
- "volume": "0",
+ "bid": "0.0145",
+ "ask": "0.0155",
+ "open_interest": "2102.6",
+ "volume": "233.87",
"strike": "45000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5548153",
- "iv_ask": "0.5638314",
+ "iv_bid": "0.557817",
+ "iv_ask": "0.5679378",
"inverse": true
},
{
- "bid": "0.024",
- "ask": "0.025",
- "open_interest": "1403.5",
- "volume": "13076.74",
+ "bid": "0.021",
+ "ask": "0.022",
+ "open_interest": "1406.2",
+ "volume": "173.42",
"strike": "50000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5232647",
- "iv_ask": "0.5302812",
+ "iv_bid": "0.5263559",
+ "iv_ask": "0.5340901",
"inverse": true
},
{
- "bid": "0.0315",
- "ask": "0.033",
- "open_interest": "1708.2",
- "volume": "477.09",
+ "bid": "0.028",
+ "ask": "0.0295",
+ "open_interest": "1710.7",
+ "volume": "0",
"strike": "54000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5021622",
- "iv_ask": "0.5109207",
+ "iv_bid": "0.5047503",
+ "iv_ask": "0.5142862",
"inverse": true
},
{
- "bid": "0.0335",
- "ask": "0.035",
- "open_interest": "1004.5",
- "volume": "17069.39",
+ "bid": "0.03",
+ "ask": "0.0315",
+ "open_interest": "911.7",
+ "volume": "14736.48",
"strike": "55000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4963488",
- "iv_ask": "0.5047596",
+ "iv_bid": "0.4995092",
+ "iv_ask": "0.5086321",
"inverse": true
},
{
- "bid": "0.036",
- "ask": "0.0375",
- "open_interest": "70.9",
- "volume": "5834.36",
+ "bid": "0.0325",
+ "ask": "0.034",
+ "open_interest": "72.2",
+ "volume": "0",
"strike": "56000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4927808",
- "iv_ask": "0.500843",
+ "iv_bid": "0.4966248",
+ "iv_ask": "0.5053355",
"inverse": true
},
{
- "bid": "0.0415",
- "ask": "0.043",
- "open_interest": "59.9",
- "volume": "315.08",
+ "bid": "0.0375",
+ "ask": "0.0385",
+ "open_interest": "127",
+ "volume": "13031.62",
"strike": "58000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4863054",
- "iv_ask": "0.4937464",
+ "iv_bid": "0.488647",
+ "iv_ask": "0.4939975",
"inverse": true
},
{
- "bid": "0.047",
- "ask": "0.0485",
- "open_interest": "6301.9",
- "volume": "5915.37",
+ "bid": "0.043",
+ "ask": "0.044",
+ "open_interest": "6493.6",
+ "volume": "230934.51",
"strike": "60000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4773844",
- "iv_ask": "0.4843161",
+ "iv_bid": "0.4806593",
+ "iv_ask": "0.485613",
"inverse": true
},
{
- "bid": "0.0535",
- "ask": "0.0555",
- "open_interest": "601.8",
+ "bid": "0.049",
+ "ask": "0.0505",
+ "open_interest": "624.9",
"volume": "0",
"strike": "62000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4707383",
- "iv_ask": "0.4793757",
+ "iv_bid": "0.4725478",
+ "iv_ask": "0.4794678",
"inverse": true
},
{
- "bid": "0.061",
- "ask": "0.0625",
- "open_interest": "50.7",
- "volume": "1417.49",
+ "bid": "0.056",
+ "ask": "0.0575",
+ "open_interest": "69.1",
+ "volume": "0",
"strike": "64000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4658683",
- "iv_ask": "0.4719648",
+ "iv_bid": "0.4663949",
+ "iv_ask": "0.4728811",
"inverse": true
},
{
- "bid": "0.065",
- "ask": "0.0665",
- "open_interest": "409.3",
- "volume": "0",
+ "bid": "0.0595",
+ "ask": "0.061",
+ "open_interest": "470.5",
+ "volume": "958527.77",
"strike": "65000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4634874",
- "iv_ask": "0.4694142",
+ "iv_bid": "0.4623341",
+ "iv_ask": "0.4686335",
"inverse": true
},
{
- "bid": "0.069",
- "ask": "0.071",
- "open_interest": "37.4",
- "volume": "15240",
+ "bid": "0.0635",
+ "ask": "0.065",
+ "open_interest": "126.6",
+ "volume": "0",
"strike": "66000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4604877",
- "iv_ask": "0.4681817",
+ "iv_bid": "0.4597206",
+ "iv_ask": "0.465844",
"inverse": true
},
{
- "bid": "0.078",
- "ask": "0.08",
- "open_interest": "241.9",
- "volume": "0",
+ "bid": "0.0725",
+ "ask": "0.0735",
+ "open_interest": "264.5",
+ "volume": "19352.04",
"strike": "68000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4564555",
- "iv_ask": "0.4637856",
+ "iv_bid": "0.4564068",
+ "iv_ask": "0.4602832",
"inverse": true
},
{
- "bid": "0.0885",
- "ask": "0.0895",
- "open_interest": "1173.4",
- "volume": "43093.73",
+ "bid": "0.0815",
+ "ask": "0.083",
+ "open_interest": "1124.6",
+ "volume": "6505.06",
"strike": "70000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4553156",
- "iv_ask": "0.4588291",
+ "iv_bid": "0.4503714",
+ "iv_ask": "0.4559327",
"inverse": true
},
{
- "bid": "0.098",
- "ask": "0.0995",
- "open_interest": "210.6",
- "volume": "59325.12",
+ "bid": "0.0915",
+ "ask": "0.093",
+ "open_interest": "366.4",
+ "volume": "29717.34",
"strike": "72000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4482641",
- "iv_ask": "0.45335",
+ "iv_bid": "0.445472",
+ "iv_ask": "0.4508264",
"inverse": true
},
{
- "bid": "0.109",
- "ask": "0.1115",
- "open_interest": "55.9",
- "volume": "0",
+ "bid": "0.102",
+ "ask": "0.104",
+ "open_interest": "57.3",
+ "volume": "796.91",
"strike": "74000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4440836",
- "iv_ask": "0.4523094",
+ "iv_bid": "0.4398255",
+ "iv_ask": "0.4467439",
"inverse": true
},
{
- "bid": "0.115",
- "ask": "0.117",
- "open_interest": "729.7",
- "volume": "4512.24",
+ "bid": "0.108",
+ "ask": "0.1095",
+ "open_interest": "794.6",
+ "volume": "37634.74",
"strike": "75000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4427834",
- "iv_ask": "0.4492804",
+ "iv_bid": "0.4386538",
+ "iv_ask": "0.4437741",
"inverse": true
},
{
- "bid": "0.121",
- "ask": "0.1235",
- "open_interest": "127.2",
+ "bid": "0.1135",
+ "ask": "0.1155",
+ "open_interest": "132.3",
"volume": "0",
"strike": "76000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4409156",
- "iv_ask": "0.4489453",
+ "iv_bid": "0.4351538",
+ "iv_ask": "0.4419011",
"inverse": true
},
{
- "bid": "0.134",
- "ask": "0.1365",
- "open_interest": "216",
- "volume": "2082.33",
+ "bid": "0.126",
+ "ask": "0.128",
+ "open_interest": "248.2",
+ "volume": "0",
"strike": "78000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4387076",
- "iv_ask": "0.4465904",
+ "iv_bid": "0.4313785",
+ "iv_ask": "0.4380005",
"inverse": true
},
{
- "bid": "0.1365",
- "ask": "0.1385",
- "open_interest": "3942.4",
- "volume": "325204.46",
+ "bid": "0.127",
+ "ask": "0.1275",
+ "open_interest": "4855.9",
+ "volume": "512397.91",
"strike": "80000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4375664",
- "iv_ask": "0.443791",
+ "iv_bid": "0.4333078",
+ "iv_ask": "0.4349429",
"inverse": true
},
{
- "bid": "0.125",
- "ask": "0.1275",
- "open_interest": "77.3",
+ "bid": "0.115",
+ "ask": "0.116",
+ "open_interest": "185.2",
"volume": "0",
"strike": "82000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4335411",
- "iv_ask": "0.4412604",
+ "iv_bid": "0.4275045",
+ "iv_ask": "0.4307526",
"inverse": true
},
{
- "bid": "0.115",
- "ask": "0.117",
- "open_interest": "527.5",
- "volume": "19189.3",
+ "bid": "0.1045",
+ "ask": "0.1055",
+ "open_interest": "591.4",
+ "volume": "807.59",
"strike": "84000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.432112",
- "iv_ask": "0.4382695",
+ "iv_bid": "0.4242835",
+ "iv_ask": "0.4275287",
"inverse": true
},
{
- "bid": "0.1105",
- "ask": "0.112",
- "open_interest": "1380.3",
- "volume": "17323.71",
+ "bid": "0.1",
+ "ask": "0.1005",
+ "open_interest": "1539.7",
+ "volume": "80021.74",
"strike": "85000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4321908",
- "iv_ask": "0.4368105",
+ "iv_bid": "0.424262",
+ "iv_ask": "0.4258873",
"inverse": true
},
{
- "bid": "0.105",
- "ask": "0.1075",
- "open_interest": "112.1",
- "volume": "16586.39",
+ "bid": "0.0945",
+ "ask": "0.096",
+ "open_interest": "120.7",
+ "volume": "1477.19",
"strike": "86000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4287009",
- "iv_ask": "0.4364123",
+ "iv_bid": "0.4204317",
+ "iv_ask": "0.4253225",
"inverse": true
},
{
- "bid": "0.0965",
- "ask": "0.0975",
- "open_interest": "1586.6",
- "volume": "34774.46",
+ "bid": "0.086",
+ "ask": "0.0865",
+ "open_interest": "1712.6",
+ "volume": "68319.83",
"strike": "88000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.428003",
- "iv_ask": "0.4311079",
+ "iv_bid": "0.4192873",
+ "iv_ask": "0.4209341",
"inverse": true
},
{
- "bid": "0.0885",
- "ask": "0.09",
- "open_interest": "2240.3",
- "volume": "27861.5",
+ "bid": "0.0775",
+ "ask": "0.079",
+ "open_interest": "2227.3",
+ "volume": "2463.37",
"strike": "90000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4270223",
- "iv_ask": "0.4317289",
+ "iv_bid": "0.4160191",
+ "iv_ask": "0.4210341",
"inverse": true
},
{
- "bid": "0.0805",
- "ask": "0.0825",
- "open_interest": "138.1",
- "volume": "13318.92",
+ "bid": "0.07",
+ "ask": "0.0715",
+ "open_interest": "217.5",
+ "volume": "0",
"strike": "92000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.424245",
- "iv_ask": "0.430615",
+ "iv_bid": "0.414019",
+ "iv_ask": "0.4191349",
"inverse": true
},
{
- "bid": "0.0735",
- "ask": "0.0755",
- "open_interest": "52.7",
+ "bid": "0.0635",
+ "ask": "0.0645",
+ "open_interest": "65.3",
"volume": "0",
"strike": "94000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4229086",
- "iv_ask": "0.4293985",
+ "iv_bid": "0.4134683",
+ "iv_ask": "0.4169626",
"inverse": true
},
{
- "bid": "0.071",
- "ask": "0.072",
- "open_interest": "878.5",
- "volume": "40877.5",
+ "bid": "0.06",
+ "ask": "0.0615",
+ "open_interest": "1168.3",
+ "volume": "39554.5",
"strike": "95000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4248858",
- "iv_ask": "0.4281638",
+ "iv_bid": "0.4115896",
+ "iv_ask": "0.416905",
"inverse": true
},
{
- "bid": "0.067",
- "ask": "0.069",
- "open_interest": "49",
+ "bid": "0.057",
+ "ask": "0.0585",
+ "open_interest": "65.6",
"volume": "0",
"strike": "96000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4215262",
- "iv_ask": "0.4281631",
+ "iv_bid": "0.4109999",
+ "iv_ask": "0.4163942",
"inverse": true
},
{
- "bid": "0.061",
- "ask": "0.063",
- "open_interest": "37.6",
+ "bid": "0.0515",
+ "ask": "0.0535",
+ "open_interest": "70",
"volume": "0",
"strike": "98000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4201873",
- "iv_ask": "0.4269985",
+ "iv_bid": "0.4102709",
+ "iv_ask": "0.4176904",
"inverse": true
},
{
- "bid": "0.056",
- "ask": "0.0575",
- "open_interest": "2382",
- "volume": "1773.15",
+ "bid": "0.0465",
+ "ask": "0.048",
+ "open_interest": "2356.2",
+ "volume": "37380.71",
"strike": "100000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4207486",
- "iv_ask": "0.4260033",
+ "iv_bid": "0.4096577",
+ "iv_ask": "0.4154293",
"inverse": true
},
{
- "bid": "0.051",
- "ask": "0.0525",
- "open_interest": "39.9",
- "volume": "78938.4",
+ "bid": "0.042",
+ "ask": "0.0435",
+ "open_interest": "57.7",
+ "volume": "0",
"strike": "102000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4198637",
- "iv_ask": "0.4252884",
+ "iv_bid": "0.4093035",
+ "iv_ask": "0.4153022",
"inverse": true
},
{
- "bid": "0.0465",
- "ask": "0.048",
- "open_interest": "35.2",
- "volume": "107766.3",
+ "bid": "0.038",
+ "ask": "0.0395",
+ "open_interest": "64",
+ "volume": "0",
"strike": "104000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4193658",
- "iv_ask": "0.4249792",
+ "iv_bid": "0.4093728",
+ "iv_ask": "0.4156223",
"inverse": true
},
{
- "bid": "0.0445",
- "ask": "0.0455",
- "open_interest": "755.1",
- "volume": "0",
+ "bid": "0.036",
+ "ask": "0.0375",
+ "open_interest": "708",
+ "volume": "153314.78",
"strike": "105000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4195455",
- "iv_ask": "0.4233592",
+ "iv_bid": "0.4088213",
+ "iv_ask": "0.4152136",
"inverse": true
},
{
- "bid": "0.035",
- "ask": "0.0365",
- "open_interest": "1905",
- "volume": "2288.72",
+ "bid": "0.0345",
+ "ask": "0.0355",
+ "open_interest": "74.7",
+ "volume": "0",
+ "strike": "106000",
+ "maturity": "2026-12-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4100557",
+ "iv_ask": "0.414412",
+ "inverse": true
+ },
+ {
+ "bid": "0.031",
+ "ask": "0.0325",
+ "open_interest": "76",
+ "volume": "0",
+ "strike": "108000",
+ "maturity": "2026-12-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4092779",
+ "iv_ask": "0.4161181",
+ "inverse": true
+ },
+ {
+ "bid": "0.0285",
+ "ask": "0.0295",
+ "open_interest": "2910.1",
+ "volume": "59348.43",
"strike": "110000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4175218",
- "iv_ask": "0.423841",
+ "iv_bid": "0.4117678",
+ "iv_ask": "0.4165397",
"inverse": true
},
{
- "bid": "0.028",
- "ask": "0.029",
- "open_interest": "2688.7",
- "volume": "23290.69",
+ "bid": "0.022",
+ "ask": "0.0235",
+ "open_interest": "2501.3",
+ "volume": "5485.34",
"strike": "115000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4185056",
- "iv_ask": "0.4232116",
+ "iv_bid": "0.4114016",
+ "iv_ask": "0.4195322",
"inverse": true
},
{
- "bid": "0.0225",
- "ask": "0.0235",
- "open_interest": "6583.5",
- "volume": "27714.15",
+ "bid": "0.018",
+ "ask": "0.0185",
+ "open_interest": "7058.2",
+ "volume": "5733.95",
"strike": "120000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.420054",
- "iv_ask": "0.425338",
+ "iv_bid": "0.4177896",
+ "iv_ask": "0.420869",
"inverse": true
},
{
- "bid": "0.018",
- "ask": "0.019",
- "open_interest": "501.9",
- "volume": "0",
+ "bid": "0.014",
+ "ask": "0.015",
+ "open_interest": "820.3",
+ "volume": "7301.8",
"strike": "125000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4209927",
- "iv_ask": "0.4269805",
+ "iv_bid": "0.4181325",
+ "iv_ask": "0.4252136",
"inverse": true
},
{
- "bid": "0.014",
- "ask": "0.0155",
- "open_interest": "1730.3",
- "volume": "19458.27",
+ "bid": "0.011",
+ "ask": "0.012",
+ "open_interest": "1508.9",
+ "volume": "170.4",
"strike": "130000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4190828",
- "iv_ask": "0.4293767",
+ "iv_bid": "0.4194931",
+ "iv_ask": "0.4276967",
"inverse": true
},
{
- "bid": "0.0115",
- "ask": "0.013",
- "open_interest": "699.1",
- "volume": "13730.46",
+ "bid": "0.009",
+ "ask": "0.01",
+ "open_interest": "901.7",
+ "volume": "0",
"strike": "135000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4225318",
- "iv_ask": "0.4341579",
+ "iv_bid": "0.4242077",
+ "iv_ask": "0.4335599",
"inverse": true
},
{
- "bid": "0.0095",
- "ask": "0.0105",
- "open_interest": "1103.5",
- "volume": "389.72",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "1400.6",
+ "volume": "58.21",
"strike": "140000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4260323",
- "iv_ask": "0.4348952",
+ "iv_bid": "0.4298431",
+ "iv_ask": "0.4404236",
"inverse": true
},
{
- "bid": "0.0065",
- "ask": "0.008",
- "open_interest": "1508.9",
- "volume": "0",
+ "bid": "0.005",
+ "ask": "0.006",
+ "open_interest": "1559.8",
+ "volume": "38.79",
"strike": "150000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4319949",
- "iv_ask": "0.4487617",
+ "iv_bid": "0.4362192",
+ "iv_ask": "0.4501",
"inverse": true
},
{
- "bid": "0.005",
- "ask": "0.006",
- "open_interest": "1029.6",
- "volume": "567.37",
+ "bid": "0.0037",
+ "ask": "0.0042",
+ "open_interest": "1172.5",
+ "volume": "2323.3",
"strike": "160000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4449599",
- "iv_ask": "0.4587394",
+ "iv_bid": "0.4482195",
+ "iv_ask": "0.4571405",
"inverse": true
},
{
- "bid": "0.0039",
- "ask": "0.0044",
- "open_interest": "1979.8",
- "volume": "1368.16",
+ "bid": "0.0031",
+ "ask": "0.0034",
+ "open_interest": "2143.3",
+ "volume": "492.14",
"strike": "170000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4566378",
- "iv_ask": "0.4651832",
+ "iv_bid": "0.4662594",
+ "iv_ask": "0.4725881",
"inverse": true
},
{
- "bid": "0.0028",
- "ask": "0.0035",
- "open_interest": "831.5",
+ "bid": "0.0022",
+ "ask": "0.0027",
+ "open_interest": "919.2",
"volume": "0",
"strike": "180000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4610361",
- "iv_ask": "0.4759005",
+ "iv_bid": "0.471281",
+ "iv_ask": "0.4845143",
"inverse": true
},
{
- "bid": "0.0021",
- "ask": "0.0028",
- "open_interest": "963.2",
- "volume": "35.07",
+ "bid": "0.0017",
+ "ask": "0.0023",
+ "open_interest": "989.2",
+ "volume": "0",
"strike": "190000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4671526",
- "iv_ask": "0.4853673",
+ "iv_bid": "0.4803256",
+ "iv_ask": "0.499248",
"inverse": true
},
{
- "bid": "0.0016",
+ "bid": "0.0013",
"ask": "0.002",
- "open_interest": "922.6",
- "volume": "128.87",
+ "open_interest": "942.4",
+ "volume": "0",
"strike": "200000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4731253",
- "iv_ask": "0.4863711",
+ "iv_bid": "0.4874298",
+ "iv_ask": "0.5135969",
"inverse": true
},
{
- "bid": "0.0014",
- "ask": "0.0018",
- "open_interest": "134.2",
+ "bid": "0.0011",
+ "ask": "0.0017",
+ "open_interest": "149.2",
"volume": "0",
"strike": "210000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4858514",
- "iv_ask": "0.5006689",
+ "iv_bid": "0.4990451",
+ "iv_ask": "0.524983",
"inverse": true
},
{
- "bid": "0.0014",
- "ask": "0.0017",
- "open_interest": "222.2",
+ "bid": "0.0011",
+ "ask": "0.0015",
+ "open_interest": "221.8",
"volume": "0",
"strike": "220000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5049758",
- "iv_ask": "0.5166325",
+ "iv_bid": "0.5188023",
+ "iv_ask": "0.5374411",
"inverse": true
},
{
- "bid": "0.0009",
- "ask": "0.0014",
- "open_interest": "186.3",
- "volume": "7.78",
+ "bid": "0.0008",
+ "ask": "0.0013",
+ "open_interest": "186.8",
+ "volume": "0",
"strike": "230000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4982523",
- "iv_ask": "0.5231024",
+ "iv_bid": "0.5195513",
+ "iv_ask": "0.5476157",
"inverse": true
},
{
- "bid": "0.0009",
- "ask": "0.0015",
- "open_interest": "877.9",
+ "bid": "0.0007",
+ "ask": "0.0012",
+ "open_interest": "879.2",
"volume": "0",
"strike": "240000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5148978",
- "iv_ask": "0.5445898",
+ "iv_bid": "0.5296618",
+ "iv_ask": "0.5606509",
"inverse": true
},
{
"bid": "0.0007",
- "ask": "0.0012",
- "open_interest": "1135.2",
- "volume": "255.77",
+ "ask": "0.0011",
+ "open_interest": "1186.4",
+ "volume": "0",
"strike": "250000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.5172986",
- "iv_ask": "0.5473116",
+ "iv_bid": "0.5460613",
+ "iv_ask": "0.5723",
"inverse": true
},
{
- "bid": "79800",
- "ask": "79802.5",
- "open_interest": "15964110",
- "volume": "3373920",
+ "bid": "79542.5",
+ "ask": "79560",
+ "open_interest": "16356610",
+ "volume": "1525090",
"maturity": "2027-03-26T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.018",
- "ask": "0.0195",
- "open_interest": "430.9",
- "volume": "22395.24",
+ "bid": "0.016",
+ "ask": "0.017",
+ "open_interest": "740",
+ "volume": "34382.22",
"strike": "40000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.5675747",
- "iv_ask": "0.5803427",
+ "iv_bid": "0.5692864",
+ "iv_ask": "0.5786",
"inverse": true
},
{
- "bid": "0.0355",
- "ask": "0.037",
- "open_interest": "1288.2",
- "volume": "1942.15",
+ "bid": "0.0325",
+ "ask": "0.0335",
+ "open_interest": "1916.2",
+ "volume": "1307554.9",
"strike": "50000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.517943",
- "iv_ask": "0.5259073",
+ "iv_bid": "0.5190345",
+ "iv_ask": "0.5246949",
"inverse": true
},
{
- "bid": "0.0485",
- "ask": "0.05",
- "open_interest": "629.3",
- "volume": "376.13",
+ "bid": "0.045",
+ "ask": "0.0465",
+ "open_interest": "1213.6",
+ "volume": "0",
"strike": "55000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.499579",
- "iv_ask": "0.506169",
+ "iv_bid": "0.5004849",
+ "iv_ask": "0.5074307",
"inverse": true
},
{
- "bid": "0.0515",
- "ask": "0.053",
- "open_interest": "34.8",
+ "bid": "0.048",
+ "ask": "0.0495",
+ "open_interest": "53.4",
"volume": "0",
"strike": "56000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4963148",
- "iv_ask": "0.5026841",
+ "iv_bid": "0.4976177",
+ "iv_ask": "0.504317",
"inverse": true
},
{
- "bid": "0.058",
- "ask": "0.06",
- "open_interest": "23.9",
+ "bid": "0.054",
+ "ask": "0.0555",
+ "open_interest": "49.6",
"volume": "0",
"strike": "58000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4904471",
- "iv_ask": "0.4984018",
+ "iv_bid": "0.4903554",
+ "iv_ask": "0.4966245",
"inverse": true
},
{
- "bid": "0.065",
- "ask": "0.067",
- "open_interest": "122.7",
- "volume": "1491.49",
+ "bid": "0.0605",
+ "ask": "0.0625",
+ "open_interest": "144.5",
+ "volume": "4714.29",
"strike": "60000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4846734",
- "iv_ask": "0.4921719",
+ "iv_bid": "0.4832935",
+ "iv_ask": "0.4911506",
"inverse": true
},
{
- "bid": "0.0725",
- "ask": "0.075",
- "open_interest": "60.1",
+ "bid": "0.068",
+ "ask": "0.07",
+ "open_interest": "75.1",
"volume": "0",
"strike": "62000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4789458",
- "iv_ask": "0.4878228",
+ "iv_bid": "0.4782111",
+ "iv_ask": "0.4856328",
"inverse": true
},
{
- "bid": "0.081",
- "ask": "0.0835",
- "open_interest": "22.7",
+ "bid": "0.076",
+ "ask": "0.078",
+ "open_interest": "73",
"volume": "0",
"strike": "64000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4749216",
- "iv_ask": "0.4833696",
+ "iv_bid": "0.4729972",
+ "iv_ask": "0.4800463",
"inverse": true
},
{
- "bid": "0.0855",
- "ask": "0.088",
- "open_interest": "25.4",
+ "bid": "0.0805",
+ "ask": "0.0825",
+ "open_interest": "265.1",
"volume": "0",
"strike": "65000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4730537",
- "iv_ask": "0.4813104",
+ "iv_bid": "0.4714147",
+ "iv_ask": "0.4782955",
"inverse": true
},
{
- "bid": "0.09",
- "ask": "0.0925",
- "open_interest": "29.4",
+ "bid": "0.0845",
+ "ask": "0.087",
+ "open_interest": "57.7",
"volume": "0",
"strike": "66000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4707328",
- "iv_ask": "0.4788136",
+ "iv_bid": "0.4676429",
+ "iv_ask": "0.4760536",
"inverse": true
},
{
- "bid": "0.0995",
- "ask": "0.102",
- "open_interest": "34.1",
- "volume": "0",
+ "bid": "0.094",
+ "ask": "0.096",
+ "open_interest": "40.2",
+ "volume": "743.62",
"strike": "68000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4663906",
- "iv_ask": "0.4741575",
+ "iv_bid": "0.4637569",
+ "iv_ask": "0.4702126",
"inverse": true
},
{
- "bid": "0.11",
- "ask": "0.1125",
- "open_interest": "72.7",
- "volume": "84054.42",
+ "bid": "0.104",
+ "ask": "0.106",
+ "open_interest": "73.6",
+ "volume": "3276.79",
"strike": "70000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4634057",
- "iv_ask": "0.4709042",
+ "iv_bid": "0.4596019",
+ "iv_ask": "0.4658256",
"inverse": true
},
{
- "bid": "0.121",
- "ask": "0.124",
- "open_interest": "104.3",
+ "bid": "0.115",
+ "ask": "0.117",
+ "open_interest": "107.1",
"volume": "0",
"strike": "72000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4601959",
- "iv_ask": "0.4689229",
+ "iv_bid": "0.4567083",
+ "iv_ask": "0.462737",
"inverse": true
},
{
- "bid": "0.1325",
- "ask": "0.1355",
+ "bid": "0.126",
+ "ask": "0.1285",
"open_interest": "23.1",
"volume": "0",
"strike": "74000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4567922",
- "iv_ask": "0.4652929",
+ "iv_bid": "0.4520399",
+ "iv_ask": "0.4593739",
"inverse": true
},
{
- "bid": "0.145",
- "ask": "0.148",
- "open_interest": "5.2",
+ "bid": "0.138",
+ "ask": "0.141",
+ "open_interest": "7.7",
"volume": "0",
"strike": "76000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4546068",
- "iv_ask": "0.462922",
+ "iv_bid": "0.4486009",
+ "iv_ask": "0.4572049",
"inverse": true
},
{
- "bid": "0.1575",
- "ask": "0.1595",
- "open_interest": "114.5",
+ "bid": "0.151",
+ "ask": "0.1535",
+ "open_interest": "176",
"volume": "0",
"strike": "78000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "put",
"security_type": "option",
- "iv_bid": "0.4508679",
- "iv_ask": "0.4563106",
+ "iv_bid": "0.4463247",
+ "iv_ask": "0.4533647",
"inverse": true
},
{
- "bid": "0.1685",
- "ask": "0.1715",
- "open_interest": "306.6",
+ "bid": "0.159",
+ "ask": "0.1615",
+ "open_interest": "525.8",
"volume": "0",
"strike": "80000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4483291",
- "iv_ask": "0.4563785",
+ "iv_bid": "0.4415988",
+ "iv_ask": "0.4485389",
"inverse": true
},
{
- "bid": "0.158",
- "ask": "0.1595",
- "open_interest": "100.9",
- "volume": "1312.3",
+ "bid": "0.148",
+ "ask": "0.15",
+ "open_interest": "149",
+ "volume": "44978.86",
"strike": "82000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4471844",
- "iv_ask": "0.4511663",
+ "iv_bid": "0.4391986",
+ "iv_ask": "0.4446949",
"inverse": true
},
{
- "bid": "0.1475",
- "ask": "0.15",
- "open_interest": "27",
- "volume": "1190.08",
+ "bid": "0.1375",
+ "ask": "0.1395",
+ "open_interest": "73.2",
+ "volume": "0",
"strike": "84000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4446112",
- "iv_ask": "0.4512014",
+ "iv_bid": "0.4366111",
+ "iv_ask": "0.4420737",
"inverse": true
},
{
- "bid": "0.1375",
- "ask": "0.1405",
- "open_interest": "30",
+ "bid": "0.1275",
+ "ask": "0.13",
+ "open_interest": "30.8",
"volume": "0",
"strike": "86000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4419852",
- "iv_ask": "0.4498641",
+ "iv_bid": "0.4338765",
+ "iv_ask": "0.4406886",
"inverse": true
},
{
- "bid": "0.1285",
- "ask": "0.1315",
- "open_interest": "19.6",
+ "bid": "0.1185",
+ "ask": "0.1205",
+ "open_interest": "19.7",
"volume": "0",
"strike": "88000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4406535",
- "iv_ask": "0.4485282",
+ "iv_bid": "0.432398",
+ "iv_ask": "0.4378542",
"inverse": true
},
{
- "bid": "0.12",
- "ask": "0.123",
- "open_interest": "58.4",
- "volume": "993.16",
+ "bid": "0.11",
+ "ask": "0.112",
+ "open_interest": "390.9",
+ "volume": "0",
"strike": "90000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4393464",
- "iv_ask": "0.4472404",
+ "iv_bid": "0.4308631",
+ "iv_ask": "0.4363441",
"inverse": true
},
{
- "bid": "0.1115",
- "ask": "0.1145",
- "open_interest": "63.3",
- "volume": "9113.44",
+ "bid": "0.102",
+ "ask": "0.104",
+ "open_interest": "64",
+ "volume": "0",
"strike": "92000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4367892",
- "iv_ask": "0.4447267",
+ "iv_bid": "0.4293254",
+ "iv_ask": "0.4348491",
"inverse": true
},
{
- "bid": "0.104",
- "ask": "0.107",
- "open_interest": "28.2",
+ "bid": "0.0945",
+ "ask": "0.0965",
+ "open_interest": "35.5",
"volume": "0",
"strike": "94000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4356695",
- "iv_ask": "0.4436715",
+ "iv_bid": "0.4278404",
+ "iv_ask": "0.4334243",
"inverse": true
},
{
- "bid": "0.1005",
- "ask": "0.1035",
- "open_interest": "65",
- "volume": "16048.48",
+ "bid": "0.091",
+ "ask": "0.093",
+ "open_interest": "69.1",
+ "volume": "0",
"strike": "95000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4353399",
- "iv_ask": "0.4433815",
+ "iv_bid": "0.4273117",
+ "iv_ask": "0.4329318",
"inverse": true
},
{
- "bid": "0.097",
- "ask": "0.1",
- "open_interest": "51.4",
- "volume": "8945.05",
+ "bid": "0.0875",
+ "ask": "0.0895",
+ "open_interest": "59.4",
+ "volume": "676.51",
"strike": "96000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.434726",
- "iv_ask": "0.4428132",
+ "iv_bid": "0.4264671",
+ "iv_ask": "0.4321282",
"inverse": true
},
{
- "bid": "0.0905",
- "ask": "0.0935",
- "open_interest": "19",
+ "bid": "0.081",
+ "ask": "0.083",
+ "open_interest": "18.6",
"volume": "0",
"strike": "98000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4340182",
- "iv_ask": "0.4422103",
+ "iv_bid": "0.4252696",
+ "iv_ask": "0.4310243",
"inverse": true
},
{
- "bid": "0.084",
- "ask": "0.087",
- "open_interest": "128",
- "volume": "6961.12",
+ "bid": "0.075",
+ "ask": "0.077",
+ "open_interest": "137.5",
+ "volume": "5963.63",
"strike": "100000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4322207",
- "iv_ask": "0.4405429",
+ "iv_bid": "0.4243178",
+ "iv_ask": "0.4301823",
"inverse": true
},
{
- "bid": "0.0785",
- "ask": "0.0815",
- "open_interest": "22.5",
- "volume": "6478.32",
+ "bid": "0.0695",
+ "ask": "0.0715",
+ "open_interest": "34.4",
+ "volume": "0",
"strike": "102000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4321595",
- "iv_ask": "0.4406239",
+ "iv_bid": "0.4236896",
+ "iv_ask": "0.4296788",
"inverse": true
},
{
- "bid": "0.073",
- "ask": "0.076",
- "open_interest": "1",
+ "bid": "0.0645",
+ "ask": "0.0665",
+ "open_interest": "9.6",
"volume": "0",
"strike": "104000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.431101",
- "iv_ask": "0.4397331",
+ "iv_bid": "0.4234716",
+ "iv_ask": "0.4295994",
"inverse": true
},
{
- "bid": "0.0705",
- "ask": "0.0735",
- "open_interest": "51.9",
+ "bid": "0.062",
+ "ask": "0.064",
+ "open_interest": "97.4",
"volume": "0",
"strike": "105000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4309251",
- "iv_ask": "0.4396462",
+ "iv_bid": "0.4229626",
+ "iv_ask": "0.4291682",
"inverse": true
},
{
- "bid": "0.068",
- "ask": "0.071",
- "open_interest": "0",
+ "bid": "0.06",
+ "ask": "0.0615",
+ "open_interest": "15.4",
"volume": "0",
"strike": "106000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.430512",
- "iv_ask": "0.4393289",
+ "iv_bid": "0.4237602",
+ "iv_ask": "0.4284732",
"inverse": true
},
{
- "bid": "0.063",
- "ask": "0.066",
- "open_interest": "5",
- "volume": "27513.66",
+ "bid": "0.0555",
+ "ask": "0.057",
+ "open_interest": "32.9",
+ "volume": "0",
"strike": "108000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4289668",
- "iv_ask": "0.4379983",
+ "iv_bid": "0.4230437",
+ "iv_ask": "0.4278879",
"inverse": true
},
{
- "bid": "0.059",
- "ask": "0.062",
- "open_interest": "35.2",
+ "bid": "0.0515",
+ "ask": "0.053",
+ "open_interest": "90.6",
"volume": "0",
"strike": "110000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4295475",
- "iv_ask": "0.4387921",
+ "iv_bid": "0.422967",
+ "iv_ask": "0.427951",
"inverse": true
},
{
- "bid": "0.049",
- "ask": "0.052",
- "open_interest": "393.3",
+ "bid": "0.0475",
+ "ask": "0.0495",
+ "open_interest": "18.2",
"volume": "0",
- "strike": "115000",
+ "strike": "112000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4273018",
- "iv_ask": "0.4372142",
+ "iv_bid": "0.4219323",
+ "iv_ask": "0.4287816",
"inverse": true
},
{
- "bid": "0.0415",
+ "bid": "0.0425",
"ask": "0.044",
- "open_interest": "80.5",
+ "open_interest": "527.2",
"volume": "0",
- "strike": "120000",
+ "strike": "115000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4284489",
- "iv_ask": "0.4373427",
+ "iv_bid": "0.4221283",
+ "iv_ask": "0.4275233",
"inverse": true
},
{
- "bid": "0.035",
- "ask": "0.0375",
- "open_interest": "22.6",
+ "bid": "0.0355",
+ "ask": "0.037",
+ "open_interest": "185.2",
"volume": "0",
- "strike": "125000",
+ "strike": "120000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.428861",
- "iv_ask": "0.4384941",
+ "iv_bid": "0.423243",
+ "iv_ask": "0.4291091",
"inverse": true
},
{
"bid": "0.0295",
- "ask": "0.0315",
- "open_interest": "592.1",
- "volume": "253.38",
+ "ask": "0.031",
+ "open_interest": "48.1",
+ "volume": "14508.61",
+ "strike": "125000",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4235706",
+ "iv_ask": "0.4300026",
+ "inverse": true
+ },
+ {
+ "bid": "0.025",
+ "ask": "0.026",
+ "open_interest": "638.4",
+ "volume": "3190.44",
"strike": "130000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4291369",
- "iv_ask": "0.4375563",
+ "iv_bid": "0.426195",
+ "iv_ask": "0.430905",
"inverse": true
},
{
- "bid": "0.0215",
- "ask": "0.0235",
- "open_interest": "80.5",
- "volume": "2002.98",
+ "bid": "0.018",
+ "ask": "0.019",
+ "open_interest": "110.7",
+ "volume": "1481.29",
"strike": "140000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4323137",
- "iv_ask": "0.4423314",
+ "iv_bid": "0.4306551",
+ "iv_ask": "0.4363593",
"inverse": true
},
{
- "bid": "0.0155",
- "ask": "0.017",
- "open_interest": "83",
- "volume": "271.41",
+ "bid": "0.013",
+ "ask": "0.0145",
+ "open_interest": "1260.7",
+ "volume": "551576.81",
"strike": "150000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4335328",
- "iv_ask": "0.4426856",
+ "iv_bid": "0.4342409",
+ "iv_ask": "0.4446091",
"inverse": true
},
{
- "bid": "0.012",
- "ask": "0.013",
- "open_interest": "604",
- "volume": "467.16",
+ "bid": "0.01",
+ "ask": "0.011",
+ "open_interest": "814.3",
+ "volume": "155.27",
"strike": "160000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4405418",
- "iv_ask": "0.4478131",
+ "iv_bid": "0.4422051",
+ "iv_ask": "0.4505239",
"inverse": true
},
{
- "bid": "0.009",
- "ask": "0.0105",
- "open_interest": "63.3",
- "volume": "82.66",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "145.5",
+ "volume": "5960.34",
"strike": "170000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4434883",
- "iv_ask": "0.4564694",
+ "iv_bid": "0.4465725",
+ "iv_ask": "0.4566574",
"inverse": true
},
{
- "bid": "0.007",
- "ask": "0.0085",
- "open_interest": "198.7",
- "volume": "7845.12",
+ "bid": "0.006",
+ "ask": "0.007",
+ "open_interest": "299",
+ "volume": "251.79",
"strike": "180000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.4484281",
- "iv_ask": "0.4637703",
+ "iv_bid": "0.4547126",
+ "iv_ask": "0.4665266",
"inverse": true
},
{
- "bid": "0.0055",
- "ask": "0.0075",
- "open_interest": "64.9",
- "volume": "6366.53",
+ "bid": "0.005",
+ "ask": "0.006",
+ "open_interest": "161.9",
+ "volume": "0",
"strike": "190000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.453116",
- "iv_ask": "0.476623",
+ "iv_bid": "0.4644076",
+ "iv_ask": "0.4779217",
"inverse": true
},
{
- "bid": "0.0048",
- "ask": "0.0055",
- "open_interest": "57.8",
- "volume": "218.23",
+ "bid": "0.0041",
+ "ask": "0.0049",
+ "open_interest": "259.5",
+ "volume": "300.11",
"strike": "200000",
"maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
"security_type": "option",
- "iv_bid": "0.464132",
- "iv_ask": "0.4738818",
+ "iv_bid": "0.4716403",
+ "iv_ask": "0.4842735",
"inverse": true
}
]
diff --git a/docs/examples/fixtures/volsurface_eth.json b/docs/examples/fixtures/volsurface_eth.json
index 1e23240d..e67b375c 100644
--- a/docs/examples/fixtures/volsurface_eth.json
+++ b/docs/examples/fixtures/volsurface_eth.json
@@ -1,4359 +1,3916 @@
{
"asset": "eth",
- "ref_date": "2026-01-31T12:25:19.499850Z",
+ "asset_curve": {
+ "ref_date": "2026-05-21T10:08:42.397057Z",
+ "curve_type": "no_discount"
+ },
+ "quote_curve": {
+ "ref_date": "2026-05-21T10:08:42.397057Z",
+ "curve_type": "nelson_siegel",
+ "beta1": "0.0430852145",
+ "beta2": "-0.0189909065",
+ "beta3": "-0.0679762918",
+ "lambda_": "9.9928466198"
+ },
"inputs": [
{
- "bid": "2635.25",
- "ask": "2635.30",
- "open_interest": "397478495",
- "volume": "233177071.0",
+ "bid": "2125.7",
+ "ask": "2125.75",
+ "open_interest": "311539747",
+ "volume": "73039627",
"security_type": "spot"
},
{
- "bid": "2637.00",
- "ask": "2637.75",
- "open_interest": "8615529",
- "volume": "7197233.0",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "2125.5",
+ "ask": "2125.75",
+ "open_interest": "5430815",
+ "volume": "1488159",
+ "maturity": "2026-05-22T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.0970",
- "ask": "0.1000",
- "open_interest": "65.0",
- "volume": "17808.85",
- "strike": "2400.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0080",
- "ask": "0.0085",
- "open_interest": "8334.0",
- "volume": "39295.43",
- "strike": "2400.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "7621",
+ "volume": "2631.85",
+ "strike": "2000",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5898448",
+ "iv_ask": "0.6597484",
+ "inverse": true
},
{
- "bid": "0.0100",
- "ask": "0.0110",
- "open_interest": "790.0",
- "volume": "20308.16",
- "strike": "2450.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0004",
+ "ask": "0.0007",
+ "open_interest": "430",
+ "volume": "363.26",
+ "strike": "2025",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5466591",
+ "iv_ask": "0.6101786",
+ "inverse": true
},
{
- "bid": "0.0135",
- "ask": "0.0145",
- "open_interest": "336.0",
- "volume": "12741.23",
- "strike": "2500.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0008",
+ "ask": "0.0011",
+ "open_interest": "1062",
+ "volume": "2065",
+ "strike": "2050",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5005718",
+ "iv_ask": "0.5412402",
+ "inverse": true
},
{
- "bid": "0.0500",
- "ask": "0.0535",
- "open_interest": "1.0",
- "volume": "172.2",
- "strike": "2550.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0180",
- "ask": "0.0190",
- "open_interest": "993.0",
- "volume": "142363.24",
- "strike": "2550.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0016",
+ "ask": "0.002",
+ "open_interest": "445",
+ "volume": "864.04",
+ "strike": "2075",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4505546",
+ "iv_ask": "0.4853175",
+ "inverse": true
},
{
- "bid": "0.0385",
- "ask": "0.0395",
- "open_interest": "72.0",
- "volume": "5403.44",
- "strike": "2600.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0240",
- "ask": "0.0255",
- "open_interest": "5175.0",
- "volume": "97966.61",
- "strike": "2600.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0036",
+ "ask": "0.0041",
+ "open_interest": "8411",
+ "volume": "7425.66",
+ "strike": "2100",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4191678",
+ "iv_ask": "0.4487797",
+ "inverse": true
},
{
- "bid": "0.0275",
- "ask": "0.0290",
- "open_interest": "237.0",
- "volume": "23482.45",
- "strike": "2650.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0325",
- "ask": "0.0335",
- "open_interest": "788.0",
- "volume": "61913.3",
- "strike": "2650.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "7358",
+ "volume": "103676.78",
+ "strike": "2125",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3864152",
+ "iv_ask": "0.4366218",
+ "inverse": true
},
{
- "bid": "0.0195",
- "ask": "0.0200",
- "open_interest": "511.0",
- "volume": "33138.18",
- "strike": "2700.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0033",
+ "ask": "0.0039",
+ "open_interest": "3840",
+ "volume": "36964.72",
+ "strike": "2150",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0415",
- "ask": "0.0450",
- "open_interest": "6388.0",
- "volume": "57465.12",
- "strike": "2700.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3832703",
+ "iv_ask": "0.4183887",
+ "inverse": true
},
{
- "bid": "0.0130",
- "ask": "0.0140",
- "open_interest": "776.0",
- "volume": "32574.29",
- "strike": "2750.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0014",
+ "ask": "0.0017",
+ "open_interest": "2707",
+ "volume": "2814.05",
+ "strike": "2175",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0540",
- "ask": "0.0575",
- "open_interest": "2691.0",
- "volume": "93993.49",
- "strike": "2750.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4121547",
+ "iv_ask": "0.4387093",
+ "inverse": true
},
{
- "bid": "0.0085",
- "ask": "0.0095",
- "open_interest": "2046.0",
- "volume": "39680.28",
- "strike": "2800.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0006",
+ "ask": "0.0009",
+ "open_interest": "3623",
+ "volume": "3658.14",
+ "strike": "2200",
+ "maturity": "2026-05-22T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.444837",
+ "iv_ask": "0.4885229",
+ "inverse": true
},
{
- "bid": "0.0680",
- "ask": "0.0715",
- "open_interest": "4290.0",
- "volume": "26795.96",
- "strike": "2800.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "2714",
+ "volume": "2443.65",
+ "strike": "2250",
+ "maturity": "2026-05-22T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5497289",
+ "iv_ask": "0.6150819",
+ "inverse": true
},
{
- "bid": "0.0055",
- "ask": "0.0060",
- "open_interest": "1699.0",
- "volume": "6380.46",
- "strike": "2850.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0001",
+ "ask": "0.0002",
+ "open_interest": "6578",
+ "volume": "432.18",
+ "strike": "2300",
+ "maturity": "2026-05-22T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.6628309",
+ "iv_ask": "0.7260448",
+ "inverse": true
+ },
+ {
+ "bid": "2116",
+ "ask": "2132.5",
+ "open_interest": "17067",
+ "volume": "10710",
+ "maturity": "2026-05-23T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.0830",
- "ask": "0.0890",
- "open_interest": "2040.0",
- "volume": "58465.05",
- "strike": "2850.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0004",
+ "open_interest": "695",
+ "volume": "3.41",
+ "strike": "1900",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6904371",
+ "iv_ask": "0.7623777",
+ "inverse": true
},
{
- "bid": "0.0035",
- "ask": "0.0040",
- "open_interest": "1675.0",
- "volume": "4139.29",
- "strike": "2900.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "103",
+ "volume": "90.34",
+ "strike": "1950",
+ "maturity": "2026-05-23T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6096839",
+ "iv_ask": "0.6529888",
+ "inverse": true
},
{
- "bid": "0.1000",
- "ask": "0.1060",
- "open_interest": "3555.0",
- "volume": "7128.68",
- "strike": "2900.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0006",
+ "ask": "0.0008",
+ "open_interest": "294",
+ "volume": "1187.98",
+ "strike": "1975",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5723022",
+ "iv_ask": "0.6044527",
+ "inverse": true
},
{
- "bid": "0.0028",
- "ask": "0.0033",
- "open_interest": "1218.0",
- "volume": "9791.21",
- "strike": "2925.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.001",
+ "ask": "0.0012",
+ "open_interest": "1740",
+ "volume": "48.85",
+ "strike": "2000",
+ "maturity": "2026-05-23T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5449622",
+ "iv_ask": "0.5675813",
+ "inverse": true
},
{
- "bid": "0.1090",
- "ask": "0.1145",
- "open_interest": "1317.0",
- "volume": "9570.87",
- "strike": "2925.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0015",
+ "ask": "0.0017",
+ "open_interest": "274",
+ "volume": "99.64",
+ "strike": "2025",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5036662",
+ "iv_ask": "0.5204981",
+ "inverse": true
},
{
"bid": "0.0023",
- "ask": "0.0026",
- "open_interest": "1937.0",
- "volume": "1391.37",
- "strike": "2950.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1180",
- "ask": "0.1235",
- "open_interest": "1125.0",
- "volume": "1996.38",
- "strike": "2950.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "ask": "0.0027",
+ "open_interest": "103",
+ "volume": "118.69",
+ "strike": "2050",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0015",
- "ask": "0.0019",
- "open_interest": "4544.0",
- "volume": "9774.06",
- "strike": "3000.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4619188",
+ "iv_ask": "0.4867005",
+ "inverse": true
},
{
- "bid": "0.1360",
- "ask": "0.1415",
- "open_interest": "13493.0",
- "volume": "8342.81",
- "strike": "3000.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0039",
+ "ask": "0.0044",
+ "open_interest": "120",
+ "volume": "165.75",
+ "strike": "2075",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4336451",
+ "iv_ask": "0.4569453",
+ "inverse": true
},
{
- "bid": "0.0010",
- "ask": "0.0013",
- "open_interest": "2036.0",
- "volume": "1212.68",
- "strike": "3050.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0065",
+ "ask": "0.0075",
+ "open_interest": "220",
+ "volume": "820.52",
+ "strike": "2100",
+ "maturity": "2026-05-23T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.4045199",
+ "iv_ask": "0.4423182",
+ "inverse": true
},
{
- "bid": "0.1545",
- "ask": "0.1600",
- "open_interest": "559.0",
- "volume": "629.96",
- "strike": "3050.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.011",
+ "ask": "0.012",
+ "open_interest": "361",
+ "volume": "10714.51",
+ "strike": "2125",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3893008",
+ "iv_ask": "0.4239628",
+ "inverse": true
},
{
- "bid": "0.0007",
- "ask": "0.0010",
- "open_interest": "3019.0",
- "volume": "8077.18",
- "strike": "3100.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.006",
+ "ask": "0.007",
+ "open_interest": "673",
+ "volume": "9786.5",
+ "strike": "2150",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3690337",
+ "iv_ask": "0.406368",
+ "inverse": true
},
{
- "bid": "0.1730",
- "ask": "0.1785",
- "open_interest": "1698.0",
- "volume": "0.0",
- "strike": "3100.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0033",
+ "ask": "0.0037",
+ "open_interest": "251",
+ "volume": "2262.53",
+ "strike": "2175",
+ "maturity": "2026-05-23T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3859476",
+ "iv_ask": "0.4047696",
+ "inverse": true
},
{
- "bid": "0.0006",
- "ask": "0.0009",
- "open_interest": "3461.0",
- "volume": "1003.42",
- "strike": "3150.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0016",
+ "ask": "0.002",
+ "open_interest": "246",
+ "volume": "449.82",
+ "strike": "2200",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3921861",
+ "iv_ask": "0.4190799",
+ "inverse": true
},
{
- "bid": "0.1920",
- "ask": "0.1975",
- "open_interest": "150.0",
- "volume": "0.0",
- "strike": "3150.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0009",
+ "ask": "0.0012",
+ "open_interest": "1255",
+ "volume": "3275.3",
+ "strike": "2225",
+ "maturity": "2026-05-23T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4183812",
+ "iv_ask": "0.4475877",
+ "inverse": true
},
{
- "bid": "0.0004",
+ "bid": "0.0006",
"ask": "0.0007",
- "open_interest": "2895.0",
- "volume": "29.82",
- "strike": "3200.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "open_interest": "555",
+ "volume": "74.51",
+ "strike": "2250",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2110",
- "ask": "0.2165",
- "open_interest": "853.0",
- "volume": "49751.34",
- "strike": "3200.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4569462",
+ "iv_ask": "0.4709649",
+ "inverse": true
},
{
"bid": "0.0003",
- "ask": "0.0006",
- "open_interest": "1694.0",
- "volume": "16.95",
- "strike": "3250.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "ask": "0.0005",
+ "open_interest": "203",
+ "volume": "232.32",
+ "strike": "2275",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2295",
- "ask": "0.2350",
- "open_interest": "246.0",
- "volume": "0.0",
- "strike": "3250.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4687542",
+ "iv_ask": "0.5104235",
+ "inverse": true
},
{
"bid": "0.0002",
- "ask": "0.0005",
- "open_interest": "1916.0",
- "volume": "15.8",
- "strike": "3300.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "ask": "0.0004",
+ "open_interest": "24",
+ "volume": "29.8",
+ "strike": "2300",
+ "maturity": "2026-05-23T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5008554",
+ "iv_ask": "0.5560522",
+ "inverse": true
},
{
- "bid": "0.2485",
- "ask": "0.2540",
- "open_interest": "306.0",
- "volume": "0.0",
- "strike": "3300.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "3",
+ "volume": "1.28",
+ "strike": "2350",
+ "maturity": "2026-05-23T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5648167",
+ "iv_ask": "0.6518551",
+ "inverse": true
+ },
+ {
+ "bid": "2116",
+ "ask": "2133.5",
+ "open_interest": "0",
+ "volume": "0",
+ "maturity": "2026-05-24T08:00:00Z",
+ "security_type": "forward"
},
{
"bid": "0.0001",
- "ask": "0.0004",
- "open_interest": "1848.0",
- "volume": "7.01",
- "strike": "3350.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "ask": "0.0003",
+ "open_interest": "235",
+ "volume": "214.04",
+ "strike": "1800",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.7288311",
+ "iv_ask": "0.8331671",
+ "inverse": true
},
{
- "bid": "0.2675",
- "ask": "0.2730",
- "open_interest": "42.0",
- "volume": "0.0",
- "strike": "3350.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "612",
+ "volume": "21.36",
+ "strike": "1900",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6179026",
+ "iv_ask": "0.6593642",
+ "inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0004",
- "open_interest": "666.0",
- "volume": "103.36",
- "strike": "3400.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0007",
+ "ask": "0.001",
+ "open_interest": "1501",
+ "volume": "2014.98",
+ "strike": "1950",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5442104",
+ "iv_ask": "0.5827092",
+ "inverse": true
},
{
- "bid": "0.2860",
- "ask": "0.2920",
- "open_interest": "103.0",
- "volume": "0.0",
- "strike": "3400.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0011",
+ "ask": "0.0012",
+ "open_interest": "41",
+ "volume": "156.84",
+ "strike": "1975",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5229804",
+ "iv_ask": "0.5328746",
+ "inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "1528.0",
- "volume": "18.54",
- "strike": "3450.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0015",
+ "ask": "0.0017",
+ "open_interest": "232",
+ "volume": "792.17",
+ "strike": "2000",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.4849481",
+ "iv_ask": "0.5001637",
+ "inverse": true
},
{
- "bid": "0.3050",
- "ask": "0.3110",
- "open_interest": "65.0",
- "volume": "0.0",
- "strike": "3450.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0021",
+ "ask": "0.0025",
+ "open_interest": "2",
+ "volume": "6.43",
+ "strike": "2025",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4473162",
+ "iv_ask": "0.4706452",
+ "inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "1005.0",
- "volume": "13.37",
- "strike": "3500.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0033",
+ "ask": "0.0037",
+ "open_interest": "75",
+ "volume": "52.65",
+ "strike": "2050",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.4229207",
+ "iv_ask": "0.4407995",
+ "inverse": true
},
{
- "bid": "0.3240",
- "ask": "0.3300",
- "open_interest": "6.0",
- "volume": "0.0",
- "strike": "3500.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.005",
+ "ask": "0.006",
+ "open_interest": "62",
+ "volume": "1021.13",
+ "strike": "2075",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3926257",
+ "iv_ask": "0.4280636",
+ "inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "741.0",
- "volume": "0.27",
- "strike": "3550.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.008",
+ "ask": "0.009",
+ "open_interest": "1050",
+ "volume": "22757.79",
+ "strike": "2100",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.3740384",
+ "iv_ask": "0.4041321",
+ "inverse": true
},
{
- "bid": "0.3430",
- "ask": "0.3490",
- "open_interest": "3.0",
- "volume": "0.0",
- "strike": "3550.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.0125",
+ "ask": "0.014",
+ "open_interest": "751",
+ "volume": "18830.38",
+ "strike": "2125",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3581984",
+ "iv_ask": "0.4003254",
+ "inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "863.0",
- "volume": "9.02",
- "strike": "3600.0000",
- "maturity": "2026-02-06T08:00:00Z",
+ "bid": "0.008",
+ "ask": "0.0085",
+ "open_interest": "373",
+ "volume": "10475.49",
+ "strike": "2150",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3585822",
+ "iv_ask": "0.3733821",
+ "inverse": true
},
{
- "bid": "0.3620",
- "ask": "0.3680",
- "open_interest": "18.0",
- "volume": "1776.78",
- "strike": "3600.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0046",
+ "ask": "0.005",
+ "open_interest": "268",
+ "volume": "4417.63",
+ "strike": "2175",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3604301",
+ "iv_ask": "0.3745463",
+ "inverse": true
},
{
- "bid": "0.3995",
- "ask": "0.4060",
- "open_interest": "10.0",
- "volume": "0.0",
- "strike": "3700.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0027",
+ "ask": "0.003",
+ "open_interest": "886",
+ "volume": "7582.74",
+ "strike": "2200",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3736216",
+ "iv_ask": "0.387351",
+ "inverse": true
},
{
- "bid": "0.5130",
- "ask": "0.5205",
- "open_interest": "5.0",
- "volume": "6236.57",
- "strike": "4000.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0015",
+ "ask": "0.0018",
+ "open_interest": "203",
+ "volume": "14.35",
+ "strike": "2225",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.383282",
+ "iv_ask": "0.4023574",
+ "inverse": true
},
{
- "bid": "0.5885",
- "ask": "0.5965",
- "open_interest": "142.0",
- "volume": "4490.75",
- "strike": "4200.0000",
- "maturity": "2026-02-06T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0009",
+ "ask": "0.0011",
+ "open_interest": "14",
+ "volume": "14.97",
+ "strike": "2250",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4016103",
+ "iv_ask": "0.4196097",
+ "inverse": true
},
{
- "bid": "2638.50",
- "ask": "2639.00",
- "open_interest": "1793521",
- "volume": "3591089.0",
- "maturity": "2026-02-13T08:00:00Z",
- "security_type": "forward"
+ "bid": "0.0005",
+ "ask": "0.0008",
+ "open_interest": "266",
+ "volume": "277.33",
+ "strike": "2275",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4133124",
+ "iv_ask": "0.4512002",
+ "inverse": true
},
{
- "bid": "0.1720",
- "ask": "0.1750",
- "open_interest": "36.0",
- "volume": "0.0",
- "strike": "2200.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0003",
+ "ask": "0.0004",
+ "open_interest": "114",
+ "volume": "235.88",
+ "strike": "2300",
+ "maturity": "2026-05-24T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4303763",
+ "iv_ask": "0.4502918",
+ "inverse": true
},
{
- "bid": "0.0060",
- "ask": "0.0070",
- "open_interest": "2557.0",
- "volume": "7628.56",
- "strike": "2200.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "1",
+ "volume": "0.64",
+ "strike": "2350",
+ "maturity": "2026-05-24T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4574285",
+ "iv_ask": "0.5279253",
+ "inverse": true
+ },
+ {
+ "bid": "2117",
+ "ask": "2133.5",
+ "open_interest": "0",
+ "volume": "0",
+ "maturity": "2026-05-25T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.1045",
- "ask": "0.1085",
- "open_interest": "26.0",
- "volume": "1311.26",
- "strike": "2400.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0003",
+ "ask": "0.0005",
+ "open_interest": "90",
+ "volume": "86.55",
+ "strike": "1800",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.7189681",
+ "iv_ask": "0.7728417",
+ "inverse": true
},
{
- "bid": "0.0150",
- "ask": "0.0160",
- "open_interest": "2531.0",
- "volume": "9805.64",
- "strike": "2400.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0007",
+ "ask": "0.0008",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "1900",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5841816",
+ "iv_ask": "0.598068",
+ "inverse": true
},
{
- "bid": "0.0190",
- "ask": "0.0200",
- "open_interest": "137.0",
- "volume": "6730.16",
- "strike": "2450.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0012",
+ "ask": "0.0014",
+ "open_interest": "25",
+ "volume": "48.03",
+ "strike": "1950",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5220594",
+ "iv_ask": "0.5395355",
+ "inverse": true
},
{
- "bid": "0.0755",
- "ask": "0.0790",
- "open_interest": "25.0",
- "volume": "5100.76",
- "strike": "2500.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0016",
+ "ask": "0.0019",
+ "open_interest": "1",
+ "volume": "2.99",
+ "strike": "1975",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.4908857",
+ "iv_ask": "0.5116076",
+ "inverse": true
},
{
- "bid": "0.0240",
- "ask": "0.0250",
- "open_interest": "735.0",
- "volume": "16615.35",
- "strike": "2500.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0022",
+ "ask": "0.0026",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2000",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.461736",
+ "iv_ask": "0.4835807",
+ "inverse": true
},
{
- "bid": "0.0300",
- "ask": "0.0310",
- "open_interest": "10.0",
- "volume": "958.44",
- "strike": "2550.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0032",
+ "ask": "0.0036",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2025",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4386838",
+ "iv_ask": "0.4559745",
+ "inverse": true
},
{
- "bid": "0.0520",
- "ask": "0.0535",
- "open_interest": "62.0",
- "volume": "6790.02",
- "strike": "2600.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0047",
+ "ask": "0.0055",
+ "open_interest": "5",
+ "volume": "41.65",
+ "strike": "2050",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.4170839",
+ "iv_ask": "0.4446746",
+ "inverse": true
},
{
- "bid": "0.0370",
- "ask": "0.0380",
- "open_interest": "1803.0",
- "volume": "54753.08",
- "strike": "2600.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.007",
+ "ask": "0.008",
+ "open_interest": "2",
+ "volume": "28.7",
+ "strike": "2075",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3992538",
+ "iv_ask": "0.4280909",
+ "inverse": true
},
{
- "bid": "0.0420",
- "ask": "0.0430",
- "open_interest": "94.0",
- "volume": "15978.18",
- "strike": "2650.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0105",
+ "ask": "0.0115",
+ "open_interest": "1",
+ "volume": "18.15",
+ "strike": "2100",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.3876481",
+ "iv_ask": "0.4131372",
+ "inverse": true
},
{
- "bid": "0.0455",
- "ask": "0.0470",
- "open_interest": "399.0",
- "volume": "32858.32",
- "strike": "2650.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.015",
+ "ask": "0.0165",
+ "open_interest": "57",
+ "volume": "1876.57",
+ "strike": "2125",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.37017",
+ "iv_ask": "0.4065161",
+ "inverse": true
},
{
- "bid": "0.0330",
- "ask": "0.0340",
- "open_interest": "202.0",
- "volume": "17763.67",
- "strike": "2700.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0105",
+ "ask": "0.0115",
+ "open_interest": "45",
+ "volume": "1172.42",
+ "strike": "2150",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3722401",
+ "iv_ask": "0.3972876",
+ "inverse": true
},
{
- "bid": "0.0560",
- "ask": "0.0570",
- "open_interest": "1627.0",
- "volume": "69889.92",
- "strike": "2700.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0065",
+ "ask": "0.0075",
+ "open_interest": "110",
+ "volume": "1780.44",
+ "strike": "2175",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.366776",
+ "iv_ask": "0.3950436",
+ "inverse": true
},
{
- "bid": "0.0260",
- "ask": "0.0270",
- "open_interest": "364.0",
- "volume": "38301.64",
- "strike": "2750.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0042",
+ "ask": "0.0046",
+ "open_interest": "63",
+ "volume": "655.13",
+ "strike": "2200",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.3778136",
+ "iv_ask": "0.3915648",
+ "inverse": true
},
{
- "bid": "0.0660",
- "ask": "0.0705",
- "open_interest": "660.0",
- "volume": "61385.41",
- "strike": "2750.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0027",
+ "ask": "0.0029",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2225",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.3902128",
+ "iv_ask": "0.3990012",
+ "inverse": true
},
{
- "bid": "0.0200",
- "ask": "0.0210",
- "open_interest": "469.0",
- "volume": "20120.55",
- "strike": "2800.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0017",
+ "ask": "0.002",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2250",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4012579",
+ "iv_ask": "0.4184585",
+ "inverse": true
},
{
- "bid": "0.0790",
- "ask": "0.0835",
- "open_interest": "563.0",
- "volume": "43479.87",
- "strike": "2800.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0012",
+ "ask": "0.0014",
+ "open_interest": "5",
+ "volume": "12.39",
+ "strike": "2275",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4232369",
+ "iv_ask": "0.4380503",
+ "inverse": true
},
{
- "bid": "0.0150",
- "ask": "0.0160",
- "open_interest": "843.0",
- "volume": "30665.25",
- "strike": "2850.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0008",
+ "ask": "0.001",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2300",
+ "maturity": "2026-05-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4385199",
+ "iv_ask": "0.4580562",
+ "inverse": true
},
{
- "bid": "0.0930",
- "ask": "0.0975",
- "open_interest": "597.0",
- "volume": "40759.3",
- "strike": "2850.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0005",
+ "ask": "0.0006",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2350",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4922109",
+ "iv_ask": "0.5071885",
+ "inverse": true
},
{
- "bid": "0.0115",
- "ask": "0.0125",
- "open_interest": "1061.0",
- "volume": "33224.32",
- "strike": "2900.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0003",
+ "ask": "0.0004",
+ "open_interest": "30",
+ "volume": "27.78",
+ "strike": "2400",
+ "maturity": "2026-05-25T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5355226",
+ "iv_ask": "0.5580377",
+ "inverse": true
+ },
+ {
+ "bid": "2126.5",
+ "ask": "2127",
+ "open_interest": "28999132",
+ "volume": "3685069",
+ "maturity": "2026-05-29T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.1070",
- "ask": "0.1130",
- "open_interest": "1412.0",
- "volume": "77553.06",
- "strike": "2900.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0006",
+ "ask": "0.0008",
+ "open_interest": "11306",
+ "volume": "149.68",
+ "strike": "1700",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.7215095",
+ "iv_ask": "0.7534892",
+ "inverse": true
},
{
- "bid": "0.0090",
- "ask": "0.0095",
- "open_interest": "1967.0",
- "volume": "22104.43",
- "strike": "2950.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0008",
+ "ask": "0.0011",
+ "open_interest": "4431",
+ "volume": "21.34",
+ "strike": "1750",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6688583",
+ "iv_ask": "0.7049865",
+ "inverse": true
},
{
- "bid": "0.1230",
- "ask": "0.1295",
- "open_interest": "1107.0",
- "volume": "0.0",
- "strike": "2950.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0012",
+ "ask": "0.0015",
+ "open_interest": "10666",
+ "volume": "46",
+ "strike": "1800",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6278276",
+ "iv_ask": "0.6543077",
+ "inverse": true
},
{
- "bid": "0.0065",
- "ask": "0.0075",
- "open_interest": "2947.0",
- "volume": "14510.47",
- "strike": "3000.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0017",
+ "ask": "0.0021",
+ "open_interest": "3578",
+ "volume": "213.7",
+ "strike": "1850",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5790283",
+ "iv_ask": "0.6052631",
+ "inverse": true
},
{
- "bid": "0.1405",
- "ask": "0.1465",
- "open_interest": "497.0",
- "volume": "1942.36",
- "strike": "3000.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0027",
+ "ask": "0.003",
+ "open_interest": "11680",
+ "volume": "2639.34",
+ "strike": "1900",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.542507",
+ "iv_ask": "0.5567728",
+ "inverse": true
},
{
- "bid": "0.0050",
- "ask": "0.0060",
- "open_interest": "770.0",
- "volume": "2741.81",
- "strike": "3050.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0043",
+ "ask": "0.0047",
+ "open_interest": "6105",
+ "volume": "6805.47",
+ "strike": "1950",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5058849",
+ "iv_ask": "0.5196545",
+ "inverse": true
},
{
- "bid": "0.1580",
- "ask": "0.1640",
- "open_interest": "398.0",
- "volume": "666.19",
- "strike": "3050.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.007",
+ "ask": "0.0075",
+ "open_interest": "23914",
+ "volume": "82869.67",
+ "strike": "2000",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4727668",
+ "iv_ask": "0.485597",
+ "inverse": true
},
{
- "bid": "0.0041",
- "ask": "0.0045",
- "open_interest": "1841.0",
- "volume": "784.72",
- "strike": "3100.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0115",
+ "ask": "0.0125",
+ "open_interest": "7256",
+ "volume": "7639.54",
+ "strike": "2050",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.4437291",
+ "iv_ask": "0.4639094",
+ "inverse": true
},
{
- "bid": "0.1750",
- "ask": "0.1820",
- "open_interest": "1195.0",
- "volume": "364.96",
- "strike": "3100.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0195",
+ "ask": "0.0205",
+ "open_interest": "75411",
+ "volume": "119342.67",
+ "strike": "2100",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4331064",
+ "iv_ask": "0.4505752",
+ "inverse": true
},
{
- "bid": "0.0032",
- "ask": "0.0035",
- "open_interest": "1111.0",
- "volume": "394.09",
- "strike": "3150.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0195",
+ "ask": "0.0205",
+ "open_interest": "14600",
+ "volume": "27307.93",
+ "strike": "2150",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4166556",
+ "iv_ask": "0.4338577",
+ "inverse": true
},
{
- "bid": "0.1930",
- "ask": "0.2000",
- "open_interest": "8.0",
- "volume": "1726.42",
- "strike": "3150.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.011",
+ "ask": "0.012",
+ "open_interest": "13418",
+ "volume": "69364.08",
+ "strike": "2200",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4097906",
+ "iv_ask": "0.429265",
+ "inverse": true
},
{
- "bid": "0.0025",
- "ask": "0.0029",
- "open_interest": "5029.0",
- "volume": "4107.27",
- "strike": "3200.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.006",
+ "ask": "0.007",
+ "open_interest": "14425",
+ "volume": "22633.29",
+ "strike": "2250",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4137438",
+ "iv_ask": "0.4385522",
+ "inverse": true
},
{
- "bid": "0.2115",
- "ask": "0.2185",
- "open_interest": "27.0",
- "volume": "0.0",
- "strike": "3200.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0033",
+ "ask": "0.0038",
+ "open_interest": "14902",
+ "volume": "2378.88",
+ "strike": "2300",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4259386",
+ "iv_ask": "0.4432802",
+ "inverse": true
},
{
- "bid": "0.0016",
- "ask": "0.0020",
- "open_interest": "1966.0",
- "volume": "2844.13",
- "strike": "3300.0000",
- "maturity": "2026-02-13T08:00:00Z",
+ "bid": "0.0019",
+ "ask": "0.0022",
+ "open_interest": "10564",
+ "volume": "56.38",
+ "strike": "2350",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2490",
- "ask": "0.2555",
- "open_interest": "6.0",
- "volume": "0.0",
- "strike": "3300.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0011",
- "ask": "0.0014",
- "open_interest": "2460.0",
- "volume": "1870.7",
- "strike": "3400.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0005",
- "ask": "0.0008",
- "open_interest": "1537.0",
- "volume": "12.75",
- "strike": "3600.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0003",
- "ask": "0.0006",
- "open_interest": "298.0",
- "volume": "14.52",
- "strike": "3800.0000",
- "maturity": "2026-02-13T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "2641.75",
- "ask": "2642.50",
- "open_interest": "39806132",
- "volume": "2917427.0",
- "maturity": "2026-02-27T08:00:00Z",
- "security_type": "forward"
- },
- {
- "bid": "0.4325",
- "ask": "0.4350",
- "open_interest": "37.0",
- "volume": "22493.2",
- "strike": "1500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0010",
- "ask": "0.0012",
- "open_interest": "8160.0",
- "volume": "1027.3",
- "strike": "1500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.2490",
- "ask": "0.2520",
- "open_interest": "90.0",
- "volume": "384784.09",
- "strike": "2000.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0065",
- "ask": "0.0070",
- "open_interest": "13386.0",
- "volume": "8713.36",
- "strike": "2000.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1180",
- "ask": "0.1215",
- "open_interest": "2916.0",
- "volume": "742.53",
- "strike": "2400.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0275",
- "ask": "0.0280",
- "open_interest": "10615.0",
- "volume": "90062.38",
- "strike": "2400.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0915",
- "ask": "0.0950",
- "open_interest": "28.0",
- "volume": "5822.63",
- "strike": "2500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0390",
- "ask": "0.0395",
- "open_interest": "16411.0",
- "volume": "497716.42",
- "strike": "2500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0700",
- "ask": "0.0715",
- "open_interest": "262.0",
- "volume": "38654.38",
- "strike": "2600.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0535",
- "ask": "0.0550",
- "open_interest": "13574.0",
- "volume": "217258.45",
- "strike": "2600.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0515",
- "ask": "0.0525",
- "open_interest": "243.0",
- "volume": "14246.82",
- "strike": "2700.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0725",
- "ask": "0.0740",
- "open_interest": "6346.0",
- "volume": "230336.81",
- "strike": "2700.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0370",
- "ask": "0.0375",
- "open_interest": "2284.0",
- "volume": "40517.06",
- "strike": "2800.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0955",
- "ask": "0.0985",
- "open_interest": "7559.0",
- "volume": "117513.15",
- "strike": "2800.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0310",
- "ask": "0.0320",
- "open_interest": "1095.0",
- "volume": "30306.07",
- "strike": "2850.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1075",
- "ask": "0.1120",
- "open_interest": "890.0",
- "volume": "5128.61",
- "strike": "2850.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0260",
- "ask": "0.0265",
- "open_interest": "4056.0",
- "volume": "46909.13",
- "strike": "2900.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1220",
- "ask": "0.1260",
- "open_interest": "5364.0",
- "volume": "20429.94",
- "strike": "2900.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0215",
- "ask": "0.0225",
- "open_interest": "2190.0",
- "volume": "18903.96",
- "strike": "2950.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1355",
- "ask": "0.1400",
- "open_interest": "844.0",
- "volume": "3805.06",
- "strike": "2950.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0180",
- "ask": "0.0190",
- "open_interest": "11071.0",
- "volume": "29625.59",
- "strike": "3000.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1495",
- "ask": "0.1550",
- "open_interest": "6092.0",
- "volume": "68573.33",
- "strike": "3000.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0150",
- "ask": "0.0155",
- "open_interest": "847.0",
- "volume": "11219.97",
- "strike": "3050.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1650",
- "ask": "0.1730",
- "open_interest": "286.0",
- "volume": "3958.45",
- "strike": "3050.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0125",
- "ask": "0.0130",
- "open_interest": "5952.0",
- "volume": "40623.98",
- "strike": "3100.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1810",
- "ask": "0.1895",
- "open_interest": "4122.0",
- "volume": "43080.5",
- "strike": "3100.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0085",
- "ask": "0.0095",
- "open_interest": "6936.0",
- "volume": "14280.86",
- "strike": "3200.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2150",
- "ask": "0.2235",
- "open_interest": "2626.0",
- "volume": "2013.75",
- "strike": "3200.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0060",
- "ask": "0.0070",
- "open_interest": "14920.0",
- "volume": "19381.75",
- "strike": "3300.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2505",
- "ask": "0.2590",
- "open_interest": "2863.0",
- "volume": "0.0",
- "strike": "3300.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0045",
- "ask": "0.0049",
- "open_interest": "8132.0",
- "volume": "1229.63",
- "strike": "3400.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2865",
- "ask": "0.2950",
- "open_interest": "1123.0",
- "volume": "0.0",
- "strike": "3400.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0034",
- "ask": "0.0038",
- "open_interest": "6440.0",
- "volume": "3217.49",
- "strike": "3500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.3230",
- "ask": "0.3320",
- "open_interest": "640.0",
- "volume": "4505.66",
- "strike": "3500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0025",
- "ask": "0.0029",
- "open_interest": "6370.0",
- "volume": "83.28",
- "strike": "3600.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.3600",
- "ask": "0.3690",
- "open_interest": "150.0",
- "volume": "0.0",
- "strike": "3600.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0020",
- "ask": "0.0023",
- "open_interest": "2072.0",
- "volume": "24.99",
- "strike": "3700.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.3970",
- "ask": "0.4065",
- "open_interest": "103.0",
- "volume": "0.0",
- "strike": "3700.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0015",
- "ask": "0.0019",
- "open_interest": "6066.0",
- "volume": "116.68",
- "strike": "3800.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.4345",
- "ask": "0.4440",
- "open_interest": "30.0",
- "volume": "0.0",
- "strike": "3800.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4445969",
+ "iv_ask": "0.4595853",
+ "inverse": true
},
{
"bid": "0.0012",
- "ask": "0.0016",
- "open_interest": "3005.0",
- "volume": "170.27",
- "strike": "3900.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.4720",
- "ask": "0.4815",
- "open_interest": "5.0",
- "volume": "0.0",
- "strike": "3900.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0011",
- "ask": "0.0013",
- "open_interest": "3809.0",
- "volume": "53.85",
- "strike": "4000.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.5095",
- "ask": "0.5200",
- "open_interest": "132.0",
- "volume": "0.0",
- "strike": "4000.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0007",
- "ask": "0.0010",
- "open_interest": "3139.0",
- "volume": "19.64",
- "strike": "4200.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0004",
- "ask": "0.0007",
- "open_interest": "4886.0",
- "volume": "8.72",
- "strike": "4500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.6970",
- "ask": "0.7090",
- "open_interest": "1.0",
- "volume": "0.0",
- "strike": "4500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0002",
- "ask": "0.0004",
- "open_interest": "3663.0",
- "volume": "162.61",
- "strike": "5000.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "5584.0",
- "volume": "5.39",
- "strike": "5500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.0735",
- "ask": "1.0885",
- "open_interest": "862.0",
- "volume": "0.0",
- "strike": "5500.0000",
- "maturity": "2026-02-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "2649.25",
- "ask": "2649.50",
- "open_interest": "127513022",
- "volume": "5914666.0",
- "maturity": "2026-03-27T08:00:00Z",
- "security_type": "forward"
- },
- {
- "bid": "0.8095",
- "ask": "0.8120",
- "open_interest": "1229.0",
- "volume": "0.0",
- "strike": "500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.6215",
- "ask": "0.6245",
- "open_interest": "191.0",
- "volume": "0.0",
- "strike": "1000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0003",
- "ask": "0.0005",
- "open_interest": "15884.0",
- "volume": "112.92",
- "strike": "1000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.5470",
- "ask": "0.5495",
- "open_interest": "108.0",
- "volume": "0.0",
- "strike": "1200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0009",
"ask": "0.0014",
- "open_interest": "4155.0",
- "volume": "5.35",
- "strike": "1200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.5095",
- "ask": "0.5125",
- "open_interest": "81.0",
- "volume": "0.0",
- "strike": "1300.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0015",
- "ask": "0.0019",
- "open_interest": "2009.0",
- "volume": "0.0",
- "strike": "1300.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.4725",
- "ask": "0.4755",
- "open_interest": "167.0",
- "volume": "0.0",
- "strike": "1400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0022",
- "ask": "0.0026",
- "open_interest": "1424.0",
- "volume": "0.0",
- "strike": "1400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.4355",
- "ask": "0.4390",
- "open_interest": "469.0",
- "volume": "0.0",
- "strike": "1500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0031",
- "ask": "0.0035",
- "open_interest": "3118.0",
- "volume": "31.65",
- "strike": "1500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.3990",
- "ask": "0.4025",
- "open_interest": "760.0",
- "volume": "0.0",
- "strike": "1600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0044",
- "ask": "0.0048",
- "open_interest": "6396.0",
- "volume": "11.89",
- "strike": "1600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.3275",
- "ask": "0.3310",
- "open_interest": "752.0",
- "volume": "0.0",
- "strike": "1800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0080",
- "ask": "0.0090",
- "open_interest": "9932.0",
- "volume": "629.52",
- "strike": "1800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.2590",
- "ask": "0.2625",
- "open_interest": "2242.0",
- "volume": "2273.85",
- "strike": "2000.0000",
- "maturity": "2026-03-27T08:00:00Z",
+ "open_interest": "20999",
+ "volume": "3.62",
+ "strike": "2400",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4703419",
+ "iv_ask": "0.4844348",
+ "inverse": true
},
- {
- "bid": "0.0150",
- "ask": "0.0160",
- "open_interest": "14029.0",
- "volume": "46084.53",
- "strike": "2000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1955",
- "ask": "0.1995",
- "open_interest": "9808.0",
- "volume": "0.0",
- "strike": "2200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0270",
- "ask": "0.0285",
- "open_interest": "6140.0",
- "volume": "74443.2",
- "strike": "2200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1395",
- "ask": "0.1435",
- "open_interest": "12137.0",
- "volume": "0.0",
- "strike": "2400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0475",
- "ask": "0.0490",
- "open_interest": "9087.0",
- "volume": "158492.99",
- "strike": "2400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1175",
- "ask": "0.1200",
- "open_interest": "1685.0",
- "volume": "9273.65",
- "strike": "2500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0620",
- "ask": "0.0630",
- "open_interest": "24803.0",
- "volume": "360220.03",
- "strike": "2500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0970",
- "ask": "0.0985",
- "open_interest": "2659.0",
- "volume": "461328.1",
- "strike": "2600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0785",
- "ask": "0.0800",
- "open_interest": "13629.0",
- "volume": "271734.24",
- "strike": "2600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0790",
- "ask": "0.0805",
- "open_interest": "537.0",
- "volume": "120536.37",
- "strike": "2700.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0980",
- "ask": "0.1000",
- "open_interest": "2002.0",
- "volume": "133210.99",
- "strike": "2700.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0640",
- "ask": "0.0655",
- "open_interest": "3107.0",
- "volume": "3179.84",
- "strike": "2800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1205",
- "ask": "0.1225",
- "open_interest": "9219.0",
- "volume": "152274.58",
- "strike": "2800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0510",
- "ask": "0.0525",
- "open_interest": "1363.0",
- "volume": "55582.05",
- "strike": "2900.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1445",
- "ask": "0.1485",
- "open_interest": "2288.0",
- "volume": "36418.75",
- "strike": "2900.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0410",
- "ask": "0.0420",
- "open_interest": "7879.0",
- "volume": "140805.33",
- "strike": "3000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1720",
- "ask": "0.1765",
- "open_interest": "12988.0",
- "volume": "92927.36",
- "strike": "3000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0325",
- "ask": "0.0335",
- "open_interest": "2637.0",
- "volume": "6257.55",
- "strike": "3100.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1985",
- "ask": "0.2080",
- "open_interest": "17328.0",
- "volume": "27748.62",
- "strike": "3100.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0255",
- "ask": "0.0270",
- "open_interest": "19963.0",
- "volume": "84839.34",
- "strike": "3200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2285",
- "ask": "0.2395",
- "open_interest": "3824.0",
- "volume": "153278.2",
- "strike": "3200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0205",
- "ask": "0.0215",
- "open_interest": "3186.0",
- "volume": "16683.15",
- "strike": "3300.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2605",
- "ask": "0.2715",
- "open_interest": "5430.0",
- "volume": "0.0",
- "strike": "3300.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0160",
- "ask": "0.0175",
- "open_interest": "13410.0",
- "volume": "4837.48",
- "strike": "3400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.2940",
- "ask": "0.3060",
- "open_interest": "3811.0",
- "volume": "36043.8",
- "strike": "3400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0130",
- "ask": "0.0140",
- "open_interest": "22490.0",
- "volume": "3884.36",
- "strike": "3500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.3285",
- "ask": "0.3410",
- "open_interest": "8707.0",
- "volume": "1699.81",
- "strike": "3500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0105",
- "ask": "0.0115",
- "open_interest": "7719.0",
- "volume": "6366.67",
- "strike": "3600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.3630",
- "ask": "0.3760",
- "open_interest": "2118.0",
- "volume": "925.35",
- "strike": "3600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0085",
- "ask": "0.0095",
- "open_interest": "5006.0",
- "volume": "4160.62",
- "strike": "3700.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.3990",
- "ask": "0.4115",
- "open_interest": "47.0",
- "volume": "0.0",
- "strike": "3700.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0070",
- "ask": "0.0080",
- "open_interest": "8235.0",
- "volume": "9314.26",
- "strike": "3800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.4340",
- "ask": "0.4480",
- "open_interest": "2026.0",
- "volume": "0.0",
- "strike": "3800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0055",
- "ask": "0.0065",
- "open_interest": "1601.0",
- "volume": "2112.02",
- "strike": "3900.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0049",
- "ask": "0.0055",
- "open_interest": "16718.0",
- "volume": "29327.33",
- "strike": "4000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.5070",
- "ask": "0.5225",
- "open_interest": "8666.0",
- "volume": "0.0",
- "strike": "4000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0041",
- "ask": "0.0044",
- "open_interest": "858.0",
- "volume": "548.96",
- "strike": "4100.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0035",
- "ask": "0.0040",
- "open_interest": "6496.0",
- "volume": "264.82",
- "strike": "4200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.5810",
- "ask": "0.5965",
- "open_interest": "757.0",
- "volume": "0.0",
- "strike": "4200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0026",
- "ask": "0.0030",
- "open_interest": "5749.0",
- "volume": "54.69",
- "strike": "4400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.6550",
- "ask": "0.6725",
- "open_interest": "3228.0",
- "volume": "0.0",
- "strike": "4400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0023",
- "ask": "0.0026",
- "open_interest": "15123.0",
- "volume": "118.03",
- "strike": "4500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.6925",
- "ask": "0.7095",
- "open_interest": "2600.0",
- "volume": "0.0",
- "strike": "4500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0020",
- "ask": "0.0023",
- "open_interest": "4231.0",
- "volume": "65.96",
- "strike": "4600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.7295",
- "ask": "0.7470",
- "open_interest": "242.0",
- "volume": "0.0",
- "strike": "4600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0015",
- "ask": "0.0019",
- "open_interest": "4199.0",
- "volume": "69.62",
- "strike": "4800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.8045",
- "ask": "0.8220",
- "open_interest": "220.0",
- "volume": "0.0",
- "strike": "4800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0011",
- "ask": "0.0015",
- "open_interest": "8050.0",
- "volume": "172.95",
- "strike": "5000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.8795",
- "ask": "0.8985",
- "open_interest": "992.0",
- "volume": "0.0",
- "strike": "5000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0008",
- "ask": "0.0013",
- "open_interest": "8078.0",
- "volume": "296.12",
- "strike": "5200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.9540",
- "ask": "0.9735",
- "open_interest": "284.0",
- "volume": "0.0",
- "strike": "5200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0006",
- "ask": "0.0011",
- "open_interest": "3452.0",
- "volume": "90.01",
- "strike": "5400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.0280",
- "ask": "1.0495",
- "open_interest": "81.0",
- "volume": "0.0",
- "strike": "5400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0006",
- "ask": "0.0010",
- "open_interest": "49199.0",
- "volume": "75.47",
- "strike": "5500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.0655",
- "ask": "1.0870",
- "open_interest": "156.0",
- "volume": "0.0",
- "strike": "5500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0005",
- "ask": "0.0009",
- "open_interest": "1908.0",
- "volume": "20.12",
- "strike": "5600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.1030",
- "ask": "1.1260",
- "open_interest": "44.0",
- "volume": "0.0",
- "strike": "5600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0004",
- "ask": "0.0007",
- "open_interest": "4698.0",
- "volume": "49.7",
- "strike": "5800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.1780",
- "ask": "1.2005",
- "open_interest": "16.0",
- "volume": "0.0",
- "strike": "5800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0003",
- "ask": "0.0007",
- "open_interest": "9987.0",
- "volume": "1.91",
- "strike": "6000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.2535",
- "ask": "1.2775",
- "open_interest": "2.0",
- "volume": "0.0",
- "strike": "6000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0002",
- "ask": "0.0006",
- "open_interest": "2260.0",
- "volume": "2.18",
- "strike": "6200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.3280",
- "ask": "1.3520",
- "open_interest": "4.0",
- "volume": "0.0",
- "strike": "6200.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0002",
- "ask": "0.0005",
- "open_interest": "3778.0",
- "volume": "10.76",
- "strike": "6400.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0003",
- "ask": "0.0005",
- "open_interest": "53376.0",
- "volume": "1.08",
- "strike": "6500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0002",
- "ask": "0.0005",
- "open_interest": "1457.0",
- "volume": "4.07",
- "strike": "6600.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0002",
- "ask": "0.0005",
- "open_interest": "1969.0",
- "volume": "0.0",
- "strike": "6800.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0002",
- "ask": "0.0004",
- "open_interest": "14068.0",
- "volume": "0.0",
- "strike": "7000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "3116.0",
- "volume": "0.0",
- "strike": "7500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "6360.0",
- "volume": "0.0",
- "strike": "8000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "2.0010",
- "ask": "2.0365",
- "open_interest": "506.0",
- "volume": "0.0",
- "strike": "8000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0001",
- "ask": "0.0003",
- "open_interest": "2367.0",
- "volume": "0.0",
- "strike": "8500.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0001",
- "ask": "0.0002",
- "open_interest": "3739.0",
- "volume": "0.0",
- "strike": "9000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "2.7485",
- "ask": "2.7965",
- "open_interest": "11.0",
- "volume": "0.0",
- "strike": "10000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "3.5000",
- "ask": "3.5565",
- "open_interest": "21.0",
- "volume": "0.0",
- "strike": "12000.0000",
- "maturity": "2026-03-27T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "2672.25",
- "ask": "2672.75",
- "open_interest": "53720583",
- "volume": "2902678.0",
- "maturity": "2026-06-26T08:00:00Z",
- "security_type": "forward"
- },
- {
- "bid": "0.8120",
- "ask": "0.8140",
- "open_interest": "334.0",
- "volume": "0.0",
- "strike": "500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0002",
- "ask": "0.0003",
- "open_interest": "26674.0",
- "volume": "0.0",
- "strike": "500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.6275",
- "ask": "0.6310",
- "open_interest": "494.0",
- "volume": "0.0",
- "strike": "1000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0034",
- "ask": "0.0041",
- "open_interest": "7717.0",
- "volume": "769.28",
- "strike": "1000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.4520",
- "ask": "0.4565",
- "open_interest": "18.0",
- "volume": "0.0",
- "strike": "1500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0155",
- "ask": "0.0170",
- "open_interest": "7398.0",
- "volume": "4300.45",
- "strike": "1500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0315",
- "ask": "0.0335",
- "open_interest": "52.0",
- "volume": "540.84",
- "strike": "1800.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.2975",
- "ask": "0.3030",
- "open_interest": "492.0",
- "volume": "883.07",
- "strike": "2000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0485",
- "ask": "0.0505",
- "open_interest": "18245.0",
- "volume": "3418.78",
- "strike": "2000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.2465",
- "ask": "0.2515",
- "open_interest": "82.0",
- "volume": "0.0",
- "strike": "2200.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0715",
- "ask": "0.0740",
- "open_interest": "16099.0",
- "volume": "55438.45",
- "strike": "2200.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.2010",
- "ask": "0.2065",
- "open_interest": "7.0",
- "volume": "542.17",
- "strike": "2400.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1010",
- "ask": "0.1035",
- "open_interest": "2949.0",
- "volume": "49608.68",
- "strike": "2400.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1830",
- "ask": "0.1860",
- "open_interest": "625.0",
- "volume": "0.0",
- "strike": "2500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1185",
- "ask": "0.1210",
- "open_interest": "3375.0",
- "volume": "1502.29",
- "strike": "2500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1645",
- "ask": "0.1675",
- "open_interest": "1357.0",
- "volume": "2947.94",
- "strike": "2600.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1375",
- "ask": "0.1400",
- "open_interest": "18710.0",
- "volume": "15566.93",
- "strike": "2600.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1325",
- "ask": "0.1350",
- "open_interest": "4936.0",
- "volume": "553375.49",
- "strike": "2800.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1800",
- "ask": "0.1830",
- "open_interest": "4566.0",
- "volume": "21016.1",
- "strike": "2800.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ {
+ "bid": "0.0008",
+ "ask": "0.001",
+ "open_interest": "9009",
+ "volume": "790.95",
+ "strike": "2450",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4977246",
+ "iv_ask": "0.5168521",
+ "inverse": true
},
{
- "bid": "0.1060",
- "ask": "0.1085",
- "open_interest": "4995.0",
- "volume": "530361.8",
- "strike": "3000.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0005",
+ "ask": "0.0008",
+ "open_interest": "25244",
+ "volume": "13.5",
+ "strike": "2500",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5173543",
+ "iv_ask": "0.5556877",
+ "inverse": true
},
{
- "bid": "0.2275",
- "ask": "0.2350",
- "open_interest": "13780.0",
- "volume": "7194.75",
- "strike": "3000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0004",
+ "ask": "0.0006",
+ "open_interest": "16576",
+ "volume": "143.37",
+ "strike": "2550",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5530704",
+ "iv_ask": "0.5855428",
+ "inverse": true
},
{
- "bid": "0.0845",
- "ask": "0.0865",
- "open_interest": "2511.0",
- "volume": "149706.39",
- "strike": "3200.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0003",
+ "ask": "0.0004",
+ "open_interest": "26179",
+ "volume": "165.23",
+ "strike": "2600",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5812452",
+ "iv_ask": "0.6031905",
+ "inverse": true
},
{
- "bid": "0.2810",
- "ask": "0.2840",
- "open_interest": "2558.0",
- "volume": "0.0",
- "strike": "3200.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0002",
+ "ask": "0.0003",
+ "open_interest": "8480",
+ "volume": "0.64",
+ "strike": "2650",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5989191",
+ "iv_ask": "0.6284835",
+ "inverse": true
},
{
- "bid": "0.0675",
- "ask": "0.0695",
- "open_interest": "2228.0",
- "volume": "3211.07",
- "strike": "3400.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0002",
+ "ask": "0.0003",
+ "open_interest": "18325",
+ "volume": "4.26",
+ "strike": "2700",
+ "maturity": "2026-05-29T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6431273",
+ "iv_ask": "0.6743626",
+ "inverse": true
},
{
- "bid": "0.3325",
- "ask": "0.3465",
- "open_interest": "6002.0",
- "volume": "0.0",
- "strike": "3400.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "22411",
+ "volume": "0",
+ "strike": "2800",
+ "maturity": "2026-05-29T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.6774029",
+ "iv_ask": "0.7624207",
+ "inverse": true
+ },
+ {
+ "bid": "2125.75",
+ "ask": "2126.5",
+ "open_interest": "5729802",
+ "volume": "722790",
+ "maturity": "2026-06-05T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.0600",
- "ask": "0.0625",
- "open_interest": "2832.0",
- "volume": "71023.55",
- "strike": "3500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0039",
+ "ask": "0.0044",
+ "open_interest": "5138",
+ "volume": "111.16",
+ "strike": "1800",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5859417",
+ "iv_ask": "0.6036698",
+ "inverse": true
},
{
- "bid": "0.3620",
- "ask": "0.3775",
- "open_interest": "4075.0",
- "volume": "0.0",
- "strike": "3500.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "1219",
+ "volume": "3877.84",
+ "strike": "1900",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5279543",
+ "iv_ask": "0.5504442",
+ "inverse": true
},
{
- "bid": "0.0535",
- "ask": "0.0560",
- "open_interest": "3765.0",
- "volume": "60049.47",
- "strike": "3600.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.011",
+ "ask": "0.0115",
+ "open_interest": "2194",
+ "volume": "368.46",
+ "strike": "1950",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5106228",
+ "iv_ask": "0.5198153",
+ "inverse": true
},
{
- "bid": "0.3930",
- "ask": "0.4085",
- "open_interest": "2592.0",
- "volume": "0.0",
- "strike": "3600.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0155",
+ "ask": "0.0165",
+ "open_interest": "982",
+ "volume": "22065.1",
+ "strike": "2000",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4884372",
+ "iv_ask": "0.5039086",
+ "inverse": true
},
{
- "bid": "0.0430",
- "ask": "0.0450",
- "open_interest": "1032.0",
- "volume": "6235.32",
- "strike": "3800.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.022",
+ "ask": "0.023",
+ "open_interest": "1104",
+ "volume": "31861.72",
+ "strike": "2050",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.4723366",
+ "iv_ask": "0.4859407",
+ "inverse": true
},
{
- "bid": "0.4565",
- "ask": "0.4730",
- "open_interest": "1190.0",
- "volume": "0.0",
- "strike": "3800.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.031",
+ "ask": "0.032",
+ "open_interest": "835",
+ "volume": "20899.95",
+ "strike": "2100",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4625308",
+ "iv_ask": "0.4751426",
+ "inverse": true
},
{
- "bid": "0.0345",
- "ask": "0.0365",
- "open_interest": "8019.0",
- "volume": "27453.46",
- "strike": "4000.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0315",
+ "ask": "0.0325",
+ "open_interest": "997",
+ "volume": "24201.29",
+ "strike": "2150",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4517714",
+ "iv_ask": "0.4642028",
+ "inverse": true
},
{
- "bid": "0.5225",
- "ask": "0.5415",
- "open_interest": "3990.0",
- "volume": "0.0",
- "strike": "4000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.022",
+ "ask": "0.0225",
+ "open_interest": "1014",
+ "volume": "14615.68",
+ "strike": "2200",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4463917",
+ "iv_ask": "0.4529286",
+ "inverse": true
},
{
- "bid": "0.0280",
- "ask": "0.0300",
- "open_interest": "5251.0",
- "volume": "2763.51",
- "strike": "4200.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.015",
+ "ask": "0.0155",
+ "open_interest": "2451",
+ "volume": "6805.97",
+ "strike": "2250",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4450852",
+ "iv_ask": "0.4523944",
+ "inverse": true
},
{
- "bid": "0.5900",
- "ask": "0.6085",
- "open_interest": "2111.0",
- "volume": "0.0",
- "strike": "4200.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0095",
+ "ask": "0.0105",
+ "open_interest": "3641",
+ "volume": "7643.52",
+ "strike": "2300",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4372256",
+ "iv_ask": "0.4546071",
+ "inverse": true
},
{
- "bid": "0.0230",
- "ask": "0.0250",
- "open_interest": "4234.0",
- "volume": "119.77",
- "strike": "4400.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0065",
+ "ask": "0.007",
+ "open_interest": "1170",
+ "volume": "4265.42",
+ "strike": "2350",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4474492",
+ "iv_ask": "0.4581288",
+ "inverse": true
},
{
- "bid": "0.6590",
- "ask": "0.6785",
- "open_interest": "4317.0",
- "volume": "0.0",
- "strike": "4400.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0043",
+ "ask": "0.0047",
+ "open_interest": "1284",
+ "volume": "1391.98",
+ "strike": "2400",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4541381",
+ "iv_ask": "0.4650089",
+ "inverse": true
},
{
- "bid": "0.0210",
- "ask": "0.0225",
- "open_interest": "3921.0",
- "volume": "8394.82",
- "strike": "4500.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0029",
+ "ask": "0.0033",
+ "open_interest": "752",
+ "volume": "0",
+ "strike": "2450",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4638575",
+ "iv_ask": "0.4777899",
+ "inverse": true
},
{
- "bid": "0.6940",
- "ask": "0.7155",
- "open_interest": "411.0",
- "volume": "0.0",
- "strike": "4500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0019",
+ "ask": "0.0023",
+ "open_interest": "1318",
+ "volume": "163.36",
+ "strike": "2500",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.470869",
+ "iv_ask": "0.4891746",
+ "inverse": true
},
{
- "bid": "0.0190",
- "ask": "0.0205",
- "open_interest": "4309.0",
- "volume": "0.0",
- "strike": "4600.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.001",
+ "ask": "0.0013",
+ "open_interest": "1874",
+ "volume": "3",
+ "strike": "2600",
+ "maturity": "2026-06-05T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5013057",
+ "iv_ask": "0.5233498",
+ "inverse": true
},
{
- "bid": "0.7295",
- "ask": "0.7495",
- "open_interest": "3460.0",
- "volume": "0.0",
- "strike": "4600.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0003",
+ "ask": "0.0005",
+ "open_interest": "581",
+ "volume": "105.24",
+ "strike": "2800",
+ "maturity": "2026-06-05T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.554879",
+ "iv_ask": "0.5909788",
+ "inverse": true
+ },
+ {
+ "bid": "2122.25",
+ "ask": "2128.25",
+ "open_interest": "6",
+ "volume": "6",
+ "maturity": "2026-06-12T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.0160",
- "ask": "0.0175",
- "open_interest": "745.0",
- "volume": "0.0",
- "strike": "4800.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0024",
+ "ask": "0.0028",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "1600",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6712824",
+ "iv_ask": "0.6916138",
+ "inverse": true
},
{
- "bid": "0.8005",
- "ask": "0.8215",
- "open_interest": "340.0",
- "volume": "0.0",
- "strike": "4800.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.007",
+ "ask": "0.0075",
+ "open_interest": "50",
+ "volume": "694.51",
+ "strike": "1800",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5646614",
+ "iv_ask": "0.5760703",
+ "inverse": true
},
{
- "bid": "0.0135",
- "ask": "0.0150",
- "open_interest": "16134.0",
- "volume": "380964.1",
- "strike": "5000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.013",
+ "ask": "0.0135",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "1900",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5305516",
+ "iv_ask": "0.5384319",
+ "inverse": true
},
{
- "bid": "0.8720",
- "ask": "0.8965",
- "open_interest": "433.0",
- "volume": "11543.83",
- "strike": "5000.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.023",
+ "ask": "0.024",
+ "open_interest": "52",
+ "volume": "2389.51",
+ "strike": "2000",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4965638",
+ "iv_ask": "0.5085588",
+ "inverse": true
},
{
- "bid": "0.0110",
- "ask": "0.0125",
- "open_interest": "2305.0",
- "volume": "0.0",
- "strike": "5200.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "0.0305",
+ "ask": "0.0315",
+ "open_interest": "1",
+ "volume": "60.91",
+ "strike": "2050",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.484771",
+ "iv_ask": "0.4957249",
+ "inverse": true
},
{
- "bid": "0.9440",
- "ask": "0.9675",
- "open_interest": "360.0",
- "volume": "0.0",
- "strike": "5200.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.04",
+ "ask": "0.041",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2100",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4761048",
+ "iv_ask": "0.4864843",
+ "inverse": true
},
{
- "bid": "0.0095",
- "ask": "0.0110",
- "open_interest": "767.0",
- "volume": "27.31",
- "strike": "5400.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0405",
+ "ask": "0.0415",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2150",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4639298",
+ "iv_ask": "0.4741663",
+ "inverse": true
},
{
- "bid": "1.0165",
- "ask": "1.0435",
- "open_interest": "15.0",
- "volume": "0.0",
- "strike": "5400.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0305",
+ "ask": "0.0315",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2200",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4579469",
+ "iv_ask": "0.4684714",
+ "inverse": true
},
{
- "bid": "0.0090",
- "ask": "0.0105",
- "open_interest": "45069.0",
- "volume": "728.82",
- "strike": "5500.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0225",
+ "ask": "0.0235",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2250",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4538406",
+ "iv_ask": "0.4651133",
+ "inverse": true
},
{
- "bid": "1.0530",
- "ask": "1.0805",
- "open_interest": "20.0",
- "volume": "0.0",
- "strike": "5500.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0165",
+ "ask": "0.0175",
+ "open_interest": "32",
+ "volume": "1203.1",
+ "strike": "2300",
+ "maturity": "2026-06-12T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.4539639",
+ "iv_ask": "0.4664757",
+ "inverse": true
},
{
- "bid": "0.0080",
+ "bid": "0.0085",
"ask": "0.0095",
- "open_interest": "1322.0",
- "volume": "256.16",
- "strike": "5600.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "open_interest": "23",
+ "volume": "458.42",
+ "strike": "2400",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4561324",
+ "iv_ask": "0.4730239",
+ "inverse": true
},
{
- "bid": "0.0070",
- "ask": "0.0085",
- "open_interest": "665.0",
- "volume": "20.48",
- "strike": "5800.0000",
- "maturity": "2026-06-26T08:00:00Z",
+ "bid": "0.0024",
+ "ask": "0.0029",
+ "open_interest": "0",
+ "volume": "0",
+ "strike": "2600",
+ "maturity": "2026-06-12T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4821009",
+ "iv_ask": "0.5006523",
+ "inverse": true
},
{
- "bid": "1.1625",
- "ask": "1.1920",
- "open_interest": "44.0",
- "volume": "0.0",
- "strike": "5800.0000",
+ "bid": "2127.25",
+ "ask": "2127.5",
+ "open_interest": "91532882",
+ "volume": "5153214",
"maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "forward"
},
{
- "bid": "0.0060",
- "ask": "0.0075",
- "open_interest": "6485.0",
- "volume": "19.18",
- "strike": "6000.0000",
+ "bid": "0.0023",
+ "ask": "0.0027",
+ "open_interest": "6295",
+ "volume": "2102.35",
+ "strike": "1400",
"maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.7220753",
+ "iv_ask": "0.7429887",
+ "inverse": true
},
{
- "bid": "1.2360",
- "ask": "1.2665",
- "open_interest": "5.0",
- "volume": "0.0",
- "strike": "6000.0000",
+ "bid": "0.0036",
+ "ask": "0.0037",
+ "open_interest": "12591",
+ "volume": "324.91",
+ "strike": "1500",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.673963",
+ "iv_ask": "0.6777027",
+ "inverse": true
},
{
"bid": "0.0055",
"ask": "0.0065",
- "open_interest": "1062.0",
- "volume": "0.0",
- "strike": "6200.0000",
+ "open_interest": "9705",
+ "volume": "6052.95",
+ "strike": "1600",
"maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6254",
+ "iv_ask": "0.6510014",
+ "inverse": true
},
{
- "bid": "1.3095",
- "ask": "1.3410",
- "open_interest": "18.0",
- "volume": "0.0",
- "strike": "6200.0000",
+ "bid": "0.009",
+ "ask": "0.0095",
+ "open_interest": "5315",
+ "volume": "11796.83",
+ "strike": "1700",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5904337",
+ "iv_ask": "0.5997074",
+ "inverse": true
},
{
- "bid": "0.0050",
- "ask": "0.0060",
- "open_interest": "689.0",
- "volume": "0.0",
- "strike": "6400.0000",
+ "bid": "0.0145",
+ "ask": "0.015",
+ "open_interest": "7948",
+ "volume": "17773.91",
+ "strike": "1800",
"maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5581504",
+ "iv_ask": "0.5650107",
+ "inverse": true
},
{
- "bid": "1.3830",
- "ask": "1.4130",
- "open_interest": "31.0",
- "volume": "0.0",
- "strike": "6400.0000",
+ "bid": "0.023",
+ "ask": "0.024",
+ "open_interest": "6559",
+ "volume": "124208.23",
+ "strike": "1900",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5295156",
+ "iv_ask": "0.5401895",
+ "inverse": true
},
{
- "bid": "0.0047",
- "ask": "0.0055",
- "open_interest": "37688.0",
- "volume": "0.0",
- "strike": "6500.0000",
+ "bid": "0.036",
+ "ask": "0.037",
+ "open_interest": "19680",
+ "volume": "67094.79",
+ "strike": "2000",
"maturity": "2026-06-26T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5077279",
+ "iv_ask": "0.5166439",
+ "inverse": true
},
{
- "bid": "1.4195",
- "ask": "1.4505",
- "open_interest": "60.0",
- "volume": "0.0",
- "strike": "6500.0000",
+ "bid": "0.055",
+ "ask": "0.056",
+ "open_interest": "13981",
+ "volume": "42220.67",
+ "strike": "2100",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4949915",
+ "iv_ask": "0.5030916",
+ "inverse": true
},
{
- "bid": "0.0044",
- "ask": "0.0055",
- "open_interest": "1218.0",
- "volume": "4259.41",
- "strike": "6600.0000",
+ "bid": "0.0455",
+ "ask": "0.0465",
+ "open_interest": "7800",
+ "volume": "10768.03",
+ "strike": "2200",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4785464",
+ "iv_ask": "0.4866195",
+ "inverse": true
},
{
- "bid": "0.0040",
- "ask": "0.0047",
- "open_interest": "933.0",
- "volume": "0.0",
- "strike": "6800.0000",
+ "bid": "0.0295",
+ "ask": "0.0305",
+ "open_interest": "9912",
+ "volume": "160055.7",
+ "strike": "2300",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4737501",
+ "iv_ask": "0.4825604",
+ "inverse": true
},
{
- "bid": "1.5300",
- "ask": "1.5660",
- "open_interest": "1.0",
- "volume": "0.0",
- "strike": "6800.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.0036",
- "ask": "0.0043",
- "open_interest": "6490.0",
- "volume": "0.0",
- "strike": "7000.0000",
+ "bid": "0.0185",
+ "ask": "0.019",
+ "open_interest": "14883",
+ "volume": "12829.27",
+ "strike": "2400",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4719197",
+ "iv_ask": "0.4771436",
+ "inverse": true
},
{
- "bid": "0.0032",
- "ask": "0.0039",
- "open_interest": "1068.0",
- "volume": "19.95",
- "strike": "7200.0000",
+ "bid": "0.011",
+ "ask": "0.012",
+ "open_interest": "68572",
+ "volume": "76676.51",
+ "strike": "2500",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "1.6775",
- "ask": "1.7160",
- "open_interest": "76.0",
- "volume": "0.0",
- "strike": "7200.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4681885",
+ "iv_ask": "0.4814408",
+ "inverse": true
},
{
- "bid": "0.0029",
- "ask": "0.0036",
- "open_interest": "2242.0",
- "volume": "0.0",
- "strike": "7400.0000",
+ "bid": "0.007",
+ "ask": "0.0075",
+ "open_interest": "15892",
+ "volume": "31.9",
+ "strike": "2600",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4781266",
+ "iv_ask": "0.4868166",
+ "inverse": true
},
{
- "bid": "0.0027",
- "ask": "0.0034",
- "open_interest": "1289.0",
- "volume": "3921.85",
- "strike": "7500.0000",
+ "bid": "0.0045",
+ "ask": "0.0049",
+ "open_interest": "16511",
+ "volume": "2951.61",
+ "strike": "2700",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4890707",
+ "iv_ask": "0.4983296",
+ "inverse": true
},
{
- "bid": "0.0021",
- "ask": "0.0028",
- "open_interest": "1908.0",
- "volume": "51.21",
- "strike": "8000.0000",
+ "bid": "0.0029",
+ "ask": "0.0033",
+ "open_interest": "17794",
+ "volume": "1263.99",
+ "strike": "2800",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.4995412",
+ "iv_ask": "0.5119932",
+ "inverse": true
},
{
- "bid": "0.0017",
+ "bid": "0.002",
"ask": "0.0023",
- "open_interest": "4017.0",
- "volume": "7283.62",
- "strike": "8500.0000",
+ "open_interest": "15071",
+ "volume": "486.94",
+ "strike": "2900",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.514955",
+ "iv_ask": "0.5272995",
+ "inverse": true
},
{
- "bid": "0.0014",
- "ask": "0.0019",
- "open_interest": "9538.0",
- "volume": "0.0",
- "strike": "9000.0000",
+ "bid": "0.0013",
+ "ask": "0.0016",
+ "open_interest": "21551",
+ "volume": "408.6",
+ "strike": "3000",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5239483",
+ "iv_ask": "0.540699",
+ "inverse": true
},
{
"bid": "0.0009",
- "ask": "0.0014",
- "open_interest": "2018.0",
- "volume": "0.0",
- "strike": "10000.0000",
+ "ask": "0.0013",
+ "open_interest": "6617",
+ "volume": "7.26",
+ "strike": "3100",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5367198",
+ "iv_ask": "0.5650581",
+ "inverse": true
},
{
- "bid": "0.0006",
- "ask": "0.0011",
- "open_interest": "1832.0",
- "volume": "0.0",
- "strike": "11000.0000",
+ "bid": "0.0007",
+ "ask": "0.001",
+ "open_interest": "15035",
+ "volume": "2.35",
+ "strike": "3200",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5562015",
+ "iv_ask": "0.5827433",
+ "inverse": true
},
{
"bid": "0.0004",
- "ask": "0.0009",
- "open_interest": "3617.0",
- "volume": "0.0",
- "strike": "12000.0000",
+ "ask": "0.0007",
+ "open_interest": "12008",
+ "volume": "3.2",
+ "strike": "3400",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "3.4510",
- "ask": "3.5215",
- "open_interest": "55.0",
- "volume": "0.0",
- "strike": "12000.0000",
- "maturity": "2026-06-26T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5861117",
+ "iv_ask": "0.6256834",
+ "inverse": true
},
{
"bid": "0.0002",
- "ask": "0.0007",
- "open_interest": "3262.0",
- "volume": "0.0",
- "strike": "13000.0000",
+ "ask": "0.0005",
+ "open_interest": "10563",
+ "volume": "257.14",
+ "strike": "3500",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.574405",
+ "iv_ask": "0.6329249",
+ "inverse": true
},
{
"bid": "0.0001",
- "ask": "0.0006",
- "open_interest": "3571.0",
- "volume": "0.0",
- "strike": "14000.0000",
+ "ask": "0.0005",
+ "open_interest": "7085",
+ "volume": "0",
+ "strike": "3600",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5654173",
+ "iv_ask": "0.6635841",
+ "inverse": true
},
{
- "bid": "0.0001",
- "ask": "0.0004",
- "open_interest": "2736.0",
- "volume": "0.0",
- "strike": "15000.0000",
+ "bid": "0.0002",
+ "ask": "0.0003",
+ "open_interest": "7017",
+ "volume": "26.12",
+ "strike": "3800",
"maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "2698.00",
- "ask": "2699.75",
- "open_interest": "23582530",
- "volume": "3549252.0",
- "maturity": "2026-09-25T08:00:00Z",
- "security_type": "forward"
+ "security_type": "option",
+ "iv_bid": "0.6569811",
+ "iv_ask": "0.6837684",
+ "inverse": true
},
{
- "bid": "0.6355",
- "ask": "0.6415",
- "open_interest": "55.0",
- "volume": "0.0",
- "strike": "1000.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0001",
+ "ask": "0.0003",
+ "open_interest": "13122",
+ "volume": "0",
+ "strike": "4000",
+ "maturity": "2026-06-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.0085",
- "ask": "0.0100",
- "open_interest": "1564.0",
- "volume": "1981.77",
- "strike": "1000.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6651664",
+ "iv_ask": "0.7361061",
+ "inverse": true
},
{
- "bid": "0.4730",
- "ask": "0.4790",
- "open_interest": "4.0",
- "volume": "0.0",
- "strike": "1500.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "bid": "2131.75",
+ "ask": "2132.25",
+ "open_interest": "2446074",
+ "volume": "263778",
+ "maturity": "2026-07-31T08:00:00Z",
+ "security_type": "forward"
},
{
- "bid": "0.0305",
- "ask": "0.0330",
- "open_interest": "6296.0",
- "volume": "1536.16",
- "strike": "1500.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.017",
+ "ask": "0.018",
+ "open_interest": "3560",
+ "volume": "3715.65",
+ "strike": "1600",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6105739",
+ "iv_ask": "0.6221458",
+ "inverse": true
},
{
- "bid": "0.0555",
- "ask": "0.0580",
- "open_interest": "19.0",
- "volume": "0.0",
- "strike": "1800.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0335",
+ "ask": "0.0345",
+ "open_interest": "7870",
+ "volume": "0",
+ "strike": "1800",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5632748",
+ "iv_ask": "0.5711162",
+ "inverse": true
+ },
+ {
+ "bid": "0.0465",
+ "ask": "0.0475",
+ "open_interest": "1778",
+ "volume": "191.4",
+ "strike": "1900",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5472005",
+ "iv_ask": "0.5539907",
+ "inverse": true
+ },
+ {
+ "bid": "0.054",
+ "ask": "0.0555",
+ "open_interest": "95",
+ "volume": "2443.4",
+ "strike": "1950",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5379451",
+ "iv_ask": "0.5475732",
+ "inverse": true
+ },
+ {
+ "bid": "0.063",
+ "ask": "0.064",
+ "open_interest": "2063",
+ "volume": "0",
+ "strike": "2000",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5328136",
+ "iv_ask": "0.5389454",
+ "inverse": true
+ },
+ {
+ "bid": "0.073",
+ "ask": "0.074",
+ "open_interest": "336",
+ "volume": "153.58",
+ "strike": "2050",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5281861",
+ "iv_ask": "0.5341071",
+ "inverse": true
+ },
+ {
+ "bid": "0.084",
+ "ask": "0.085",
+ "open_interest": "582",
+ "volume": "19869.82",
+ "strike": "2100",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5239524",
+ "iv_ask": "0.5297329",
+ "inverse": true
+ },
+ {
+ "bid": "0.087",
+ "ask": "0.0885",
+ "open_interest": "199",
+ "volume": "0",
+ "strike": "2150",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5177179",
+ "iv_ask": "0.5262742",
+ "inverse": true
+ },
+ {
+ "bid": "0.0765",
+ "ask": "0.0775",
+ "open_interest": "613",
+ "volume": "0",
+ "strike": "2200",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5140201",
+ "iv_ask": "0.5197087",
+ "inverse": true
+ },
+ {
+ "bid": "0.067",
+ "ask": "0.068",
+ "open_interest": "303",
+ "volume": "0",
+ "strike": "2250",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5108267",
+ "iv_ask": "0.5165586",
+ "inverse": true
+ },
+ {
+ "bid": "0.0585",
+ "ask": "0.0595",
+ "open_interest": "1883",
+ "volume": "0",
+ "strike": "2300",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5083247",
+ "iv_ask": "0.5141569",
+ "inverse": true
+ },
+ {
+ "bid": "0.051",
+ "ask": "0.052",
+ "open_interest": "2982",
+ "volume": "112.56",
+ "strike": "2350",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5067894",
+ "iv_ask": "0.5127782",
+ "inverse": true
+ },
+ {
+ "bid": "0.044",
+ "ask": "0.045",
+ "open_interest": "3953",
+ "volume": "3990.34",
+ "strike": "2400",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5034967",
+ "iv_ask": "0.5097061",
+ "inverse": true
+ },
+ {
+ "bid": "0.038",
+ "ask": "0.039",
+ "open_interest": "554",
+ "volume": "0",
+ "strike": "2450",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5017914",
+ "iv_ask": "0.5082811",
+ "inverse": true
+ },
+ {
+ "bid": "0.033",
+ "ask": "0.034",
+ "open_interest": "435",
+ "volume": "0",
+ "strike": "2500",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5022651",
+ "iv_ask": "0.5090885",
+ "inverse": true
},
{
- "bid": "0.3365",
- "ask": "0.3420",
- "open_interest": "243.0",
- "volume": "0.0",
- "strike": "2000.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0285",
+ "ask": "0.0295",
+ "open_interest": "902",
+ "volume": "0",
+ "strike": "2550",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.502076",
+ "iv_ask": "0.5093036",
+ "inverse": true
},
{
- "bid": "0.0780",
- "ask": "0.0810",
- "open_interest": "9845.0",
- "volume": "2708.42",
- "strike": "2000.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.2900",
- "ask": "0.2965",
- "open_interest": "105.0",
- "volume": "0.0",
- "strike": "2200.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0245",
+ "ask": "0.0255",
+ "open_interest": "1681",
+ "volume": "4164.52",
+ "strike": "2600",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1060",
- "ask": "0.1095",
- "open_interest": "3198.0",
- "volume": "549.96",
- "strike": "2200.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.501528",
+ "iv_ask": "0.5092379",
+ "inverse": true
},
{
- "bid": "0.2505",
- "ask": "0.2550",
- "open_interest": "36.0",
- "volume": "0.0",
- "strike": "2400.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.021",
+ "ask": "0.022",
+ "open_interest": "706",
+ "volume": "47.9",
+ "strike": "2650",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1395",
- "ask": "0.1435",
- "open_interest": "1947.0",
- "volume": "0.0",
- "strike": "2400.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5009859",
+ "iv_ask": "0.5092619",
+ "inverse": true
},
{
- "bid": "0.2320",
- "ask": "0.2365",
- "open_interest": "23.0",
- "volume": "669.88",
- "strike": "2500.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.018",
+ "ask": "0.019",
+ "open_interest": "2300",
+ "volume": "587.71",
+ "strike": "2700",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
- },
- {
- "bid": "0.1580",
- "ask": "0.1625",
- "open_interest": "2767.0",
- "volume": "836.69",
- "strike": "2500.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5009078",
+ "iv_ask": "0.5098347",
+ "inverse": true
},
{
- "bid": "0.2145",
- "ask": "0.2190",
- "open_interest": "61.0",
- "volume": "31550.33",
- "strike": "2600.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0155",
+ "ask": "0.0165",
+ "open_interest": "138",
+ "volume": "0",
+ "strike": "2750",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5018813",
+ "iv_ask": "0.5115344",
+ "inverse": true
},
{
- "bid": "0.1780",
- "ask": "0.1825",
- "open_interest": "8624.0",
- "volume": "0.0",
- "strike": "2600.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
- },
- {
- "bid": "0.1840",
- "ask": "0.1880",
- "open_interest": "562.0",
- "volume": "90868.82",
- "strike": "2800.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0135",
+ "ask": "0.0145",
+ "open_interest": "5776",
+ "volume": "0",
+ "strike": "2800",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5046547",
+ "iv_ask": "0.5150816",
+ "inverse": true
},
{
- "bid": "0.2210",
- "ask": "0.2255",
- "open_interest": "1295.0",
- "volume": "0.0",
- "strike": "2800.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.01",
+ "ask": "0.011",
+ "open_interest": "1386",
+ "volume": "24.52",
+ "strike": "2900",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5069915",
+ "iv_ask": "0.519377",
+ "inverse": true
},
{
- "bid": "0.1575",
- "ask": "0.1615",
- "open_interest": "397.0",
- "volume": "0.0",
- "strike": "3000.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "1407",
+ "volume": "512.56",
+ "strike": "3000",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5110555",
+ "iv_ask": "0.5258152",
+ "inverse": true
},
- {
- "bid": "0.2665",
- "ask": "0.2760",
- "open_interest": "6484.0",
- "volume": "0.0",
- "strike": "3000.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ {
+ "bid": "0.006",
+ "ask": "0.0065",
+ "open_interest": "700",
+ "volume": "51.24",
+ "strike": "3100",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5218068",
+ "iv_ask": "0.5305488",
+ "inverse": true
},
{
- "bid": "0.1345",
- "ask": "0.1385",
- "open_interest": "1116.0",
- "volume": "0.0",
- "strike": "3200.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0046",
+ "ask": "0.0049",
+ "open_interest": "3875",
+ "volume": "0",
+ "strike": "3200",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5271592",
+ "iv_ask": "0.5335063",
+ "inverse": true
},
{
- "bid": "0.3165",
- "ask": "0.3295",
- "open_interest": "1436.0",
- "volume": "0.0",
- "strike": "3200.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.003",
+ "ask": "0.0033",
+ "open_interest": "1585",
+ "volume": "13.25",
+ "strike": "3400",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.545704",
+ "iv_ask": "0.5543935",
+ "inverse": true
},
{
- "bid": "0.1155",
- "ask": "0.1190",
- "open_interest": "3707.0",
- "volume": "0.0",
- "strike": "3400.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.002",
+ "ask": "0.0022",
+ "open_interest": "521",
+ "volume": "0",
+ "strike": "3600",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5627004",
+ "iv_ask": "0.5706662",
+ "inverse": true
},
{
- "bid": "0.3645",
- "ask": "0.3915",
- "open_interest": "1084.0",
- "volume": "1983.02",
- "strike": "3400.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0014",
+ "ask": "0.0016",
+ "open_interest": "668",
+ "volume": "0",
+ "strike": "3800",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.580564",
+ "iv_ask": "0.591091",
+ "inverse": true
},
{
- "bid": "0.1070",
- "ask": "0.1100",
- "open_interest": "10484.0",
- "volume": "1623.79",
- "strike": "3500.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0009",
+ "ask": "0.0012",
+ "open_interest": "8641",
+ "volume": "3.62",
+ "strike": "4000",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5895746",
+ "iv_ask": "0.6108455",
+ "inverse": true
},
{
- "bid": "0.3925",
- "ask": "0.4200",
- "open_interest": "908.0",
- "volume": "0.0",
- "strike": "3500.0000",
- "maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "bid": "0.0005",
+ "ask": "0.0009",
+ "open_interest": "1130",
+ "volume": "0",
+ "strike": "4200",
+ "maturity": "2026-07-31T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5878241",
+ "iv_ask": "0.6279168",
+ "inverse": true
},
{
- "bid": "0.0990",
- "ask": "0.1025",
- "open_interest": "952.0",
- "volume": "5604.54",
- "strike": "3600.0000",
- "maturity": "2026-09-25T08:00:00Z",
+ "bid": "0.0006",
+ "ask": "0.0007",
+ "open_interest": "761",
+ "volume": "0",
+ "strike": "4400",
+ "maturity": "2026-07-31T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6345173",
+ "iv_ask": "0.6453587",
+ "inverse": true
},
{
- "bid": "0.4215",
- "ask": "0.4500",
- "open_interest": "608.0",
- "volume": "5830.71",
- "strike": "3600.0000",
+ "bid": "2141.25",
+ "ask": "2141.5",
+ "open_interest": "61466233",
+ "volume": "1675130",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "security_type": "forward"
},
{
- "bid": "0.0850",
- "ask": "0.0880",
- "open_interest": "774.0",
- "volume": "1302.33",
- "strike": "3800.0000",
+ "bid": "0.006",
+ "ask": "0.007",
+ "open_interest": "6792",
+ "volume": "13.84",
+ "strike": "1000",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.7729307",
+ "iv_ask": "0.7976245",
+ "inverse": true
},
{
- "bid": "0.4825",
- "ask": "0.5110",
- "open_interest": "1001.0",
- "volume": "0.0",
- "strike": "3800.0000",
+ "bid": "0.0115",
+ "ask": "0.0125",
+ "open_interest": "11195",
+ "volume": "128.97",
+ "strike": "1200",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.7063138",
+ "iv_ask": "0.7212723",
+ "inverse": true
},
{
- "bid": "0.0735",
- "ask": "0.0765",
- "open_interest": "2737.0",
- "volume": "2039.32",
- "strike": "4000.0000",
+ "bid": "0.0205",
+ "ask": "0.0215",
+ "open_interest": "2247",
+ "volume": "0",
+ "strike": "1400",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.648459",
+ "iv_ask": "0.6582983",
+ "inverse": true
},
{
- "bid": "0.5425",
- "ask": "0.5740",
- "open_interest": "173.0",
- "volume": "0.0",
- "strike": "4000.0000",
+ "bid": "0.0275",
+ "ask": "0.0285",
+ "open_interest": "9374",
+ "volume": "3244.24",
+ "strike": "1500",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6280565",
+ "iv_ask": "0.6362094",
+ "inverse": true
},
{
- "bid": "0.0635",
- "ask": "0.0665",
- "open_interest": "808.0",
- "volume": "0.0",
- "strike": "4200.0000",
+ "bid": "0.036",
+ "ask": "0.0375",
+ "open_interest": "3440",
+ "volume": "767.76",
+ "strike": "1600",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6074609",
+ "iv_ask": "0.6178414",
+ "inverse": true
},
{
- "bid": "0.6065",
- "ask": "0.6385",
- "open_interest": "527.0",
- "volume": "0.0",
- "strike": "4200.0000",
+ "bid": "0.047",
+ "ask": "0.0485",
+ "open_interest": "1639",
+ "volume": "0",
+ "strike": "1700",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5917157",
+ "iv_ask": "0.6007305",
+ "inverse": true
},
{
- "bid": "0.0550",
- "ask": "0.0580",
- "open_interest": "3169.0",
- "volume": "290.12",
- "strike": "4400.0000",
+ "bid": "0.061",
+ "ask": "0.062",
+ "open_interest": "3679",
+ "volume": "13865.65",
+ "strike": "1800",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5808918",
+ "iv_ask": "0.586236",
+ "inverse": true
},
{
- "bid": "0.6720",
- "ask": "0.7055",
- "open_interest": "281.0",
- "volume": "0.0",
- "strike": "4400.0000",
+ "bid": "0.077",
+ "ask": "0.0785",
+ "open_interest": "3609",
+ "volume": "334.43",
+ "strike": "1900",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5680346",
+ "iv_ask": "0.5753462",
+ "inverse": true
},
{
- "bid": "0.0515",
- "ask": "0.0540",
- "open_interest": "7978.0",
- "volume": "411.36",
- "strike": "4500.0000",
+ "bid": "0.0965",
+ "ask": "0.098",
+ "open_interest": "13628",
+ "volume": "0",
+ "strike": "2000",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.5599858",
+ "iv_ask": "0.5668179",
+ "inverse": true
},
{
- "bid": "0.7050",
- "ask": "0.7395",
- "open_interest": "6.0",
- "volume": "0.0",
- "strike": "4500.0000",
+ "bid": "0.119",
+ "ask": "0.1205",
+ "open_interest": "3247",
+ "volume": "2010.72",
+ "strike": "2100",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5536079",
+ "iv_ask": "0.5601455",
+ "inverse": true
},
{
- "bid": "0.0480",
- "ask": "0.0505",
- "open_interest": "2103.0",
- "volume": "0.0",
- "strike": "4600.0000",
+ "bid": "0.1165",
+ "ask": "0.118",
+ "open_interest": "3464",
+ "volume": "0",
+ "strike": "2200",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5465174",
+ "iv_ask": "0.5529136",
+ "inverse": true
},
{
- "bid": "0.7390",
- "ask": "0.7690",
- "open_interest": "39.0",
- "volume": "0.0",
- "strike": "4600.0000",
+ "bid": "0.098",
+ "ask": "0.0995",
+ "open_interest": "2400",
+ "volume": "0",
+ "strike": "2300",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5426376",
+ "iv_ask": "0.5490261",
+ "inverse": true
},
{
- "bid": "0.0420",
- "ask": "0.0445",
- "open_interest": "838.0",
- "volume": "0.0",
- "strike": "4800.0000",
+ "bid": "0.082",
+ "ask": "0.083",
+ "open_interest": "3795",
+ "volume": "2139.24",
+ "strike": "2400",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5393378",
+ "iv_ask": "0.5436726",
+ "inverse": true
},
{
- "bid": "0.8055",
- "ask": "0.8425",
- "open_interest": "50.0",
- "volume": "0.0",
- "strike": "4800.0000",
+ "bid": "0.0685",
+ "ask": "0.0695",
+ "open_interest": "3610",
+ "volume": "0",
+ "strike": "2500",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5375009",
+ "iv_ask": "0.5419861",
+ "inverse": true
},
{
- "bid": "0.0370",
- "ask": "0.0390",
- "open_interest": "3704.0",
- "volume": "618.41",
- "strike": "5000.0000",
+ "bid": "0.0565",
+ "ask": "0.0575",
+ "open_interest": "901",
+ "volume": "0",
+ "strike": "2600",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.533579",
+ "iv_ask": "0.5382963",
+ "inverse": true
},
{
- "bid": "0.8740",
- "ask": "0.9075",
- "open_interest": "1.0",
- "volume": "0.0",
- "strike": "5000.0000",
+ "bid": "0.047",
+ "ask": "0.048",
+ "open_interest": "4378",
+ "volume": "0",
+ "strike": "2700",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5332688",
+ "iv_ask": "0.5382867",
+ "inverse": true
},
{
- "bid": "0.0325",
- "ask": "0.0345",
- "open_interest": "1227.0",
- "volume": "89.67",
- "strike": "5200.0000",
+ "bid": "0.0385",
+ "ask": "0.04",
+ "open_interest": "4658",
+ "volume": "709.17",
+ "strike": "2800",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5303505",
+ "iv_ask": "0.5384613",
+ "inverse": true
},
{
- "bid": "0.9435",
- "ask": "0.9775",
- "open_interest": "3.0",
- "volume": "0.0",
- "strike": "5200.0000",
+ "bid": "0.032",
+ "ask": "0.0335",
+ "open_interest": "847",
+ "volume": "436.44",
+ "strike": "2900",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5312178",
+ "iv_ask": "0.5400166",
+ "inverse": true
},
{
- "bid": "0.0285",
- "ask": "0.0310",
- "open_interest": "654.0",
- "volume": "0.0",
- "strike": "5400.0000",
+ "bid": "0.0265",
+ "ask": "0.028",
+ "open_interest": "12969",
+ "volume": "19240.46",
+ "strike": "3000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5316631",
+ "iv_ask": "0.5412916",
+ "inverse": true
},
{
- "bid": "1.0135",
- "ask": "1.0485",
- "open_interest": "4.0",
- "volume": "0.0",
- "strike": "5400.0000",
+ "bid": "0.022",
+ "ask": "0.0235",
+ "open_interest": "1514",
+ "volume": "1175.31",
+ "strike": "3100",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.532715",
+ "iv_ask": "0.54331",
+ "inverse": true
},
{
- "bid": "0.0270",
- "ask": "0.0290",
- "open_interest": "1582.0",
- "volume": "0.0",
- "strike": "5500.0000",
+ "bid": "0.0185",
+ "ask": "0.0195",
+ "open_interest": "7332",
+ "volume": "44.96",
+ "strike": "3200",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5357009",
+ "iv_ask": "0.5435163",
+ "inverse": true
},
{
- "bid": "1.0485",
- "ask": "1.0840",
- "open_interest": "1.0",
- "volume": "0.0",
- "strike": "5500.0000",
+ "bid": "0.0155",
+ "ask": "0.0165",
+ "open_interest": "16784",
+ "volume": "74.88",
+ "strike": "3300",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5379423",
+ "iv_ask": "0.5466011",
+ "inverse": true
},
{
- "bid": "0.0255",
- "ask": "0.0275",
- "open_interest": "1433.0",
- "volume": "0.0",
- "strike": "5600.0000",
+ "bid": "0.013",
+ "ask": "0.014",
+ "open_interest": "6600",
+ "volume": "220.32",
+ "strike": "3400",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5401509",
+ "iv_ask": "0.5497736",
+ "inverse": true
},
{
- "bid": "0.0225",
- "ask": "0.0245",
- "open_interest": "4908.0",
- "volume": "0.0",
- "strike": "5800.0000",
+ "bid": "0.011",
+ "ask": "0.012",
+ "open_interest": "13304",
+ "volume": "24.6",
+ "strike": "3500",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5432431",
+ "iv_ask": "0.5539222",
+ "inverse": true
},
{
- "bid": "0.0205",
- "ask": "0.0220",
- "open_interest": "2308.0",
- "volume": "0.0",
- "strike": "6000.0000",
+ "bid": "0.009",
+ "ask": "0.0105",
+ "open_interest": "2399",
+ "volume": "44.82",
+ "strike": "3600",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5422601",
+ "iv_ask": "0.5601402",
+ "inverse": true
},
{
- "bid": "0.0180",
- "ask": "0.0200",
- "open_interest": "1754.0",
- "volume": "0.0",
- "strike": "6200.0000",
+ "bid": "0.0065",
+ "ask": "0.0075",
+ "open_interest": "1604",
+ "volume": "28.72",
+ "strike": "3800",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5483802",
+ "iv_ask": "0.5633361",
+ "inverse": true
},
{
- "bid": "0.0165",
- "ask": "0.0180",
- "open_interest": "1129.0",
- "volume": "0.0",
- "strike": "6400.0000",
+ "bid": "0.005",
+ "ask": "0.006",
+ "open_interest": "12096",
+ "volume": "12.84",
+ "strike": "4000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5593478",
+ "iv_ask": "0.5772925",
+ "inverse": true
},
{
- "bid": "0.0155",
- "ask": "0.0175",
- "open_interest": "1057.0",
- "volume": "0.0",
- "strike": "6500.0000",
+ "bid": "0.0037",
+ "ask": "0.0043",
+ "open_interest": "2339",
+ "volume": "8.51",
+ "strike": "4200",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5651866",
+ "iv_ask": "0.5787662",
+ "inverse": true
},
{
- "bid": "0.0150",
- "ask": "0.0165",
- "open_interest": "828.0",
- "volume": "0.0",
- "strike": "6600.0000",
+ "bid": "0.0029",
+ "ask": "0.0034",
+ "open_interest": "4414",
+ "volume": "0",
+ "strike": "4400",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5748154",
+ "iv_ask": "0.5884599",
+ "inverse": true
},
{
- "bid": "0.0135",
- "ask": "0.0150",
- "open_interest": "756.0",
- "volume": "0.0",
- "strike": "6800.0000",
+ "bid": "0.0025",
+ "ask": "0.003",
+ "open_interest": "8560",
+ "volume": "32.08",
+ "strike": "4500",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.576961",
+ "iv_ask": "0.5921213",
+ "inverse": true
},
{
- "bid": "0.0120",
- "ask": "0.0140",
- "open_interest": "1165.0",
- "volume": "0.0",
- "strike": "7000.0000",
+ "bid": "0.0022",
+ "ask": "0.0027",
+ "open_interest": "3051",
+ "volume": "0",
+ "strike": "4600",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5805351",
+ "iv_ask": "0.5971678",
+ "inverse": true
},
{
- "bid": "0.0110",
- "ask": "0.0130",
- "open_interest": "594.0",
- "volume": "0.0",
- "strike": "7200.0000",
+ "bid": "0.0017",
+ "ask": "0.0022",
+ "open_interest": "1809",
+ "volume": "0",
+ "strike": "4800",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5867671",
+ "iv_ask": "0.6067807",
+ "inverse": true
},
{
- "bid": "0.0105",
- "ask": "0.0120",
- "open_interest": "735.0",
- "volume": "155.06",
- "strike": "7400.0000",
+ "bid": "0.0015",
+ "ask": "0.0018",
+ "open_interest": "3853",
+ "volume": "0",
+ "strike": "5000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6017274",
+ "iv_ask": "0.6155559",
+ "inverse": true
},
{
- "bid": "0.0100",
- "ask": "0.0115",
- "open_interest": "788.0",
- "volume": "0.0",
- "strike": "7500.0000",
+ "bid": "0.0011",
+ "ask": "0.0016",
+ "open_interest": "1598",
+ "volume": "0",
+ "strike": "5200",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6022607",
+ "iv_ask": "0.629629",
+ "inverse": true
},
{
- "bid": "0.0080",
- "ask": "0.0095",
- "open_interest": "1160.0",
- "volume": "1745.22",
- "strike": "8000.0000",
+ "bid": "0.0008",
+ "ask": "0.0013",
+ "open_interest": "1174",
+ "volume": "0",
+ "strike": "5400",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6020513",
+ "iv_ask": "0.6357591",
+ "inverse": true
},
{
- "bid": "0.0065",
- "ask": "0.0080",
- "open_interest": "1256.0",
- "volume": "0.0",
- "strike": "8500.0000",
+ "bid": "0.0007",
+ "ask": "0.0012",
+ "open_interest": "1487",
+ "volume": "0",
+ "strike": "5500",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6035237",
+ "iv_ask": "0.6402875",
+ "inverse": true
},
{
- "bid": "0.0055",
- "ask": "0.0070",
- "open_interest": "1533.0",
- "volume": "0.0",
- "strike": "9000.0000",
+ "bid": "0.0006",
+ "ask": "0.0012",
+ "open_interest": "1878",
+ "volume": "11.73",
+ "strike": "5600",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6036121",
+ "iv_ask": "0.6504761",
+ "inverse": true
},
{
- "bid": "0.0041",
- "ask": "0.0050",
- "open_interest": "1583.0",
- "volume": "979.95",
- "strike": "10000.0000",
+ "bid": "0.0006",
+ "ask": "0.001",
+ "open_interest": "4884",
+ "volume": "0",
+ "strike": "5800",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6223255",
+ "iv_ask": "0.6567333",
+ "inverse": true
},
{
- "bid": "0.0035",
- "ask": "0.0039",
- "open_interest": "2666.0",
- "volume": "0.0",
- "strike": "11000.0000",
+ "bid": "0.0005",
+ "ask": "0.0009",
+ "open_interest": "3264",
+ "volume": "0",
+ "strike": "6000",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.628857",
+ "iv_ask": "0.6677812",
+ "inverse": true
},
{
- "bid": "0.0024",
- "ask": "0.0031",
- "open_interest": "1348.0",
- "volume": "0.0",
- "strike": "12000.0000",
+ "bid": "0.0004",
+ "ask": "0.0008",
+ "open_interest": "2025",
+ "volume": "0",
+ "strike": "6200",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.632339",
+ "iv_ask": "0.6771633",
+ "inverse": true
},
{
- "bid": "0.0019",
- "ask": "0.0025",
- "open_interest": "1664.0",
- "volume": "0.0",
- "strike": "13000.0000",
+ "bid": "0.0004",
+ "ask": "0.0007",
+ "open_interest": "1915",
+ "volume": "0",
+ "strike": "6400",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6485274",
+ "iv_ask": "0.6847523",
+ "inverse": true
},
{
- "bid": "0.0014",
- "ask": "0.0020",
- "open_interest": "1168.0",
- "volume": "0.0",
- "strike": "14000.0000",
+ "bid": "0.0003",
+ "ask": "0.0007",
+ "open_interest": "1334",
+ "volume": "0",
+ "strike": "6500",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6394638",
+ "iv_ask": "0.6929517",
+ "inverse": true
},
{
- "bid": "0.0011",
- "ask": "0.0017",
- "open_interest": "831.0",
- "volume": "0.0",
- "strike": "15000.0000",
+ "bid": "0.0003",
+ "ask": "0.0006",
+ "open_interest": "1420",
+ "volume": "0",
+ "strike": "6600",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6470546",
+ "iv_ask": "0.6903349",
+ "inverse": true
},
{
- "bid": "0.0009",
- "ask": "0.0012",
- "open_interest": "3210.0",
- "volume": "0.0",
- "strike": "16000.0000",
+ "bid": "0.0002",
+ "ask": "0.0006",
+ "open_interest": "1467",
+ "volume": "0",
+ "strike": "6800",
"maturity": "2026-09-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6392119",
+ "iv_ask": "0.7058581",
+ "inverse": true
},
{
- "bid": "4.8520",
- "ask": "5.0155",
- "open_interest": "30.0",
- "volume": "0.0",
- "strike": "16000.0000",
+ "bid": "0.0002",
+ "ask": "0.0005",
+ "open_interest": "2039",
+ "volume": "0",
+ "strike": "7000",
"maturity": "2026-09-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.6531505",
+ "iv_ask": "0.7083764",
+ "inverse": true
},
{
- "bid": "2725.25",
- "ask": "2727.25",
- "open_interest": "6370628",
- "volume": "1321880.0",
+ "bid": "2160",
+ "ask": "2160.5",
+ "open_interest": "29083389",
+ "volume": "754779",
"maturity": "2026-12-25T08:00:00Z",
"security_type": "forward"
},
{
- "bid": "0.5195",
- "ask": "0.5315",
- "open_interest": "10.0",
- "volume": "14001.87",
- "strike": "1400.0000",
+ "bid": "0.008",
+ "ask": "0.009",
+ "open_interest": "1361",
+ "volume": "804.5",
+ "strike": "800",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.7945755",
+ "iv_ask": "0.8146921",
+ "inverse": true
},
{
- "bid": "0.0370",
- "ask": "0.0405",
- "open_interest": "1067.0",
- "volume": "488.15",
- "strike": "1400.0000",
+ "bid": "0.015",
+ "ask": "0.016",
+ "open_interest": "18980",
+ "volume": "130.15",
+ "strike": "1000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.7338959",
+ "iv_ask": "0.7462375",
+ "inverse": true
},
{
- "bid": "0.0545",
- "ask": "0.0580",
- "open_interest": "87.0",
- "volume": "0.0",
- "strike": "1600.0000",
+ "bid": "0.0255",
+ "ask": "0.0265",
+ "open_interest": "2596",
+ "volume": "383.78",
+ "strike": "1200",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6826406",
+ "iv_ask": "0.6909914",
+ "inverse": true
},
{
- "bid": "0.0760",
- "ask": "0.0800",
- "open_interest": "271.0",
- "volume": "0.0",
- "strike": "1800.0000",
+ "bid": "0.042",
+ "ask": "0.043",
+ "open_interest": "10731",
+ "volume": "79690.2",
+ "strike": "1400",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6476807",
+ "iv_ask": "0.6537289",
+ "inverse": true
},
{
- "bid": "0.3645",
- "ask": "0.3790",
- "open_interest": "84.0",
- "volume": "0.0",
- "strike": "2000.0000",
+ "bid": "0.0525",
+ "ask": "0.054",
+ "open_interest": "3131",
+ "volume": "1090.83",
+ "strike": "1500",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6318968",
+ "iv_ask": "0.639842",
+ "inverse": true
},
{
- "bid": "0.1025",
- "ask": "0.1065",
- "open_interest": "1337.0",
- "volume": "11678.26",
- "strike": "2000.0000",
+ "bid": "0.0655",
+ "ask": "0.067",
+ "open_interest": "4606",
+ "volume": "14030.87",
+ "strike": "1600",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.62109",
+ "iv_ask": "0.6281672",
+ "inverse": true
},
{
- "bid": "0.1335",
- "ask": "0.1385",
- "open_interest": "96.0",
- "volume": "6584.22",
- "strike": "2200.0000",
+ "bid": "0.08",
+ "ask": "0.082",
+ "open_interest": "16450",
+ "volume": "37730.74",
+ "strike": "1700",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6093218",
+ "iv_ask": "0.6178828",
+ "inverse": true
},
{
- "bid": "0.2835",
- "ask": "0.2995",
- "open_interest": "538.0",
- "volume": "0.0",
- "strike": "2400.0000",
+ "bid": "0.097",
+ "ask": "0.099",
+ "open_interest": "3857",
+ "volume": "0",
+ "strike": "1800",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6006469",
+ "iv_ask": "0.6085412",
+ "inverse": true
},
{
- "bid": "0.1695",
- "ask": "0.1745",
- "open_interest": "939.0",
- "volume": "107315.86",
- "strike": "2400.0000",
+ "bid": "0.117",
+ "ask": "0.1185",
+ "open_interest": "2673",
+ "volume": "0",
+ "strike": "1900",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5962189",
+ "iv_ask": "0.6017638",
+ "inverse": true
},
{
- "bid": "0.2670",
- "ask": "0.2835",
- "open_interest": "3.0",
- "volume": "783.61",
- "strike": "2500.0000",
+ "bid": "0.138",
+ "ask": "0.1405",
+ "open_interest": "6813",
+ "volume": "0",
+ "strike": "2000",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "call",
- "security_type": "option"
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.588404",
+ "iv_ask": "0.5971883",
+ "inverse": true
},
{
- "bid": "0.1890",
- "ask": "0.1945",
- "open_interest": "260.0",
- "volume": "0.0",
- "strike": "2500.0000",
+ "bid": "0.1625",
+ "ask": "0.1645",
+ "open_interest": "1926",
+ "volume": "0",
+ "strike": "2100",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "put",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5862439",
+ "iv_ask": "0.5930151",
+ "inverse": true
},
{
- "bid": "0.2560",
- "ask": "0.2625",
- "open_interest": "64.0",
- "volume": "45237.74",
- "strike": "2600.0000",
+ "bid": "0.17",
+ "ask": "0.1725",
+ "open_interest": "50826",
+ "volume": "0",
+ "strike": "2200",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5790226",
+ "iv_ask": "0.5872761",
+ "inverse": true
},
{
- "bid": "0.2095",
- "ask": "0.2150",
- "open_interest": "615.0",
- "volume": "5599.48",
- "strike": "2600.0000",
+ "bid": "0.1515",
+ "ask": "0.154",
+ "open_interest": "1964",
+ "volume": "1646.38",
+ "strike": "2300",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5756262",
+ "iv_ask": "0.5837668",
+ "inverse": true
},
{
- "bid": "0.2265",
- "ask": "0.2320",
- "open_interest": "332.0",
- "volume": "162390.14",
- "strike": "2800.0000",
+ "bid": "0.135",
+ "ask": "0.1375",
+ "open_interest": "12377",
+ "volume": "35878.39",
+ "strike": "2400",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5732938",
+ "iv_ask": "0.5814046",
+ "inverse": true
},
{
- "bid": "0.2530",
- "ask": "0.2590",
- "open_interest": "1932.0",
- "volume": "6361.06",
- "strike": "2800.0000",
+ "bid": "0.12",
+ "ask": "0.1225",
+ "open_interest": "21353",
+ "volume": "0",
+ "strike": "2500",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5707483",
+ "iv_ask": "0.578903",
+ "inverse": true
},
{
- "bid": "0.2005",
- "ask": "0.2055",
- "open_interest": "605.0",
- "volume": "1179.5",
- "strike": "3000.0000",
+ "bid": "0.107",
+ "ask": "0.109",
+ "open_interest": "1458",
+ "volume": "0",
+ "strike": "2600",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5700075",
+ "iv_ask": "0.5766196",
+ "inverse": true
},
{
- "bid": "0.2915",
- "ask": "0.3105",
- "open_interest": "696.0",
- "volume": "765.67",
- "strike": "3000.0000",
+ "bid": "0.095",
+ "ask": "0.097",
+ "open_interest": "1566",
+ "volume": "35906.25",
+ "strike": "2700",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5681783",
+ "iv_ask": "0.5749294",
+ "inverse": true
},
{
- "bid": "0.1770",
- "ask": "0.1825",
- "open_interest": "673.0",
- "volume": "51633.27",
- "strike": "3200.0000",
+ "bid": "0.0845",
+ "ask": "0.0865",
+ "open_interest": "3779",
+ "volume": "0",
+ "strike": "2800",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5673101",
+ "iv_ask": "0.574246",
+ "inverse": true
},
{
- "bid": "0.3410",
- "ask": "0.3640",
- "open_interest": "209.0",
- "volume": "10301.53",
- "strike": "3200.0000",
+ "bid": "0.075",
+ "ask": "0.077",
+ "open_interest": "347",
+ "volume": "0",
+ "strike": "2900",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5660836",
+ "iv_ask": "0.5732523",
+ "inverse": true
},
{
- "bid": "0.1570",
- "ask": "0.1620",
- "open_interest": "751.0",
- "volume": "14029.57",
- "strike": "3400.0000",
+ "bid": "0.067",
+ "ask": "0.0685",
+ "open_interest": "3033",
+ "volume": "1308.65",
+ "strike": "3000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5667078",
+ "iv_ask": "0.5722898",
+ "inverse": true
},
{
- "bid": "0.3935",
- "ask": "0.4175",
- "open_interest": "34.0",
- "volume": "28891.61",
- "strike": "3400.0000",
+ "bid": "0.0595",
+ "ask": "0.061",
+ "open_interest": "1250",
+ "volume": "0",
+ "strike": "3100",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5659009",
+ "iv_ask": "0.5717257",
+ "inverse": true
},
{
- "bid": "0.1390",
- "ask": "0.1445",
- "open_interest": "687.0",
- "volume": "0.0",
- "strike": "3600.0000",
+ "bid": "0.053",
+ "ask": "0.0545",
+ "open_interest": "67659",
+ "volume": "5617.39",
+ "strike": "3200",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5658704",
+ "iv_ask": "0.571968",
+ "inverse": true
},
{
- "bid": "0.4480",
- "ask": "0.4735",
- "open_interest": "92.0",
- "volume": "29370.19",
- "strike": "3600.0000",
+ "bid": "0.0475",
+ "ask": "0.049",
+ "open_interest": "1315",
+ "volume": "0",
+ "strike": "3300",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.567085",
+ "iv_ask": "0.5734785",
+ "inverse": true
},
{
- "bid": "0.1235",
- "ask": "0.1290",
- "open_interest": "321.0",
- "volume": "0.0",
- "strike": "3800.0000",
+ "bid": "0.0425",
+ "ask": "0.044",
+ "open_interest": "11271",
+ "volume": "0",
+ "strike": "3400",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5678254",
+ "iv_ask": "0.5745518",
+ "inverse": true
},
{
- "bid": "0.5050",
- "ask": "0.5325",
- "open_interest": "36.0",
- "volume": "0.0",
- "strike": "3800.0000",
+ "bid": "0.038",
+ "ask": "0.0395",
+ "open_interest": "23299",
+ "volume": "0",
+ "strike": "3500",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5683342",
+ "iv_ask": "0.5754312",
+ "inverse": true
},
{
- "bid": "0.1120",
- "ask": "0.1140",
- "open_interest": "4003.0",
- "volume": "353734.29",
- "strike": "4000.0000",
+ "bid": "0.034",
+ "ask": "0.0355",
+ "open_interest": "1734",
+ "volume": "0",
+ "strike": "3600",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5688766",
+ "iv_ask": "0.5763805",
+ "inverse": true
},
{
- "bid": "0.5640",
- "ask": "0.5930",
- "open_interest": "226.0",
- "volume": "0.0",
- "strike": "4000.0000",
+ "bid": "0.0275",
+ "ask": "0.029",
+ "open_interest": "2264",
+ "volume": "0",
+ "strike": "3800",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5712907",
+ "iv_ask": "0.5796956",
+ "inverse": true
},
{
- "bid": "0.0990",
- "ask": "0.1035",
- "open_interest": "435.0",
- "volume": "65657.7",
- "strike": "4200.0000",
+ "bid": "0.0225",
+ "ask": "0.0235",
+ "open_interest": "16570",
+ "volume": "1008.95",
+ "strike": "4000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5747596",
+ "iv_ask": "0.5810737",
+ "inverse": true
},
{
- "bid": "0.6250",
- "ask": "0.6550",
- "open_interest": "60.0",
- "volume": "0.0",
- "strike": "4200.0000",
+ "bid": "0.018",
+ "ask": "0.0195",
+ "open_interest": "1747",
+ "volume": "0",
+ "strike": "4200",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5745246",
+ "iv_ask": "0.5852541",
+ "inverse": true
},
{
- "bid": "0.0885",
- "ask": "0.0930",
- "open_interest": "277.0",
- "volume": "58929.81",
- "strike": "4400.0000",
+ "bid": "0.015",
+ "ask": "0.016",
+ "open_interest": "1880",
+ "volume": "65.95",
+ "strike": "4400",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5791185",
+ "iv_ask": "0.587201",
+ "inverse": true
},
{
- "bid": "0.0840",
- "ask": "0.0885",
- "open_interest": "37.0",
- "volume": "7340.47",
- "strike": "4500.0000",
+ "bid": "0.0135",
+ "ask": "0.015",
+ "open_interest": "1487",
+ "volume": "59.57",
+ "strike": "4500",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.579414",
+ "iv_ask": "0.5922468",
+ "inverse": true
},
{
- "bid": "0.0795",
- "ask": "0.0840",
- "open_interest": "186.0",
- "volume": "0.0",
- "strike": "4600.0000",
+ "bid": "0.0125",
+ "ask": "0.0135",
+ "open_interest": "8781",
+ "volume": "171.74",
+ "strike": "4600",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5829142",
+ "iv_ask": "0.5920095",
+ "inverse": true
},
{
- "bid": "0.0720",
- "ask": "0.0760",
- "open_interest": "175.0",
- "volume": "0.0",
- "strike": "4800.0000",
+ "bid": "0.0105",
+ "ask": "0.0115",
+ "open_interest": "1974",
+ "volume": "48.02",
+ "strike": "4800",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5869198",
+ "iv_ask": "0.597131",
+ "inverse": true
},
{
- "bid": "0.8155",
- "ask": "0.8500",
- "open_interest": "25.0",
- "volume": "0.0",
- "strike": "4800.0000",
+ "bid": "0.0085",
+ "ask": "0.0095",
+ "open_interest": "3576",
+ "volume": "38.35",
+ "strike": "5000",
"maturity": "2026-12-25T08:00:00Z",
- "option_type": "put",
- "security_type": "option"
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5864419",
+ "iv_ask": "0.5981591",
+ "inverse": true
},
{
- "bid": "0.0650",
- "ask": "0.0690",
- "open_interest": "2453.0",
- "volume": "43834.3",
- "strike": "5000.0000",
+ "bid": "0.0075",
+ "ask": "0.0085",
+ "open_interest": "8537",
+ "volume": "17.02",
+ "strike": "5200",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5942999",
+ "iv_ask": "0.6071286",
+ "inverse": true
},
{
- "bid": "0.0590",
- "ask": "0.0625",
- "open_interest": "132.0",
- "volume": "0.0",
- "strike": "5200.0000",
+ "bid": "0.006",
+ "ask": "0.0065",
+ "open_interest": "1536",
+ "volume": "0",
+ "strike": "5500",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6011605",
+ "iv_ask": "0.6088364",
+ "inverse": true
},
{
- "bid": "0.0510",
- "ask": "0.0545",
- "open_interest": "906.0",
- "volume": "7477.65",
- "strike": "5500.0000",
+ "bid": "0.0041",
+ "ask": "0.0048",
+ "open_interest": "10719",
+ "volume": "0",
+ "strike": "6000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6091383",
+ "iv_ask": "0.623092",
+ "inverse": true
},
{
- "bid": "0.0405",
- "ask": "0.0440",
- "open_interest": "3130.0",
- "volume": "483.5",
- "strike": "6000.0000",
+ "bid": "0.0032",
+ "ask": "0.0036",
+ "open_interest": "1972",
+ "volume": "0",
+ "strike": "6500",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6254197",
+ "iv_ask": "0.6353199",
+ "inverse": true
},
{
- "bid": "0.0330",
- "ask": "0.0360",
- "open_interest": "677.0",
- "volume": "386.84",
- "strike": "6500.0000",
+ "bid": "0.0022",
+ "ask": "0.0027",
+ "open_interest": "2889",
+ "volume": "24.5",
+ "strike": "7000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6287991",
+ "iv_ask": "0.6448487",
+ "inverse": true
},
{
- "bid": "0.0270",
- "ask": "0.0300",
- "open_interest": "1606.0",
- "volume": "0.0",
- "strike": "7000.0000",
+ "bid": "0.0015",
+ "ask": "0.0018",
+ "open_interest": "2476",
+ "volume": "0",
+ "strike": "8000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6571531",
+ "iv_ask": "0.6706568",
+ "inverse": true
},
{
- "bid": "0.0185",
- "ask": "0.0210",
- "open_interest": "1134.0",
- "volume": "279.34",
- "strike": "8000.0000",
+ "bid": "0.001",
+ "ask": "0.0013",
+ "open_interest": "1916",
+ "volume": "0",
+ "strike": "9000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6763852",
+ "iv_ask": "0.6948657",
+ "inverse": true
},
{
- "bid": "0.0135",
- "ask": "0.0160",
- "open_interest": "1369.0",
- "volume": "18148.43",
- "strike": "9000.0000",
+ "bid": "0.0005",
+ "ask": "0.0007",
+ "open_interest": "1688",
+ "volume": "0",
+ "strike": "10000",
"maturity": "2026-12-25T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.6725556",
+ "iv_ask": "0.6935471",
+ "inverse": true
},
{
- "bid": "0.0100",
- "ask": "0.0120",
- "open_interest": "1205.0",
- "volume": "1085.31",
- "strike": "10000.0000",
- "maturity": "2026-12-25T08:00:00Z",
+ "bid": "2181.75",
+ "ask": "2182.75",
+ "open_interest": "8510750",
+ "volume": "568965",
+ "maturity": "2027-03-26T08:00:00Z",
+ "security_type": "forward"
+ },
+ {
+ "bid": "0.0245",
+ "ask": "0.0255",
+ "open_interest": "4438",
+ "volume": "52.52",
+ "strike": "1000",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.7138243",
+ "iv_ask": "0.7223943",
+ "inverse": true
+ },
+ {
+ "bid": "0.061",
+ "ask": "0.063",
+ "open_interest": "2206",
+ "volume": "1459.39",
+ "strike": "1400",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.646589",
+ "iv_ask": "0.655977",
+ "inverse": true
+ },
+ {
+ "bid": "0.0745",
+ "ask": "0.0765",
+ "open_interest": "1287",
+ "volume": "162.48",
+ "strike": "1500",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.636517",
+ "iv_ask": "0.6449409",
+ "inverse": true
+ },
+ {
+ "bid": "0.09",
+ "ask": "0.092",
+ "open_interest": "902",
+ "volume": "0",
+ "strike": "1600",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6285263",
+ "iv_ask": "0.6361975",
+ "inverse": true
+ },
+ {
+ "bid": "0.107",
+ "ask": "0.1095",
+ "open_interest": "1155",
+ "volume": "0",
+ "strike": "1700",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.620378",
+ "iv_ask": "0.6292343",
+ "inverse": true
+ },
+ {
+ "bid": "0.127",
+ "ask": "0.129",
+ "open_interest": "1279",
+ "volume": "0",
+ "strike": "1800",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6171413",
+ "iv_ask": "0.623768",
+ "inverse": true
+ },
+ {
+ "bid": "0.148",
+ "ask": "0.1505",
+ "open_interest": "698",
+ "volume": "0",
+ "strike": "1900",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6118249",
+ "iv_ask": "0.6196657",
+ "inverse": true
+ },
+ {
+ "bid": "0.1705",
+ "ask": "0.1735",
+ "open_interest": "973",
+ "volume": "0",
+ "strike": "2000",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6063969",
+ "iv_ask": "0.6153975",
+ "inverse": true
+ },
+ {
+ "bid": "0.195",
+ "ask": "0.1985",
+ "open_interest": "340",
+ "volume": "414.24",
+ "strike": "2100",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "put",
+ "security_type": "option",
+ "iv_bid": "0.6024715",
+ "iv_ask": "0.6126137",
+ "inverse": true
+ },
+ {
+ "bid": "0.2135",
+ "ask": "0.2165",
+ "open_interest": "1447",
+ "volume": "1845.09",
+ "strike": "2200",
+ "maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5961066",
+ "iv_ask": "0.6045711",
+ "inverse": true
},
{
- "bid": "0.0075",
- "ask": "0.0095",
- "open_interest": "346.0",
- "volume": "0.0",
- "strike": "11000.0000",
- "maturity": "2026-12-25T08:00:00Z",
+ "bid": "0.196",
+ "ask": "0.1985",
+ "open_interest": "167",
+ "volume": "0",
+ "strike": "2300",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5947617",
+ "iv_ask": "0.6016878",
+ "inverse": true
+ },
+ {
+ "bid": "0.1795",
+ "ask": "0.182",
+ "open_interest": "211",
+ "volume": "0",
+ "strike": "2400",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5924796",
+ "iv_ask": "0.5993279",
+ "inverse": true
+ },
+ {
+ "bid": "0.1645",
+ "ask": "0.167",
+ "open_interest": "457",
+ "volume": "49467.79",
+ "strike": "2500",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.590875",
+ "iv_ask": "0.5976893",
+ "inverse": true
+ },
+ {
+ "bid": "0.1505",
+ "ask": "0.153",
+ "open_interest": "804",
+ "volume": "0",
+ "strike": "2600",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.588801",
+ "iv_ask": "0.5956201",
+ "inverse": true
+ },
+ {
+ "bid": "0.138",
+ "ask": "0.1405",
+ "open_interest": "650",
+ "volume": "589.36",
+ "strike": "2700",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5878419",
+ "iv_ask": "0.5947001",
+ "inverse": true
+ },
+ {
+ "bid": "0.127",
+ "ask": "0.1285",
+ "open_interest": "448",
+ "volume": "275.55",
+ "strike": "2800",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5882395",
+ "iv_ask": "0.5923968",
+ "inverse": true
+ },
+ {
+ "bid": "0.1165",
+ "ask": "0.118",
+ "open_interest": "903",
+ "volume": "0",
+ "strike": "2900",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5874531",
+ "iv_ask": "0.5916702",
+ "inverse": true
+ },
+ {
+ "bid": "0.1065",
+ "ask": "0.109",
+ "open_interest": "608",
+ "volume": "11743.45",
+ "strike": "3000",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5856363",
+ "iv_ask": "0.5927907",
+ "inverse": true
+ },
+ {
+ "bid": "0.098",
+ "ask": "0.1",
+ "open_interest": "355",
+ "volume": "21056.11",
+ "strike": "3100",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5858469",
+ "iv_ask": "0.5916921",
+ "inverse": true
+ },
+ {
+ "bid": "0.09",
+ "ask": "0.092",
+ "open_interest": "299",
+ "volume": "0",
+ "strike": "3200",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5854157",
+ "iv_ask": "0.5914024",
+ "inverse": true
+ },
+ {
+ "bid": "0.083",
+ "ask": "0.085",
+ "open_interest": "406",
+ "volume": "0",
+ "strike": "3300",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5860171",
+ "iv_ask": "0.5921597",
+ "inverse": true
+ },
+ {
+ "bid": "0.0765",
+ "ask": "0.078",
+ "open_interest": "42",
+ "volume": "166.61",
+ "strike": "3400",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5863307",
+ "iv_ask": "0.5910724",
+ "inverse": true
+ },
+ {
+ "bid": "0.0705",
+ "ask": "0.072",
+ "open_interest": "408",
+ "volume": "1218.95",
+ "strike": "3500",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5864985",
+ "iv_ask": "0.5913863",
+ "inverse": true
+ },
+ {
+ "bid": "0.065",
+ "ask": "0.0665",
+ "open_interest": "786",
+ "volume": "140.59",
+ "strike": "3600",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5866652",
+ "iv_ask": "0.5917126",
+ "inverse": true
+ },
+ {
+ "bid": "0.06",
+ "ask": "0.062",
+ "open_interest": "490",
+ "volume": "130.06",
+ "strike": "3700",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5869811",
+ "iv_ask": "0.5939316",
+ "inverse": true
+ },
+ {
+ "bid": "0.0555",
+ "ask": "0.057",
+ "open_interest": "759",
+ "volume": "0",
+ "strike": "3800",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.587605",
+ "iv_ask": "0.5930073",
+ "inverse": true
+ },
+ {
+ "bid": "0.0475",
+ "ask": "0.049",
+ "open_interest": "1290",
+ "volume": "0",
+ "strike": "4000",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5885202",
+ "iv_ask": "0.5943306",
+ "inverse": true
+ },
+ {
+ "bid": "0.041",
+ "ask": "0.0425",
+ "open_interest": "1643",
+ "volume": "88.77",
+ "strike": "4200",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5904635",
+ "iv_ask": "0.5967217",
+ "inverse": true
+ },
+ {
+ "bid": "0.0355",
+ "ask": "0.0365",
+ "open_interest": "848",
+ "volume": "78.05",
+ "strike": "4400",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5923637",
+ "iv_ask": "0.5968813",
+ "inverse": true
+ },
+ {
+ "bid": "0.033",
+ "ask": "0.0345",
+ "open_interest": "1452",
+ "volume": "0",
+ "strike": "4500",
+ "maturity": "2027-03-26T08:00:00Z",
"option_type": "call",
- "security_type": "option"
+ "security_type": "option",
+ "iv_bid": "0.5929603",
+ "iv_ask": "0.599992",
+ "inverse": true
+ },
+ {
+ "bid": "0.0305",
+ "ask": "0.032",
+ "open_interest": "506",
+ "volume": "0",
+ "strike": "4600",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5925813",
+ "iv_ask": "0.5999234",
+ "inverse": true
+ },
+ {
+ "bid": "0.027",
+ "ask": "0.028",
+ "open_interest": "581",
+ "volume": "0",
+ "strike": "4800",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.5967907",
+ "iv_ask": "0.6020745",
+ "inverse": true
+ },
+ {
+ "bid": "0.0235",
+ "ask": "0.025",
+ "open_interest": "803",
+ "volume": "0",
+ "strike": "5000",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.598008",
+ "iv_ask": "0.6065738",
+ "inverse": true
+ },
+ {
+ "bid": "0.017",
+ "ask": "0.0185",
+ "open_interest": "1124",
+ "volume": "230.97",
+ "strike": "5500",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.6024288",
+ "iv_ask": "0.6128944",
+ "inverse": true
+ },
+ {
+ "bid": "0.0125",
+ "ask": "0.0135",
+ "open_interest": "1779",
+ "volume": "27.71",
+ "strike": "6000",
+ "maturity": "2027-03-26T08:00:00Z",
+ "option_type": "call",
+ "security_type": "option",
+ "iv_bid": "0.6065562",
+ "iv_ask": "0.6151545",
+ "inverse": true
}
]
}
\ No newline at end of file
diff --git a/docs/examples/index.md b/docs/examples/index.md
new file mode 100644
index 00000000..6e881bc7
--- /dev/null
+++ b/docs/examples/index.md
@@ -0,0 +1,32 @@
+# Interactive Examples
+
+Interactive notebooks for exploring quantflow tools and models.
+
+Each example is a [marimo](https://marimo.io) notebook served as a live application.
+You can run the code, adjust parameters, and see results update in real time.
+
+!!! warning "Work in progress"
+ These notebooks are not always stable and may fail to load or produce unexpected results.
+ We are actively working on improving their reliability.
+ If you have experience with marimo and would like to help, contributions are very welcome via [GitHub](https://github.com/quantmind/quantflow).
+
+## Stochastic Processes
+
+| Example | Description |
+|---|---|
+| [Gaussian Sampling](gaussian-sampling) | Sample the Gaussian Ornstein-Uhlenbeck (Vasicek) process for different mean-reversion speeds and path counts |
+| [Poisson Sampling](poisson-sampling) | Compare Monte Carlo simulation of the Poisson process against the analytical PDF |
+| [Double Exponential Sampling](double-exponential-sampling) | Explore the Asymmetric Laplace distribution with adjustable asymmetry parameter |
+
+## Time Series Analysis
+
+| Example | Description |
+|---|---|
+| [Hurst Exponent](hurst) | Estimate the Hurst exponent to classify a time series as trending, mean-reverting, or random |
+| [Supersmoother](supersmoother) | Apply the Supersmoother and EWMA filters to financial time series |
+
+## Volatility and Options
+
+| Example | Description |
+|---|---|
+| [Volatility Surface](volatility-surface) | Build and visualise an implied volatility surface from live Deribit ETH/USD options data |
diff --git a/docs/glossary.md b/docs/glossary.md
index 04880f3d..a848a0c0 100644
--- a/docs/glossary.md
+++ b/docs/glossary.md
@@ -43,6 +43,19 @@ of a real-valued random variable $x$ is the function given by
where ${\mathbb P}_x$ is the distrubution measure of $x$.
+## Discount Factor
+
+The discount factor $D\left(\tau\right)$ is the present value of one unit of currency paid at [time to maturity](#time-to-maturity-ttm) $\tau$.
+It is equal to the price of a zero-coupon bond maturing at $\tau$: a contract that pays exactly 1 at maturity with no intermediate cashflows.
+
+\begin{equation}
+ D\left(\tau\right) = e^{-r \tau}
+\end{equation}
+
+where $r$ is the continuously compounded risk-free rate.
+
+Under a zero interest rate assumption, $D\left(\tau\right) = 1\ \ \ \forall\ \tau$.
+
## Feller Condition
The Feller condition is a parameter constraint on a square-root diffusion process
@@ -71,6 +84,16 @@ condition holds. The
`feller_enforce` flag (default `True`) that imposes this as a hard inequality constraint
during optimisation.
+## Forwards
+
+The forward price $F$ of an asset at maturity $\tau$ is the price agreed upon today for delivery of the asset at time $\tau$. It is given by the ratio of two discount factors: one for the asset $D_a(\tau)$ and one for the quote $D_q(\tau)$.
+
+\begin{equation}
+F(\tau) = S \cdot \frac{D_a(\tau)}{D_q(\tau)}
+\end{equation}
+
+See [Forwards and Discount Factors](theory/forwards.md) for more details.
+
## Forward Space
Forward space is the unit-free convention in which option prices are
@@ -172,21 +195,26 @@ The [probability density function](https://en.wikipedia.org/wiki/Probability_den
## Put-Call Parity
Put-call parity is a no-arbitrage relationship between the prices of European call
-and put options with the same strike $K$ and maturity. Denoting forward-space prices
-$c = C/F$ and $p = P/F$ (see [Black Pricing](api/options/black.md)), the relationship
-reads:
+and put options with the same strike $K$ and time to maturity.
\begin{equation}
- c - p = 1 - \frac{K}{F} = 1 - e^k
+ C - P = D_q \left(F - K\right)
\end{equation}
-where $k$ is the [log-strike](#log-strike).
-In quoting currency terms, multiplying through by $F$:
+where $D_q$ is the [discount factor](#discount-factor) of the quoting asset (generally a currency)
+at maturity and $F$ is the forward price
+of the underlying asset at maturity.
+
+Denoting forward-space prices
+$c = C/(D_q\ F)$ and $p = P/(D_q\ F)$ (see [Black Pricing](api/options/black.md)), the relationship
+reads:
\begin{equation}
- C - P = F - K
+ c - p = 1 - \frac{K}{F} = 1 - e^k
\end{equation}
+where $k$ is the [log-strike](#log-strike).
+
## Time To Maturity (TTM)
Time to maturity is the time remaining until an option or forward contract expires,
diff --git a/docs/theory/forwards.md b/docs/theory/forwards.md
new file mode 100644
index 00000000..ff0558ad
--- /dev/null
+++ b/docs/theory/forwards.md
@@ -0,0 +1,68 @@
+# Forwards and Discount Factors
+
+## Discount Factors
+
+A [discount factor](../glossary.md#discount-factor) $D(\tau)$ is the present value of
+one unit of currency delivered at time $\tau$.
+
+In quantflow, discount factors are provided by a
+[YieldCurve][quantflow.rates.yield_curve.YieldCurve]. Different implementations capture
+different term structures: a flat zero-rate curve, a fitted
+[Nelson-Siegel][quantflow.rates.nelson_siegel.NelsonSiegel] curve, or any custom term
+structure.
+
+## Forward Price
+
+The forward price of an asset at maturity $\tau$ is defined under the assumption that
+two discount factors are available: one for the asset $D_a(\tau)$ and one for the
+quote $D_q(\tau)$.
+
+\begin{equation}
+F(\tau) = S \cdot \frac{D_a(\tau)}{D_q(\tau)}
+\end{equation}
+
+where $S$ is the current spot price.
+
+For an asset that pays no dividends and has no carry costs, the discount factor
+for the asset is constant and equal to one. In this case
+the forward price is simply given by the discount factor for the quote:
+
+\begin{equation}
+F(\tau) = \frac{S}{D_q(\tau)}
+\end{equation}
+
+When the quote is cash, the forward price is the spot price compounded at the risk-free rate,
+which means that forward prices are typically higher than the spot price.
+
+## Put-Call Parity
+
+The Put call parity is a fundamental relationship between the prices of European call and put options with the same strike and maturity.
+It states that the difference between the call price $C$ and the put price $P$ is equal to the discounted difference between the forward price $F$ and the strike price $K$:
+
+\begin{equation}
+C - P = S \cdot D_a - D_q \cdot K
+\end{equation}
+
+Dividing by the Spot price
+
+\begin{equation}
+\frac{C - P}{S} = D_a - \frac{D_q}{S} \cdot K
+\end{equation}
+
+This is linear in $K$, with slope $-D_q / S$ and intercept $D_a$.
+
+Fitting a linear regression across multiple strikes at the same maturity therefore
+identifies both discount factors simultaneously: $D_q$ from the slope and $D_a$ from
+the intercept.
+
+### Inverse Options
+
+For inverse options, prices are quoted in units of the underlying asset, which acts as
+the quote. The relevant discount factor is therefore $D_a$. Put-call parity becomes:
+
+\begin{equation}
+c - p = D_a \left(1 - \frac{K}{F}\right) = D_a - \frac{D_q}{S} \cdot K
+\end{equation}
+
+This is again linear in $K$, with intercept $D_a$ and slope $-D_q / S$, exactly the same as for regular options.
+The same regression therefore identifies both discount factors as before.
diff --git a/docs/theory/option_pricing.md b/docs/theory/option_pricing.md
index fb6884c0..30dfba04 100644
--- a/docs/theory/option_pricing.md
+++ b/docs/theory/option_pricing.md
@@ -1,24 +1,31 @@
# Option Pricing
-We use characteristic function inversion to price European call options on an underlying $S_t = S_0 e^{s_t}$, where $S_0$ is the spot price at time 0. We assume zero interest rates, so the forward equals the spot. The log-return $s_t = x_t - c_t$ is constructed from a driving process $x_t$ and a deterministic [convexity correction](convexity_correction.md) $c_t$ that enforces the martingale condition ${\mathbb E}[e^{s_t}] = 1$.
+We use characteristic function inversion to price European call options on an underlying $S_t = F_t e^{s_t}$, where $F_t$ is the forward price at time $t$.
+The log-return $s_t = x_t - c_t$ is constructed from a driving process $x_t$ and a deterministic [convexity correction](convexity_correction.md) $c_t$
+that enforces the martingale condition ${\mathbb E}[e^{s_t}] = 1$.
## Call Option
-The price $C$ of a call option with strike $K$ is defined as
+The price $C$ of a call option with expiry $\tau$ and strike $K$ is defined as
\begin{equation}
\begin{aligned}
-C &= S_0 c_k \\
-k &= \ln\frac{K}{S_0} \\
+C &= D_\tau F_\tau c_k \\
+k &= \ln\frac{K}{F_\tau} \\
c_k &= {\mathbb E}\left[\left(e^{s_t} - e^k\right)^+\right]
= \int_{-\infty}^\infty \left(e^s - e^k\right)^+ f_{s_t}(s)\, ds
\end{aligned}
\label{call-price}
\end{equation}
-$k$ is the [log-strike](../glossary.md#log-strike) and $f_{s_t}$ is the probability density function of $s_t$. The call price is the discounted expected payoff under the risk-neutral measure, which simplifies to the undiscounted expected payoff when interest rates are zero.
+$k$ is the [log-strike](../glossary.md#log-strike) with respect to the forward $F_\tau$ and $f_{s_t}$ is the probability density function of $s_t$.
+$D_\tau$ is the [discount factor](../glossary#discount-factor) to time $\tau$, which is 1 under a zero interest rate assumption.
-All three methods share this starting point. They all express $c_k$ via the characteristic function $\Phi_{s_t}$, but differ in how the integration contour is chosen, how the payoff is handled, and the discretisation strategy.
+## Fourier Inversion Methods
+
+The key insight is that while the density $f_{s_t}$ may not have a closed form, its [characteristic function](../glossary.md#characteristic-function) $\Phi_{s_t}$ is available analytically for a wide class of stochastic processes. The integral in $\eqref{call-price}$ can therefore be evaluated by inverting $\Phi_{s_t}$ numerically.
+
+Quantflow implements three Fourier inversion approaches: [Carr and Madan (1999)](../bibliography.md#carr_madan), [Lewis (2001)](../bibliography.md#lewis), and the [COS method](../bibliography.md#cos) (Fang and Oosterlee, 2008). All three share the same starting point and express $c_k$ via $\Phi_{s_t}$, but differ in how the integration contour is chosen, how the payoff is handled, and the discretisation strategy.
## Carr & Madan
diff --git a/docs/tutorials/heston_calibration.md b/docs/tutorials/heston_calibration.md
new file mode 100644
index 00000000..df3140c7
--- /dev/null
+++ b/docs/tutorials/heston_calibration.md
@@ -0,0 +1,152 @@
+# Heston Volatility Model
+
+## Calibrating the Heston Model
+
+[HestonCalibration][quantflow.options.calibration.heston.HestonCalibration] fits the
+five Heston parameters ($v_0$, $\theta$, $\kappa$, $\sigma$, $\rho$) to the implied
+volatility surface using a two-stage optimisation:
+
+1. **L-BFGS-B** minimises the scalar cost function (sum of squared weighted price
+ residuals) to reach a good basin of attraction.
+2. **Trust-region reflective** (`least_squares` with `method="trf"`) refines the
+ solution on the residual vector with tight tolerances and enforces parameter bounds.
+
+Residuals are computed as `weight * (model_call_price - mid_call_price)` where
+`mid_call_price` is the average of the bid and ask call prices.
+
+The weight is $\min(e^{w \cdot m^2}, w_\text{max})$ controlled by
+`moneyness_weight` (the coefficient $w$) and `max_cost_weight` (the cap
+$w_\text{max}$), with $m = \log(K/F)/\sqrt{T}$ the standardised moneyness.
+The quadratic exponent matches the gaussian shape of $1/\nu$ (inverse vega),
+so a positive `moneyness_weight` puts wing residuals on the same footing as
+ATM ones. The cap prevents a single deep-wing option from dominating the
+loss.
+
+A penalty for violating the Feller condition ($2\kappa\theta \geq \sigma^2$)
+is added during stage 1 to keep the variance process well-behaved.
+
+```python
+--8<-- "docs/examples/vol_surface_heston_calibration.py"
+```
+
+### Output
+
+--8<-- "docs/examples/output/vol_surface_heston_calibration.out"
+
+### Calibration Options
+
+The `moneyness_weight` parameter up-weights far-from-the-money options via
+$e^{w \cdot m^2}$ where $m = \log(K/F)/\sqrt{T}$ is the standardised
+moneyness. The result is capped at `max_cost_weight` (default 10) so a
+single deep-wing option cannot dominate the loss.
+
+### Plotting the Calibrated Smile
+
+Use [plot_maturities()][quantflow.options.calibration.base.VolModelCalibration.plot_maturities]
+to produce a Plotly figure overlaying market bid/ask implied vols against the model smile
+for all maturities at once:
+
+```python
+fig = calibration.plot_maturities(max_moneyness_ttm=1.5, support=101)
+fig.write_image("heston_calibrated_smile.png", width=1200)
+```
+
+The x axis is [moneyness](../glossary.md#moneyness).
+
+
+
+### Model Limitations at Short Maturities
+
+Inspecting the calibrated smiles across all maturities reveals a systematic pattern:
+the Heston model fits long-dated options reasonably well but struggles with short-term
+maturities, where the market smile is steeper than the model can reproduce.
+
+This is a fundamental structural limitation, not a numerical issue. The Heston model
+generates an implied volatility smile through two mechanisms: the correlation $\rho$
+between spot and variance (which creates skew) and the volatility-of-variance $\sigma$
+(which inflates the wings). Both effects accumulate diffusively over time. For a maturity
+$T$, the smile roughly scales as $\sigma \sqrt{T}$, so as $T \to 0$ the distribution
+collapses toward a Gaussian and the smile flattens.
+
+More precisely, the Heston characteristic function at short maturities satisfies:
+
+\begin{equation}
+\log \phi(u, T) \approx i u \mu T - \tfrac{1}{2} u^2 v_0 T + O(T^2)
+\end{equation}
+
+which is the characteristic function of a Gaussian with variance $v_0 T$. The higher
+cumulants that produce skew and excess kurtosis are all $O(T^2)$ or smaller, so they
+vanish faster than the Gaussian term as $T \to 0$.
+
+In practice this means the Heston model essentially reduces to Black-Scholes for
+near-expiry options. The market, however, exhibits pronounced short-term skew driven by
+jump risk and the market microstructure of short-dated hedging demand. A diffusion-only
+model cannot reproduce this behaviour regardless of how its parameters are tuned.
+
+The natural extension is to add a jump component to the dynamics, which contributes
+a term of order $O(T)$ to the cumulants and restores the short-term smile. This is
+the motivation for the Heston jump-diffusion model described in the next section.
+
+## Calibrating the Heston Jump-Diffusion Model
+
+[HestonJCalibration][quantflow.options.calibration.heston.HestonJCalibration] extends the
+Heston calibration with a compound Poisson jump component via the
+[HestonJ][quantflow.sp.heston.HestonJ] model. Jumps are drawn from a
+[DoubleExponential][quantflow.utils.distributions.DoubleExponential] distribution,
+which captures asymmetric jump behaviour common in equity and crypto markets.
+
+```python
+--8<-- "docs/examples/vol_surface_hestonj_calibration.py"
+```
+
+--8<-- "docs/examples/output/vol_surface_hestonj_calibration.out"
+
+### Plotting the Calibrated Smile
+
+```python
+fig = calibration.plot_maturities(max_moneyness_ttm=1.5, support=101)
+fig.write_image("hestonj_calibrated_smile.png", width=1200)
+```
+
+
+
+### Remaining Limitations at Short Maturities
+
+Adding jumps improves the short-term smile significantly compared to plain Heston, but
+the fit at the nearest maturities is still imperfect. Several structural reasons combine:
+
+**Jump parameters are global.** The compound Poisson component has a single intensity
+$\lambda$, jump variance, and asymmetry shared across all maturities. Increasing
+$\lambda$ to steepen the short-term smile simultaneously distorts the long-term smile,
+so the optimizer settles on a compromise.
+
+**Long maturities dominate the cost function.** They have more liquid strikes and
+therefore more data points. The optimizer minimizes total squared residuals across the
+whole surface, so short maturities — with fewer strikes — are outvoted and their fit is
+systematically sacrificed.
+
+**The jump distribution is not rich enough.** The short-term smile in crypto is driven
+by large, rare, asymmetric events. A [DoubleExponential][quantflow.utils.distributions.DoubleExponential]
+with fixed parameters cannot simultaneously match the wing curvature at short and long
+maturities.
+
+The natural next step is a rough volatility model (for example rough Heston with Hurst
+parameter $H < \tfrac{1}{2}$). Because the variance process has long memory and does not
+behave diffusively at short time scales, rough models produce a steep short-term skew
+without requiring jumps, and the skew decays as a power law $T^H$ rather than the
+$T^{1/2}$ rate of classical stochastic volatility.
+
+### Parameter Reference
+
+The calibrated parameter vector for the jump-diffusion model is:
+
+| Parameter | Description |
+|---|---|
+| `vol` | Initial volatility ($\sqrt{v_0}$) |
+| `theta` | Long-run volatility ($\sqrt{\theta}$) |
+| `kappa` | Mean reversion speed |
+| `sigma` | Volatility of variance |
+| `rho` | Spot-variance correlation |
+| `jump intensity` | Jump arrival rate (jumps per year) |
+| `jump variance` | Variance of a single jump |
+| `jump asymmetry` | Asymmetry of the jump distribution ([DoubleExponential][quantflow.utils.distributions.DoubleExponential]) |
diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md
index 0b129bb1..ff01f8e6 100644
--- a/docs/tutorials/index.md
+++ b/docs/tutorials/index.md
@@ -5,6 +5,7 @@ Step-by-step guides for common quantflow workflows.
| Tutorial | Description |
|---|---|
| [Option Pricing](option_pricing.md) | Price a European option with the Black-Scholes and Heston-jump-diffusion models |
-| [Volatility Surface](volatility_surface.md) | Fetch live option data, build an implied volatility surface, and calibrate Heston and jump-diffusion models |
+| [Volatility Surface](volatility_surface.md) | Fetch live option data, build an implied volatility surface, and extract forwards and discount factors from option prices |
+| [Heston Volatility Model](heston_calibration.md) | Calibrate the Heston and Heston-jump-diffusion models to an implied volatility surface |
| [SPX Volatility Surface](spx_vol_surface.md) | Build a 3D implied volatility surface for the S&P 500 from a Yahoo Finance option chain |
| [BNS Volatility Model](bns_calibration.md) | Calibrate the Barndorff-Nielsen and Shephard stochastic-volatility model to an implied volatility surface |
diff --git a/docs/tutorials/volatility_surface.md b/docs/tutorials/volatility_surface.md
index b9eb2c9d..2249623b 100644
--- a/docs/tutorials/volatility_surface.md
+++ b/docs/tutorials/volatility_surface.md
@@ -1,8 +1,8 @@
# Volatility Surface
-This tutorial covers the full workflow for building and calibrating an implied volatility
-surface: fetching option quotes from Deribit, inspecting the surface inputs, and
-calibrating the Heston and Heston-jump-diffusion models.
+This tutorial covers the full workflow for building an implied volatility surface:
+fetching option quotes from Deribit, extracting implied forwards and discount factors
+from option prices, and inspecting the surface inputs.
## Fetching Data from Deribit
@@ -98,153 +98,34 @@ inputs = surface.inputs(converged=True) # VolSurface -> VolSurfaceInputs
surface2 = surface_from_inputs(inputs) # VolSurfaceInputs -> VolSurface
```
-## Calibrating the Heston Model
-
-[HestonCalibration][quantflow.options.calibration.heston.HestonCalibration] fits the
-five Heston parameters ($v_0$, $\theta$, $\kappa$, $\sigma$, $\rho$) to the implied
-volatility surface using a two-stage optimisation:
-
-1. **L-BFGS-B** minimises the scalar cost function (sum of squared weighted price
- residuals) to reach a good basin of attraction.
-2. **Trust-region reflective** (`least_squares` with `method="trf"`) refines the
- solution on the residual vector with tight tolerances and enforces parameter bounds.
-
-Residuals are computed as `weight * (model_call_price - mid_call_price)` where
-`mid_call_price` is the average of the bid and ask call prices.
-
-The weight is $\min(e^{w \cdot m^2}, w_\text{max})$ controlled by
-`moneyness_weight` (the coefficient $w$) and `max_cost_weight` (the cap
-$w_\text{max}$), with $m = \log(K/F)/\sqrt{T}$ the standardised moneyness.
-The quadratic exponent matches the gaussian shape of $1/\nu$ (inverse vega),
-so a positive `moneyness_weight` puts wing residuals on the same footing as
-ATM ones. The cap prevents a single deep-wing option from dominating the
-loss.
-
-A penalty for violating the Feller condition ($2\kappa\theta \geq \sigma^2$)
-is added during stage 1 to keep the variance process well-behaved.
-
-```python
---8<-- "docs/examples/vol_surface_heston_calibration.py"
-```
-
-### Output
-
---8<-- "docs/examples/output/vol_surface_heston_calibration.out"
-
-### Calibration Options
-
-The `moneyness_weight` parameter up-weights far-from-the-money options via
-$e^{w \cdot m^2}$ where $m = \log(K/F)/\sqrt{T}$ is the standardised
-moneyness. The result is capped at `max_cost_weight` (default 10) so a
-single deep-wing option cannot dominate the loss.
-
-### Plotting the Calibrated Smile
-
-Use [plot_maturities()][quantflow.options.calibration.base.VolModelCalibration.plot_maturities]
-to produce a Plotly figure overlaying market bid/ask implied vols against the model smile
-for all maturities at once:
-
-```python
-fig = calibration.plot_maturities(max_moneyness_ttm=1.5, support=101)
-fig.write_image("heston_calibrated_smile.png", width=1200)
-```
-
-The x axis is [moneyness](../glossary.md#moneyness).
-
-
-
-### Model Limitations at Short Maturities
-
-Inspecting the calibrated smiles across all maturities reveals a systematic pattern:
-the Heston model fits long-dated options reasonably well but struggles with short-term
-maturities, where the market smile is steeper than the model can reproduce.
-
-This is a fundamental structural limitation, not a numerical issue. The Heston model
-generates an implied volatility smile through two mechanisms: the correlation $\rho$
-between spot and variance (which creates skew) and the volatility-of-variance $\sigma$
-(which inflates the wings). Both effects accumulate diffusively over time. For a maturity
-$T$, the smile roughly scales as $\sigma \sqrt{T}$, so as $T \to 0$ the distribution
-collapses toward a Gaussian and the smile flattens.
-
-More precisely, the Heston characteristic function at short maturities satisfies:
-
-\begin{equation}
-\log \phi(u, T) \approx i u \mu T - \tfrac{1}{2} u^2 v_0 T + O(T^2)
-\end{equation}
-
-which is the characteristic function of a Gaussian with variance $v_0 T$. The higher
-cumulants that produce skew and excess kurtosis are all $O(T^2)$ or smaller, so they
-vanish faster than the Gaussian term as $T \to 0$.
-
-In practice this means the Heston model essentially reduces to Black-Scholes for
-near-expiry options. The market, however, exhibits pronounced short-term skew driven by
-jump risk and the market microstructure of short-dated hedging demand. A diffusion-only
-model cannot reproduce this behaviour regardless of how its parameters are tuned.
-
-The natural extension is to add a jump component to the dynamics, which contributes
-a term of order $O(T)$ to the cumulants and restores the short-term smile. This is
-the motivation for the Heston jump-diffusion model described in the next section.
-
-## Calibrating the Heston Jump-Diffusion Model
-
-[HestonJCalibration][quantflow.options.calibration.heston.HestonJCalibration] extends the
-Heston calibration with a compound Poisson jump component via the
-[HestonJ][quantflow.sp.heston.HestonJ] model. Jumps are drawn from a
-[DoubleExponential][quantflow.utils.distributions.DoubleExponential] distribution,
-which captures asymmetric jump behaviour common in equity and crypto markets.
-
-```python
---8<-- "docs/examples/vol_surface_hestonj_calibration.py"
-```
-
---8<-- "docs/examples/output/vol_surface_hestonj_calibration.out"
-
-### Plotting the Calibrated Smile
-
-```python
-fig = calibration.plot_maturities(max_moneyness_ttm=1.5, support=101)
-fig.write_image("hestonj_calibrated_smile.png", width=1200)
-```
-
-
-
-### Remaining Limitations at Short Maturities
-
-Adding jumps improves the short-term smile significantly compared to plain Heston, but
-the fit at the nearest maturities is still imperfect. Several structural reasons combine:
-
-**Jump parameters are global.** The compound Poisson component has a single intensity
-$\lambda$, jump variance, and asymmetry shared across all maturities. Increasing
-$\lambda$ to steepen the short-term smile simultaneously distorts the long-term smile,
-so the optimizer settles on a compromise.
-
-**Long maturities dominate the cost function.** They have more liquid strikes and
-therefore more data points. The optimizer minimizes total squared residuals across the
-whole surface, so short maturities — with fewer strikes — are outvoted and their fit is
-systematically sacrificed.
-
-**The jump distribution is not rich enough.** The short-term smile in crypto is driven
-by large, rare, asymmetric events. A [DoubleExponential][quantflow.utils.distributions.DoubleExponential]
-with fixed parameters cannot simultaneously match the wing curvature at short and long
-maturities.
-
-The natural next step is a rough volatility model (for example rough Heston with Hurst
-parameter $H < \tfrac{1}{2}$). Because the variance process has long memory and does not
-behave diffusively at short time scales, rough models produce a steep short-term skew
-without requiring jumps, and the skew decays as a power law $T^H$ rather than the
-$T^{1/2}$ rate of classical stochastic volatility.
-
-### Parameter Reference
-
-The calibrated parameter vector for the jump-diffusion model is:
-
-| Parameter | Description |
-|---|---|
-| `vol` | Initial volatility ($\sqrt{v_0}$) |
-| `theta` | Long-run volatility ($\sqrt{\theta}$) |
-| `kappa` | Mean reversion speed |
-| `sigma` | Volatility of variance |
-| `rho` | Spot-variance correlation |
-| `jump intensity` | Jump arrival rate (jumps per year) |
-| `jump variance` | Variance of a single jump |
-| `jump asymmetry` | Asymmetry of the jump distribution ([DoubleExponential][quantflow.utils.distributions.DoubleExponential]) |
+## Extracting Forwards and Discount Factors
+
+Pricing an option requires two market inputs beyond the option price itself: the forward
+price $F$ of the underlying at expiry, and the discount factor $D$ for that maturity.
+
+In liquid markets these quantities are directly observable. Futures and forward contracts
+give $F$ outright, and interest rate swaps or government bond strips give $D$. In many
+option markets, however, neither is quoted directly. Crypto options on Deribit are a
+clear example: there is no liquid term structure of interest rates and the forward for
+each expiry must be inferred from the options themselves.
+
+Even when forwards are available, the discount factor used to value options may differ
+from the rate implied by the forward-spot basis. For equity options the carry includes
+dividends and repo costs that are not captured by a simple interest rate curve. For
+crypto inverse options the discount factor reflects funding in the underlying asset
+rather than in dollars.
+
+For these reasons, quantflow can extract $D_q$ and $D_a$ directly from the market prices
+of options using put-call parity. The
+[calibrate_curves][quantflow.options.surface.GenericVolSurfaceLoader.calibrate_curves]
+method supports three modes:
+
+- **Both curves**: pass a [YieldCurve][quantflow.rates.yield_curve.YieldCurve] type for
+ both `quote_curve` and `asset_curve`. A single OLS regression per maturity identifies
+ $D_q$ and $D_a$ simultaneously from the slope and intercept.
+- **Asset curve only**: pass a type for `asset_curve` and leave `quote_curve` as `None`.
+ The existing `quote_curve` on the loader is treated as known and $D_a$ is computed
+ analytically from each put-call pair using the known $D_q$.
+- **Quote curve only**: pass a type for `quote_curve` and leave `asset_curve` as `None`.
+ The same simultaneous OLS is run but only the quote discount factors are used to fit
+ the curve.
diff --git a/mkdocs.yml b/mkdocs.yml
index 564efbef..815743a3 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -74,6 +74,7 @@ nav:
- Black-Scholes: api/options/black.md
- Calibration: api/options/calibration.md
- Deep IV Factor Model: api/options/divfm.md
+ - Put-Call Parity: api/options/parity.md
- Pricer: api/options/pricer.md
- SVI Smile: api/options/svi.md
- Volatility Surface: api/options/vol_surface.md
@@ -99,6 +100,8 @@ nav:
- Rates:
- api/rates/index.md
- Interest Rate: api/rates/interest_rate.md
+ - Nelson Siegel Curve: api/rates/nelson_siegel.md
+ - Options Discounting: api/rates/options.md
- Yield Curve: api/rates/yield_curve.md
- Utilities:
- api/utils/index.md
@@ -111,6 +114,7 @@ nav:
- tutorials/index.md
- BNS Volatility Model: tutorials/bns_calibration.md
- CIR Process: tutorials/cir.md
+ - Heston Volatility Model: tutorials/heston_calibration.md
- Option Pricing: tutorials/option_pricing.md
- Pricing Method Comparison: tutorials/pricing_method_comparison.md
- SPX Volatility Surface: tutorials/spx_vol_surface.md
@@ -119,22 +123,18 @@ nav:
- theory/index.md
- Characteristic Function: theory/characteristic.md
- Convexity Correction: theory/convexity_correction.md
+ - Forwards and Discount Factors: theory/forwards.md
- Inversion: theory/inversion.md
- Lévy Process: theory/levy.md
- Option Pricing: theory/option_pricing.md
- - Examples:
- - Gaussian Sampling: examples/gaussian-sampling
- - Poisson Sampling: examples/poisson-sampling
- - Double Exponential Sampling: examples/double-exponential-sampling
- - Hurst: examples/hurst
- - Supersmoother: examples/supersmoother
- - Volatility Surface: examples/volatility-surface
+ - Live Examples: https://quantflow.quantmind.com/examples/
- MCP Server: mcp.md
- Glossary: glossary.md
- Contributing: contributing.md
- Bibliography: bibliography.md
- Release Notes: release-notes.md
markdown_extensions:
+ - admonition
- attr_list
- tables
- pymdownx.arithmatex:
diff --git a/app/heston_divfm_fit.py b/notebooks/heston_divfm_fit.py
similarity index 100%
rename from app/heston_divfm_fit.py
rename to notebooks/heston_divfm_fit.py
diff --git a/pyproject.toml b/pyproject.toml
index 3ad9c49b..029baf22 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -58,7 +58,6 @@ book = [
"altair>=6.0.0",
"autodocsumm>=0.2.14",
"duckdb>=1.4.4",
- "fastapi>=0.129.0",
"marimo>=0.19.7",
"plotly>=6.2.0",
"sympy>=1.12",
@@ -75,6 +74,7 @@ dev = [
"types-python-dateutil>=2.9.0.20251115",
]
docs = [
+ "fastapi>=0.129.0",
"griffe-pydantic>=1.1.0",
"griffe-typingdoc>=0.2.7",
"kaleido>=1.2.0",
@@ -122,8 +122,13 @@ exclude_also = [
[tool.isort]
profile = "black"
+skip_glob = [ "app/frontend/*" ]
+
+[tool.black]
+extend-exclude = "/app/frontend/"
[tool.ruff]
+exclude = [ "app/frontend" ]
lint.select = [ "E", "F" ]
line-length = 88
@@ -134,7 +139,9 @@ path = "quantflow/__init__.py"
# strict = true
disallow_untyped_calls = true
disallow_untyped_defs = true
+exclude = [ "^app/frontend/" ]
warn_no_return = true
+disable_error_code = [ "prop-decorator" ]
[[tool.mypy.overrides]]
module = [
@@ -145,6 +152,7 @@ module = [
"pandas.*",
"plotly.*",
"scipy.*",
+ "statsmodels.*",
]
ignore_missing_imports = true
disallow_untyped_defs = false
diff --git a/quantflow/data/deribit.py b/quantflow/data/deribit.py
index 40f98c5e..b358797b 100644
--- a/quantflow/data/deribit.py
+++ b/quantflow/data/deribit.py
@@ -14,6 +14,8 @@
from quantflow.options.inputs import DefaultVolSecurity, OptionType
from quantflow.options.surface import VolSurfaceLoader
+from quantflow.rates.yield_curve import NoDiscount
+from quantflow.utils.dates import utcnow
from quantflow.utils.numbers import (
Number,
round_to_step,
@@ -125,6 +127,10 @@ async def volatility_surface_loader(
self,
currency: Annotated[str, Doc("Currency")],
*,
+ ref_date: Annotated[
+ datetime | None,
+ Doc("Reference date for the yield curves; defaults to now"),
+ ] = None,
inverse: Annotated[
bool,
Doc(
@@ -139,16 +145,16 @@ async def volatility_surface_loader(
exclude_volume: Annotated[
Number | None, Doc("Exclude options with volume below this threshold")
] = None,
- use_perp: Annotated[
- bool, Doc("Whether to use perpetual as futures proxies")
- ] = False,
) -> VolSurfaceLoader:
"""Create a [VolSurfaceLoader][quantflow.options.surface.VolSurfaceLoader]
for a given crypto-currency"""
+ ref = ref_date or utcnow()
loader = VolSurfaceLoader(
asset=currency,
exclude_open_interest=to_decimal_or_none(exclude_open_interest),
exclude_volume=to_decimal_or_none(exclude_volume),
+ quote_curve=NoDiscount(ref_date=ref),
+ asset_curve=NoDiscount(ref_date=ref),
)
if inverse:
futures = await self.get_book_summary_by_currency(
@@ -168,24 +174,9 @@ async def volatility_surface_loader(
instruments = await self.get_instruments(currency="usdc", base=currency)
instrument_map = {i["instrument_name"]: i for i in instruments}
min_tick_size = Decimal("inf")
- perp_bid_ask: tuple[Any, Any] | None = None
- for entry in futures:
- name = entry["instrument_name"]
- if (meta := instrument_map.get(name)) is None:
- continue
- if (
- meta["settlement_period"] == "perpetual"
- and (bid_ := entry["bid_price"])
- and (ask_ := entry["ask_price"])
- ):
- perp_bid_ask = (bid_, ask_)
- break
-
for entry in futures:
bid_ = entry["bid_price"]
ask_ = entry["ask_price"]
- if not (bid_ and ask_) and use_perp and perp_bid_ask is not None:
- bid_, ask_ = perp_bid_ask
if bid_ and ask_:
name = entry["instrument_name"]
if (meta := instrument_map.get(name)) is None:
diff --git a/quantflow/data/yahoo.py b/quantflow/data/yahoo.py
index 302d9a04..adf50e3f 100644
--- a/quantflow/data/yahoo.py
+++ b/quantflow/data/yahoo.py
@@ -3,7 +3,8 @@
import gzip
import json
from dataclasses import dataclass, field
-from datetime import timezone
+from datetime import date, datetime, timezone
+from enum import StrEnum
from pathlib import Path
import pandas as pd
@@ -12,6 +13,8 @@
from quantflow.options.inputs import DefaultVolSecurity, OptionType
from quantflow.options.surface import VolSurfaceLoader
+from quantflow.rates.yield_curve import NoDiscount
+from quantflow.utils.dates import as_utc, utcnow
from quantflow.utils.numbers import to_decimal
@@ -19,13 +22,22 @@
class Yahoo(HttpxClient):
"""Yahoo Finance API client
- Minimal client for fetching option chains used to build volatility surfaces.
+ Minimal client for fetching historical prices and option chains.
- ## Example
+ ## Examples
+
+ Fetch daily prices for a symbol:
```python
from quantflow.data.yahoo import Yahoo
+ async with Yahoo() as yahoo:
+ df = await yahoo.prices("AAPL", range="1y")
+ ```
+
+ Build a volatility surface from the option chain:
+
+ ```python
async with Yahoo() as yahoo:
loader = await yahoo.volatility_surface_loader("AAPL")
surface = loader.surface()
@@ -47,6 +59,21 @@ class Yahoo(HttpxClient):
)
_crumb: str | None = None
+ class freq(StrEnum):
+ """Yahoo Finance chart intervals"""
+
+ one_min = "1m"
+ two_min = "2m"
+ five_min = "5m"
+ fifteen_min = "15m"
+ thirty_min = "30m"
+ one_hour = "1h"
+ one_day = "1d"
+ five_day = "5d"
+ one_week = "1wk"
+ one_month = "1mo"
+ three_month = "3mo"
+
async def option_chain(
self,
symbol: Annotated[str, Doc("Underlying ticker symbol")],
@@ -60,6 +87,10 @@ async def volatility_surface_loader(
self,
symbol: Annotated[str, Doc("Underlying ticker symbol")],
*,
+ ref_date: Annotated[
+ datetime | None,
+ Doc("Reference date for the yield curves; defaults to now"),
+ ] = None,
exclude_volume: Annotated[
int | None, Doc("Drop contracts with volume at or below this threshold")
] = None,
@@ -73,6 +104,7 @@ async def volatility_surface_loader(
[loader_from_chain][quantflow.data.yahoo.Yahoo.loader_from_chain]."""
return self.loader_from_chain(
await self.option_chain(symbol),
+ ref_date=ref_date,
exclude_volume=exclude_volume,
exclude_open_interest=exclude_open_interest,
)
@@ -82,6 +114,10 @@ def loader_from_chain(
cls,
chain: Annotated[dict, Doc("Yahoo option chain payload")],
*,
+ ref_date: Annotated[
+ datetime | None,
+ Doc("Reference date for the yield curves; defaults to now"),
+ ] = None,
exclude_volume: Annotated[
int | None, Doc("Drop contracts with volume at or below this threshold")
] = None,
@@ -98,12 +134,15 @@ def loader_from_chain(
by Yahoo, so they are recovered from put-call parity by the loader.
"""
symbol = chain.get("underlyingSymbol", "")
+ ref = ref_date or utcnow()
loader = VolSurfaceLoader(
asset=symbol,
exclude_volume=to_decimal(exclude_volume) if exclude_volume else None,
exclude_open_interest=(
to_decimal(exclude_open_interest) if exclude_open_interest else None
),
+ quote_curve=NoDiscount(ref_date=ref),
+ asset_curve=NoDiscount(ref_date=ref),
)
quote = chain.get("quote") or {}
bid = quote.get("bid") or quote.get("regularMarketPrice")
@@ -142,6 +181,60 @@ def loader_from_chain(
)
return loader
+ async def prices(
+ self,
+ symbol: Annotated[str, Doc("Ticker symbol")],
+ *,
+ interval: Annotated[
+ str | freq, Doc("Bar interval — use Yahoo.freq members or a raw string")
+ ] = freq.one_day,
+ from_date: Annotated[date | None, Doc("Start date (inclusive)")] = None,
+ to_date: Annotated[date | None, Doc("End date (inclusive)")] = None,
+ range: Annotated[
+ str | None,
+ Doc(
+ "Shorthand period when dates are omitted: '1mo', '3mo', '6mo', "
+ "'1y', '2y', '5y', 'ytd', 'max', etc."
+ ),
+ ] = None,
+ ) -> pd.DataFrame:
+ """Historical OHLCV prices for `symbol`.
+
+ Returns a DataFrame with columns `timestamp`, `open`, `high`, `low`,
+ `close`, `volume`, and `adj_close` (when available).
+
+ Pass `from_date` / `to_date` for a specific window, or `range` for a
+ shorthand period. When neither is given Yahoo defaults to one month.
+ """
+ params: dict = {"interval": str(interval)}
+ if from_date:
+ params["period1"] = int(as_utc(from_date).timestamp())
+ if to_date:
+ params["period2"] = int(as_utc(to_date).timestamp())
+ if range and not from_date and not to_date:
+ params["range"] = range
+ data = await self.get(
+ f"https://query2.finance.yahoo.com/v8/finance/chart/{symbol}",
+ params=params,
+ )
+ result = data["chart"]["result"][0]
+ timestamps = result.get("timestamps") or result.get("timestamp", [])
+ quote = result["indicators"]["quote"][0]
+ adj = result["indicators"].get("adjclose", [{}])[0]
+ df = pd.DataFrame(
+ {
+ "timestamp": pd.to_datetime(timestamps, unit="s", utc=True),
+ "open": quote.get("open"),
+ "high": quote.get("high"),
+ "low": quote.get("low"),
+ "close": quote.get("close"),
+ "volume": quote.get("volume"),
+ }
+ )
+ if "adjclose" in adj:
+ df["adj_close"] = adj["adjclose"]
+ return df
+
async def save_fixture(
self,
symbol: Annotated[str, Doc("Underlying ticker symbol")],
diff --git a/quantflow/options/bs.py b/quantflow/options/bs.py
index cf2df1c4..363a741f 100644
--- a/quantflow/options/bs.py
+++ b/quantflow/options/bs.py
@@ -165,13 +165,13 @@ def black_price(
),
],
) -> FloatArray:
- r"""Calculate the Black call/put option prices in forward terms
+ r"""Calculate the undiscounted Black call/put option prices in forward terms
from the following params
$$
\begin{align}
- c &= \frac{C}{F} = N(d1) - e^k N(d2) \\
- p &= \frac{P}{F} = -N(-d1) + e^k N(-d2) \\
+ c &= \frac{C}{D_\tau F_\tau} = N(d1) - e^k N(d2) \\
+ p &= \frac{P}{D_\tau F_\tau} = -N(-d1) + e^k N(-d2) \\
d1 &= \frac{-k + \frac{\sigma^2 t}{2}}{\sigma \sqrt{t}} \\
d2 &= d1 - \sigma \sqrt{t}
\end{align}
@@ -180,7 +180,8 @@ def black_price(
The results are option prices divided by the forward price also known as
option prices in forward terms. These are non-dimensional prices
that can be easily converted to actual option prices by multiplying with the
- forward price of the underlying asset.
+ forward price of the underlying asset at time to maturity $\tau$
+ and a suitable discount factor if interest rates are non-zero.
"""
sig2 = sigma * sigma * ttm
sig = np.sqrt(sig2)
diff --git a/quantflow/options/inputs.py b/quantflow/options/inputs.py
index 9c4bb913..fbaf2da4 100644
--- a/quantflow/options/inputs.py
+++ b/quantflow/options/inputs.py
@@ -6,6 +6,7 @@
from pydantic import BaseModel, Field
+from quantflow.rates import AnyYieldCurve
from quantflow.utils.numbers import ZERO, DecimalNumber
P = TypeVar("P")
@@ -44,11 +45,14 @@ class VolSecurityType(enum.StrEnum):
class VolSurfaceSecurity(BaseModel):
+ """Base class for Volatility Surface Securities"""
+
def vol_surface_type(self) -> VolSecurityType:
raise NotImplementedError("vol_surface_type must be implemented by subclasses")
@classmethod
def forward(cls) -> Self:
+ """Create a forward security for the volatility surface"""
raise NotImplementedError("forward_input must be implemented by subclasses")
@@ -141,7 +145,8 @@ class VolSurfaceInputs(BaseModel):
"""Class representing the inputs for a volatility surface"""
asset: str = Field(description="Underlying asset of the volatility surface")
- ref_date: datetime = Field(description="Reference date for the volatility surface")
+ asset_curve: AnyYieldCurve = Field(description="Asset yield curve")
+ quote_curve: AnyYieldCurve = Field(description="Quote yield curve")
inputs: list[ForwardInput | SpotInput | OptionInput] = Field(
description="List of inputs for the volatility surface"
)
diff --git a/quantflow/options/parity.py b/quantflow/options/parity.py
new file mode 100644
index 00000000..ebdad7ee
--- /dev/null
+++ b/quantflow/options/parity.py
@@ -0,0 +1,152 @@
+from __future__ import annotations
+
+from decimal import Decimal
+from typing import Any, Self
+
+import numpy as np
+from pydantic import BaseModel, Field
+from scipy.optimize import lsq_linear
+
+from quantflow.utils.numbers import ZERO, Number, to_decimal
+from quantflow.utils.price import Price
+from quantflow.utils.types import FloatArray
+
+
+class DiscountPair(BaseModel, frozen=True):
+ asset_discount: float = Field(
+ description="Discount factor for the underlying asset"
+ )
+ quote_discount: float = Field(description="Discount factor for the option quote")
+
+
+class PutCallParity(BaseModel, frozen=True):
+ """A matched put-call parity at a single strike,
+ used for discount curve calibration."""
+
+ strike: Decimal = Field(description="Strike price")
+ call: Price = Field(description="Call option bid/ask prices")
+ put: Price = Field(description="Put option bid/ask prices")
+ inverse: bool = Field(default=False, description="Whether the option is inverse")
+
+ @property
+ def bid(self) -> Decimal:
+ """Lower bound of the call-put price difference"""
+ return self.call.bid - self.put.ask
+
+ @property
+ def ask(self) -> Decimal:
+ """Upper bound of the call-put price difference"""
+ return self.call.ask - self.put.bid
+
+ @property
+ def mid(self) -> Decimal:
+ """Midpoint of the call-put price difference"""
+ return (self.bid + self.ask) / 2
+
+ @property
+ def spread(self) -> Decimal:
+ """Bid-ask spread of the call-put price difference"""
+ return self.ask - self.bid
+
+
+class PutCallParities(BaseModel, frozen=True):
+ """A collection of put-call parities for a given maturity"""
+
+ parities: list[PutCallParity] = Field(description="List of put-call parities")
+ spot: Decimal = Field(ge=ZERO, description="Spot price of the underlying asset")
+ ttm: Decimal = Field(gt=ZERO, description="Time to maturity in years")
+ inverse: bool = Field(default=False, description="Whether the options are inverse")
+
+ @classmethod
+ def from_parities(
+ cls, parities: list[PutCallParity], spot: Number, ttm: Number
+ ) -> Self:
+ inverse = any(p.inverse for p in parities)
+ return cls(
+ parities=parities,
+ spot=to_decimal(spot),
+ ttm=to_decimal(ttm),
+ inverse=inverse,
+ )
+
+ def regressand(self) -> FloatArray:
+ """Calculate the regressand for put-call parity regression.
+
+ For direct options, the regressand is (C - P) / S, while for inverse
+ options it is simply c - p.
+ """
+ scale = self.spot if not self.inverse else Decimal(1)
+ return np.asarray([float(p.mid / scale) for p in self.parities])
+
+ def regressor(self) -> FloatArray:
+ """Calculate the regressor for put-call parity regression,
+ which is the strike price divided by the spot price.
+ """
+ return np.asarray([float(p.strike / self.spot) for p in self.parities])
+
+ def fit_discounts(
+ self,
+ dq: float | None = None,
+ da: float | None = None,
+ min_rate_q: float = 0.0,
+ min_rate_a: float = 0.0,
+ ) -> DiscountPair | None:
+ """Return the fitted discount factors, or None if the result is invalid.
+
+ Both direct and inverse options satisfy the same normalized equation
+ y = Da - (Dq/S) * K, where y = mid/S for direct and y = mid for inverse.
+
+ When both known values are None a full OLS is run via constrained least squares.
+ When one is provided the other is solved analytically as the mean over pairs.
+ Discount factors are bounded by D <= exp(-min_rate * ttm), so min_rate=0
+ enforces D <= 1 (non-negative rates).
+ """
+ if not self.parities:
+ return None
+ ys = self.regressand()
+ xs = self.regressor()
+ ttm = float(self.ttm)
+ max_dq = float(np.exp(-min_rate_q * ttm))
+ max_da = float(np.exp(-min_rate_a * ttm))
+ if dq is not None:
+ if da is not None:
+ return DiscountPair(asset_discount=da, quote_discount=dq)
+ da = float(np.mean(ys + dq * xs))
+ elif da is not None:
+ dq = float(np.mean((da - ys) / xs))
+ else:
+ A = np.column_stack([np.ones(len(xs)), -xs])
+ result = lsq_linear(A, ys, bounds=([0, 0], [max_da, max_dq]))
+ da, dq = float(result.x[0]), float(result.x[1])
+ if not (0 < dq <= max_dq and 0 < da <= max_da):
+ return None
+ return DiscountPair(asset_discount=da, quote_discount=dq)
+
+ def plot(
+ self,
+ dq: float | None = None,
+ da: float | None = None,
+ min_rate_q: float = 0.0,
+ min_rate_a: float = 0.0,
+ ) -> Any:
+ """Plot the normalized put-call parity data and the fitted regression line."""
+ from quantflow.utils.plot import check_plotly
+
+ check_plotly()
+ import plotly.graph_objects as go
+
+ xs = self.regressor()
+ ys = self.regressand()
+ discounts = self.fit_discounts(
+ dq=dq, da=da, min_rate_q=min_rate_q, min_rate_a=min_rate_a
+ )
+ fig = go.Figure()
+ fig.add_trace(
+ go.Scatter(x=xs, y=ys, mode="markers", name="market", marker_size=10)
+ )
+ if discounts is not None:
+ x_range = np.linspace(xs.min(), xs.max(), 100)
+ y_fit = discounts.asset_discount - discounts.quote_discount * x_range
+ fig.add_trace(go.Scatter(x=x_range, y=y_fit, mode="lines", name="fit"))
+ y_label = "c - p" if self.inverse else "(C - P) / S"
+ return fig.update_layout(xaxis_title="K / S", yaxis_title=y_label)
diff --git a/quantflow/options/pricer.py b/quantflow/options/pricer.py
index d36e818a..31ae237b 100644
--- a/quantflow/options/pricer.py
+++ b/quantflow/options/pricer.py
@@ -77,7 +77,7 @@ def parity(self) -> float:
and put price for the same strike and maturity"""
return 1.0 - float(np.exp(self.log_strike))
- @computed_field # type: ignore [prop-decorator]
+ @computed_field
@property
def black(self) -> BlackSensitivities:
"""Calculate the Black price for the option using the price as time value and
diff --git a/quantflow/options/surface.py b/quantflow/options/surface.py
index c6f02933..82e581d1 100644
--- a/quantflow/options/surface.py
+++ b/quantflow/options/surface.py
@@ -1,11 +1,10 @@
from __future__ import annotations
import enum
-import math
import warnings
from datetime import datetime, timedelta
from decimal import Decimal
-from typing import Any, Generic, Iterator, NamedTuple, Self, TypeVar
+from typing import Any, Generic, Iterator, NamedTuple, Self, TypeVar, cast
import numpy as np
import pandas as pd
@@ -13,20 +12,27 @@
from pydantic import BaseModel, Field
from typing_extensions import Annotated, Doc
-from quantflow.rates.interest_rate import Rate
+from quantflow.rates import (
+ AnyYieldCurve,
+ NoDiscount,
+ Rate,
+ YieldCurve,
+ YieldCurveCalibration,
+)
+from quantflow.rates.options import OptionsDiscountingCalibration
from quantflow.utils import plot
from quantflow.utils.dates import utcnow
from quantflow.utils.numbers import (
ZERO,
DecimalNumber,
Number,
- Rounding,
normalize_decimal,
round_to_step,
sigfig,
to_decimal,
to_decimal_or_none,
)
+from quantflow.utils.price import Price
from quantflow.utils.types import FloatArray
from .bs import black_price, implied_black_volatility
@@ -42,6 +48,7 @@
VolSurfaceInputs,
VolSurfaceSecurity,
)
+from .parity import PutCallParities, PutCallParity
from .svi import SVI
INITIAL_VOL = 0.5
@@ -71,44 +78,26 @@ class OptionSelection(enum.Enum):
"""Select all options regardless of their moneyness"""
-class Price(BaseModel, Generic[S]):
+class SecurityPrice(Price, Generic[S]):
"""Represents the bid/ask price of a security,
which can be a spot price, forward price or option price
"""
security: S = Field(description="The underlying security of the price")
- bid: DecimalNumber = Field(description="Bid price")
- ask: DecimalNumber = Field(description="Ask price")
-
- @property
- def mid(self) -> Decimal:
- """Calculate the mid price by averaging the bid and ask prices"""
- return (self.bid + self.ask) / 2
-
- @property
- def spread(self) -> Decimal:
- """Calculate the bid-ask spread"""
- return self.ask - self.bid
-
- @property
- def bp_spread(self) -> Decimal:
- """Bid-ask spread in basis points, calculated as spread divided by mid
- price and multiplied by 10000"""
- mid = self.mid
- if mid > ZERO:
- return round(10000 * self.spread / mid, 2)
- else:
- return Decimal("inf")
-
-
-class SpotPrice(Price[S]):
- """Represents the spot bid/ask price of an underlying asset"""
-
open_interest: DecimalNumber = Field(
default=ZERO, description="Open interest of the spot price"
)
volume: DecimalNumber = Field(default=ZERO, description="Total volume traded")
+ def is_valid(self) -> bool:
+ """Check if the forward price is valid, which means that the bid and ask
+ are positive and the bid is less than or equal to the ask"""
+ return self.bid > ZERO and self.ask > ZERO and super().is_valid()
+
+
+class SpotPrice(SecurityPrice[S]):
+ """Represents the spot bid/ask price of an underlying asset"""
+
def inputs(self) -> SpotInput:
return SpotInput(
bid=self.bid,
@@ -117,16 +106,20 @@ def inputs(self) -> SpotInput:
volume=self.volume,
)
+ def _implied_forward(self, maturity: datetime, price: Decimal) -> FwdPrice[S]:
+ return FwdPrice(
+ security=self.security.forward(),
+ maturity=maturity,
+ bid=price,
+ ask=price,
+ )
-class FwdPrice(Price[S]):
+
+class FwdPrice(SecurityPrice[S]):
"""Represents the forward bid/ask price of an underlying asset
at a specific maturity"""
maturity: datetime = Field(description="Maturity date of the forward price")
- open_interest: DecimalNumber = Field(
- default=ZERO, description="Open interest of the forward price"
- )
- volume: DecimalNumber = Field(default=ZERO, description="Total volume traded")
def inputs(self) -> ForwardInput:
return ForwardInput(
@@ -137,118 +130,6 @@ def inputs(self) -> ForwardInput:
volume=self.volume,
)
- def is_valid(self) -> bool:
- """Check if the forward price is valid, which means that the bid and ask
- are positive and the bid is less than or equal to the ask"""
- return self.bid > ZERO and self.ask > ZERO and self.bid <= self.ask
-
-
-class ImpliedFwdPrice(FwdPrice[S]):
- """Represents the implied forward price of an underlying asset at a specific
- maturity, extracted from option prices via put-call parity"""
-
- strike: DecimalNumber = Field(
- description="Strike price of the options used to extract the forward price"
- )
-
- def moneyness(self, ttm: float) -> float:
- """Moneyness of the implied forward"""
- return math.log(float(self.strike / self.mid)) / math.sqrt(ttm)
-
- @classmethod
- def aggregate(
- cls,
- implied_forwards: Annotated[
- list[Self], Doc("Implied forward prices from put-call parity")
- ],
- ttm: Annotated[float, Doc("Time to maturity in years")],
- default: Annotated[
- FwdPrice[S] | None,
- Doc("Market forward (e.g. from futures) used as fallback or for blending"),
- ] = None,
- previous_forward: Annotated[
- Decimal | None,
- Doc(
- "Anchor forward for proximity weighting, "
- "typically the previous maturity"
- ),
- ] = None,
- tick_size: Annotated[
- Decimal | None, Doc("Tick size for rounding the implied forward bid/ask")
- ] = None,
- ) -> FwdPrice[S] | None:
- r"""Aggregate implied forward prices extracted from put-call parity into a
- single best-estimate forward price.
-
- **Selection**: valid implied forwards are sorted by bid-ask spread in basis
- points and the tightest 5 are retained as candidates. Let $c$ denote the
- tightest bp spread among the candidates.
-
- **Default priority**: if a default forward is provided and its bp spread is
- tighter than $c$, it is returned immediately as the most reliable price.
-
- **Default inclusion**: if the default's bp spread is wider than $c$ but
- narrower than the worst candidate, it is appended to the candidate pool
- and weighted on equal footing with the implied forwards.
-
- **Weighting**: each candidate $i$ receives weight
-
- \begin{equation}
- w_i = w^{\text{spread}}_i \cdot w^{\text{proximity}}_i
- \end{equation}
-
- where the spread weight is a Gaussian on the normalised distance from the
- best spread $c$ and the proximity weight, applied only when
- `previous_forward` is provided.
- The result is the weighted average of the candidate mid prices, with the
- bid/ask spread computed as the weighted average of candidate spreads.
- When `tick_size` is provided the output bid is rounded down and the ask
- is rounded up to the nearest tick.
- """
- forwards: list[FwdPrice[S]] = [f for f in implied_forwards if f.is_valid()]
- if not forwards:
- return default
- forwards = sorted(forwards, key=lambda f: f.bp_spread)[:5]
- best_bp_spread = forwards[0].bp_spread
- if (
- default is not None
- and default.is_valid()
- and default.bp_spread < best_bp_spread
- ):
- return default
- weights = 0.0
- values = 0.0
- spreads = 0.0
- worse_bp_spread = forwards[-1].bp_spread
- if (
- default is not None
- and default.is_valid()
- and default.bp_spread < worse_bp_spread
- ):
- forwards.append(default)
- for forward in forwards:
- s = (forward.bp_spread - best_bp_spread) / best_bp_spread
- weight = math.exp(-s * s)
- if previous_forward is not None:
- d = (forward.mid - previous_forward) / previous_forward
- weight *= math.exp(-d * d)
- weights += weight
- values += weight * float(forward.mid)
- spreads += weight * float(forward.spread)
- mid = to_decimal(values / weights)
- spread = to_decimal(spreads / weights)
- bid = mid - spread / 2
- ask = mid + spread / 2
- if tick_size is not None:
- bid = round_to_step(bid, tick_size, Rounding.DOWN)
- ask = round_to_step(ask, tick_size, Rounding.UP)
- return FwdPrice(
- security=forwards[0].security.forward(),
- bid=bid,
- ask=ask,
- maturity=forwards[0].maturity,
- )
-
class OptionMetadata(BaseModel):
"""Represents the metadata of an option, including its strike, type, maturity,
@@ -467,6 +348,53 @@ def info_dict(self) -> dict[str, Any]:
volume=float(self.volume),
)
+ def info(self) -> OptionInfo:
+ """Return a structured [OptionInfo][quantflow.options.surface.OptionInfo]
+ representation of this option price"""
+ return OptionInfo(
+ strike=self.strike,
+ forward=self.forward,
+ maturity=self.maturity,
+ log_strike=to_decimal(self.log_strike),
+ moneyness=to_decimal(self.log_strike / np.sqrt(self.ttm)),
+ ttm=to_decimal(self.ttm),
+ implied_vol=to_decimal(self.implied_vol),
+ price=self.price_in_forward_space,
+ price_bp=self.price_bp,
+ price_quote=self.price_in_quote,
+ option_type=self.option_type,
+ side=self.side,
+ open_interest=self.open_interest,
+ volume=self.volume,
+ )
+
+
+class OptionInfo(BaseModel):
+ """Structured representation of an option price with all computed fields"""
+
+ strike: DecimalNumber = Field(description="Strike price of the option")
+ forward: DecimalNumber = Field(
+ description="Forward price of the underlying at maturity"
+ )
+ maturity: datetime = Field(description="Maturity date of the option")
+ log_strike: DecimalNumber = Field(
+ description="Log strike, calculated as log(strike/forward)"
+ )
+ moneyness: DecimalNumber = Field(
+ description="Standardised moneyness, log(K/F) / sqrt(T)"
+ )
+ ttm: DecimalNumber = Field(description="Time to maturity in years")
+ implied_vol: DecimalNumber = Field(description="Black implied volatility")
+ price: DecimalNumber = Field(
+ description="Option price as a fraction of the forward price"
+ )
+ price_bp: DecimalNumber = Field(description="Option price in basis points")
+ price_quote: DecimalNumber = Field(description="Option price in quote currency")
+ option_type: OptionType = Field(description="Option type (call or put)")
+ side: Side = Field(description="Market side (bid or ask)")
+ open_interest: DecimalNumber = Field(description="Open interest")
+ volume: DecimalNumber = Field(description="Volume traded")
+
class OptionArrays(NamedTuple):
"""Represents the option data in array form for efficient calculations
@@ -513,6 +441,10 @@ def spread(self) -> Decimal:
"""Calculate the bid-ask spread"""
return self.ask.price - self.bid.price
+ def price(self) -> Price:
+ """Convert the option prices to a Price object"""
+ return Price(bid=self.bid.price, ask=self.ask.price)
+
def iv_bid_ask_spread(self) -> float:
"""Calculate the bid-ask spread of the implied volatility"""
return self.ask.implied_vol - self.bid.implied_vol
@@ -583,61 +515,16 @@ class Strike(BaseModel, Generic[S]):
default=None, description="Put option prices for the strike"
)
- def implied_forward(
- self,
- tick_size: Annotated[
- Decimal | None, Doc("Tick size for rounding the implied forward bid/ask")
- ] = None,
- ) -> ImpliedFwdPrice[S] | None:
- r"""Extract the implied forward price from put-call parity.
-
- Requires both a call and a put at this strike. Uses bid/ask prices
- to construct the bid/ask of the implied forward. When `tick_size` is
- provided, bid is rounded down and ask is rounded up to the nearest tick.
-
- For inverse options (prices quoted in the underlying currency)
- put-call parity reads
-
- \begin{equation}
- F = \frac{K}{1 - c + p}
- \end{equation}
-
- For non-inverse options (prices quoted in the quote currency)
-
- \begin{equation}
- F = K + C - P
- \end{equation}
-
- Returns None when the strike does not have both a call and a put,
- or when the denominator is non-positive (arbitrage condition violated).
- """
+ def put_call_parity(self) -> PutCallParity | None:
+ """Return a [PutCallParity][quantflow.rates.calibrator.PutCallParity] for this
+ strike, or None if either the call or the put are not available."""
if self.call is None or self.put is None:
return None
- cp_bid = self.call.bid.price - self.put.ask.price
- cp_ask = self.call.ask.price - self.put.bid.price
- if self.call.meta.inverse:
- d_bid = 1 - cp_bid
- d_ask = 1 - cp_ask
- if d_bid <= ZERO or d_ask <= ZERO:
- return None
- bid = self.strike / d_bid
- ask = self.strike / d_ask
- else:
- bid = self.strike + cp_bid
- ask = self.strike + cp_ask
- if bid <= ZERO or ask <= ZERO:
- return None
- if bid > ask:
- return None
- if tick_size is not None:
- bid = round_to_step(bid, tick_size, Rounding.DOWN)
- ask = round_to_step(ask, tick_size, Rounding.UP)
- return ImpliedFwdPrice(
- security=self.call.security.forward(),
+ return PutCallParity(
strike=self.strike,
- maturity=self.call.meta.maturity,
- bid=bid,
- ask=ask,
+ call=self.call.price(),
+ put=self.put.price(),
+ inverse=self.call.meta.inverse,
)
def options_iter(
@@ -745,33 +632,23 @@ def ttm(self, ref_date: datetime) -> float:
"""Time to maturity in years"""
return self.day_counter.dcf(ref_date, self.maturity)
- def forward_rate(self, ref_date: datetime, spot: SpotPrice[S]) -> Rate:
- """Compute the implied continuous rate from spot and forward mid"""
- return Rate.from_spot_and_forward(
- spot.mid,
- self.forward.mid,
- ref_date,
- self.maturity,
- day_counter=self.day_counter,
- )
-
- def forward_spread_fraction(self) -> Decimal:
- """Bid-ask spread of the forward as a fraction of its mid price"""
- mid = self.forward.mid
- if mid <= ZERO:
- return Decimal("Inf")
- return (self.forward.ask - self.forward.bid) / mid
-
- def info_dict(self, ref_date: datetime, spot: SpotPrice[S]) -> dict:
+ def info_dict(
+ self,
+ ref_date: datetime,
+ spot: Decimal,
+ implied_forward: Decimal,
+ ) -> dict:
"""Return a dictionary with information about the cross section"""
+ ttm = self.ttm(ref_date)
return dict(
maturity=self.maturity,
- ttm=self.ttm(ref_date),
+ ttm=ttm,
forward=self.forward.mid,
+ implied_forward=implied_forward,
+ forward_basis=implied_forward - self.forward.mid,
+ rate=Rate.from_number(float((implied_forward / spot).ln()) / ttm).rate,
bid_ask_spread=self.forward.spread,
- basis=self.forward.mid - spot.mid,
- rate_percent=self.forward_rate(ref_date, spot).percent,
- fwd_spread_pct=round(100 * self.forward_spread_fraction(), 4),
+ basis=implied_forward - spot,
open_interest=self.forward.open_interest,
volume=self.forward.volume,
)
@@ -781,6 +658,7 @@ def option_prices(
ref_date: Annotated[
datetime, Doc("Reference date for time to maturity calculation")
],
+ forward: Annotated[Decimal, Doc("Forward price of the underlying asset")],
*,
select: Annotated[
OptionSelection, Doc("Option selection method")
@@ -795,7 +673,7 @@ def option_prices(
"""Iterator over option prices in the cross section"""
for s in self.strikes:
yield from s.option_prices(
- self.forward.mid,
+ forward,
self.ttm(ref_date),
select=select,
initial_vol=initial_vol,
@@ -918,7 +796,66 @@ def disable_outliers(
break
-class VolSurface(BaseModel, Generic[S]):
+class ForwardPricer(BaseModel, Generic[S]):
+ """Base class for forward/discount factor pricers"""
+
+ asset: str = Field(
+ default="",
+ description="Name of the underlying asset",
+ )
+ spot: SpotPrice[S] | None = Field(
+ default=None,
+ description="Spot price of the underlying asset",
+ )
+ quote_curve: AnyYieldCurve = Field(
+ default_factory=NoDiscount,
+ description="Discount curve for the quote",
+ )
+ asset_curve: AnyYieldCurve = Field(
+ default_factory=NoDiscount,
+ description="Discount curve for the asset",
+ )
+ tick_size_forwards: DecimalNumber | None = Field(
+ default=None,
+ description="Tick size for rounding forward and spot prices - optional",
+ )
+ tick_size_options: DecimalNumber | None = Field(
+ default=None, description="Tick size for rounding option prices - optional"
+ )
+ day_counter: DayCounter = Field(
+ default=default_day_counter,
+ description=(
+ "Day counter for time to maturity calculations, "
+ "by default it uses Act/Act"
+ ),
+ )
+
+ @property
+ def ref_date(self) -> datetime:
+ """Reference date for the volatility surface, taken as the earliest maturity
+ or the provided ref_date if it's earlier"""
+ return min(self.quote_curve.ref_date, self.asset_curve.ref_date)
+
+ def spot_price(self) -> Decimal:
+ """Get the spot price if it exists"""
+ if self.spot is None:
+ raise ValueError("No spot price provided")
+ return self.spot.mid
+
+ def forward(self, maturity: datetime) -> Decimal:
+ """Calculate the implied forward for a given maturity"""
+ ttm = self.day_counter.dcf(self.ref_date, maturity)
+ df_quote = to_decimal(float(self.quote_curve.discount_factor(ttm)))
+ df_asset = to_decimal(float(self.asset_curve.discount_factor(ttm)))
+ forward_rate = self.spot_price() * df_asset / df_quote
+ return (
+ round_to_step(forward_rate, self.tick_size_forwards)
+ if self.tick_size_forwards
+ else forward_rate
+ )
+
+
+class VolSurface(ForwardPricer[S]):
"""Represents a volatility surface, which captures the implied volatility of an
option for different strikes and maturities.
@@ -944,31 +881,14 @@ class VolSurface(BaseModel, Generic[S]):
future volatility.
"""
- ref_date: datetime = Field(description="Reference date for the volatility surface")
- asset: str = Field(description="Underlying asset of the volatility surface")
- spot: SpotPrice[S] = Field(description="Spot price of the underlying asset")
maturities: tuple[VolCrossSection[S], ...] = Field(
+ default=(),
description=(
"Sorted tuple of "
"[VolCrossSection][quantflow.options.surface.VolCrossSection], "
"each containing the forward price and option prices for that maturity"
- )
- )
- day_counter: DayCounter = Field(
- default=default_day_counter,
- description=(
- "Day counter for time to maturity calculations, "
- "by default it uses Act/Act"
),
)
- tick_size_forwards: DecimalNumber | None = Field(
- default=None,
- description="Tick size for rounding forward and spot prices - optional",
- )
- tick_size_options: DecimalNumber | None = Field(
- default=None,
- description="Tick size for rounding option prices - optional",
- )
def securities(
self,
@@ -989,7 +909,8 @@ def securities(
] = False,
) -> Iterator[SpotPrice[S] | FwdPrice[S] | OptionPrices[S]]:
"""Iterator over securities in the volatility surface"""
- yield self.spot
+ if self.spot is not None:
+ yield self.spot
if index is not None:
yield from self.maturities[index].securities(
select=select, converged=converged
@@ -1020,7 +941,8 @@ def inputs(
[VolSurfaceInputs][quantflow.options.inputs.VolSurfaceInputs] instance"""
return VolSurfaceInputs(
asset=self.asset,
- ref_date=self.ref_date,
+ asset_curve=self.asset_curve,
+ quote_curve=self.quote_curve,
inputs=list(
s.inputs()
for s in self.securities(
@@ -1031,8 +953,10 @@ def inputs(
def term_structure(self) -> pd.DataFrame:
"""Return the term structure of the volatility surface as a DataFrame"""
+ spot = self.spot_price()
return pd.DataFrame(
- cross.info_dict(self.ref_date, self.spot) for cross in self.maturities
+ cross.info_dict(self.ref_date, spot, self.forward(cross.maturity))
+ for cross in self.maturities
)
def trim(self, num_maturities: int) -> Self:
@@ -1064,16 +988,19 @@ def option_prices(
) -> Iterator[OptionPrice]:
"""Iterator over selected option prices in the surface"""
if index is not None:
- yield from self.maturities[index].option_prices(
+ cross = self.maturities[index]
+ yield from cross.option_prices(
self.ref_date,
+ self.forward(cross.maturity),
select=select,
initial_vol=initial_vol,
converged=converged,
)
else:
- for maturity in self.maturities:
- yield from maturity.option_prices(
+ for cross in self.maturities:
+ yield from cross.option_prices(
self.ref_date,
+ self.forward(cross.maturity),
select=select,
initial_vol=initial_vol,
converged=converged,
@@ -1371,45 +1298,13 @@ def add_option(
else:
self.strikes[strike].put = option
- def cross_section(
- self,
- ref_date: Annotated[
- datetime | None, Doc("Reference date for the volatility surface")
- ] = None,
- previous_forward: Annotated[
- Decimal | None,
- Doc(
- "Previous forward price for the volatility surface "
- "Usaed by the implied forward calculation to replace missing "
- "or unreliable forwards"
- ),
- ] = None,
- tick_size: Annotated[
- Decimal | None,
- Doc("Tick size for rounding implied forward bid/ask prices"),
- ] = None,
- ) -> VolCrossSection[S] | None:
+ def _cross_section(self, forward: FwdPrice[S]) -> VolCrossSection[S] | None:
strikes = []
- implied_forwards = []
for strike in sorted(self.strikes):
sk = self.strikes[strike]
if sk.call is None and sk.put is None:
continue
- if implied_forward := sk.implied_forward(tick_size=tick_size):
- implied_forwards.append(implied_forward)
strikes.append(sk)
- forward = self.forward
- if implied_forwards:
- ttm = self.day_counter.dcf(ref_date or utcnow(), self.maturity)
- forward = ImpliedFwdPrice.aggregate(
- implied_forwards,
- ttm,
- default=self.forward,
- previous_forward=previous_forward,
- tick_size=tick_size,
- )
- if forward is None or not forward.is_valid():
- return None
return (
VolCrossSection(
maturity=self.maturity,
@@ -1421,8 +1316,36 @@ def cross_section(
else None
)
+ def put_call_parities(
+ self,
+ spot: Annotated[Decimal, Doc("Spot price of the underlying asset")],
+ *,
+ ref_date: Annotated[
+ datetime | None, Doc("Reference date for time to maturity calculation")
+ ] = None,
+ max_pairs: Annotated[
+ int, Doc("Maximum number of put-call pairs to consider")
+ ] = 10,
+ ) -> PutCallParities:
+ """Return a list of the most liquid
+ [PutCallParity][quantflow.options.parity.PutCallParities]
+ from a cross-section loader.
+
+ Liquidity is determined by the bid-ask spread of the put-call parity price.
+ """
+ ttm = self.day_counter.dcf(ref_date or utcnow(), self.maturity)
+ parities = sorted(
+ (
+ p
+ for sk in self.strikes.values()
+ if (p := sk.put_call_parity()) is not None
+ ),
+ key=lambda p: p.spread,
+ )[:max_pairs]
+ return PutCallParities.from_parities(parities, spot, ttm)
-class GenericVolSurfaceLoader(BaseModel, Generic[S], arbitrary_types_allowed=True):
+
+class GenericVolSurfaceLoader(ForwardPricer[S], arbitrary_types_allowed=True):
"""Helper class to build a volatility surface from a list of securities
Use this class to add spot, forward and option securities with their prices
@@ -1430,30 +1353,12 @@ class GenericVolSurfaceLoader(BaseModel, Generic[S], arbitrary_types_allowed=Tru
from the provided data.
"""
- asset: str = Field(default="", description="Name of the underlying asset")
- spot: SpotPrice[S] | None = Field(
- default=None, description="Spot price of the underlying asset"
- )
maturities: dict[datetime, VolCrossSectionLoader[S]] = Field(
default_factory=dict,
description=(
"Dictionary of maturities and their corresponding cross section loaders"
),
)
- day_counter: DayCounter = Field(
- default=default_day_counter,
- description=(
- "Day counter for time to maturity calculations "
- "by default it uses Act/Act"
- ),
- )
- tick_size_forwards: DecimalNumber | None = Field(
- default=None,
- description="Tick size for rounding forward and spot prices - optional",
- )
- tick_size_options: DecimalNumber | None = Field(
- default=None, description="Tick size for rounding option prices - optional"
- )
exclude_open_interest: DecimalNumber | None = Field(
default=None,
description="Exclude options with open interest at or below this value",
@@ -1463,7 +1368,8 @@ class GenericVolSurfaceLoader(BaseModel, Generic[S], arbitrary_types_allowed=Tru
)
def get_or_create_maturity(
- self, maturity: Annotated[datetime, Doc("Maturity date for the options")]
+ self,
+ maturity: Annotated[datetime, Doc("Maturity date for the options")],
) -> VolCrossSectionLoader[S]:
"""Get or create a
[VolCrossSectionLoader][quantflow.options.surface.VolCrossSectionLoader]
@@ -1548,36 +1454,153 @@ def add_option(
inverse=inverse,
)
- def surface(
- self,
- ref_date: Annotated[
- datetime | None, Doc("Reference date for the volatility surface")
- ] = None,
- ) -> VolSurface[S]:
+ def surface(self) -> VolSurface[S]:
"""Build a volatility surface from the provided data"""
- if not self.spot or self.spot.mid == ZERO:
- raise ValueError("No spot price provided")
maturities = []
- ref_date = ref_date or utcnow()
- previous_forward = self.spot.mid
+ spot = self.spot
+ if spot is None:
+ raise ValueError("No spot price provided")
for maturity in sorted(self.maturities):
- if section := self.maturities[maturity].cross_section(
- ref_date=ref_date,
- previous_forward=previous_forward,
- tick_size=self.tick_size_forwards,
- ):
- previous_forward = section.forward.mid
+ loader = self.maturities[maturity]
+ forward = loader.forward
+ if forward is None:
+ implied_forward_price = self.forward(maturity)
+ forward = spot._implied_forward(maturity, implied_forward_price)
+ if section := loader._cross_section(forward):
maturities.append(section)
return VolSurface(
asset=self.asset,
- ref_date=ref_date,
spot=self.spot,
maturities=tuple(maturities),
day_counter=self.day_counter,
+ quote_curve=self.quote_curve.model_copy(),
+ asset_curve=self.asset_curve.model_copy(),
tick_size_forwards=self.tick_size_forwards,
tick_size_options=self.tick_size_options,
)
+ def calibrate_curves(
+ self,
+ *,
+ quote_curve: Annotated[
+ type[YieldCurve] | YieldCurve | None,
+ Doc(
+ "YieldCurve type or instance to fit the quote currency discount "
+ "curve $D_q$ from option prices. "
+ "When None the current quote_curve is unchanged."
+ ),
+ ] = None,
+ asset_curve: Annotated[
+ type[YieldCurve] | YieldCurve | None,
+ Doc(
+ "YieldCurve type or instance to fit the asset discount curve $D_a$ "
+ "from option prices. "
+ "When None the current asset_curve is unchanged."
+ ),
+ ] = None,
+ min_rate_q: Annotated[
+ float,
+ Doc(
+ "Minimum continuously compounded quote rate."
+ " Default 0 enforces non-negative quote rates."
+ ),
+ ] = 0.0,
+ min_rate_a: Annotated[
+ float,
+ Doc(
+ "Minimum continuously compounded asset rate."
+ " Set negative to allow positive asset carry."
+ ),
+ ] = 0.0,
+ max_pairs: Annotated[
+ int, Doc("Maximum number of put-call pairs to use per maturity")
+ ] = 10,
+ ) -> None:
+ """Calibrate the quote and/or asset discount curves from option prices.
+
+ Three modes are supported:
+
+ Both curves: pass a curve type or instance for both curves.
+ A single OLS regression per maturity identifies $D_q$ and $D_a$ simultaneously.
+
+ Asset only: pass a curve type or instance for `asset_curve`, leave
+ `quote_curve` as None.
+ The existing `quote_curve` is treated as known and $D_a$ is solved analytically.
+
+ Quote only: pass a curve type or instance for `quote_curve`, leave
+ `asset_curve` as None.
+ The existing `asset_curve` is treated as known and $D_q$ is solved analytically.
+ """
+ ttm, cp, strikes = self.collect_put_call_parities(max_pairs=max_pairs)
+ asset_curve_input = (
+ self._curve_calibrator(asset_curve) if asset_curve else self.asset_curve
+ )
+ quote_curve_input = (
+ self._curve_calibrator(quote_curve) if quote_curve else self.quote_curve
+ )
+ calibration = OptionsDiscountingCalibration(
+ asset_curve=asset_curve_input,
+ quote_curve=quote_curve_input,
+ ttm=ttm,
+ cp=cp,
+ strikes=strikes,
+ )
+ calibrated_asset_curve, calibrated_quote_curve = calibration.calibrate()
+ self.asset_curve = cast(AnyYieldCurve, calibrated_asset_curve)
+ self.quote_curve = cast(AnyYieldCurve, calibrated_quote_curve)
+
+ def _curve_calibrator(
+ self,
+ curve_type: type[YieldCurve] | YieldCurve,
+ ) -> YieldCurveCalibration:
+ curve = (
+ curve_type(ref_date=self.ref_date)
+ if isinstance(curve_type, type)
+ else curve_type
+ )
+ calibrator = curve.calibrator()
+ if calibrator is None:
+ raise ValueError(f"{type(curve).__name__} does not support calibration")
+ return calibrator
+
+ def collect_put_call_parities(
+ self,
+ *,
+ max_pairs: Annotated[
+ int, Doc("Maximum number of put-call pairs to use per maturity")
+ ] = 10,
+ ) -> tuple[FloatArray, FloatArray, FloatArray]:
+ """Collect per-maturity continuously compounded rates from put-call parity."""
+ if not self.spot or self.spot.mid == ZERO:
+ raise ValueError("No spot price provided")
+ spot = self.spot.mid
+ ttms: list[FloatArray] = []
+ cp: list[FloatArray] = []
+ strikes: list[FloatArray] = []
+ ref_date = self.ref_date
+ for maturity, section in sorted(self.maturities.items()):
+ ttm = self.day_counter.dcf(ref_date, maturity)
+ if ttm <= 0:
+ continue
+ parities = section.put_call_parities(
+ spot,
+ ref_date=ref_date,
+ max_pairs=max_pairs,
+ )
+ regressand = parities.regressand()
+ if not regressand.size:
+ continue
+ ttms.append(np.full(regressand.shape, ttm, dtype=float))
+ cp.append(regressand)
+ strikes.append(parities.regressor())
+ if not cp:
+ raise ValueError("No put-call parity pairs available")
+ return (
+ np.concatenate(ttms),
+ np.concatenate(cp),
+ np.concatenate(strikes),
+ )
+
class VolSurfaceLoader(GenericVolSurfaceLoader[DefaultVolSecurity]):
"""Helper class to build a volatility surface from a list of securities
@@ -1630,7 +1653,11 @@ def surface_from_inputs(
"""Helper function to build a volatility surface from a
[VolSurfaceInputs][quantflow.options.inputs.VolSurfaceInputs] instance
"""
- loader = VolSurfaceLoader()
+ loader = VolSurfaceLoader(
+ asset=inputs.asset,
+ quote_curve=inputs.quote_curve,
+ asset_curve=inputs.asset_curve,
+ )
for input in inputs.inputs:
loader.add(input)
- return loader.surface(ref_date=inputs.ref_date)
+ return loader.surface()
diff --git a/quantflow/rates/__init__.py b/quantflow/rates/__init__.py
index e69de29b..5d83b577 100644
--- a/quantflow/rates/__init__.py
+++ b/quantflow/rates/__init__.py
@@ -0,0 +1,26 @@
+from typing import Annotated, Union
+
+from pydantic import Field
+
+from .interest_rate import Rate
+from .nelson_siegel import NelsonSiegel
+from .options import YieldCurveCalibration
+from .vasicek import VasicekCurve
+from .yield_curve import NoDiscount, YieldCurve
+
+__all__ = [
+ "YieldCurve",
+ "YieldCurveCalibration",
+ "NoDiscount",
+ "NelsonSiegel",
+ "VasicekCurve",
+ "AnyYieldCurve",
+ "Rate",
+]
+
+AnyYieldCurve = Annotated[
+ Union[NoDiscount, NelsonSiegel, VasicekCurve],
+ Field(discriminator="curve_type"),
+]
+
+YieldCurve.register_curve_types(NoDiscount, NelsonSiegel, VasicekCurve)
diff --git a/quantflow/rates/interest_rate.py b/quantflow/rates/interest_rate.py
index c083a287..e5888691 100644
--- a/quantflow/rates/interest_rate.py
+++ b/quantflow/rates/interest_rate.py
@@ -24,6 +24,15 @@ class Rate(BaseModel, arbitrary_types_allowed=True):
default=DayCounter.ACTACT,
description="Day count convention to use when calculating time to maturity",
)
+ ttm: float = Field(
+ default=0.0,
+ ge=0.0,
+ description=(
+ "Time to maturity for the rate, used to calculate discount factors. "
+ "Expressed in years. when 0 it is a spot rate, when > 0 "
+ "it is a forward rate."
+ ),
+ )
frequency: Period | None = Field(
default=None,
description=(
diff --git a/quantflow/rates/nelson_siegel.py b/quantflow/rates/nelson_siegel.py
index fceb18b8..f32d564d 100644
--- a/quantflow/rates/nelson_siegel.py
+++ b/quantflow/rates/nelson_siegel.py
@@ -1,15 +1,17 @@
from __future__ import annotations
from decimal import Decimal
+from typing import Literal
import numpy as np
from numpy.typing import ArrayLike
from pydantic import Field
-from scipy.optimize import minimize_scalar
-from typing_extensions import Annotated, Doc
+from scipy.optimize import Bounds, minimize_scalar
+from typing_extensions import Annotated, Doc, Self
-from quantflow.utils.numbers import ONE, Number, to_decimal
+from quantflow.utils.types import FloatArray, FloatArrayLike, maybe_float
+from .options import YieldCurveCalibration
from .yield_curve import YieldCurve
@@ -30,21 +32,30 @@ class NelsonSiegel(YieldCurve):
$\beta_3$ is the curvature parameter and $\lambda$ is the decay factor.
"""
- beta1: Decimal = Field(..., description="Level parameter")
- beta2: Decimal = Field(..., description="Slope parameter")
- beta3: Decimal = Field(..., description="Curvature parameter")
- lambda_: Decimal = Field(..., description="Decay factor")
-
- def instanteous_forward_rate(self, ttm: Number) -> Decimal:
- ttmd = to_decimal(ttm)
- if ttmd <= 0:
- return self.beta1 + self.beta2
- else:
- tt = ttmd * self.lambda_
- et = (-tt).exp()
- return self.beta1 + self.beta2 * et + self.beta3 * tt * et
-
- def discount_factor(self, ttm: Number) -> Decimal:
+ curve_type: Literal["nelson_siegel"] = "nelson_siegel"
+ beta1: Decimal = Field(default=Decimal(0), description="Level parameter")
+ beta2: Decimal = Field(default=Decimal(0), description="Slope parameter")
+ beta3: Decimal = Field(default=Decimal(0), description="Curvature parameter")
+ lambda_: Decimal = Field(default=Decimal(1), description="Decay factor")
+
+ def calibrator(self) -> NelsonSiegelCalibration:
+ """Return a [NelsonSiegelCalibration][..NelsonSiegelCalibration] wrapping
+ this curve."""
+ return NelsonSiegelCalibration(yield_curve=self)
+
+ def instanteous_forward_rate(self, ttm: FloatArrayLike) -> FloatArrayLike:
+ b1, b2, b3, lam = (
+ float(self.beta1),
+ float(self.beta2),
+ float(self.beta3),
+ float(self.lambda_),
+ )
+ ttm_ = np.maximum(np.asarray(ttm, dtype=float), 0.0)
+ lt = lam * ttm_
+ et = np.exp(-lt)
+ return maybe_float(b1 + b2 * et + b3 * lt * et)
+
+ def discount_factor(self, ttm: FloatArrayLike) -> FloatArrayLike:
r"""Calculate the discount factor for a given time to maturity.
The discount factor is calculated using the formula:
@@ -57,47 +68,90 @@ def discount_factor(self, ttm: Number) -> Decimal:
- e^{-\lambda \tau}\right)
\end{align*}
"""
- ttmd = to_decimal(ttm)
- if ttmd <= 0:
- return ONE
- else:
- tt = ttmd * self.lambda_
- et = (-tt).exp()
- ett = (1 - et) / tt
- zero_coupon_rate = self.beta1 + self.beta2 * ett + self.beta3 * (ett - et)
- return (-zero_coupon_rate * ttmd).exp()
+ ttma = np.maximum(np.asarray(ttm, dtype=float), 0.0)
+ tt = ttma * float(self.lambda_)
+ et = np.exp(-tt)
+ with np.errstate(divide="ignore", invalid="ignore"):
+ ett = np.where(tt > 1e-10, (1 - et) / tt, 1.0)
+ zero_coupon_rate = (
+ float(self.beta1) + float(self.beta2) * ett + float(self.beta3) * (ett - et)
+ )
+ df = np.exp(-zero_coupon_rate * ttma)
+ return maybe_float(df)
+
+ def jacobian(self, ttm: FloatArrayLike) -> FloatArray:
+ r"""Analytical Jacobian of discount factors w.r.t. params.
+
+ Params order: $[\beta_1, \beta_2, \beta_3, \lambda]$. Shape: (len(ttm), 4).
+ """
+ b2, b3, lam = float(self.beta2), float(self.beta3), float(self.lambda_)
+ ttma = np.maximum(np.asarray(ttm, dtype=float), 0.0)
+ lt = lam * ttma
+ et = np.exp(-lt)
+ with np.errstate(divide="ignore", invalid="ignore"):
+ ett = np.where(lt > 1e-10, (1.0 - et) / lt, 1.0 - lt / 2.0)
+ a_term = ttma * ett
+ b_term = a_term - ttma * et
+ zero_rate = float(self.beta1) + b2 * ett + b3 * (ett - et)
+ df = np.exp(-zero_rate * ttma)
+ with np.errstate(divide="ignore", invalid="ignore"):
+ da_dlam = np.where(lam > 1e-10, ttma * et / lam - a_term / lam, 0.0)
+ db_dlam = da_dlam + ttma**2 * et
+ return np.column_stack(
+ [
+ -ttma * df,
+ -a_term * df,
+ -b_term * df,
+ -df * (b2 * da_dlam + b3 * db_dlam),
+ ]
+ )
@classmethod
- def fit(
+ def calibrate(
cls,
ttm: Annotated[
ArrayLike,
Doc("times to maturity in years (1-D, length >= 3)"),
],
rates: Annotated[
- ArrayLike, Doc("observed zero-coupon rates, same length as ttm")
+ ArrayLike, Doc("observed continuously compounded rates, same length as ttm")
],
lambda_bounds: Annotated[
tuple[float, float],
Doc("search bounds for the decay parameter $\\lambda$"),
] = (0.01, 10.0),
- ) -> NelsonSiegel:
- r"""Fit a Nelson-Siegel curve to observed zero-coupon rates.
+ ) -> Self:
+ r"""Fit a Nelson-Siegel curve to observed continuously compounded rates.
Uses a profile OLS approach: for each candidate $\lambda$ the betas are
solved exactly via least squares, so only a 1-D scalar minimisation over
$\lambda$ is needed.
+
+ Observations whose rates deviate by more than 3 robust standard deviations
+ (MAD-scaled) from the median are excluded before fitting, making the result
+ robust to a small number of bad parity observations.
"""
ttm_arr = np.asarray(ttm, dtype=float)
rates_arr = np.asarray(rates, dtype=float)
+ mask = _mad_filter(rates_arr)
+ fit_ttm = ttm_arr[mask] if mask.sum() >= 3 else ttm_arr
+ fit_rates = rates_arr[mask] if mask.sum() >= 3 else rates_arr
+ # Grid search to avoid local minima, then refine with bounded minimisation
+ lo, hi = lambda_bounds
+ grid = np.linspace(lo, hi, 50)
+ rss_values = [_rss(lam, fit_ttm, fit_rates) for lam in grid]
+ best_idx = int(np.argmin(rss_values))
+ # Refine around the best grid point
+ refine_lo = grid[max(best_idx - 1, 0)]
+ refine_hi = grid[min(best_idx + 1, len(grid) - 1)]
result = minimize_scalar(
_rss,
- bounds=lambda_bounds,
+ bounds=(refine_lo, refine_hi),
method="bounded",
- args=(ttm_arr, rates_arr),
+ args=(fit_ttm, fit_rates),
)
lam: float = result.x
- b1, b2, b3 = _ols_betas(ttm_arr, rates_arr, lam)
+ b1, b2, b3 = _ols_betas(fit_ttm, fit_rates, lam)
return cls(
beta1=Decimal(str(round(b1, 10))),
beta2=Decimal(str(round(b2, 10))),
@@ -106,6 +160,59 @@ def fit(
)
+class NelsonSiegelCalibration(YieldCurveCalibration[NelsonSiegel]):
+ """Calibration wrapper for a Nelson-Siegel yield curve."""
+
+ beta_bounds: tuple[float, float] = Field(
+ default=(-0.5, 0.5),
+ description="Lower and upper bounds for beta parameters",
+ )
+ lambda_bounds: tuple[float, float] = Field(
+ default=(0.01, 10.0),
+ description="Lower and upper bounds for the decay parameter",
+ )
+
+ def get_params(self) -> FloatArray:
+ ns = self.yield_curve
+ return np.array(
+ [float(ns.beta1), float(ns.beta2), float(ns.beta3), float(ns.lambda_)]
+ )
+
+ def set_params(self, params: FloatArray) -> None:
+ b1, b2, b3, lam = params
+ self.yield_curve.beta1 = Decimal(str(round(float(b1), 10)))
+ self.yield_curve.beta2 = Decimal(str(round(float(b2), 10)))
+ self.yield_curve.beta3 = Decimal(str(round(float(b3), 10)))
+ self.yield_curve.lambda_ = Decimal(str(round(float(lam), 10)))
+
+ def get_bounds(self) -> Bounds:
+ lo, hi = self.beta_bounds
+ lam_lo, lam_hi = self.lambda_bounds
+ return Bounds([lo, lo, lo, lam_lo], [hi, hi, hi, lam_hi])
+
+ def calibrate(
+ self,
+ ttm: Annotated[ArrayLike, Doc("Times to maturity in years.")],
+ target: Annotated[
+ ArrayLike, Doc("Target discount factors, same length as ttm.")
+ ],
+ ) -> NelsonSiegel:
+ """Fit the curve using the fast profile-OLS solver.
+
+ Drop times to maturity <= 1 day (if any) before fitting, as these are often
+ dominated by noise and can cause instability in the fit.
+ """
+ ttm_ = np.asarray(ttm, dtype=float)
+ mask = ttm_ >= 1 / 365
+ rates = -np.log(np.asarray(target, dtype=float)[mask]) / ttm_[mask]
+ ns = NelsonSiegel.calibrate(ttm_[mask], rates, lambda_bounds=self.lambda_bounds)
+ self.yield_curve.beta1 = ns.beta1
+ self.yield_curve.beta2 = ns.beta2
+ self.yield_curve.beta3 = ns.beta3
+ self.yield_curve.lambda_ = ns.lambda_
+ return self.yield_curve
+
+
def _design_matrix(ttm: np.ndarray, lam: float) -> np.ndarray:
lt = lam * ttm
with np.errstate(divide="ignore", invalid="ignore"):
@@ -121,3 +228,11 @@ def _ols_betas(ttm: np.ndarray, rates: np.ndarray, lam: float) -> np.ndarray:
def _rss(lam: float, ttm: np.ndarray, rates: np.ndarray) -> float:
residuals = rates - _design_matrix(ttm, lam) @ _ols_betas(ttm, rates, lam)
return float(np.dot(residuals, residuals))
+
+
+def _mad_filter(rates: np.ndarray, k: float = 3.0) -> np.ndarray:
+ """Boolean mask: True for observations within k standard deviations (MAD-scaled)."""
+ med = np.median(rates)
+ mad = np.median(np.abs(rates - med))
+ scale = max(mad / 0.6745, 1e-12)
+ return np.abs(rates - med) <= k * scale
diff --git a/quantflow/rates/options.py b/quantflow/rates/options.py
new file mode 100644
index 00000000..c7f50796
--- /dev/null
+++ b/quantflow/rates/options.py
@@ -0,0 +1,183 @@
+from __future__ import annotations
+
+from abc import abstractmethod
+from dataclasses import dataclass
+from typing import TYPE_CHECKING, Generic, TypeVar
+
+import numpy as np
+from numpy.typing import ArrayLike
+from pydantic import BaseModel, Field
+from scipy.optimize import Bounds, least_squares
+from typing_extensions import Annotated, Doc
+
+from quantflow.utils.types import FloatArray
+
+if TYPE_CHECKING:
+ from .yield_curve import YieldCurve
+
+
+Y = TypeVar("Y", bound="YieldCurve")
+
+
+class YieldCurveCalibration(BaseModel, Generic[Y]):
+ yield_curve: Y = Field(..., description="Yield curve to be calibrated")
+
+ @abstractmethod
+ def get_params(self) -> FloatArray:
+ """Current model parameters as a flat array (starting point for fit)"""
+
+ @abstractmethod
+ def set_params(self, params: FloatArray) -> None:
+ """Update the yield curve from a flat parameter array"""
+
+ @abstractmethod
+ def get_bounds(self) -> Bounds:
+ """Parameter bounds for the optimiser"""
+
+ def __call__(self, ttm: FloatArray) -> FloatArray:
+ """Discount factors for the given TTMs evaluated at current params.
+
+ Called inside the optimiser hot loop: must not construct a new
+ yield curve instance on every call.
+ """
+ return np.asarray(self.yield_curve.discount_factor(ttm), dtype=float)
+
+ def calibrate(
+ self,
+ ttm: Annotated[ArrayLike, Doc("Times to maturity in years.")],
+ target: Annotated[
+ ArrayLike, Doc("Target discount factors, same length as ttm.")
+ ],
+ ) -> Y:
+ """Fit the yield curve to target discount factors via least squares."""
+ ttm_ = np.asarray(ttm, dtype=float)
+ target_ = np.asarray(target, dtype=float)
+ has_jacobian = self.yield_curve.jacobian(ttm_) is not None
+
+ def residuals(params: np.ndarray) -> np.ndarray:
+ self.set_params(params)
+ return self(ttm_) - target_
+
+ def jac(params: np.ndarray) -> FloatArray:
+ self.set_params(params)
+ return self.yield_curve.jacobian(ttm_) # type: ignore[return-value]
+
+ result = least_squares(
+ residuals,
+ self.get_params(),
+ jac=jac if has_jacobian else "2-point",
+ bounds=self.get_bounds(),
+ method="trf",
+ )
+ self.set_params(result.x)
+ return self.yield_curve
+
+
+@dataclass
+class OptionsDiscountingCalibration:
+ """Calibrate yield curves from option price parity data.
+
+ The input data consists of arrays of call-put parity values, strikes, and times
+ to maturity for a set of options on the same underlying. The calibration can be
+ done jointly for both the asset and quote curves, or separately for one curve with
+ the other fixed.
+ """
+
+ asset_curve: Annotated[
+ YieldCurve | YieldCurveCalibration,
+ Doc(
+ "Yield curve for the underlying asset. An instance is treated as fixed; "
+ "a YieldCurveCalibration will be calibrated from the parity data."
+ ),
+ ]
+ quote_curve: Annotated[
+ YieldCurve | YieldCurveCalibration,
+ Doc(
+ "Yield curve for the quote asset. An instance is treated as fixed; "
+ "a YieldCurveCalibration will be calibrated from the parity data."
+ ),
+ ]
+ cp: Annotated[FloatArray, Doc("(Call - Put) / Spot for each option pair")]
+ strikes: Annotated[
+ FloatArray, Doc("Strike / Spot for each option pair, same length as cp")
+ ]
+ ttm: Annotated[
+ FloatArray,
+ Doc("Time to maturity in years for each option pair, same length as cp"),
+ ]
+
+ def calibrate(self) -> tuple[YieldCurve, YieldCurve]:
+ if isinstance(self.asset_curve, YieldCurveCalibration):
+ if isinstance(self.quote_curve, YieldCurveCalibration):
+ return self.joint_calibration(self.asset_curve, self.quote_curve)
+ else:
+ return self.asset_calibration(self.asset_curve, self.quote_curve)
+ elif isinstance(self.quote_curve, YieldCurveCalibration):
+ return self.quote_calibration(self.asset_curve, self.quote_curve)
+ else:
+ return self.asset_curve, self.quote_curve
+
+ def joint_calibration(
+ self,
+ asset_cal: YieldCurveCalibration,
+ quote_cal: YieldCurveCalibration,
+ ) -> tuple[YieldCurve, YieldCurve]:
+ """Calibrate both curves jointly from all parity observations."""
+ pa = asset_cal.get_params()
+ pq = quote_cal.get_params()
+ has_jacobian = (
+ asset_cal.yield_curve.jacobian(self.ttm) is not None
+ and quote_cal.yield_curve.jacobian(self.ttm) is not None
+ )
+ n_a = len(pa)
+ bounds = Bounds(
+ np.concatenate([asset_cal.get_bounds().lb, quote_cal.get_bounds().lb]),
+ np.concatenate([asset_cal.get_bounds().ub, quote_cal.get_bounds().ub]),
+ )
+
+ def residuals(params: np.ndarray) -> np.ndarray:
+ asset_cal.set_params(params[:n_a])
+ quote_cal.set_params(params[n_a:])
+ da = asset_cal(self.ttm)
+ dq = quote_cal(self.ttm)
+ return self.cp - da + dq * self.strikes
+
+ def jac(params: np.ndarray) -> FloatArray:
+ asset_cal.set_params(params[:n_a])
+ quote_cal.set_params(params[n_a:])
+ ja = asset_cal.yield_curve.jacobian(self.ttm)
+ jq = quote_cal.yield_curve.jacobian(self.ttm)
+ if ja is None or jq is None: # pragma: no cover
+ raise TypeError("jacobian must not return None in joint calibration")
+ return np.hstack([-ja, jq * self.strikes[:, None]])
+
+ result = least_squares(
+ residuals,
+ np.concatenate([pa, pq]),
+ jac=jac if has_jacobian else "2-point",
+ bounds=bounds,
+ method="trf",
+ )
+ asset_cal.set_params(result.x[:n_a])
+ quote_cal.set_params(result.x[n_a:])
+ return asset_cal.yield_curve, quote_cal.yield_curve
+
+ def asset_calibration(
+ self,
+ asset_cal: YieldCurveCalibration,
+ fixed_quote: YieldCurve,
+ ) -> tuple[YieldCurve, YieldCurve]:
+ """Calibrate only the asset curve; quote curve is fixed."""
+ dq = np.asarray(fixed_quote.discount_factor(self.ttm), dtype=float)
+ target_da = self.cp + dq * self.strikes
+ return asset_cal.calibrate(self.ttm, target_da), fixed_quote
+
+ def quote_calibration(
+ self,
+ fixed_asset: YieldCurve,
+ quote_cal: YieldCurveCalibration,
+ ) -> tuple[YieldCurve, YieldCurve]:
+ """Calibrate only the quote curve; asset curve is fixed."""
+ da = np.asarray(fixed_asset.discount_factor(self.ttm), dtype=float)
+ target_dq = (da - self.cp) / self.strikes
+ return fixed_asset, quote_cal.calibrate(self.ttm, target_dq)
diff --git a/quantflow/rates/vasicek.py b/quantflow/rates/vasicek.py
new file mode 100644
index 00000000..676406e2
--- /dev/null
+++ b/quantflow/rates/vasicek.py
@@ -0,0 +1,85 @@
+from __future__ import annotations
+
+from typing import Literal
+
+import numpy as np
+from numpy.typing import ArrayLike
+from pydantic import Field
+from scipy.optimize import least_squares
+from typing_extensions import Self
+
+from quantflow.sp.ou import Vasicek
+from quantflow.sp.wiener import WienerProcess
+from quantflow.utils.numbers import ZERO, DecimalNumber
+from quantflow.utils.types import FloatArrayLike
+
+from .yield_curve import YieldCurve
+
+
+class VasicekCurve(YieldCurve):
+ """Class representing a Vasicek yield curve"""
+
+ curve_type: Literal["vasicek_curve"] = "vasicek_curve"
+ rate: DecimalNumber = Field(description=r"Initial value $x_0$")
+ kappa: DecimalNumber = Field(gt=ZERO, description=r"Mean reversion speed $\kappa$")
+ theta: DecimalNumber = Field(description=r"Mean level $\theta$")
+ sigma: DecimalNumber = Field(ge=ZERO, description=r"Volatility $\sigma$")
+
+ def process(self) -> Vasicek:
+ return Vasicek(
+ rate=float(self.rate),
+ kappa=float(self.kappa),
+ theta=float(self.theta),
+ bdlp=WienerProcess(sigma=float(self.sigma)),
+ )
+
+ def instanteous_forward_rate(self, ttm: FloatArrayLike) -> FloatArrayLike:
+ r"""Calculate the instantaneous forward rate."""
+ arr = np.asarray(ttm, dtype=float)
+ ttma = np.maximum(arr, 0.0)
+ kappa = float(self.kappa)
+ theta = float(self.theta)
+ sigma = float(self.sigma)
+ rate = float(self.rate)
+ s2 = sigma * sigma
+ et = np.exp(-kappa * ttma)
+ b = (1.0 - et) / kappa
+ fwd = rate * et + theta * (1.0 - et) - s2 / (2.0 * kappa) * b * et
+ return fwd if fwd.ndim > 0 else float(fwd)
+
+ def discount_factor(self, ttm: FloatArrayLike) -> FloatArrayLike:
+ r"""Calculate the discount factor for a given time to maturity."""
+ arr = np.asarray(ttm, dtype=float)
+ ttma = np.maximum(arr, 0.0)
+ kappa = float(self.kappa)
+ theta = float(self.theta)
+ sigma = float(self.sigma)
+ rate = float(self.rate)
+ s2 = sigma * sigma
+ b = (1.0 - np.exp(-kappa * ttma)) / kappa
+ a = (theta - s2 / (2.0 * kappa * kappa)) * (b - ttma) + s2 * b * b / (
+ 4.0 * kappa
+ )
+ df = np.exp(a - rate * b)
+ return df if df.ndim > 0 else float(df)
+
+ @classmethod
+ def calibrate(cls, ttm: ArrayLike, rates: ArrayLike) -> Self:
+ """Fit the Vasicek curve to continuously compounded rates via least squares."""
+ ttm_arr = np.asarray(ttm, dtype=float)
+ rates_arr = np.asarray(rates, dtype=float)
+
+ def residuals(params: np.ndarray) -> np.ndarray:
+ curve = cls(
+ rate=params[0], kappa=params[1], theta=params[2], sigma=params[3]
+ )
+ df = np.asarray(curve.discount_factor(ttm_arr), dtype=float)
+ fitted = -np.log(df) / ttm_arr
+ return fitted - rates_arr
+
+ x0 = np.array([rates_arr[0], 1.0, rates_arr[-1], 0.01])
+ result = least_squares(
+ residuals, x0, bounds=([-1.0, 1e-4, -1.0, 0.0], [1.0, 50.0, 1.0, 1.0])
+ )
+ r, k, th, s = result.x
+ return cls(rate=r, kappa=k, theta=th, sigma=s)
diff --git a/quantflow/rates/yield_curve.py b/quantflow/rates/yield_curve.py
index 29d292e6..e0a83280 100644
--- a/quantflow/rates/yield_curve.py
+++ b/quantflow/rates/yield_curve.py
@@ -1,15 +1,44 @@
+from __future__ import annotations
+
from abc import ABC, abstractmethod
-from decimal import Decimal
+from datetime import datetime
+from typing import TYPE_CHECKING, Any, Literal
+
+import numpy as np
+from numpy.typing import ArrayLike
+from pydantic import BaseModel, Field
+from typing_extensions import Annotated, Doc, Self
+
+from quantflow.utils import plot
+from quantflow.utils.dates import utcnow
+from quantflow.utils.text import snake_case
+from quantflow.utils.types import FloatArray, FloatArrayLike, maybe_float
+
+if TYPE_CHECKING:
+ from .options import YieldCurveCalibration
+
-from pydantic import BaseModel
+_CURVE_TYPES: dict[str, type[YieldCurve]] = {}
+_TYPES_TO_NAMES: dict[type[YieldCurve], str] = {}
class YieldCurve(BaseModel, ABC, extra="forbid"):
"""Abstract base class for yield curves"""
+ ref_date: datetime = Field(
+ default_factory=utcnow,
+ description="Reference date for the yield curve",
+ )
+ curve_type: str = Field(
+ default="unknown",
+ description=(
+ "Type of the yield curve, used for serialization" " and discrimination"
+ ),
+ )
+
@abstractmethod
- def instanteous_forward_rate(self, ttm: float) -> Decimal:
- r"""Calculate the instantaneous forward rate for a given time to maturity
+ def instanteous_forward_rate(self, ttm: FloatArrayLike) -> FloatArrayLike:
+ r"""Calculate the instantaneous forward rate for a given time to maturity.
The instantaneous forward rate is related to discount factor
by the following formula:
@@ -19,11 +48,14 @@ def instanteous_forward_rate(self, ttm: float) -> Decimal:
\end{equation}
where $D(\tau)$ is the discount factor for a given time to maturity $\tau$.
+
+ Accepts a scalar float or a float array. Returns a scalar float for scalar
+ input and a numpy float array for array input.
"""
@abstractmethod
- def discount_factor(self, ttm: float) -> Decimal:
- r"""Calculate the discount factor for a given time to maturity
+ def discount_factor(self, ttm: FloatArrayLike) -> FloatArrayLike:
+ r"""Calculate the discount factor for a given time to maturity.
The discount factor is related to the instantaneous forward rate
by the following formula:
@@ -34,4 +66,109 @@ def discount_factor(self, ttm: float) -> Decimal:
where $f(\tau)$ is the instantaneous forward rate for a given time to
maturity $\tau$.
+
+ Accepts a scalar float or a float array. Returns a scalar float for scalar
+ input and a numpy float array for array input.
+ """
+
+ @classmethod
+ @abstractmethod
+ def calibrate(
+ cls,
+ ttm: Annotated[ArrayLike, Doc("Times to maturity in years.")],
+ rates: Annotated[
+ ArrayLike,
+ Doc(
+ "Continuously compounded rates, same length as ttm (e.g. 0.05 for 5%)."
+ ),
+ ],
+ ) -> Self:
+ """Fit the yield curve to continuously compounded rates."""
+
+ def calibrator(self) -> YieldCurveCalibration | None:
+ """Return a calibration wrapper for this curve, or None if not available."""
+ return None
+
+ def jacobian(
+ self, ttm: Annotated[FloatArrayLike, Doc("Times to maturity in years.")]
+ ) -> FloatArray | None:
+ """Analytical Jacobian of discount factors w.r.t. model parameters.
+
+ Returns None if no analytical Jacobian is available (default).
+ Shape when not None: (len(ttm), n_params).
+ """
+ return None
+
+ def continuously_compounded_rate(
+ self, ttm: Annotated[ArrayLike, Doc("Time to maturity in years")]
+ ) -> FloatArrayLike:
+ r"""Calculate the continuously compounded rate for a given time to maturity.
+
+ The continuously compounded rate is related to the discount factor
+ by the following formula:
+
+ \begin{equation}
+ r(\tau) = -\frac{\ln D(\tau)}{\tau}
+ \end{equation}
+
+ where $D(\tau)$ is the discount factor for a given time to maturity $\tau$.
+
+ Accepts a scalar float or a float array. Returns a scalar float for scalar
+ input and a numpy float array for array input.
+ """
+ ttm_ = np.asarray(ttm, dtype=float)
+ df = np.asarray(self.discount_factor(ttm_), dtype=float)
+ result = np.where(
+ ttm_ <= 0, self.instanteous_forward_rate(0.0), -np.log(df) / ttm_
+ )
+ return maybe_float(result)
+
+ def plot(
+ self,
+ ttm_max: Annotated[float, Doc("Maximum time to maturity in years")] = 10.0,
+ n: Annotated[int, Doc("Number of points to evaluate")] = 200,
+ **kwargs: Any,
+ ) -> Any:
+ """Plot the continuously compounded rate vs time to maturity.
+
+ Requires plotly to be installed.
"""
+ return plot.plot_yield_curve(self, ttm_max=ttm_max, n=n, **kwargs)
+
+ @classmethod
+ def register_curve_types(cls, *curve_classes: type[YieldCurve]) -> None:
+ """Register a yield curve subclass for deserialization."""
+ for curve_cls in curve_classes:
+ name = snake_case(curve_cls.__name__)
+ if current_type := _CURVE_TYPES.pop(name, None):
+ _TYPES_TO_NAMES.pop(current_type, None)
+ _CURVE_TYPES[name] = curve_cls
+ _TYPES_TO_NAMES[curve_cls] = name
+
+ @classmethod
+ def curve_types(cls) -> tuple[str, ...]:
+ """Return the registered curve types."""
+ return tuple(sorted(_CURVE_TYPES))
+
+ @classmethod
+ def get_curve_class(cls, curve_type: str) -> type[YieldCurve] | None:
+ """Get the yield curve class for a given curve type."""
+ return _CURVE_TYPES.get(curve_type)
+
+
+class NoDiscount(YieldCurve):
+ """Flat yield curve with zero rates (discount factor is always 1)."""
+
+ curve_type: Literal["no_discount"] = "no_discount"
+
+ def instanteous_forward_rate(self, ttm: FloatArrayLike) -> FloatArrayLike:
+ arr = np.asarray(ttm, dtype=float)
+ return np.zeros_like(arr) if arr.ndim > 0 else 0.0
+
+ def discount_factor(self, ttm: FloatArrayLike) -> FloatArrayLike:
+ arr = np.asarray(ttm, dtype=float)
+ return np.ones_like(arr) if arr.ndim > 0 else 1.0
+
+ @classmethod
+ def calibrate(cls, ttm: ArrayLike, rates: ArrayLike) -> Self:
+ return cls()
diff --git a/quantflow/utils/plot.py b/quantflow/utils/plot.py
index 8e8eb88c..17357db5 100644
--- a/quantflow/utils/plot.py
+++ b/quantflow/utils/plot.py
@@ -1,12 +1,16 @@
import os
-from typing import Any
+from typing import TYPE_CHECKING, Any
+import numpy as np
import pandas as pd
from scipy.stats import norm
from .marginal import Marginal1D
from .types import FloatArray
+if TYPE_CHECKING:
+ from quantflow.rates.yield_curve import YieldCurve
+
PLOTLY_THEME = os.environ.get("PLOTLY_THEME", "plotly_dark")
try:
@@ -214,6 +218,28 @@ def plot3d(
return fig
+def plot_yield_curve(
+ curve: "YieldCurve",
+ ttm_max: float = 10.0,
+ n: int = 200,
+ **kwargs: Any,
+) -> Any:
+ check_plotly()
+ ttms = np.linspace(0.0, ttm_max, n)
+ rates = [float(curve.continuously_compounded_rate(t)) for t in ttms]
+ df = pd.DataFrame({"ttm": ttms, "rate": rates})
+ return px.line(
+ df,
+ x="ttm",
+ y="rate",
+ labels={
+ "ttm": "time to maturity (years)",
+ "rate": "continuously compounded rate",
+ },
+ **kwargs,
+ )
+
+
def candlestick_plot(df: pd.DataFrame, slider: bool = True) -> Any:
fig = go.Figure(
data=go.Candlestick(
diff --git a/quantflow/utils/price.py b/quantflow/utils/price.py
new file mode 100644
index 00000000..d7d02b4d
--- /dev/null
+++ b/quantflow/utils/price.py
@@ -0,0 +1,37 @@
+from pydantic import BaseModel, Field
+
+from .numbers import ZERO, Decimal, DecimalNumber
+
+
+class Price(BaseModel):
+ """Represents the bid/ask price of a security,
+ which can be a spot price, forward price or option price
+ """
+
+ bid: DecimalNumber = Field(description="Bid price")
+ ask: DecimalNumber = Field(description="Ask price")
+
+ @property
+ def mid(self) -> Decimal:
+ """Calculate the mid price by averaging the bid and ask prices"""
+ return (self.bid + self.ask) / 2
+
+ @property
+ def spread(self) -> Decimal:
+ """Calculate the bid-ask spread"""
+ return self.ask - self.bid
+
+ @property
+ def bp_spread(self) -> Decimal:
+ """Bid-ask spread in basis points, calculated as spread divided by mid
+ price and multiplied by 10000"""
+ mid = self.mid
+ if mid > ZERO:
+ return round(10000 * self.spread / mid, 2)
+ else:
+ return Decimal("inf")
+
+ def is_valid(self) -> bool:
+ """Check if the price is valid, which means the bid is less than
+ or equal to the ask"""
+ return self.bid <= self.ask
diff --git a/quantflow/utils/text.py b/quantflow/utils/text.py
new file mode 100644
index 00000000..7c16c904
--- /dev/null
+++ b/quantflow/utils/text.py
@@ -0,0 +1,23 @@
+"""
+Adapted from humps
+
+https://github.com/nficano/humps
+"""
+
+import re
+
+ACRONYM_RE = re.compile(r"([A-Z\d]+)(?=[A-Z\d]|$)")
+SPLIT_RE = re.compile(r"([\-_]*(?<=[^0-9])(?=[A-Z])[^A-Z]*[\-_]*)")
+
+
+def snake_case(string: str) -> str:
+ """Convert a string into snake case."""
+ return _separate_words(_fix_abbreviations(string)).lower()
+
+
+def _fix_abbreviations(string: str) -> str:
+ return ACRONYM_RE.sub(lambda m: m.group(0).title(), string)
+
+
+def _separate_words(string: str, separator: str = "_") -> str:
+ return separator.join(s for s in SPLIT_RE.split(string) if s)
diff --git a/quantflow/utils/types.py b/quantflow/utils/types.py
index 2e1ac95f..076a1932 100644
--- a/quantflow/utils/types.py
+++ b/quantflow/utils/types.py
@@ -32,6 +32,10 @@ def as_float(num: NumberType | None = None) -> float:
return float(0 if num is None else num)
+def maybe_float(array: FloatArray) -> FloatArrayLike:
+ return array if array.ndim > 0 else float(array)
+
+
def as_array(n: Vector) -> np.ndarray:
"""Convert an input into an array"""
if isinstance(n, int):
diff --git a/quantflow_tests/test_data_deribit.py b/quantflow_tests/test_data_deribit.py
index 01c8a995..0509e0d7 100644
--- a/quantflow_tests/test_data_deribit.py
+++ b/quantflow_tests/test_data_deribit.py
@@ -54,8 +54,8 @@ async def test_loader_loads_known_options(
deribit_cli: Deribit, ref_date: datetime
) -> None:
"""Options present in both book summary and instruments are loaded."""
- loader = await deribit_cli.volatility_surface_loader("btc")
- surface = loader.surface(ref_date=ref_date)
+ loader = await deribit_cli.volatility_surface_loader("btc", ref_date=ref_date)
+ surface = loader.surface()
# fixture has 2 strikes (70000 C+P, 75000 C) all on one maturity
total_strikes = sum(len(m.strikes) for m in surface.maturities)
assert total_strikes == 2
@@ -68,8 +68,8 @@ async def test_loader_skips_option_missing_from_instruments(
ghost = "BTC-10APR26-67500-P"
assert any(o["instrument_name"] == ghost for o in options)
- loader = await deribit_cli.volatility_surface_loader("btc")
- surface = loader.surface(ref_date=ref_date)
+ loader = await deribit_cli.volatility_surface_loader("btc", ref_date=ref_date)
+ surface = loader.surface()
all_strikes = {
strike.strike for mat in surface.maturities for strike in mat.strikes
}
@@ -82,6 +82,6 @@ async def test_loader_skips_future_missing_from_instruments(
"""Futures absent from the instruments list are silently skipped."""
assert any(f["instrument_name"] == "BTC-GHOST-26" for f in futures)
- loader = await deribit_cli.volatility_surface_loader("btc")
- surface = loader.surface(ref_date=ref_date)
+ loader = await deribit_cli.volatility_surface_loader("btc", ref_date=ref_date)
+ surface = loader.surface()
assert surface is not None
diff --git a/quantflow_tests/test_data_yahoo.py b/quantflow_tests/test_data_yahoo.py
index d3ee18ae..c958fe04 100644
--- a/quantflow_tests/test_data_yahoo.py
+++ b/quantflow_tests/test_data_yahoo.py
@@ -32,6 +32,7 @@ async def test_loader_builds_surface(yahoo_cli: Yahoo, spx_chain: dict) -> None:
surface = loader.surface()
assert surface.asset == "^SPX"
assert len(surface.maturities) == len(spx_chain["options"])
+ assert surface.spot is not None
assert surface.spot.mid > 0
diff --git a/quantflow_tests/test_implied_fwd.py b/quantflow_tests/test_implied_fwd.py
deleted file mode 100644
index fbb71cdf..00000000
--- a/quantflow_tests/test_implied_fwd.py
+++ /dev/null
@@ -1,175 +0,0 @@
-"""Tests for ImpliedFwdPrice.aggregate"""
-
-from __future__ import annotations
-
-from datetime import datetime, timezone
-from decimal import Decimal
-
-import pytest
-from hypothesis import given
-from hypothesis import strategies as st
-
-from quantflow.options.inputs import DefaultVolSecurity
-from quantflow.options.surface import FwdPrice, ImpliedFwdPrice
-
-MATURITY = datetime(2026, 12, 31, tzinfo=timezone.utc)
-
-
-def make_implied(
- mid: float, spread_bp: float, strike: float | None = None
-) -> ImpliedFwdPrice:
- mid_d = Decimal(str(round(mid, 6)))
- half_spread = Decimal(str(round(mid * spread_bp / 20000, 8)))
- return ImpliedFwdPrice(
- security=DefaultVolSecurity.forward(),
- bid=mid_d - half_spread,
- ask=mid_d + half_spread,
- strike=Decimal(str(round(strike if strike is not None else mid, 6))),
- maturity=MATURITY,
- )
-
-
-def make_fwd(mid: float, spread_bp: float) -> FwdPrice:
- mid_d = Decimal(str(round(mid, 6)))
- half_spread = Decimal(str(round(mid * spread_bp / 20000, 8)))
- return FwdPrice(
- security=DefaultVolSecurity.forward(),
- bid=mid_d - half_spread,
- ask=mid_d + half_spread,
- maturity=MATURITY,
- )
-
-
-def test_aggregate_empty_no_default_returns_none() -> None:
- assert ImpliedFwdPrice.aggregate([], ttm=1.0) is None
-
-
-def test_aggregate_empty_with_default_returns_default() -> None:
- default = make_fwd(100, 20)
- assert ImpliedFwdPrice.aggregate([], ttm=1.0, default=default) is default
-
-
-def make_implied_market(
- theoretical_forward: float,
- mid_fraction: float,
- spread_multiplier: float,
- strike_fraction: float,
-) -> ImpliedFwdPrice:
- """Implied forward whose spread scales with distance from theoretical_forward."""
- mid = theoretical_forward * mid_fraction
- spread_bp = max(
- 1.0,
- abs(mid - theoretical_forward)
- / theoretical_forward
- * 10000
- * spread_multiplier,
- )
- return make_implied(mid, spread_bp, strike=theoretical_forward * strike_fraction)
-
-
-def test_aggregate_all_invalid_returns_default() -> None:
- invalid = ImpliedFwdPrice(
- security=DefaultVolSecurity.forward(),
- bid=Decimal("101"),
- ask=Decimal("99"), # bid > ask
- strike=Decimal("100"),
- maturity=MATURITY,
- )
- default = make_fwd(100, 20)
- assert ImpliedFwdPrice.aggregate([invalid], ttm=1.0, default=default) is default
-
-
-@given(
- theoretical_forward=st.floats(
- min_value=100.0, max_value=100_000.0, allow_nan=False, allow_infinity=False
- ),
- anchor=st.floats(
- min_value=0.9, max_value=0.99, allow_nan=False, allow_infinity=False
- ),
- mid_fractions=st.lists(
- st.floats(
- min_value=0.95, max_value=1.05, allow_nan=False, allow_infinity=False
- ),
- min_size=2,
- max_size=8,
- ),
- spread_multipliers=st.lists(
- st.floats(min_value=0.5, max_value=3.0, allow_nan=False, allow_infinity=False),
- min_size=2,
- max_size=8,
- ),
- strike_fractions=st.lists(
- st.floats(min_value=0.8, max_value=1.2, allow_nan=False, allow_infinity=False),
- min_size=2,
- max_size=8,
- ),
- ttm=st.floats(min_value=0.1, max_value=2.0, allow_nan=False, allow_infinity=False),
-)
-def test_aggregate_with_previous_forward(
- theoretical_forward: float,
- anchor: float,
- mid_fractions: list[float],
- spread_multipliers: list[float],
- strike_fractions: list[float],
- ttm: float,
-) -> None:
- previous_forward = Decimal(str(round(theoretical_forward * anchor, 4)))
- n = min(len(mid_fractions), len(spread_multipliers), len(strike_fractions))
- forwards = [
- make_implied_market(
- theoretical_forward,
- mid_fractions[i],
- spread_multipliers[i],
- strike_fractions[i],
- )
- for i in range(n)
- ]
- result = ImpliedFwdPrice.aggregate(
- forwards, ttm=ttm, previous_forward=previous_forward
- )
- assert result is not None
- assert result.is_valid()
- mids = [float(f.mid) for f in forwards if f.is_valid()]
- assert min(mids) - 1e-4 <= float(result.mid) <= max(mids) + 1e-4
-
-
-def test_aggregate_implied_tighter_than_default_uses_implied() -> None:
- # implied forwards (5 bp) are tighter than the default (20 bp)
- # the default is not included in the candidate pool, result comes from implied
- forwards = [make_implied(100, 5), make_implied(100, 5)]
- default = make_fwd(100, 20)
- result = ImpliedFwdPrice.aggregate(forwards, ttm=1.0, default=default)
- assert result is not None
- assert result is not default
- assert float(result.mid) == pytest.approx(100.0, rel=1e-3)
-
-
-def test_aggregate_previous_forward_pulls_result_toward_anchor() -> None:
- # two forwards: one at 90 (the anchor), one at 110, same tight spread
- # without previous_forward: result ≈ 100 (equal weights)
- # with previous_forward=90: forward at 90 gets proximity_weight=1,
- # forward at 110 is penalised → result pulled below 100
- fwd_at_anchor = make_implied(90, 5)
- fwd_above = make_implied(110, 5)
- previous_forward = Decimal("90")
-
- result_without = ImpliedFwdPrice.aggregate([fwd_at_anchor, fwd_above], ttm=1.0)
- result_with = ImpliedFwdPrice.aggregate(
- [fwd_at_anchor, fwd_above], ttm=1.0, previous_forward=previous_forward
- )
- assert result_without is not None
- assert result_with is not None
- assert float(result_with.mid) < float(result_without.mid)
-
-
-def test_aggregate_outlier_with_wide_spread_does_not_move_result() -> None:
- # three tight forwards near 100, one outlier far away with enormous spread
- tight = [make_implied(100, 5) for _ in range(3)]
- outlier = make_implied(200, 500)
- result_without_outlier = ImpliedFwdPrice.aggregate(tight, ttm=1.0)
- result_with_outlier = ImpliedFwdPrice.aggregate(tight + [outlier], ttm=1.0)
- assert result_without_outlier is not None
- assert result_with_outlier is not None
- assert (
- abs(float(result_with_outlier.mid) - float(result_without_outlier.mid)) < 0.01
- )
diff --git a/quantflow_tests/test_nelson_siegel.py b/quantflow_tests/test_nelson_siegel.py
new file mode 100644
index 00000000..014a32fa
--- /dev/null
+++ b/quantflow_tests/test_nelson_siegel.py
@@ -0,0 +1,198 @@
+from __future__ import annotations
+
+import math
+from decimal import Decimal
+
+import numpy as np
+import pytest
+
+from quantflow.rates.nelson_siegel import NelsonSiegel
+
+
+def _flat_curve(level: float = 0.05) -> NelsonSiegel:
+ return NelsonSiegel(
+ beta1=Decimal(str(level)),
+ beta2=Decimal("0"),
+ beta3=Decimal("0"),
+ lambda_=Decimal("1"),
+ )
+
+
+def _true_curve() -> NelsonSiegel:
+ return NelsonSiegel(
+ beta1=Decimal("0.04"),
+ beta2=Decimal("-0.02"),
+ beta3=Decimal("0.03"),
+ lambda_=Decimal("1.5"),
+ )
+
+
+# ---------------------------------------------------------------------------
+# Discount factor and forward rate
+# ---------------------------------------------------------------------------
+
+
+def test_flat_curve_discount_factor_one_year() -> None:
+ ns = _flat_curve(0.05)
+ assert float(ns.discount_factor(1.0)) == pytest.approx(math.exp(-0.05), rel=1e-5)
+
+
+def test_flat_curve_discount_factor_two_year() -> None:
+ ns = _flat_curve(0.04)
+ assert float(ns.discount_factor(2.0)) == pytest.approx(math.exp(-0.08), rel=1e-5)
+
+
+def test_discount_factor_zero_ttm() -> None:
+ assert _flat_curve(0.05).discount_factor(0) == Decimal("1")
+
+
+def test_discount_factor_negative_ttm() -> None:
+ assert _flat_curve(0.05).discount_factor(-1) == Decimal("1")
+
+
+def test_discount_factor_increases_with_lower_rate() -> None:
+ ttm = 1.0
+ assert float(_flat_curve(0.02).discount_factor(ttm)) > float(
+ _flat_curve(0.08).discount_factor(ttm)
+ )
+
+
+def test_discount_factor_decreases_with_ttm() -> None:
+ ns = _flat_curve(0.05)
+ assert float(ns.discount_factor(1.0)) > float(ns.discount_factor(5.0))
+
+
+def test_instantaneous_forward_rate_at_zero() -> None:
+ ns = NelsonSiegel(
+ beta1=Decimal("0.04"),
+ beta2=Decimal("0.02"),
+ beta3=Decimal("0.01"),
+ lambda_=Decimal("1"),
+ )
+ assert float(ns.instanteous_forward_rate(0)) == pytest.approx(0.06, rel=1e-6)
+
+
+def test_instantaneous_forward_rate_large_ttm() -> None:
+ ns = NelsonSiegel(
+ beta1=Decimal("0.04"),
+ beta2=Decimal("0.02"),
+ beta3=Decimal("0.01"),
+ lambda_=Decimal("1"),
+ )
+ assert float(ns.instanteous_forward_rate(100)) == pytest.approx(0.04, abs=1e-5)
+
+
+def test_consistency_forward_and_discount() -> None:
+ ns = NelsonSiegel(
+ beta1=Decimal("0.04"),
+ beta2=Decimal("0.015"),
+ beta3=Decimal("0.008"),
+ lambda_=Decimal("2"),
+ )
+ ttm, h = 1.5, 1e-5
+ numerical = -(
+ math.log(float(ns.discount_factor(ttm + h)))
+ - math.log(float(ns.discount_factor(ttm - h)))
+ ) / (2 * h)
+ assert numerical == pytest.approx(float(ns.instanteous_forward_rate(ttm)), rel=1e-4)
+
+
+# ---------------------------------------------------------------------------
+# Jacobian
+# ---------------------------------------------------------------------------
+
+
+def test_jacobian_shape() -> None:
+ ns = _true_curve()
+ ttm = np.array([0.5, 1.0, 2.0, 5.0, 10.0])
+ J = ns.jacobian(ttm)
+ assert J.shape == (len(ttm), 4)
+
+
+def test_jacobian_matches_finite_differences() -> None:
+ ns = _true_curve()
+ ttm = np.array([0.25, 0.5, 1.0, 2.0, 5.0, 10.0])
+ h = 1e-5
+ params = [ns.beta1, ns.beta2, ns.beta3, ns.lambda_]
+ fields = ["beta1", "beta2", "beta3", "lambda_"]
+ J_analytical = ns.jacobian(ttm)
+ J_numerical = np.zeros_like(J_analytical)
+ for i, (field, p) in enumerate(zip(fields, params)):
+ ns_fwd = ns.model_copy(update={field: Decimal(str(float(p) + h))})
+ ns_bwd = ns.model_copy(update={field: Decimal(str(float(p) - h))})
+ df_fwd = np.array([float(ns_fwd.discount_factor(t)) for t in ttm])
+ df_bwd = np.array([float(ns_bwd.discount_factor(t)) for t in ttm])
+ J_numerical[:, i] = (df_fwd - df_bwd) / (2 * h)
+ np.testing.assert_allclose(J_analytical, J_numerical, rtol=1e-4)
+
+
+# ---------------------------------------------------------------------------
+# calibrate — clean data
+# ---------------------------------------------------------------------------
+
+
+def test_calibrate_recovers_curve_noiseless() -> None:
+ ns_true = _true_curve()
+ ttm = np.linspace(0.25, 10.0, 20)
+ rates = -np.log([float(ns_true.discount_factor(t)) for t in ttm]) / ttm
+ ns_fit = NelsonSiegel.calibrate(ttm, rates)
+ for t in [1.0, 2.0, 5.0]:
+ assert float(ns_fit.discount_factor(t)) == pytest.approx(
+ float(ns_true.discount_factor(t)), rel=1e-4
+ )
+
+
+def test_calibrate_flat_curve() -> None:
+ ttm = np.array([0.5, 1.0, 2.0, 5.0, 10.0])
+ rates = np.full_like(ttm, 0.05)
+ ns = NelsonSiegel.calibrate(ttm, rates)
+ for t in ttm:
+ assert float(ns.discount_factor(t)) == pytest.approx(
+ math.exp(-0.05 * t), rel=1e-4
+ )
+
+
+# ---------------------------------------------------------------------------
+# calibrate — robustness
+# ---------------------------------------------------------------------------
+
+# Crypto-realistic TTM grid: short maturities out to ~2 years
+_CRYPTO_TTMS = np.array([1 / 52, 2 / 52, 1 / 12, 2 / 12, 3 / 12, 6 / 12, 1.0, 2.0])
+
+
+def _true_rates(ns: NelsonSiegel, ttm: np.ndarray) -> np.ndarray:
+ return -np.log([float(ns.discount_factor(t)) for t in ttm]) / ttm
+
+
+def _df_rmse(ns_fit: NelsonSiegel, ns_true: NelsonSiegel, ttm: np.ndarray) -> float:
+ fitted = np.array([float(ns_fit.discount_factor(t)) for t in ttm])
+ true = np.array([float(ns_true.discount_factor(t)) for t in ttm])
+ return float(np.sqrt(np.mean((fitted - true) ** 2)))
+
+
+def test_calibrate_crypto_ttms_noiseless() -> None:
+ ns_true = _true_curve()
+ rates = _true_rates(ns_true, _CRYPTO_TTMS)
+ ns_fit = NelsonSiegel.calibrate(_CRYPTO_TTMS, rates)
+ assert _df_rmse(ns_fit, ns_true, _CRYPTO_TTMS) < 1e-4
+
+
+def test_calibrate_with_gaussian_noise() -> None:
+ rng = np.random.default_rng(42)
+ ns_true = _true_curve()
+ rates = _true_rates(ns_true, _CRYPTO_TTMS)
+ noisy = rates + rng.normal(0, 0.002, size=len(rates))
+ ns_fit = NelsonSiegel.calibrate(_CRYPTO_TTMS, noisy)
+ assert _df_rmse(ns_fit, ns_true, _CRYPTO_TTMS) < 0.005
+
+
+def test_calibrate_robust_to_outliers() -> None:
+ """Two extreme outlier rates must not corrupt the fit materially."""
+ rng = np.random.default_rng(0)
+ ns_true = _true_curve()
+ rates = _true_rates(ns_true, _CRYPTO_TTMS).copy()
+ # inject two bad observations — 5× the true rate
+ outlier_idx = rng.choice(len(rates), size=2, replace=False)
+ rates[outlier_idx] *= 5.0
+ ns_fit = NelsonSiegel.calibrate(_CRYPTO_TTMS, rates)
+ assert _df_rmse(ns_fit, ns_true, _CRYPTO_TTMS) < 0.01
diff --git a/quantflow_tests/test_non_inverse_surface.py b/quantflow_tests/test_non_inverse_surface.py
index 309ba983..6689b09a 100644
--- a/quantflow_tests/test_non_inverse_surface.py
+++ b/quantflow_tests/test_non_inverse_surface.py
@@ -17,6 +17,7 @@
from quantflow.options.bs import black_price
from quantflow.options.inputs import DefaultVolSecurity, OptionType
from quantflow.options.surface import VolSurfaceLoader
+from quantflow.rates.yield_curve import NoDiscount
REF_DATE = datetime(2026, 1, 1, tzinfo=timezone.utc)
MATURITY = datetime(2026, 7, 2, tzinfo=timezone.utc) # roughly 0.5y
@@ -34,7 +35,11 @@ def _black_mid_usd(strike: float, call_put: int, ttm: float) -> Decimal:
def _build_loader(ttm: float) -> VolSurfaceLoader:
- loader = VolSurfaceLoader(asset="TEST")
+ loader = VolSurfaceLoader(
+ asset="TEST",
+ quote_curve=NoDiscount(ref_date=REF_DATE),
+ asset_curve=NoDiscount(ref_date=REF_DATE),
+ )
loader.add_spot(
DefaultVolSecurity.spot(),
bid=Decimal(str(FORWARD)),
@@ -61,7 +66,7 @@ def _build_loader(ttm: float) -> VolSurfaceLoader:
def test_loader_recovers_forward_via_parity() -> None:
"""With matched call/put prices the implied forward equals the true forward."""
loader = _build_loader(ttm=0.5)
- surface = loader.surface(ref_date=REF_DATE)
+ surface = loader.surface()
cross = surface.maturities[0]
assert float(cross.forward.mid) == pytest.approx(FORWARD, rel=1e-6)
@@ -69,12 +74,12 @@ def test_loader_recovers_forward_via_parity() -> None:
def test_bs_recovers_input_volatility() -> None:
"""`bs()` inverts the synthetic non-inverse prices back to the input sigma."""
loader = _build_loader(ttm=0.5)
- surface = loader.surface(ref_date=REF_DATE)
+ surface = loader.surface()
ttm = surface.maturities[0].ttm(surface.ref_date)
# rebuild prices at the actual ttm so the inversion is not biased by the
# slight day-count drift from our nominal 0.5y target.
loader = _build_loader(ttm=ttm)
- surface = loader.surface(ref_date=REF_DATE)
+ surface = loader.surface()
surface.bs()
options = list(surface.option_prices(converged=True))
assert options, "expected converged options on the synthetic surface"
@@ -85,10 +90,10 @@ def test_bs_recovers_input_volatility() -> None:
def test_non_inverse_price_in_forward_space_matches_black() -> None:
"""`price_in_forward_space` is the Black forward-space price."""
loader = _build_loader(ttm=0.5)
- surface = loader.surface(ref_date=REF_DATE)
+ surface = loader.surface()
ttm = surface.maturities[0].ttm(surface.ref_date)
loader = _build_loader(ttm=ttm)
- surface = loader.surface(ref_date=REF_DATE)
+ surface = loader.surface()
for option in surface.option_prices():
log_strike = float(option.log_strike)
call_put = 1 if option.option_type.is_call() else -1
diff --git a/quantflow_tests/test_options.py b/quantflow_tests/test_options.py
index f685cfc5..400b148d 100644
--- a/quantflow_tests/test_options.py
+++ b/quantflow_tests/test_options.py
@@ -95,10 +95,11 @@ def test_term_structure(vol_surface: VolSurface) -> None:
"maturity",
"ttm",
"forward",
+ "implied_forward",
+ "forward_basis",
+ "rate",
"bid_ask_spread",
"basis",
- "rate_percent",
- "fwd_spread_pct",
"open_interest",
"volume",
]
diff --git a/quantflow_tests/test_rates.py b/quantflow_tests/test_rates.py
index 0b947bbf..652c1ceb 100644
--- a/quantflow_tests/test_rates.py
+++ b/quantflow_tests/test_rates.py
@@ -4,22 +4,15 @@
from datetime import datetime, timezone
from decimal import Decimal
-import numpy as np
import pytest
from quantflow.rates.interest_rate import Rate
-from quantflow.rates.nelson_siegel import NelsonSiegel
REF_DATE = datetime(2024, 1, 1, tzinfo=timezone.utc)
ONE_YEAR = datetime(2025, 1, 1, tzinfo=timezone.utc)
TWO_YEARS = datetime(2026, 1, 1, tzinfo=timezone.utc)
-# ---------------------------------------------------------------------------
-# Rate
-# ---------------------------------------------------------------------------
-
-
def test_rate_from_number_stores_rate() -> None:
r = Rate.from_number(0.05)
assert float(r.rate) == pytest.approx(0.05, rel=1e-6)
@@ -94,127 +87,3 @@ def test_from_spot_and_forward_expired_returns_zero_rate() -> None:
forward = Decimal("105")
r = Rate.from_spot_and_forward(spot, forward, ONE_YEAR, REF_DATE)
assert r.rate == Decimal("0")
-
-
-# ---------------------------------------------------------------------------
-# NelsonSiegel
-# ---------------------------------------------------------------------------
-
-
-def _flat_curve(level: float = 0.05) -> NelsonSiegel:
- """Flat curve: beta2=beta3=0, so yield = beta1 for all maturities."""
- return NelsonSiegel(
- beta1=Decimal(str(level)),
- beta2=Decimal("0"),
- beta3=Decimal("0"),
- lambda_=Decimal("1"),
- )
-
-
-def test_nelson_siegel_flat_curve_discount_factor() -> None:
- ns = _flat_curve(0.05)
- ttm = 1.0
- df = ns.discount_factor(ttm)
- expected = math.exp(-0.05 * ttm)
- assert float(df) == pytest.approx(expected, rel=1e-5)
-
-
-def test_nelson_siegel_flat_curve_two_year() -> None:
- ns = _flat_curve(0.04)
- df = ns.discount_factor(2.0)
- expected = math.exp(-0.04 * 2.0)
- assert float(df) == pytest.approx(expected, rel=1e-5)
-
-
-def test_nelson_siegel_discount_factor_zero_ttm() -> None:
- ns = _flat_curve(0.05)
- assert ns.discount_factor(0) == Decimal("1")
-
-
-def test_nelson_siegel_discount_factor_negative_ttm() -> None:
- ns = _flat_curve(0.05)
- assert ns.discount_factor(-1) == Decimal("1")
-
-
-def test_nelson_siegel_instantaneous_forward_rate_at_zero() -> None:
- ns = NelsonSiegel(
- beta1=Decimal("0.04"),
- beta2=Decimal("0.02"),
- beta3=Decimal("0.01"),
- lambda_=Decimal("1"),
- )
- # at ttm=0: f(0) = beta1 + beta2
- fr = ns.instanteous_forward_rate(0)
- assert float(fr) == pytest.approx(0.06, rel=1e-6)
-
-
-def test_nelson_siegel_instantaneous_forward_rate_large_ttm() -> None:
- ns = NelsonSiegel(
- beta1=Decimal("0.04"),
- beta2=Decimal("0.02"),
- beta3=Decimal("0.01"),
- lambda_=Decimal("1"),
- )
- # as ttm -> inf, e^{-ttm/lambda} -> 0, so f -> beta1
- fr = ns.instanteous_forward_rate(100)
- assert float(fr) == pytest.approx(0.04, abs=1e-5)
-
-
-def test_nelson_siegel_discount_factor_increases_with_rate() -> None:
- # higher rate => smaller discount factor
- ns_low = _flat_curve(0.02)
- ns_high = _flat_curve(0.08)
- ttm = 1.0
- assert float(ns_low.discount_factor(ttm)) > float(ns_high.discount_factor(ttm))
-
-
-def test_nelson_siegel_discount_factor_decreases_with_ttm() -> None:
- ns = _flat_curve(0.05)
- df1 = float(ns.discount_factor(1.0))
- df5 = float(ns.discount_factor(5.0))
- assert df1 > df5
-
-
-def test_nelson_siegel_fit_recovers_parameters() -> None:
- ns_true = NelsonSiegel(
- beta1=Decimal("0.04"),
- beta2=Decimal("-0.02"),
- beta3=Decimal("0.03"),
- lambda_=Decimal("1.5"),
- )
- ttm = np.linspace(0.25, 10.0, 20)
- rates = np.array([float(ns_true.discount_factor(t)) for t in ttm])
- # convert discount factors back to zero rates for fitting
- zero_rates = -np.log(rates) / ttm
- ns_fit = NelsonSiegel.fit(ttm, zero_rates)
- for t in [1.0, 2.0, 5.0]:
- assert float(ns_fit.discount_factor(t)) == pytest.approx(
- float(ns_true.discount_factor(t)), rel=1e-4
- )
-
-
-def test_nelson_siegel_fit_flat_curve() -> None:
- ttm = np.array([0.5, 1.0, 2.0, 5.0, 10.0])
- rates = np.full_like(ttm, 0.05)
- ns = NelsonSiegel.fit(ttm, rates)
- for t in ttm:
- assert float(ns.discount_factor(t)) == pytest.approx(
- math.exp(-0.05 * t), rel=1e-4
- )
-
-
-def test_nelson_siegel_consistency_forward_and_discount() -> None:
- """Numerical check: f(tau) ≈ -d ln D / d tau."""
- ns = NelsonSiegel(
- beta1=Decimal("0.04"),
- beta2=Decimal("0.015"),
- beta3=Decimal("0.008"),
- lambda_=Decimal("2"),
- )
- ttm = 1.5
- h = 1e-5
- df_plus = float(ns.discount_factor(ttm + h))
- df_minus = float(ns.discount_factor(ttm - h))
- numerical_fwd = -(math.log(df_plus) - math.log(df_minus)) / (2 * h)
- analytic_fwd = float(ns.instanteous_forward_rate(ttm))
- assert numerical_fwd == pytest.approx(analytic_fwd, rel=1e-4)
diff --git a/uv.lock b/uv.lock
index 34ba55af..fa818ec2 100644
--- a/uv.lock
+++ b/uv.lock
@@ -15,7 +15,7 @@ resolution-markers = [
[[package]]
name = "aio-fluid"
-version = "2.2.4"
+version = "2.2.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "fastapi" },
@@ -26,9 +26,9 @@ dependencies = [
{ name = "uvicorn" },
{ name = "yarl" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/83/26/62910eb224a511879384ef76de80b4debda20a86a777154f7d6286e65ef8/aio_fluid-2.2.4.tar.gz", hash = "sha256:fd28442a0e139a0af0d7ad6fab542e7342ac3b41f2ebd1cb924b0c3d649398d8", size = 432813, upload-time = "2026-04-30T13:59:39.718Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/bb/bd/6cdaccadf4420c33ff14e19bb4bb438972f277724344f18b2d2e2b4fdb6d/aio_fluid-2.2.6.tar.gz", hash = "sha256:b761ecefc065c786f8f110b164aa68ef54b65e4d7d5b271576c0e7601bc973d5", size = 760678, upload-time = "2026-05-12T19:03:46.541Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/63/17/afec86cb6ce0f9a00970db29b7b2c277347bbcfcef2ca7f68d8e104128ba/aio_fluid-2.2.4-py3-none-any.whl", hash = "sha256:5ba5060e0cfff88349224396ca6294039413c453312e0ec78be5496ea6dbc46b", size = 66843, upload-time = "2026-04-30T13:59:38.518Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/4e/bf1e42031be775bca007419cd5ddd4c4fd2c227a577096eee95b32ff2492/aio_fluid-2.2.6-py3-none-any.whl", hash = "sha256:4f83861edcc3e93a91024cc2ceff3cddf7580f3859bd1783b096361a17be5279", size = 67836, upload-time = "2026-05-12T19:03:45.404Z" },
]
[package.optional-dependencies]
@@ -41,11 +41,11 @@ http = [
[[package]]
name = "aiohappyeyeballs"
-version = "2.6.1"
+version = "2.6.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/33/c6/61a2d7b7572279226bb2e7f61d7a19ca7c90da0329c93fa0d560cbf288d8/aiohappyeyeballs-2.6.2.tar.gz", hash = "sha256:e202810ee718bd01fc6ef49e8ea53d023d5cb6b581076d7925aa499fa55dbe64", size = 22591, upload-time = "2026-05-20T15:12:24.631Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl", hash = "sha256:4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4", size = 15062, upload-time = "2026-05-20T15:12:23.328Z" },
]
[[package]]
@@ -231,6 +231,46 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/3f/d0/7b958df957e4827837b590944008f0b28078f552b451f7407b4b3d54f574/asciichartpy-1.5.25-py2.py3-none-any.whl", hash = "sha256:33c417a3c8ef7d0a11b98eb9ea6dd9b2c1b17559e539b207a17d26d4302d0258", size = 7228, upload-time = "2020-08-17T02:07:16.386Z" },
]
+[[package]]
+name = "ast-serialize"
+version = "0.5.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/81/9d/09e27731bd5864a9ce04e3244074e674bb8936bf62b45e0357248717adac/ast_serialize-0.5.0.tar.gz", hash = "sha256:5880091bfe6f4f986f22866375c2e884843e7a0b6343ae41aeea659613d879b6", size = 61157, upload-time = "2026-05-17T17:48:29.429Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c0/9a/13dde51ba9e15f8b97957ab7cb0120d0e381524d651c6bd630b9c359227f/ast_serialize-0.5.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8f5c14f169eb0972c0c21bada5358b23d6047c76583b005234f865b11f1fa00a", size = 1183520, upload-time = "2026-05-17T17:47:30.831Z" },
+ { url = "https://files.pythonhosted.org/packages/37/de/5a7f0a9fe68944f536632a5af84676739c7d2582be42deb082634bf3a754/ast_serialize-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7d1a2de9de5be04652f0ed60738356ef94f66db37924a9499fffe98dc491aa0b", size = 1175779, upload-time = "2026-05-17T17:47:32.551Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/81/0bb853e76e4f6e9a1855d569003c59e19ffac45f7079d91505d1bb212f92/ast_serialize-0.5.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be5173fb66f9b49026d9d5a2ff0fc7c7009077107c0eb285b2d60fdf1fe10bd1", size = 1233750, upload-time = "2026-05-17T17:47:34.731Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/d3/4cf705beeccc08754d0bbda99aefff26110e209b9a07ac8a6b60eec48531/ast_serialize-0.5.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8015cd071ac1339924ee2b8098c93e00e155f30a16f40ec9816fcf84f4753f6", size = 1235942, upload-time = "2026-05-17T17:47:36.287Z" },
+ { url = "https://files.pythonhosted.org/packages/26/c8/ee097e437ea27dd2b8b227865c875492b585650a5802a22d82b304c8201b/ast_serialize-0.5.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5499e8797edff2a9186aa313ed382c6b422e798e9332d9953badcee6e69a88f2", size = 1442517, upload-time = "2026-05-17T17:47:38.17Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/bd/68063442838f1ba68ec72b5436430bc75b3bb17a1a3c3063f09b0c05ae2b/ast_serialize-0.5.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6848f2a093fb5548751a9a09bff8fcd229e2bbeb0e3331f391b6ae6d26cd9903", size = 1254081, upload-time = "2026-05-17T17:47:39.826Z" },
+ { url = "https://files.pythonhosted.org/packages/50/e2/1e520793bc6a4e4524a6ab022391e827825eaa0c3811828bfdc6852eca26/ast_serialize-0.5.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:832d4c998e0b091fd60a6d6bceee535483c4d490de9ba85003af835225719261", size = 1259910, upload-time = "2026-05-17T17:47:41.369Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/e1/49b60f467979979cfe6913b43948ff25bca971ad0591d181812f163a988e/ast_serialize-0.5.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:16db7c62ec0b8efe1d7afd283a388d8f74f2605d56032e5a37747d2de8dba027", size = 1250678, upload-time = "2026-05-17T17:47:43.702Z" },
+ { url = "https://files.pythonhosted.org/packages/74/ba/66ab9555de6275677566f6574e5ef6c29cb185ea866f643bc06f8280a8ee/ast_serialize-0.5.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf5eb061eb5bccade4128ad42da33787d72f6013809cd1b590376ece8b3c937", size = 1301603, upload-time = "2026-05-17T17:47:46.256Z" },
+ { url = "https://files.pythonhosted.org/packages/66/42/6aca9b9abc710014b2be9059689e5dd1679339e78f567ffb4d255a9e2050/ast_serialize-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:104e4a35bd7c124173c41760ef9aaea17ddb3f86c65cb643671d59afbe3ee94c", size = 1410332, upload-time = "2026-05-17T17:47:47.899Z" },
+ { url = "https://files.pythonhosted.org/packages/47/68/2f76594432a22581ecf878b5e75a9b8601c24b2241cf0bbeb1e21fcf370c/ast_serialize-0.5.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:36be371028fc1675acb38a331bde160dbab7ff907fdf00b67eb6911aa106951b", size = 1509979, upload-time = "2026-05-17T17:47:50.942Z" },
+ { url = "https://files.pythonhosted.org/packages/40/ac/a93c9b58292653f6c595752f677a08e608f903b710594909e9231a389b3b/ast_serialize-0.5.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:061ee58bdb52341c8201a6df41182a977736bae3b7ded87ca7176ca25a8a47ab", size = 1505002, upload-time = "2026-05-17T17:47:54.093Z" },
+ { url = "https://files.pythonhosted.org/packages/14/2e/b278f68c497ee2f1d1576cbbef8db5281cd4a5f2db040537592ac9c8862e/ast_serialize-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b15219e9cdc9f53f6f4cb51c009203507228226148c05c5e8fe451c28b435eb3", size = 1456231, upload-time = "2026-05-17T17:47:56.311Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/43/419be1c566a4c504cd8fd60ce2f84e790f295495c0f327cfaeadf3d51012/ast_serialize-0.5.0-cp314-cp314t-win32.whl", hash = "sha256:842d1c004bb466c7df036f95fabef789570541922b10976b12f5592a69cf0b38", size = 1058668, upload-time = "2026-05-17T17:47:58.305Z" },
+ { url = "https://files.pythonhosted.org/packages/03/6f/c9d4d549295ed05111aeb8853232d1afd9d0a179fddb01eeffbb3a4a6842/ast_serialize-0.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b0c06d760909b095cc466356dfccd05a1c7233a6ca191c020dca2c6a6f16c24c", size = 1101075, upload-time = "2026-05-17T17:48:00.35Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/8e/d00c5ab30c58222e07d62956fca86c59d91b9ad32997e633c38b526623a3/ast_serialize-0.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:787baedb0262cc49e8ce37cc15c00ae818e46a165a3b36f5e21ed174998104cb", size = 1075347, upload-time = "2026-05-17T17:48:01.753Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/9e/dc2530acb3a60dc6e46d65abf27d1d9f86721694757906a148d90a6860de/ast_serialize-0.5.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:0668aa9459cfa8c9c49ddd2163ebcf43088ba045ef7492af6fe22e0098303101", size = 1191380, upload-time = "2026-05-17T17:48:03.738Z" },
+ { url = "https://files.pythonhosted.org/packages/26/0a/bd3d18a582f273d6c843d16bb9e22e9e16365ff7991e92f18f798e9f1224/ast_serialize-0.5.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:bf683d6363edf2b39eed6b6d4fe22d34b6203867a67e27134d9e2a2680c4bc4a", size = 1183879, upload-time = "2026-05-17T17:48:05.463Z" },
+ { url = "https://files.pythonhosted.org/packages/40/ae/1f919100f8620887af58fcc381c61a1f218cdf89c6e155f87b213e61010a/ast_serialize-0.5.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc22cf0c9be65e71cf88fda130af60d61eb4a79370ad4cfe7900d48a4aa2211", size = 1244529, upload-time = "2026-05-17T17:48:07.008Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/ca/6376559dcce707cdbc1d0d9a13c8d3baaaa501e949ce0ebdc4230cd881aa/ast_serialize-0.5.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f66173891548c9f2726bf27957b41cabce12fa679dc6da505ddbde4d4b3b31cf", size = 1240560, upload-time = "2026-05-17T17:48:08.46Z" },
+ { url = "https://files.pythonhosted.org/packages/35/b2/a620e206b5aeb7efbf2710336df57d457cffbb3991076bbcc1147ef9abd4/ast_serialize-0.5.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e42d729ef2be96a14efbad355093284739e3670ece3e534f82cc8832790911d9", size = 1451172, upload-time = "2026-05-17T17:48:09.922Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/e0/4ad5c04c24a40481b2935ce9a0ccdb6023dc8b667167d06ae530cc3512f2/ast_serialize-0.5.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b725026bafa801dbd7310eb13a75f0a2e370e7e51b2cb225f9d21fcfadf919ee", size = 1265072, upload-time = "2026-05-17T17:48:11.469Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/71/4d1d479aa56d0101c40e17720c3d6ac2af7269ea0487a80b18e7bfd1a5b7/ast_serialize-0.5.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b54f60c1d78767a53b67eaa663f0dfac3afe606aa07f1301572f588b73d64809", size = 1270488, upload-time = "2026-05-17T17:48:13.575Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/4f/0de1bbe06f6edef9fde4ed12ca8e7b3ec7e6e2bd4e672c5af487f7957665/ast_serialize-0.5.0-cp39-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:27d51654fc240a1e87e742d353d98eb45b75f62f129086b3596ab53df2ac2a43", size = 1260702, upload-time = "2026-05-17T17:48:15.141Z" },
+ { url = "https://files.pythonhosted.org/packages/75/61/e00872439cfdddcc3c1b6cdaa6e5d904ba8e26a18807c67c4e14409d0ca8/ast_serialize-0.5.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c36237c46dd1674542f2109740ea5ea485a169bf1431939ada0434e17934", size = 1311182, upload-time = "2026-05-17T17:48:16.779Z" },
+ { url = "https://files.pythonhosted.org/packages/76/8e/699a5b955f7926956c95e9e1d74132acad73c2fe7a426f94da89123c20aa/ast_serialize-0.5.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1943db345233cc7194a470f13afa9c59772c0b123dea0c9414c4d4ca54369759", size = 1421410, upload-time = "2026-05-17T17:48:18.527Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/ae/d5b7626874478997adc7a29ab28accf21e596fb590c944290401dfd0b29e/ast_serialize-0.5.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df1c00022cbbcb064bfaa505aa9c9295362443ce5dacb459d1331d3da353f887", size = 1516587, upload-time = "2026-05-17T17:48:20.133Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/ce/b59e02a82d9c4244d64cde502e0b00e83e38816abe19155ceb5437402c7f/ast_serialize-0.5.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:cae65289fc456fde04af979a2be09302ef5d8ab92ef23e596d6746dc267ada27", size = 1515171, upload-time = "2026-05-17T17:48:21.921Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/38/d8d90042747d05aa08d4efcf1c99035a5f670a6bf4c214d31644392afbca/ast_serialize-0.5.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:239a4c354e8d676e9d94631d1d4a64edc6b266f86ff3a5a80aedd344f342c01d", size = 1464668, upload-time = "2026-05-17T17:48:23.544Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/51/5b840c4df7334104cecffa28f23904fe81ca89ca223d2450e288de39fd3c/ast_serialize-0.5.0-cp39-abi3-win32.whl", hash = "sha256:143a4ef63285a075871908fda3672dc21864b83a8ec3ee12304aa3e4c5387b9a", size = 1068311, upload-time = "2026-05-17T17:48:25.027Z" },
+ { url = "https://files.pythonhosted.org/packages/41/11/ca5672c7d491825bc4cd6702dea106a6b60d928707712ec257c7833ae476/ast_serialize-0.5.0-cp39-abi3-win_amd64.whl", hash = "sha256:cf25572c526add400f26a4750dc6ce0c3bb93fc1f75e7ae0cad4ce4f2cd5c590", size = 1108931, upload-time = "2026-05-17T17:48:26.591Z" },
+ { url = "https://files.pythonhosted.org/packages/45/19/cc8bd127d28a43da249aa955cfd164cf8fd534e79e42cea96c4854d72fd0/ast_serialize-0.5.0-cp39-abi3-win_arm64.whl", hash = "sha256:92a31c9c20d25a076edaeec76b128a3535d74a24f340b9a8a7e96c9b86dc9642", size = 1081181, upload-time = "2026-05-17T17:48:28.122Z" },
+]
+
[[package]]
name = "async-timeout"
version = "5.0.1"
@@ -286,7 +326,7 @@ wheels = [
[[package]]
name = "black"
-version = "26.3.1"
+version = "26.5.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
@@ -296,29 +336,29 @@ dependencies = [
{ name = "platformdirs" },
{ name = "pytokens" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/e1/c5/61175d618685d42b005847464b8fb4743a67b1b8fdb75e50e5a96c31a27a/black-26.3.1.tar.gz", hash = "sha256:2c50f5063a9641c7eed7795014ba37b0f5fa227f3d408b968936e24bc0566b07", size = 666155, upload-time = "2026-03-12T03:36:03.593Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/17/57/5f11c92861f9c92eb9dddf515530bc2d06db843e44bdcf1c83c1427824bc/black-26.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:28ef38aee69e4b12fda8dba75e21f9b4f979b490c8ac0baa7cb505369ac9e1ff", size = 1851987, upload-time = "2026-03-12T03:40:06.248Z" },
- { url = "https://files.pythonhosted.org/packages/54/aa/340a1463660bf6831f9e39646bf774086dbd8ca7fc3cded9d59bbdf4ad0a/black-26.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf9bf162ed91a26f1adba8efda0b573bc6924ec1408a52cc6f82cb73ec2b142c", size = 1689499, upload-time = "2026-03-12T03:40:07.642Z" },
- { url = "https://files.pythonhosted.org/packages/f3/01/b726c93d717d72733da031d2de10b92c9fa4c8d0c67e8a8a372076579279/black-26.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:474c27574d6d7037c1bc875a81d9be0a9a4f9ee95e62800dab3cfaadbf75acd5", size = 1754369, upload-time = "2026-03-12T03:40:09.279Z" },
- { url = "https://files.pythonhosted.org/packages/e3/09/61e91881ca291f150cfc9eb7ba19473c2e59df28859a11a88248b5cbbc4d/black-26.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e9d0d86df21f2e1677cc4bd090cd0e446278bcbbe49bf3659c308c3e402843e", size = 1413613, upload-time = "2026-03-12T03:40:10.943Z" },
- { url = "https://files.pythonhosted.org/packages/16/73/544f23891b22e7efe4d8f812371ab85b57f6a01b2fc45e3ba2e52ba985b8/black-26.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:9a5e9f45e5d5e1c5b5c29b3bd4265dcc90e8b92cf4534520896ed77f791f4da5", size = 1219719, upload-time = "2026-03-12T03:40:12.597Z" },
- { url = "https://files.pythonhosted.org/packages/dc/f8/da5eae4fc75e78e6dceb60624e1b9662ab00d6b452996046dfa9b8a6025b/black-26.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e6f89631eb88a7302d416594a32faeee9fb8fb848290da9d0a5f2903519fc1", size = 1895920, upload-time = "2026-03-12T03:40:13.921Z" },
- { url = "https://files.pythonhosted.org/packages/2c/9f/04e6f26534da2e1629b2b48255c264cabf5eedc5141d04516d9d68a24111/black-26.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cd2012d35b47d589cb8a16faf8a32ef7a336f56356babd9fcf70939ad1897f", size = 1718499, upload-time = "2026-03-12T03:40:15.239Z" },
- { url = "https://files.pythonhosted.org/packages/04/91/a5935b2a63e31b331060c4a9fdb5a6c725840858c599032a6f3aac94055f/black-26.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f76ff19ec5297dd8e66eb64deda23631e642c9393ab592826fd4bdc97a4bce7", size = 1794994, upload-time = "2026-03-12T03:40:17.124Z" },
- { url = "https://files.pythonhosted.org/packages/e7/0a/86e462cdd311a3c2a8ece708d22aba17d0b2a0d5348ca34b40cdcbea512e/black-26.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ddb113db38838eb9f043623ba274cfaf7d51d5b0c22ecb30afe58b1bb8322983", size = 1420867, upload-time = "2026-03-12T03:40:18.83Z" },
- { url = "https://files.pythonhosted.org/packages/5b/e5/22515a19cb7eaee3440325a6b0d95d2c0e88dd180cb011b12ae488e031d1/black-26.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:dfdd51fc3e64ea4f35873d1b3fb25326773d55d2329ff8449139ebaad7357efb", size = 1230124, upload-time = "2026-03-12T03:40:20.425Z" },
- { url = "https://files.pythonhosted.org/packages/f5/77/5728052a3c0450c53d9bb3945c4c46b91baa62b2cafab6801411b6271e45/black-26.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:855822d90f884905362f602880ed8b5df1b7e3ee7d0db2502d4388a954cc8c54", size = 1895034, upload-time = "2026-03-12T03:40:21.813Z" },
- { url = "https://files.pythonhosted.org/packages/52/73/7cae55fdfdfbe9d19e9a8d25d145018965fe2079fa908101c3733b0c55a0/black-26.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8a33d657f3276328ce00e4d37fe70361e1ec7614da5d7b6e78de5426cb56332f", size = 1718503, upload-time = "2026-03-12T03:40:23.666Z" },
- { url = "https://files.pythonhosted.org/packages/e1/87/af89ad449e8254fdbc74654e6467e3c9381b61472cc532ee350d28cfdafb/black-26.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1cd08e99d2f9317292a311dfe578fd2a24b15dbce97792f9c4d752275c1fa56", size = 1793557, upload-time = "2026-03-12T03:40:25.497Z" },
- { url = "https://files.pythonhosted.org/packages/43/10/d6c06a791d8124b843bf325ab4ac7d2f5b98731dff84d6064eafd687ded1/black-26.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:c7e72339f841b5a237ff14f7d3880ddd0fc7f98a1199e8c4327f9a4f478c1839", size = 1422766, upload-time = "2026-03-12T03:40:27.14Z" },
- { url = "https://files.pythonhosted.org/packages/59/4f/40a582c015f2d841ac24fed6390bd68f0fc896069ff3a886317959c9daf8/black-26.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc622538b430aa4c8c853f7f63bc582b3b8030fd8c80b70fb5fa5b834e575c2", size = 1232140, upload-time = "2026-03-12T03:40:28.882Z" },
- { url = "https://files.pythonhosted.org/packages/d5/da/e36e27c9cebc1311b7579210df6f1c86e50f2d7143ae4fcf8a5017dc8809/black-26.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2d6bfaf7fd0993b420bed691f20f9492d53ce9a2bcccea4b797d34e947318a78", size = 1889234, upload-time = "2026-03-12T03:40:30.964Z" },
- { url = "https://files.pythonhosted.org/packages/0e/7b/9871acf393f64a5fa33668c19350ca87177b181f44bb3d0c33b2d534f22c/black-26.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f89f2ab047c76a9c03f78d0d66ca519e389519902fa27e7a91117ef7611c0568", size = 1720522, upload-time = "2026-03-12T03:40:32.346Z" },
- { url = "https://files.pythonhosted.org/packages/03/87/e766c7f2e90c07fb7586cc787c9ae6462b1eedab390191f2b7fc7f6170a9/black-26.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b07fc0dab849d24a80a29cfab8d8a19187d1c4685d8a5e6385a5ce323c1f015f", size = 1787824, upload-time = "2026-03-12T03:40:33.636Z" },
- { url = "https://files.pythonhosted.org/packages/ac/94/2424338fb2d1875e9e83eed4c8e9c67f6905ec25afd826a911aea2b02535/black-26.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:0126ae5b7c09957da2bdbd91a9ba1207453feada9e9fe51992848658c6c8e01c", size = 1445855, upload-time = "2026-03-12T03:40:35.442Z" },
- { url = "https://files.pythonhosted.org/packages/86/43/0c3338bd928afb8ee7471f1a4eec3bdbe2245ccb4a646092a222e8669840/black-26.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:92c0ec1f2cc149551a2b7b47efc32c866406b6891b0ee4625e95967c8f4acfb1", size = 1258109, upload-time = "2026-03-12T03:40:36.832Z" },
- { url = "https://files.pythonhosted.org/packages/8e/0d/52d98722666d6fc6c3dd4c76df339501d6efd40e0ff95e6186a7b7f0befd/black-26.3.1-py3-none-any.whl", hash = "sha256:2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b", size = 207542, upload-time = "2026-03-12T03:36:01.668Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/c0/37/5628dd55bf2b34257fc7603f0fe97c40e3aaf24265f416a9c85c95ca1436/black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73", size = 679439, upload-time = "2026-05-18T16:53:36.107Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4b/96/3c3e09f09f44a37aac36b178a279cd19aa7001bd796187a7b162a294c81f/black-26.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96ae2c733b2aabdd9986e2c5df628ff3473676cd1c5faded1ff496cf6d74083c", size = 1970639, upload-time = "2026-05-18T17:05:11.461Z" },
+ { url = "https://files.pythonhosted.org/packages/83/ea/5ad117b9ee3ecd933c712bcbae610006e5b7cc9f41c526cd7ed3b6c4124c/black-26.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e48b87e03bf109288e55cfceadcfa15ff5470aca2851a851950ed2926f450d7", size = 1792130, upload-time = "2026-05-18T17:05:12.983Z" },
+ { url = "https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59", size = 1846134, upload-time = "2026-05-18T17:05:14.506Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/5b/0b39b3a5917f0657ac014ad2edb58c139553a478adfe7f817abf1622ff6e/black-26.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:30d3c14661f2792e9142cce3eeeb1cbc175b3eb5f733be0c8eeb99651e52b0c3", size = 1478883, upload-time = "2026-05-18T17:05:16.542Z" },
+ { url = "https://files.pythonhosted.org/packages/4c/48/dc222692e0f95030db1bbfb6c857e76858bad09058221ea7aae815255327/black-26.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:1ef92b76f7733f282fd096ea406200b5a286c42947412b0eaff3a74e3616cefe", size = 1277776, upload-time = "2026-05-18T17:05:18.029Z" },
+ { url = "https://files.pythonhosted.org/packages/24/99/7744b906703228264ef73bdd534df88ec1ef3de45c4e78f6d31b9e32d0c9/black-26.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ad6fa01f941920f54f2bbb35f3df7673428a0ef98a0b0840c2eaef3b110efa8", size = 2012518, upload-time = "2026-05-18T17:05:20.108Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/c0/c5a3b1636dfd09c42534f2b3cf33506814f6d3e066fb0879ffa16c1ae860/black-26.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3915f256e75a2d7cf88d8953d37f780455dc586cc72dee059c528fe77f581217", size = 1816016, upload-time = "2026-05-18T17:05:21.84Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d", size = 1884150, upload-time = "2026-05-18T17:05:23.546Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/33/dafc5808c2af43672912111d7c3354af1615f7e2be3bed7a878461abbe4d/black-26.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:a1dca32d9f1784af512a13410ec204c6f7f0aa9797a111c42e1c03449821c264", size = 1486825, upload-time = "2026-05-18T17:05:25.004Z" },
+ { url = "https://files.pythonhosted.org/packages/82/14/b965ee6ad2a311f28bdbf692def3ee9848d2ae289dab28b27657fcee3e78/black-26.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1037d5ac7b7b310b2632ad867ec8d0e4c4819dcdb0b820f63135da746a24e418", size = 1288646, upload-time = "2026-05-18T17:05:26.477Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/5c/c384363980e11e25ca6b93205949bb331fbf35f4e0dbec376dfa6326cec8/black-26.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b36cf2ddf5566e205f6535f782a62194a184d33e175b64ae8c40b1737522be3", size = 2009020, upload-time = "2026-05-18T17:05:28.132Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/df/9f31c5e0babbfed77d505fc5d120beb98b21b33feaeded3924ea941fe360/black-26.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f7ea64ebfa01b50f693508fc39f875e264446d3b097088f84f203b9d09618a0", size = 1813335, upload-time = "2026-05-18T17:05:31.266Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294", size = 1881614, upload-time = "2026-05-18T17:05:32.718Z" },
+ { url = "https://files.pythonhosted.org/packages/49/ad/b4e0d9365ba8ac34f6bbab62a4b1b2dd5d618fac3fa1b8db968c844201b5/black-26.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:e1a26503279b6b310669fb0b219c39e4820b77e8189fe80f522bb511f247db0a", size = 1488925, upload-time = "2026-05-18T17:05:34.259Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/4b/652b859bf5df88a751c30451b09338f7fd26a77d1271c666992f836b7711/black-26.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c34b25da232ead53a6f335b76dbea124f4d152ad568b9080d6f944bc2b34b52", size = 1289883, upload-time = "2026-05-18T17:05:36.019Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/16/a8da8eb208c51c7f4ce74609a45d0dcc6d8a2141e45e81ee5289d1bb0d59/black-26.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e88976690a64b0af98312ca958415849cb42423423c5f2ee74af4b49a97a2168", size = 2004800, upload-time = "2026-05-18T17:05:38.182Z" },
+ { url = "https://files.pythonhosted.org/packages/11/8a/a479296a19e383b70a725882a6cf3d786540601ff03cabbaaf1cce864c5a/black-26.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32d5ea7f6c8bdfa6e648326ebca1f02b0764e2a029edc6f8dce2627e19d468c3", size = 1815576, upload-time = "2026-05-18T17:05:40.309Z" },
+ { url = "https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18", size = 1877927, upload-time = "2026-05-18T17:05:42.463Z" },
+ { url = "https://files.pythonhosted.org/packages/66/76/302e313964bcff7e28df329d39f84f5270095730d85ff0acc260610a0d82/black-26.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:577f21094ea469ef92ec1adaf2c9441a226d2144d01a5be2fa823cecf6543e50", size = 1511860, upload-time = "2026-05-18T17:05:43.943Z" },
+ { url = "https://files.pythonhosted.org/packages/27/4e/a3827e35e0e567f9f9ee59e2a0ab979267dca98718f25547ca8c6733afd4/black-26.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:ed1a20af114c301a0269bf01163d51dbef72737fd65f850001e7cbe7f3c7abae", size = 1316632, upload-time = "2026-05-18T17:05:45.521Z" },
+ { url = "https://files.pythonhosted.org/packages/94/51/f975cae76d44274cc2868dc9040ac5d58d464784610234455b4e7b19c6ef/black-26.5.1-py3-none-any.whl", hash = "sha256:4ed7f7da04046d2e488437170797d3b4a4ad83906683bcb7dfc68b673bbce5e2", size = 213693, upload-time = "2026-05-18T16:53:33.964Z" },
]
[[package]]
@@ -343,11 +383,11 @@ holidays = [
[[package]]
name = "certifi"
-version = "2026.4.22"
+version = "2026.5.20"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" },
+ { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" },
]
[[package]]
@@ -525,14 +565,14 @@ wheels = [
[[package]]
name = "click"
-version = "8.3.3"
+version = "8.4.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 328061, upload-time = "2026-04-22T15:11:27.506Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/23/e4/796662cd90cf80e3a363c99db2b88e0e394b988a575f60a17e16440cd011/click-8.4.0.tar.gz", hash = "sha256:638f1338fe1235c8f4e008e4a8a254fb5c5fbdcbb40ece3c9142ebb78e792973", size = 350843, upload-time = "2026-05-17T00:47:58.425Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613", size = 110502, upload-time = "2026-04-22T15:11:25.044Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/ae/8e92f8058baf87f6c7d86ee7e457668690195cc77efedb8d3797a06e3940/click-8.4.0-py3-none-any.whl", hash = "sha256:40c50b7c6c6adac2823d411041ec84f3f103f1b280d5e9ce0d7f998995832f81", size = 116147, upload-time = "2026-05-17T00:47:56.842Z" },
]
[[package]]
@@ -546,101 +586,101 @@ wheels = [
[[package]]
name = "coverage"
-version = "7.13.5"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9d/e0/70553e3000e345daff267cec284ce4cbf3fc141b6da229ac52775b5428f1/coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179", size = 915967, upload-time = "2026-03-17T10:33:18.341Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d", size = 219381, upload-time = "2026-03-17T10:30:14.68Z" },
- { url = "https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587", size = 219880, upload-time = "2026-03-17T10:30:16.231Z" },
- { url = "https://files.pythonhosted.org/packages/55/2f/e0e5b237bffdb5d6c530ce87cc1d413a5b7d7dfd60fb067ad6d254c35c76/coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642", size = 250303, upload-time = "2026-03-17T10:30:17.748Z" },
- { url = "https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b", size = 252218, upload-time = "2026-03-17T10:30:19.804Z" },
- { url = "https://files.pythonhosted.org/packages/da/69/2f47bb6fa1b8d1e3e5d0c4be8ccb4313c63d742476a619418f85740d597b/coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686", size = 254326, upload-time = "2026-03-17T10:30:21.321Z" },
- { url = "https://files.pythonhosted.org/packages/d5/d0/79db81da58965bd29dabc8f4ad2a2af70611a57cba9d1ec006f072f30a54/coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743", size = 256267, upload-time = "2026-03-17T10:30:23.094Z" },
- { url = "https://files.pythonhosted.org/packages/e5/32/d0d7cc8168f91ddab44c0ce4806b969df5f5fdfdbb568eaca2dbc2a04936/coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75", size = 250430, upload-time = "2026-03-17T10:30:25.311Z" },
- { url = "https://files.pythonhosted.org/packages/4d/06/a055311d891ddbe231cd69fdd20ea4be6e3603ffebddf8704b8ca8e10a3c/coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209", size = 252017, upload-time = "2026-03-17T10:30:27.284Z" },
- { url = "https://files.pythonhosted.org/packages/d6/f6/d0fd2d21e29a657b5f77a2fe7082e1568158340dceb941954f776dce1b7b/coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a", size = 250080, upload-time = "2026-03-17T10:30:29.481Z" },
- { url = "https://files.pythonhosted.org/packages/4e/ab/0d7fb2efc2e9a5eb7ddcc6e722f834a69b454b7e6e5888c3a8567ecffb31/coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e", size = 253843, upload-time = "2026-03-17T10:30:31.301Z" },
- { url = "https://files.pythonhosted.org/packages/ba/6f/7467b917bbf5408610178f62a49c0ed4377bb16c1657f689cc61470da8ce/coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd", size = 249802, upload-time = "2026-03-17T10:30:33.358Z" },
- { url = "https://files.pythonhosted.org/packages/75/2c/1172fb689df92135f5bfbbd69fc83017a76d24ea2e2f3a1154007e2fb9f8/coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8", size = 250707, upload-time = "2026-03-17T10:30:35.2Z" },
- { url = "https://files.pythonhosted.org/packages/67/21/9ac389377380a07884e3b48ba7a620fcd9dbfaf1d40565facdc6b36ec9ef/coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf", size = 221880, upload-time = "2026-03-17T10:30:36.775Z" },
- { url = "https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9", size = 222816, upload-time = "2026-03-17T10:30:38.891Z" },
- { url = "https://files.pythonhosted.org/packages/12/a6/1d3f6155fb0010ca68eba7fe48ca6c9da7385058b77a95848710ecf189b1/coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028", size = 221483, upload-time = "2026-03-17T10:30:40.463Z" },
- { url = "https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01", size = 219554, upload-time = "2026-03-17T10:30:42.208Z" },
- { url = "https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422", size = 219908, upload-time = "2026-03-17T10:30:43.906Z" },
- { url = "https://files.pythonhosted.org/packages/29/72/20b917c6793af3a5ceb7fb9c50033f3ec7865f2911a1416b34a7cfa0813b/coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f", size = 251419, upload-time = "2026-03-17T10:30:45.545Z" },
- { url = "https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5", size = 254159, upload-time = "2026-03-17T10:30:47.204Z" },
- { url = "https://files.pythonhosted.org/packages/9d/00/7b0edcfe64e2ed4c0340dac14a52ad0f4c9bd0b8b5e531af7d55b703db7c/coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376", size = 255270, upload-time = "2026-03-17T10:30:48.812Z" },
- { url = "https://files.pythonhosted.org/packages/93/89/7ffc4ba0f5d0a55c1e84ea7cee39c9fc06af7b170513d83fbf3bbefce280/coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256", size = 257538, upload-time = "2026-03-17T10:30:50.77Z" },
- { url = "https://files.pythonhosted.org/packages/81/bd/73ddf85f93f7e6fa83e77ccecb6162d9415c79007b4bc124008a4995e4a7/coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c", size = 251821, upload-time = "2026-03-17T10:30:52.5Z" },
- { url = "https://files.pythonhosted.org/packages/a0/81/278aff4e8dec4926a0bcb9486320752811f543a3ce5b602cc7a29978d073/coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5", size = 253191, upload-time = "2026-03-17T10:30:54.543Z" },
- { url = "https://files.pythonhosted.org/packages/70/ee/fe1621488e2e0a58d7e94c4800f0d96f79671553488d401a612bebae324b/coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09", size = 251337, upload-time = "2026-03-17T10:30:56.663Z" },
- { url = "https://files.pythonhosted.org/packages/37/a6/f79fb37aa104b562207cc23cb5711ab6793608e246cae1e93f26b2236ed9/coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9", size = 255404, upload-time = "2026-03-17T10:30:58.427Z" },
- { url = "https://files.pythonhosted.org/packages/75/f0/ed15262a58ec81ce457ceb717b7f78752a1713556b19081b76e90896e8d4/coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf", size = 250903, upload-time = "2026-03-17T10:31:00.093Z" },
- { url = "https://files.pythonhosted.org/packages/0f/e9/9129958f20e7e9d4d56d51d42ccf708d15cac355ff4ac6e736e97a9393d2/coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c", size = 252780, upload-time = "2026-03-17T10:31:01.916Z" },
- { url = "https://files.pythonhosted.org/packages/a4/d7/0ad9b15812d81272db94379fe4c6df8fd17781cc7671fdfa30c76ba5ff7b/coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf", size = 222093, upload-time = "2026-03-17T10:31:03.642Z" },
- { url = "https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810", size = 222900, upload-time = "2026-03-17T10:31:05.651Z" },
- { url = "https://files.pythonhosted.org/packages/d4/fa/2238c2ad08e35cf4f020ea721f717e09ec3152aea75d191a7faf3ef009a8/coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de", size = 221515, upload-time = "2026-03-17T10:31:07.293Z" },
- { url = "https://files.pythonhosted.org/packages/74/8c/74fedc9663dcf168b0a059d4ea756ecae4da77a489048f94b5f512a8d0b3/coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1", size = 219576, upload-time = "2026-03-17T10:31:09.045Z" },
- { url = "https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3", size = 219942, upload-time = "2026-03-17T10:31:10.708Z" },
- { url = "https://files.pythonhosted.org/packages/5f/13/93419671cee82b780bab7ea96b67c8ef448f5f295f36bf5031154ec9a790/coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26", size = 250935, upload-time = "2026-03-17T10:31:12.392Z" },
- { url = "https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3", size = 253541, upload-time = "2026-03-17T10:31:14.247Z" },
- { url = "https://files.pythonhosted.org/packages/4e/5e/3ee3b835647be646dcf3c65a7c6c18f87c27326a858f72ab22c12730773d/coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b", size = 254780, upload-time = "2026-03-17T10:31:16.193Z" },
- { url = "https://files.pythonhosted.org/packages/44/b3/cb5bd1a04cfcc49ede6cd8409d80bee17661167686741e041abc7ee1b9a9/coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a", size = 256912, upload-time = "2026-03-17T10:31:17.89Z" },
- { url = "https://files.pythonhosted.org/packages/1b/66/c1dceb7b9714473800b075f5c8a84f4588f887a90eb8645282031676e242/coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969", size = 251165, upload-time = "2026-03-17T10:31:19.605Z" },
- { url = "https://files.pythonhosted.org/packages/b7/62/5502b73b97aa2e53ea22a39cf8649ff44827bef76d90bf638777daa27a9d/coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161", size = 252908, upload-time = "2026-03-17T10:31:21.312Z" },
- { url = "https://files.pythonhosted.org/packages/7d/37/7792c2d69854397ca77a55c4646e5897c467928b0e27f2d235d83b5d08c6/coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15", size = 250873, upload-time = "2026-03-17T10:31:23.565Z" },
- { url = "https://files.pythonhosted.org/packages/a3/23/bc866fb6163be52a8a9e5d708ba0d3b1283c12158cefca0a8bbb6e247a43/coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1", size = 255030, upload-time = "2026-03-17T10:31:25.58Z" },
- { url = "https://files.pythonhosted.org/packages/7d/8b/ef67e1c222ef49860701d346b8bbb70881bef283bd5f6cbba68a39a086c7/coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6", size = 250694, upload-time = "2026-03-17T10:31:27.316Z" },
- { url = "https://files.pythonhosted.org/packages/46/0d/866d1f74f0acddbb906db212e096dee77a8e2158ca5e6bb44729f9d93298/coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17", size = 252469, upload-time = "2026-03-17T10:31:29.472Z" },
- { url = "https://files.pythonhosted.org/packages/7a/f5/be742fec31118f02ce42b21c6af187ad6a344fed546b56ca60caacc6a9a0/coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85", size = 222112, upload-time = "2026-03-17T10:31:31.526Z" },
- { url = "https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b", size = 222923, upload-time = "2026-03-17T10:31:33.633Z" },
- { url = "https://files.pythonhosted.org/packages/48/af/fea819c12a095781f6ccd504890aaddaf88b8fab263c4940e82c7b770124/coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664", size = 221540, upload-time = "2026-03-17T10:31:35.445Z" },
- { url = "https://files.pythonhosted.org/packages/23/d2/17879af479df7fbbd44bd528a31692a48f6b25055d16482fdf5cdb633805/coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d", size = 220262, upload-time = "2026-03-17T10:31:37.184Z" },
- { url = "https://files.pythonhosted.org/packages/5b/4c/d20e554f988c8f91d6a02c5118f9abbbf73a8768a3048cb4962230d5743f/coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0", size = 220617, upload-time = "2026-03-17T10:31:39.245Z" },
- { url = "https://files.pythonhosted.org/packages/29/9c/f9f5277b95184f764b24e7231e166dfdb5780a46d408a2ac665969416d61/coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806", size = 261912, upload-time = "2026-03-17T10:31:41.324Z" },
- { url = "https://files.pythonhosted.org/packages/d5/f6/7f1ab39393eeb50cfe4747ae8ef0e4fc564b989225aa1152e13a180d74f8/coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3", size = 263987, upload-time = "2026-03-17T10:31:43.724Z" },
- { url = "https://files.pythonhosted.org/packages/a0/d7/62c084fb489ed9c6fbdf57e006752e7c516ea46fd690e5ed8b8617c7d52e/coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9", size = 266416, upload-time = "2026-03-17T10:31:45.769Z" },
- { url = "https://files.pythonhosted.org/packages/a9/f6/df63d8660e1a0bff6125947afda112a0502736f470d62ca68b288ea762d8/coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd", size = 267558, upload-time = "2026-03-17T10:31:48.293Z" },
- { url = "https://files.pythonhosted.org/packages/5b/02/353ca81d36779bd108f6d384425f7139ac3c58c750dcfaafe5d0bee6436b/coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606", size = 261163, upload-time = "2026-03-17T10:31:50.125Z" },
- { url = "https://files.pythonhosted.org/packages/2c/16/2e79106d5749bcaf3aee6d309123548e3276517cd7851faa8da213bc61bf/coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e", size = 263981, upload-time = "2026-03-17T10:31:51.961Z" },
- { url = "https://files.pythonhosted.org/packages/29/c7/c29e0c59ffa6942030ae6f50b88ae49988e7e8da06de7ecdbf49c6d4feae/coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0", size = 261604, upload-time = "2026-03-17T10:31:53.872Z" },
- { url = "https://files.pythonhosted.org/packages/40/48/097cdc3db342f34006a308ab41c3a7c11c3f0d84750d340f45d88a782e00/coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87", size = 265321, upload-time = "2026-03-17T10:31:55.997Z" },
- { url = "https://files.pythonhosted.org/packages/bb/1f/4994af354689e14fd03a75f8ec85a9a68d94e0188bbdab3fc1516b55e512/coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479", size = 260502, upload-time = "2026-03-17T10:31:58.308Z" },
- { url = "https://files.pythonhosted.org/packages/22/c6/9bb9ef55903e628033560885f5c31aa227e46878118b63ab15dc7ba87797/coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2", size = 262688, upload-time = "2026-03-17T10:32:00.141Z" },
- { url = "https://files.pythonhosted.org/packages/14/4f/f5df9007e50b15e53e01edea486814783a7f019893733d9e4d6caad75557/coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a", size = 222788, upload-time = "2026-03-17T10:32:02.246Z" },
- { url = "https://files.pythonhosted.org/packages/e1/98/aa7fccaa97d0f3192bec013c4e6fd6d294a6ed44b640e6bb61f479e00ed5/coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819", size = 223851, upload-time = "2026-03-17T10:32:04.416Z" },
- { url = "https://files.pythonhosted.org/packages/3d/8b/e5c469f7352651e5f013198e9e21f97510b23de957dd06a84071683b4b60/coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911", size = 222104, upload-time = "2026-03-17T10:32:06.65Z" },
- { url = "https://files.pythonhosted.org/packages/8e/77/39703f0d1d4b478bfd30191d3c14f53caf596fac00efb3f8f6ee23646439/coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f", size = 219621, upload-time = "2026-03-17T10:32:08.589Z" },
- { url = "https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e", size = 219953, upload-time = "2026-03-17T10:32:10.507Z" },
- { url = "https://files.pythonhosted.org/packages/6a/6c/1f1917b01eb647c2f2adc9962bd66c79eb978951cab61bdc1acab3290c07/coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a", size = 250992, upload-time = "2026-03-17T10:32:12.41Z" },
- { url = "https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510", size = 253503, upload-time = "2026-03-17T10:32:14.449Z" },
- { url = "https://files.pythonhosted.org/packages/80/28/2a148a51e5907e504fa7b85490277734e6771d8844ebcc48764a15e28155/coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247", size = 254852, upload-time = "2026-03-17T10:32:16.56Z" },
- { url = "https://files.pythonhosted.org/packages/61/77/50e8d3d85cc0b7ebe09f30f151d670e302c7ff4a1bf6243f71dd8b0981fa/coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6", size = 257161, upload-time = "2026-03-17T10:32:19.004Z" },
- { url = "https://files.pythonhosted.org/packages/3b/c4/b5fd1d4b7bf8d0e75d997afd3925c59ba629fc8616f1b3aae7605132e256/coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0", size = 251021, upload-time = "2026-03-17T10:32:21.344Z" },
- { url = "https://files.pythonhosted.org/packages/f8/66/6ea21f910e92d69ef0b1c3346ea5922a51bad4446c9126db2ae96ee24c4c/coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882", size = 252858, upload-time = "2026-03-17T10:32:23.506Z" },
- { url = "https://files.pythonhosted.org/packages/9e/ea/879c83cb5d61aa2a35fb80e72715e92672daef8191b84911a643f533840c/coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740", size = 250823, upload-time = "2026-03-17T10:32:25.516Z" },
- { url = "https://files.pythonhosted.org/packages/8a/fb/616d95d3adb88b9803b275580bdeee8bd1b69a886d057652521f83d7322f/coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16", size = 255099, upload-time = "2026-03-17T10:32:27.944Z" },
- { url = "https://files.pythonhosted.org/packages/1c/93/25e6917c90ec1c9a56b0b26f6cad6408e5f13bb6b35d484a0d75c9cf000d/coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0", size = 250638, upload-time = "2026-03-17T10:32:29.914Z" },
- { url = "https://files.pythonhosted.org/packages/fc/7b/dc1776b0464145a929deed214aef9fb1493f159b59ff3c7eeeedf91eddd0/coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0", size = 252295, upload-time = "2026-03-17T10:32:31.981Z" },
- { url = "https://files.pythonhosted.org/packages/ea/fb/99cbbc56a26e07762a2740713f3c8f9f3f3106e3a3dd8cc4474954bccd34/coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc", size = 222360, upload-time = "2026-03-17T10:32:34.233Z" },
- { url = "https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633", size = 223174, upload-time = "2026-03-17T10:32:36.369Z" },
- { url = "https://files.pythonhosted.org/packages/2c/f2/24d84e1dfe70f8ac9fdf30d338239860d0d1d5da0bda528959d0ebc9da28/coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8", size = 221739, upload-time = "2026-03-17T10:32:38.736Z" },
- { url = "https://files.pythonhosted.org/packages/60/5b/4a168591057b3668c2428bff25dd3ebc21b629d666d90bcdfa0217940e84/coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b", size = 220351, upload-time = "2026-03-17T10:32:41.196Z" },
- { url = "https://files.pythonhosted.org/packages/f5/21/1fd5c4dbfe4a58b6b99649125635df46decdfd4a784c3cd6d410d303e370/coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c", size = 220612, upload-time = "2026-03-17T10:32:43.204Z" },
- { url = "https://files.pythonhosted.org/packages/d6/fe/2a924b3055a5e7e4512655a9d4609781b0d62334fa0140c3e742926834e2/coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9", size = 261985, upload-time = "2026-03-17T10:32:45.514Z" },
- { url = "https://files.pythonhosted.org/packages/d7/0d/c8928f2bd518c45990fe1a2ab8db42e914ef9b726c975facc4282578c3eb/coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29", size = 264107, upload-time = "2026-03-17T10:32:47.971Z" },
- { url = "https://files.pythonhosted.org/packages/ef/ae/4ae35bbd9a0af9d820362751f0766582833c211224b38665c0f8de3d487f/coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607", size = 266513, upload-time = "2026-03-17T10:32:50.1Z" },
- { url = "https://files.pythonhosted.org/packages/9c/20/d326174c55af36f74eac6ae781612d9492f060ce8244b570bb9d50d9d609/coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90", size = 267650, upload-time = "2026-03-17T10:32:52.391Z" },
- { url = "https://files.pythonhosted.org/packages/7a/5e/31484d62cbd0eabd3412e30d74386ece4a0837d4f6c3040a653878bfc019/coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3", size = 261089, upload-time = "2026-03-17T10:32:54.544Z" },
- { url = "https://files.pythonhosted.org/packages/e9/d8/49a72d6de146eebb0b7e48cc0f4bc2c0dd858e3d4790ab2b39a2872b62bd/coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab", size = 263982, upload-time = "2026-03-17T10:32:56.803Z" },
- { url = "https://files.pythonhosted.org/packages/06/3b/0351f1bd566e6e4dd39e978efe7958bde1d32f879e85589de147654f57bb/coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562", size = 261579, upload-time = "2026-03-17T10:32:59.466Z" },
- { url = "https://files.pythonhosted.org/packages/5d/ce/796a2a2f4017f554d7810f5c573449b35b1e46788424a548d4d19201b222/coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2", size = 265316, upload-time = "2026-03-17T10:33:01.847Z" },
- { url = "https://files.pythonhosted.org/packages/3d/16/d5ae91455541d1a78bc90abf495be600588aff8f6db5c8b0dae739fa39c9/coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea", size = 260427, upload-time = "2026-03-17T10:33:03.945Z" },
- { url = "https://files.pythonhosted.org/packages/48/11/07f413dba62db21fb3fad5d0de013a50e073cc4e2dc4306e770360f6dfc8/coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a", size = 262745, upload-time = "2026-03-17T10:33:06.285Z" },
- { url = "https://files.pythonhosted.org/packages/91/15/d792371332eb4663115becf4bad47e047d16234b1aff687b1b18c58d60ae/coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215", size = 223146, upload-time = "2026-03-17T10:33:08.756Z" },
- { url = "https://files.pythonhosted.org/packages/db/51/37221f59a111dca5e85be7dbf09696323b5b9f13ff65e0641d535ed06ea8/coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43", size = 224254, upload-time = "2026-03-17T10:33:11.174Z" },
- { url = "https://files.pythonhosted.org/packages/54/83/6acacc889de8987441aa7d5adfbdbf33d288dad28704a67e574f1df9bcbb/coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45", size = 222276, upload-time = "2026-03-17T10:33:13.466Z" },
- { url = "https://files.pythonhosted.org/packages/9e/ee/a4cf96b8ce1e566ed238f0659ac2d3f007ed1d14b181bcb684e19561a69a/coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61", size = 211346, upload-time = "2026-03-17T10:33:15.691Z" },
+version = "7.14.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/23/7f/d0720730a397a999ffc0fd3f5bebef347338e3a47b727da66fbb228e2ff2/coverage-7.14.0.tar.gz", hash = "sha256:057a6af2f160a85384cde4ab36f0d2777bae1057bae255f95413cdd382aa5c74", size = 919489, upload-time = "2026-05-10T18:02:31.397Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fc/e4/649c8d4f7f1709b6dbfc474358aa1bba02f67bcd52e2fec291a5014006cd/coverage-7.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a78e2a9d9c5e3b8d4ab9b9d28c985ea66fced0a7d7c2aec1f216e03a2011480", size = 219795, upload-time = "2026-05-10T17:59:48.198Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/8d/46692d24b3f395d4cbf17bfcc57136b4f2f9c0c0df864b0bddfc1d71a014/coverage-7.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1816c505187592dcd1c5a5f226601a549f70365fbd00930ac88b0c225b76bb4", size = 220299, upload-time = "2026-05-10T17:59:49.683Z" },
+ { url = "https://files.pythonhosted.org/packages/12/c2/a40f5cb295bbcbb697a76947a56081c494c61950366294ee426ffe261099/coverage-7.14.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d8e1762f0e9cbc26ec315471e7b47855218e833cd5a032d706fbf43845d878c7", size = 250721, upload-time = "2026-05-10T17:59:51.494Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/35/202235eb5c3c14c212462cd91d61b7386bf8fc44bc7a77f4742d2a69174b/coverage-7.14.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9336e23e8bb3a3925398261385e2a1533957d3e760e91070dcb0e98bfa514eed", size = 252633, upload-time = "2026-05-10T17:59:53.244Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/80/5f596e8995785124ee191c42535664c5e62c65995b66f4ca21e28ae04c81/coverage-7.14.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd1169b2230f9cbe9c638ba38022ed7a2b1e641cc07f7cea0365e4be2a74980", size = 254743, upload-time = "2026-05-10T17:59:55.021Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/6d/0d178825be2350f0adb27984d0aa7cf84bbdab201f6fb926b535d23a8f5f/coverage-7.14.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d1bb3543b58fea74d2cd1abc4054cc927e4724687cb4560cd2ed88d2c7d820c0", size = 256700, upload-time = "2026-05-10T17:59:56.511Z" },
+ { url = "https://files.pythonhosted.org/packages/19/5b/9e549c2f6e9dfea472adadba06c294e64735dabc2dd19015fac082095013/coverage-7.14.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a93bac2cb577ef60074999ed56d8a1535894398e2ed920d4185c3ec0c8864742", size = 250854, upload-time = "2026-05-10T17:59:57.94Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/1c/b94f9f5f36396021ee2f62c5834b12e6a3d31f0bed5d6fc6d1c3caec087c/coverage-7.14.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5904abf7e18cddc463219b17552229650c6b79e061d31a1059283051169cf7d5", size = 252433, upload-time = "2026-05-10T17:59:59.688Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/cb/d192cd8e1345eccabc32016f2d39072ecd10cb4f4b983ed8d0ebdeaf00dc/coverage-7.14.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:741f57cddc9004a8c81b084660215f33a6b597dbe62c31386b983ee26310e327", size = 250494, upload-time = "2026-05-10T18:00:01.953Z" },
+ { url = "https://files.pythonhosted.org/packages/53/c5/aac9f460a41d835dbddef1d377f105f6ac2311d0f3c1588e9f51046d8813/coverage-7.14.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:664123feb0929d7affc135717dbd70d61d98688a08ab1e5ba464739620c6252d", size = 254261, upload-time = "2026-05-10T18:00:03.779Z" },
+ { url = "https://files.pythonhosted.org/packages/23/aa/7af7c0081980a9cb3d289c5a435a4b7657dcecbd128e25c580e6a50389b5/coverage-7.14.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:c83d2399a51bbec8429266905d33616f04bc5726b1138c35844d5fcd896b2e20", size = 250216, upload-time = "2026-05-10T18:00:05.262Z" },
+ { url = "https://files.pythonhosted.org/packages/35/60/a4257538ce2f6b978aeb51870d6c4208c510928a03db7e0339bb625dccb7/coverage-7.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb2e855b87321259a037429288ae85216d191c74de3e79bf57cd2bc0761992c", size = 251125, upload-time = "2026-05-10T18:00:06.858Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/ab/f91af47642ec1aa53490e835a95847168d9c77fc39aa58527604c051e145/coverage-7.14.0-cp311-cp311-win32.whl", hash = "sha256:731dc15b385ac52289743d476245b61e1a2927e803bef655b52bc3b2a75a21f3", size = 222300, upload-time = "2026-05-10T18:00:08.608Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/f0/a71ddbd874431e7a7cd96071f0c331cfbbad07704833c765d24ffbab8a67/coverage-7.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:bfb0ed8ec5d25e93face268115d7964db9df8b9aae8edcde9ec6b16c726a7cc1", size = 223241, upload-time = "2026-05-10T18:00:10.746Z" },
+ { url = "https://files.pythonhosted.org/packages/d8/6e/d9d312a5151a96cd110efee32efc3fc97b01ebd86203fe618ccb29cf4c92/coverage-7.14.0-cp311-cp311-win_arm64.whl", hash = "sha256:7ebb1c6df9f78046a1b1e0a89674cd4bf73b7c648914eebcf976a57fd99a5627", size = 221908, upload-time = "2026-05-10T18:00:12.242Z" },
+ { url = "https://files.pythonhosted.org/packages/09/1e/2f996b2c8415cbb6f54b0f5ec1ee850c96d7911961afb4fc05f4a89d8c58/coverage-7.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7ffd19fc8aed057fd686a17a4935eef5f9859d69208f96310e893e64b9b6ccf5", size = 219967, upload-time = "2026-05-10T18:00:13.756Z" },
+ { url = "https://files.pythonhosted.org/packages/34/23/35c7aea1274aef7525bdd2dc92f710bdde6d11652239d71d1ec450067939/coverage-7.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:829994cfe1aeb773ca27bf246d4badc1e764893e3bfb98fff820fcecd1ca4662", size = 220329, upload-time = "2026-05-10T18:00:15.264Z" },
+ { url = "https://files.pythonhosted.org/packages/75/cf/a8f4b43a16e194b0261257ad28ded5853ec052570afef4a84e1d81189f3b/coverage-7.14.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b4f07cf7edcb7ec39431a5074d7ea83b29a9f71fcfc494f0f40af4e65180420f", size = 251839, upload-time = "2026-05-10T18:00:17.16Z" },
+ { url = "https://files.pythonhosted.org/packages/69/ff/6699e7b71e60d3049eb2bdcbc95ee3f35707b2b0e48f32e9e63d3ce30c08/coverage-7.14.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ca3d9cf2c32b521bd9518385608787fa86f38daf993695307531822c3430ed67", size = 254576, upload-time = "2026-05-10T18:00:18.829Z" },
+ { url = "https://files.pythonhosted.org/packages/22/ec/c936d495fcd67f48f03a9c4ad3297ff80d1f222a5df3980f15b34c186c21/coverage-7.14.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92af52828e7f29d827346b0294e5a0853fa206db77db0395b282918d41e28db9", size = 255690, upload-time = "2026-05-10T18:00:20.648Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/42/5af63f636cc62a4a2b1b3ba9146f6ee6f53a35a50d5cefc54d5670f60999/coverage-7.14.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7b2bb6c9d7e769360d0f20a0f219603fd64f0c8f97de17ab25853261602be0fb", size = 257949, upload-time = "2026-05-10T18:00:22.28Z" },
+ { url = "https://files.pythonhosted.org/packages/26/d3/a225317bd2012132a27e1176d51660b826f99bb975876463c44ea0d7ee5a/coverage-7.14.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1c9ed6ef99f88fb8c14aa8e2bf8eb0fe55fa2edfea68f8675d78741df1a5ac0e", size = 252242, upload-time = "2026-05-10T18:00:24.076Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/7f/9e65495298c3ea414742998539c37d048b5e81cc818fb1828cc6b51d10bf/coverage-7.14.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8231ade007f37959fbf58acc677f26b922c02eda6f0428ea307da0fd39681bf3", size = 253608, upload-time = "2026-05-10T18:00:25.588Z" },
+ { url = "https://files.pythonhosted.org/packages/94/46/1522b524a35bdad22b2b8c4f9d32d0a104b524726ec380b2db68db1746f5/coverage-7.14.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d8b013632cc1ce1d09dbe4f32667b4d320ec2f54fc326ebeffcd0b0bcc2bb6c4", size = 251753, upload-time = "2026-05-10T18:00:27.104Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/e9/cdf00d38817742c541ade405e115a3f7bf36e6f2a8b99d4f209861b85a2d/coverage-7.14.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1733198802d71ec4c524f322e2867ee05c62e9e75df86bdca545407a221827d1", size = 255823, upload-time = "2026-05-10T18:00:29.038Z" },
+ { url = "https://files.pythonhosted.org/packages/38/fc/5e7877cf5f902d08a17ff1c532511476d87e1bea355bd5028cb97f902e79/coverage-7.14.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:72a305291fa8ee01332f1aaf38b348ca34097f6aa0b0ef627eef2837e57bbba5", size = 251323, upload-time = "2026-05-10T18:00:30.647Z" },
+ { url = "https://files.pythonhosted.org/packages/18/9d/50f05a72dff8487464fdd4178dda5daed642a060e60afb644e3d45123559/coverage-7.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fcaba850dd317c65423a9d63d88f9573c53b00354d6dd95724576cc98a131595", size = 253197, upload-time = "2026-05-10T18:00:32.211Z" },
+ { url = "https://files.pythonhosted.org/packages/00/3f/6f61ffe6439df266c3cf60f5c99cfaa21103d0210d706a42fc6c30683ff8/coverage-7.14.0-cp312-cp312-win32.whl", hash = "sha256:5ac83957a80d0701310e96d8bec68cdcf4f90a7674b7d13f15a344315b41ab27", size = 222515, upload-time = "2026-05-10T18:00:33.717Z" },
+ { url = "https://files.pythonhosted.org/packages/85/19/93853133df2cb371083285ef6a93982a0173e7a233b0f61373ba9fd30eb2/coverage-7.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:70390b0da32cb90b501953716302906e8bcce087cb283e70d8c97729f22e92b2", size = 223324, upload-time = "2026-05-10T18:00:35.172Z" },
+ { url = "https://files.pythonhosted.org/packages/74/18/9f7fe62f659f24b7a82a0be56bf94c1bd0a89e0ae7ab4c668f6e82404294/coverage-7.14.0-cp312-cp312-win_arm64.whl", hash = "sha256:91b993743d959b8be85b4abf9d5478216a69329c321efe5be0433c1a841d691d", size = 221944, upload-time = "2026-05-10T18:00:37.014Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/76/b7c66ee3c66e1b0f9d894c8125983aa0c03fb2336f2fd16559f9c966157f/coverage-7.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f2bbb8254370eb4c628ff3d6fa8a7f74ddc40565394d4f7ab791d1fe568e37ef", size = 219990, upload-time = "2026-05-10T18:00:38.887Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/af/e567cbad5ba69c013a50146dfa886dc7193361fda77521f51274ff620e1b/coverage-7.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:23b81107f46d3f21d0cbce30664fcec0f5d9f585638a67081750f99738f6bf66", size = 220365, upload-time = "2026-05-10T18:00:40.864Z" },
+ { url = "https://files.pythonhosted.org/packages/44/6f/9ad575d505b4d805b254febc8a5b338a2efe278f8786e56ff1cb8413f9c3/coverage-7.14.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:22a7e06a5f11a757cdfe79018e9095f9f69ae283c5cd8123774c788deec8717b", size = 251363, upload-time = "2026-05-10T18:00:42.489Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/5f/b5370068b2f57787454592ed7dcd1002f0f1703b7db1fa30f6a325a4ca6e/coverage-7.14.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9d1aa57a1dc8e05bdc42e81c5d671d849577aeedf279f4c449d6d286f9ed88ca", size = 253961, upload-time = "2026-05-10T18:00:44.079Z" },
+ { url = "https://files.pythonhosted.org/packages/29/1e/51adf17738976e8f2b85ddef7b7aa12a0838b056c92f175941d8862767c1/coverage-7.14.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90c1a51bcfddf645b3bb7ec333d9e94393a8e94f55642380fa8a9a5a9e636cb7", size = 255193, upload-time = "2026-05-10T18:00:45.623Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/7b/5bfd7ac1df3b881c2ac7a5cbc99c7609e6296c402f5ef587cd81c6f355b3/coverage-7.14.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a841fae2fadcae4f438d43b6ccc4aac2ad609f47cdb6cfdce60cbb3fe5ca7bc2", size = 257326, upload-time = "2026-05-10T18:00:47.173Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/38/1d37d316b174fad3843a1d76dbdfe4398771c9ecd0515935dd9ece9cd627/coverage-7.14.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c79d2319cabef1fe8e86df73371126931550804738f78ad7d31e3aad85a67367", size = 251582, upload-time = "2026-05-10T18:00:49.152Z" },
+ { url = "https://files.pythonhosted.org/packages/34/46/746704f95980ba220214e1a41e18cec5aea80a898eaa53c51bf2d645ff36/coverage-7.14.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1b23b0c6f0b1db6ad769b7050c8b641c0bf215ded26c1816955b17b7f26edfa9", size = 253325, upload-time = "2026-05-10T18:00:51.252Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/b9/bbe87206d9687b192352f893797825b5f5b15ecd3aa9c68fbff0c074d77b/coverage-7.14.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:55d3089079ce181a4566b1065ab28d2575eb76d8ac8f81f4fcda2bf037fee087", size = 251291, upload-time = "2026-05-10T18:00:52.816Z" },
+ { url = "https://files.pythonhosted.org/packages/46/57/b8cdb12ac0d73ef0243218bd5e22c9df8f92edab8018213a86aec67c5324/coverage-7.14.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:49c005cba1e2f9677fb2845dcdf9a2e72a52a17d63e8231aaaae35d9f50215ef", size = 255448, upload-time = "2026-05-10T18:00:54.548Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/d4/5002019538b2036ce3c84340f54d2fd5100d55b0a6b0894eee56128d03c7/coverage-7.14.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:9117377b823daa28aa8635fbb08cda1cd6be3d7143257345459559aeef852d52", size = 251110, upload-time = "2026-05-10T18:00:56.122Z" },
+ { url = "https://files.pythonhosted.org/packages/37/53/20c5009477660f084e6ed60bc02a91894b8e234e617e86ecfd9aaf78e27b/coverage-7.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7b79d646cf46d5cf9a9f40281d4441df5849e445726e369006d2b117710b33fe", size = 252885, upload-time = "2026-05-10T18:00:57.967Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/ab/3cf6427ac9c1f1db747dbb1ce71dde47984876d4c2cfd018a3fef0a78d4d/coverage-7.14.0-cp313-cp313-win32.whl", hash = "sha256:fb609b3658479e33f9516d46f1a89dbb9b6c261366e3a11844a96ec487533dae", size = 222539, upload-time = "2026-05-10T18:00:59.581Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/b8/9228523e80321c2cb4880d1f589bc0171f2f71432c35118ad04dc01decce/coverage-7.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:0773d8329cf32b6fd222e4b52622c61fe8d503eb966cfc8d3c3c10c96266d50e", size = 223344, upload-time = "2026-05-10T18:01:01.531Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/99/118daa192f95e3a6cb2740100fbf8797cda1734b4134ef0b5d501a7fa8f3/coverage-7.14.0-cp313-cp313-win_arm64.whl", hash = "sha256:b4e26a0f1b696faf283bffe5b8569e44e336c582439df5d53281ab89ee0cba96", size = 221966, upload-time = "2026-05-10T18:01:03.16Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/f1/a46cc0c013be170216253184a32366d7cbdb9252feaec866b05c2d12a894/coverage-7.14.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:953f521ca9445300397e65fda3dca58b2dbd68fee983777420b57ac3c77e9f90", size = 220679, upload-time = "2026-05-10T18:01:05.058Z" },
+ { url = "https://files.pythonhosted.org/packages/64/8c/9c30a3d311a34177fa432995be7fbfc64477d8bac5630bd38055b1c9b424/coverage-7.14.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:98af83fd65ae24b1fdd03aaead967a9f523bcd2f1aab2d4f3ffda65bb568a6f1", size = 221033, upload-time = "2026-05-10T18:01:07.002Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/cd/3fb5e06c3badefd0c1b47e2044fdca67f8220a4ec2e7fcfb476aa0a67c6c/coverage-7.14.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:668b92e6958c4db7cf92e81caac328dfbbdbb215db2850ad28f0cbe1eea0bfbd", size = 262333, upload-time = "2026-05-10T18:01:08.903Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/e6/fbc322325c7294d3e22c1ad6b79e45d0806b25228c8e5842aed6d8169aa7/coverage-7.14.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9fbd898551762dea00d3fef2b1c4f99afd2c6a3ff952ea07d60a9bd5ed4f34bc", size = 264410, upload-time = "2026-05-10T18:01:10.531Z" },
+ { url = "https://files.pythonhosted.org/packages/08/92/c497b264bec1673c47cc77e26f760fcda4654cabf1f39546d1a23a3b8c35/coverage-7.14.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68af363c07ecd8d4b7d4043d85cb376d7d227eceb54e5323ee45da73dbd3e426", size = 266836, upload-time = "2026-05-10T18:01:12.19Z" },
+ { url = "https://files.pythonhosted.org/packages/78/fc/045da320987f401af5d2815d351e8aa799aec859f60e29f445e3089eeedb/coverage-7.14.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e57054a583da8ac55edf24117ea4c9133032cfc4cf72aa2d48c1e5d4b52f899", size = 267974, upload-time = "2026-05-10T18:01:13.926Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/ae/227b1e379497fb7a4fc3286e620f80c8a1e7cec66d45695a01639eb1af65/coverage-7.14.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cc3499459bbcdd51a65b64c35ab7ed2764eaf3cba826e0df3f1d7fe2e102b70b", size = 261578, upload-time = "2026-05-10T18:01:15.564Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/f5/3570342900f2acea31d33ff1590c5d8bac1a8e1a2e1c6d34a5d5e61de681/coverage-7.14.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:45899ec2138a4346ed34d601dedf5076fb74edf2d1dd9dc76a78e82397edee90", size = 264394, upload-time = "2026-05-10T18:01:17.607Z" },
+ { url = "https://files.pythonhosted.org/packages/16/29/de1bbc01c935b28f89b1dc3db85b011c055e843a8e5e3b83141c3f80af7f/coverage-7.14.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8767486808c436f05b23ab98eb963fb29185e32a9357a166971685cb3459900f", size = 262022, upload-time = "2026-05-10T18:01:19.304Z" },
+ { url = "https://files.pythonhosted.org/packages/35/95/f53890b0bf2fc10ab168e05d38869215e73ca24c4cb521c3bb0eb62fe16b/coverage-7.14.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a3b5ddfd6aa7ddad53ee3edb231e88a2151507a43229b7d71b953916deca127d", size = 265732, upload-time = "2026-05-10T18:01:21.494Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/ea/c919e259081dd2bdf0e43b87209709ba7ec2e4117c2a7f5185379c43463c/coverage-7.14.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:63df0fe568e698e1045792399f8ab6da3a6c2dce3182813fb92afa2641087b47", size = 260921, upload-time = "2026-05-10T18:01:23.533Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/2c/c2831889705a81dc5d1c6ca12e4d8e9b95dfc146d153488a6c0ea685d28e/coverage-7.14.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:827d6397dbd95144939b18f89edf31f63e1f99633e8d5f32f22ba8bdda567477", size = 263109, upload-time = "2026-05-10T18:01:25.165Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/a9/2fcae5003cac3d63fe344d2166243c2756935f48420863c5272b240d550b/coverage-7.14.0-cp313-cp313t-win32.whl", hash = "sha256:7bf43e000d24012599b879791cff41589af90674722421ef11b11a5431920bab", size = 223212, upload-time = "2026-05-10T18:01:27.157Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/bb/18e94d7b14b9b398164197114a587a04ab7c9fdbe1d237eef57311c5e883/coverage-7.14.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3f5549365af25d770e06b1f8f5682d9a5637d06eb494db91c6fa75d3950cc917", size = 224272, upload-time = "2026-05-10T18:01:29.107Z" },
+ { url = "https://files.pythonhosted.org/packages/db/56/4f14fad782b035c81c4ffd09159e7103d42bb1d93ac8496d04b90a11b7da/coverage-7.14.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6d160217ec6fe890f16ad3a9531761589443749e448f91986c972714fad361c8", size = 222530, upload-time = "2026-05-10T18:01:31.151Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/18/b9a6586d73992807c26f9a5f274131be3d76b56b18a82b9392e2a25d2e45/coverage-7.14.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9aed9fa983514ca032790f3fe0d1c0e42ca7e16b42432af1706b50a9a46bef5d", size = 220036, upload-time = "2026-05-10T18:01:33.057Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/9b/4165a1d56ddc302a0e2d518fd9d412a4fd0b57562618c78c5f21c57194f5/coverage-7.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ba3b8390db29296dbbf49e91b6fe08f990743a90c8f447ba4c2ffc29670dfa63", size = 220368, upload-time = "2026-05-10T18:01:34.705Z" },
+ { url = "https://files.pythonhosted.org/packages/69/aa/c12e52a5ba148d9995229d557e3be6e554fe469addc0e9241b2f0956d8ea/coverage-7.14.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3a5d8e876dfa2f102e970b183863d6dedd023d3c0eeca1fe7a9787bc5f28b212", size = 251417, upload-time = "2026-05-10T18:01:36.949Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/51/ec641c26e6dca1b25a7d2035ba6ecb7c884ef1a100a9e42fbe4ce4405139/coverage-7.14.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5ebb8f4614a3787d567e610bbfdf96a4798dd69a1afb1bd8ad228d4111fe6ff3", size = 253924, upload-time = "2026-05-10T18:01:38.985Z" },
+ { url = "https://files.pythonhosted.org/packages/33/c4/59c3de0bd1b538824173fd518fed51c1ce740ca5ed68e74545983f4053a9/coverage-7.14.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b9bf47223dd8db3d4c4b2e443b02bace480d428f0822c3f991600448a176c97", size = 255269, upload-time = "2026-05-10T18:01:40.957Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/a9/36dfa153a62040296f6e7febfdb20a5720622f6ef5a81a41e8237b9a5344/coverage-7.14.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3485a836550b303d006d57cc06e3d5afaabc642c77050b7c985a97b13e3776b8", size = 257583, upload-time = "2026-05-10T18:01:42.607Z" },
+ { url = "https://files.pythonhosted.org/packages/26/7b/cc2c048d4114d9ab1c2409e9ee365e5ae10736df6dffcfc9444effa6c708/coverage-7.14.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3e7e88110bae996d199d1693ca8ec3fd52441d426401ae963437598667b4c5eb", size = 251434, upload-time = "2026-05-10T18:01:44.537Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/df/6770eaa576e604575e9a78055313250faef5faa84bd6f71a39fece519c43/coverage-7.14.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:15228a6800ce7bdf1b74800595e56db7138cecb338fdbf044806e10dcf182dfe", size = 253280, upload-time = "2026-05-10T18:01:46.175Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/9e/1c0264514a3f98259a6d64765a397b2c8373e3ba59ee722a4802d3ec0c61/coverage-7.14.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9d26ac7f5398bafc5b57421ad994e8a4749e8a7a0e62d05ec7d53014d5963bfa", size = 251241, upload-time = "2026-05-10T18:01:48.732Z" },
+ { url = "https://files.pythonhosted.org/packages/64/16/4efdf3e3c4079cdbf0ece56a2fea872df9e8a3e15a13a0af4400e1075944/coverage-7.14.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2fb73254ff43c911c967a899e1359bc5049b4b115d6e8fbdde4937d0a2246cd5", size = 255516, upload-time = "2026-05-10T18:01:50.819Z" },
+ { url = "https://files.pythonhosted.org/packages/93/69/b1de96346603881b3d1bc8d6447c83200e1c9700ffbaff926ba01ff5724c/coverage-7.14.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:454a380af72c6adada298ed270d38c7a391288198dbfb8467f786f588751a90c", size = 251059, upload-time = "2026-05-10T18:01:52.773Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/66/2881853e0363a5e0a724d1103e53650795367471b6afb234f8b49e713bc6/coverage-7.14.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:65c86fb646d2bd2972e96bd1a8b45817ed907cee68655d6295fe7ec031d04cca", size = 252716, upload-time = "2026-05-10T18:01:54.506Z" },
+ { url = "https://files.pythonhosted.org/packages/55/5c/0d3305d002c41dcde873dbe456491e663dc55152ca526b630b5c47efd62f/coverage-7.14.0-cp314-cp314-win32.whl", hash = "sha256:6a6516b02a6101398e19a3f44820f69bab2590697f7def4331f668b14adaf828", size = 222788, upload-time = "2026-05-10T18:01:56.487Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/58/6e1b8f52fdc3184b47dc5037f5070d83a3d11042db1594b02d2a44d786c8/coverage-7.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:45e0f79d8351fa76e256716df91eab12890d32678b9590df7ae1042e4bd4cf5d", size = 223600, upload-time = "2026-05-10T18:01:58.497Z" },
+ { url = "https://files.pythonhosted.org/packages/00/70/a18c408e674bc26281cadaedc7351f929bd2094e191e4b15271c30b084cc/coverage-7.14.0-cp314-cp314-win_arm64.whl", hash = "sha256:4b899594a8b2d81e5cc064a0d7f9cac2081fed91049456cae7676787e41549c9", size = 222168, upload-time = "2026-05-10T18:02:00.411Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/89/2681f071d238b62aff8dfc2ab44fc24cfdb38d1c01f391a80522ff5d3a16/coverage-7.14.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f580f8c80acd94ac72e863efe2cab791d8c38d153e0b463b92dfa000d5c84cd1", size = 220766, upload-time = "2026-05-10T18:02:02.313Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/c7/c987babafd9207ffa1995e1ef1f9b26762cf4963aa768a66b6f0501e4616/coverage-7.14.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a2bd259c442cd43c49b30fbafc51776eb19ea396faf159d26a83e6a0a5f13b0c", size = 221035, upload-time = "2026-05-10T18:02:04.017Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/e9/d6a5ac3b333088143d6fc877d398a9a674dc03124a2f776e131f03864823/coverage-7.14.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a706b908dfa85538863504c624b237a3cc34232bf403c057414ebfdb3b4d9f84", size = 262405, upload-time = "2026-05-10T18:02:05.915Z" },
+ { url = "https://files.pythonhosted.org/packages/38/b1/e70838d29a7c08e22d44398a46db90815bbcbf28de06992bd9210d1a8d8e/coverage-7.14.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7333cd944ee4393b9b3d3c1b598c936d4fc8d70573a4c7dacfec5590dd50e436", size = 264530, upload-time = "2026-05-10T18:02:07.582Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/73/5c31ef97763288d03d9995152b96d5475b527c63d91c84b01caea894b83a/coverage-7.14.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f162bc9a15b82d947b02651b0c7e1609d6f7a8735ca330cfadec8481dd97d5a", size = 266932, upload-time = "2026-05-10T18:02:09.401Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/76/dd56d80f29c5f05b4d76f7e7c6d47cafacae017189c75c5759d24f9ff0cc/coverage-7.14.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:362cb78e01a5dc82009d88004cf60f2e6b6d6fcbfdec05b05af73b0abf40118f", size = 268062, upload-time = "2026-05-10T18:02:11.399Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/c7/27ba85cd5b95614f159ff93ebff1901584a8d192e2e5e24c4943a7453f59/coverage-7.14.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:acebd068fca5512c3a6fde9c045f901613478781a73f0e82b307b214daef23fb", size = 261504, upload-time = "2026-05-10T18:02:13.257Z" },
+ { url = "https://files.pythonhosted.org/packages/13/2e/e8149f60ab5d5684c6eee881bdf34b127115cddbb958b196768dd9d63473/coverage-7.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:29fe3da551dface75deb2ccbf87b6b66e2e7ef38f6d89050b428be94afff3490", size = 264398, upload-time = "2026-05-10T18:02:15.063Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/7f/1261b025285323225f4b4abffa5a643649dfd67e25ddca7ebcbdea3b7cb3/coverage-7.14.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b4cc4fce8672fffcb09b0eafc167b396b3ba53c4a7230f54b7aaffbf6c835fa9", size = 262000, upload-time = "2026-05-10T18:02:16.756Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/dc/829c54f60b9d08389439c00f813c752781c496fc5788c78d8006db4b4f2b/coverage-7.14.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5d4a51aad8ba8bdcd2b8bd8f03d4aca19693fa2327a3470e4718a25b03481020", size = 265732, upload-time = "2026-05-10T18:02:18.817Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/b0/70bd1419941652fa062689cba9c3eeafb8f5e6fbb890bce41c3bdda5dbd6/coverage-7.14.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9f323af3e1e4f68b60b7b247e37b8515563a61375518fa59de1af48ba28a3db6", size = 260847, upload-time = "2026-05-10T18:02:20.528Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/73/be40b2390656c654d35ea0015ea7ba3d945769cf80790ad5e0bb2d56d2ba/coverage-7.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1a0abc7342ea9711c469dd8b821c6c311e6bc6aac1442e5fbd6b27fae0a8f3db", size = 263166, upload-time = "2026-05-10T18:02:22.337Z" },
+ { url = "https://files.pythonhosted.org/packages/29/55/4a643f712fcf7cf2881f8ec1e0ccb7b164aff3108f69b51801246c8799f2/coverage-7.14.0-cp314-cp314t-win32.whl", hash = "sha256:a9f864ef57b7172e2db87a096642dd51e179e085ab6b2c371c29e885f65c8fb2", size = 223573, upload-time = "2026-05-10T18:02:24.11Z" },
+ { url = "https://files.pythonhosted.org/packages/27/96/3acae5da0953be042c0b4dea6d6789d2f080701c77b88e44d5bd41b9219b/coverage-7.14.0-cp314-cp314t-win_amd64.whl", hash = "sha256:29943e552fdc08e082eb51400fb2f58e118a83b5542bd06531214e084399b644", size = 224680, upload-time = "2026-05-10T18:02:25.896Z" },
+ { url = "https://files.pythonhosted.org/packages/93/3d/6ab5d2dd8325d838737c6f8d83d62eb6230e0d70b87b51b57bbfd08fa767/coverage-7.14.0-cp314-cp314t-win_arm64.whl", hash = "sha256:742a73ea621953b012f2c4c2219b512180dd84489acf5b1596b0aafc55b9100b", size = 222703, upload-time = "2026-05-10T18:02:27.822Z" },
+ { url = "https://files.pythonhosted.org/packages/61/e8/cb8e80d6f9f55b99588625062822bf946cf03ed06315df4bd8397f5632a1/coverage-7.14.0-py3-none-any.whl", hash = "sha256:8de5b61163aee3d05c8a2beab6f47913df7981dad1baf82c414d99158c286ab1", size = 211764, upload-time = "2026-05-10T18:02:29.538Z" },
]
[package.optional-dependencies]
@@ -650,61 +690,61 @@ toml = [
[[package]]
name = "cryptography"
-version = "47.0.0"
+version = "48.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ef/b2/7ffa7fe8207a8c42147ffe70c3e360b228160c1d85dc3faff16aaa3244c0/cryptography-47.0.0.tar.gz", hash = "sha256:9f8e55fe4e63613a5e1cc5819030f27b97742d720203a087802ce4ce9ceb52bb", size = 830863, upload-time = "2026-04-24T19:54:57.056Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/a4/98/40dfe932134bdcae4f6ab5927c87488754bf9eb79297d7e0070b78dd58e9/cryptography-47.0.0-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:160ad728f128972d362e714054f6ba0067cab7fb350c5202a9ae8ae4ce3ef1a0", size = 7912214, upload-time = "2026-04-24T19:53:03.864Z" },
- { url = "https://files.pythonhosted.org/packages/34/c6/2733531243fba725f58611b918056b277692f1033373dcc8bd01af1c05d4/cryptography-47.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b9a8943e359b7615db1a3ba587994618e094ff3d6fa5a390c73d079ce18b3973", size = 4644617, upload-time = "2026-04-24T19:53:06.909Z" },
- { url = "https://files.pythonhosted.org/packages/00/e3/b27be1a670a9b87f855d211cf0e1174a5d721216b7616bd52d8581d912ed/cryptography-47.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f5c15764f261394b22aef6b00252f5195f46f2ca300bec57149474e2538b31f8", size = 4668186, upload-time = "2026-04-24T19:53:09.053Z" },
- { url = "https://files.pythonhosted.org/packages/81/b9/8443cfe5d17d482d348cee7048acf502bb89a51b6382f06240fd290d4ca3/cryptography-47.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:9c59ab0e0fa3a180a5a9c59f3a5abe3ef90d474bc56d7fadfbe80359491b615b", size = 4651244, upload-time = "2026-04-24T19:53:11.217Z" },
- { url = "https://files.pythonhosted.org/packages/5d/5e/13ed0cdd0eb88ba159d6dd5ebfece8cb901dbcf1ae5ac4072e28b55d3153/cryptography-47.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:34b4358b925a5ea3e14384ca781a2c0ef7ac219b57bb9eacc4457078e2b19f92", size = 5252906, upload-time = "2026-04-24T19:53:13.532Z" },
- { url = "https://files.pythonhosted.org/packages/64/16/ed058e1df0f33d440217cd120d41d5dda9dd215a80b8187f68483185af82/cryptography-47.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0024b87d47ae2399165a6bfb20d24888881eeab83ae2566d62467c5ff0030ce7", size = 4701842, upload-time = "2026-04-24T19:53:15.618Z" },
- { url = "https://files.pythonhosted.org/packages/02/e0/3d30986b30fdbd9e969abbdf8ba00ed0618615144341faeb57f395a084fe/cryptography-47.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:1e47422b5557bb82d3fff997e8d92cff4e28b9789576984f08c248d2b3535d93", size = 4289313, upload-time = "2026-04-24T19:53:17.755Z" },
- { url = "https://files.pythonhosted.org/packages/df/fd/32db38e3ad0cb331f0691cb4c7a8a6f176f679124dee746b3af6633db4d9/cryptography-47.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:6f29f36582e6151d9686235e586dd35bb67491f024767d10b842e520dc6a07ac", size = 4650964, upload-time = "2026-04-24T19:53:20.062Z" },
- { url = "https://files.pythonhosted.org/packages/86/53/5395d944dfd48cb1f67917f533c609c34347185ef15eb4308024c876f274/cryptography-47.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:a9b761f012a943b7de0e828843c5688d0de94a0578d44d6c85a1bae32f87791f", size = 5207817, upload-time = "2026-04-24T19:53:22.498Z" },
- { url = "https://files.pythonhosted.org/packages/34/4f/e5711b28e1901f7d480a2b1b688b645aa4c77c73f10731ed17e7f7db3f0d/cryptography-47.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:4e1de79e047e25d6e9f8cea71c86b4a53aced64134f0f003bbcbf3655fd172c8", size = 4701544, upload-time = "2026-04-24T19:53:24.356Z" },
- { url = "https://files.pythonhosted.org/packages/22/22/c8ddc25de3010fc8da447648f5a092c40e7a8fadf01dd6d255d9c0b9373d/cryptography-47.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef6b3634087f18d2155b1e8ce264e5345a753da2c5fa9815e7d41315c90f8318", size = 4783536, upload-time = "2026-04-24T19:53:26.665Z" },
- { url = "https://files.pythonhosted.org/packages/66/b6/d4a68f4ea999c6d89e8498579cba1c5fcba4276284de7773b17e4fa69293/cryptography-47.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:11dbb9f50a0f1bb9757b3d8c27c1101780efb8f0bdecfb12439c22a74d64c001", size = 4926106, upload-time = "2026-04-24T19:53:28.686Z" },
- { url = "https://files.pythonhosted.org/packages/54/ed/5f524db1fade9c013aa618e1c99c6ed05e8ffc9ceee6cda22fed22dda3f4/cryptography-47.0.0-cp311-abi3-win32.whl", hash = "sha256:7fda2f02c9015db3f42bb8a22324a454516ed10a8c29ca6ece6cdbb5efe2a203", size = 3258581, upload-time = "2026-04-24T19:53:31.058Z" },
- { url = "https://files.pythonhosted.org/packages/b2/dc/1b901990b174786569029f67542b3edf72ac068b6c3c8683c17e6a2f5363/cryptography-47.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:f5c3296dab66202f1b18a91fa266be93d6aa0c2806ea3d67762c69f60adc71aa", size = 3775309, upload-time = "2026-04-24T19:53:33.054Z" },
- { url = "https://files.pythonhosted.org/packages/14/88/7aa18ad9c11bc87689affa5ce4368d884b517502d75739d475fc6f4a03c7/cryptography-47.0.0-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:be12cb6a204f77ed968bcefe68086eb061695b540a3dd05edac507a3111b25f0", size = 7904299, upload-time = "2026-04-24T19:53:35.003Z" },
- { url = "https://files.pythonhosted.org/packages/07/55/c18f75724544872f234678fdedc871391722cb34a2aee19faa9f63100bb2/cryptography-47.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2ebd84adf0728c039a3be2700289378e1c164afc6748df1a5ed456767bef9ba7", size = 4631180, upload-time = "2026-04-24T19:53:37.517Z" },
- { url = "https://files.pythonhosted.org/packages/ee/65/31a5cc0eaca99cec5bafffe155d407115d96136bb161e8b49e0ef73f09a7/cryptography-47.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f68d6fbc7fbbcfb0939fea72c3b96a9f9a6edfc0e1b1d29778a2066030418b1", size = 4653529, upload-time = "2026-04-24T19:53:39.775Z" },
- { url = "https://files.pythonhosted.org/packages/e5/bc/641c0519a495f3bfd0421b48d7cd325c4336578523ccd76ea322b6c29c7a/cryptography-47.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:6651d32eff255423503aa276739da98c30f26c40cbeffcc6048e0d54ef704c0c", size = 4638570, upload-time = "2026-04-24T19:53:42.129Z" },
- { url = "https://files.pythonhosted.org/packages/2b/f2/300327b0a47f6dc94dd8b71b57052aefe178bb51745073d73d80604f11ab/cryptography-47.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:3fb8fa48075fad7193f2e5496135c6a76ac4b2aa5a38433df0a539296b377829", size = 5238019, upload-time = "2026-04-24T19:53:44.577Z" },
- { url = "https://files.pythonhosted.org/packages/e9/5a/5b5cf994391d4bf9d9c7efd4c66aabe4d95227256627f8fea6cff7dfadbd/cryptography-47.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:11438c7518132d95f354fa01a4aa2f806d172a061a7bed18cf18cbdacdb204d7", size = 4686832, upload-time = "2026-04-24T19:53:47.015Z" },
- { url = "https://files.pythonhosted.org/packages/dc/2c/ae950e28fd6475c852fc21a44db3e6b5bcc1261d1e370f2b6e42fa800fef/cryptography-47.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:8c1a736bbb3288005796c3f7ccb9453360d7fed483b13b9f468aea5171432923", size = 4269301, upload-time = "2026-04-24T19:53:48.97Z" },
- { url = "https://files.pythonhosted.org/packages/67/fb/6a39782e150ffe5cc1b0018cb6ddc48bf7ca62b498d7539ffc8a758e977d/cryptography-47.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:f1557695e5c2b86e204f6ce9470497848634100787935ab7adc5397c54abd7ab", size = 4638110, upload-time = "2026-04-24T19:53:51.011Z" },
- { url = "https://files.pythonhosted.org/packages/8e/d7/0b3c71090a76e5c203164a47688b697635ece006dcd2499ab3a4dbd3f0bd/cryptography-47.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:f9a034b642b960767fb343766ae5ba6ad653f2e890ddd82955aef288ffea8736", size = 5194988, upload-time = "2026-04-24T19:53:52.962Z" },
- { url = "https://files.pythonhosted.org/packages/63/33/63a961498a9df51721ab578c5a2622661411fc520e00bd83b0cc64eb20c4/cryptography-47.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:b1c76fca783aa7698eb21eb14f9c4aa09452248ee54a627d125025a43f83e7a7", size = 4686563, upload-time = "2026-04-24T19:53:55.274Z" },
- { url = "https://files.pythonhosted.org/packages/b7/bf/5ee5b145248f92250de86145d1c1d6edebbd57a7fe7caa4dedb5d4cf06a1/cryptography-47.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4f7722c97826770bab8ae92959a2e7b20a5e9e9bf4deae68fd86c3ca457bab52", size = 4770094, upload-time = "2026-04-24T19:53:57.753Z" },
- { url = "https://files.pythonhosted.org/packages/92/43/21d220b2da5d517773894dacdcdb5c682c28d3fffce65548cb06e87d5501/cryptography-47.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:09f6d7bf6724f8db8b32f11eccf23efc8e759924bc5603800335cf8859a3ddbd", size = 4913811, upload-time = "2026-04-24T19:54:00.236Z" },
- { url = "https://files.pythonhosted.org/packages/31/98/dc4ad376ac5f1a1a7d4a83f7b0c6f2bcad36b5d2d8f30aeb482d3a7d9582/cryptography-47.0.0-cp314-cp314t-win32.whl", hash = "sha256:6eebcaf0df1d21ce1f90605c9b432dd2c4f4ab665ac29a40d5e3fc68f51b5e63", size = 3237158, upload-time = "2026-04-24T19:54:02.606Z" },
- { url = "https://files.pythonhosted.org/packages/bc/da/97f62d18306b5133468bc3f8cc73a3111e8cdc8cf8d3e69474d6e5fd2d1b/cryptography-47.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:51c9313e90bd1690ec5a75ed047c27c0b8e6c570029712943d6116ef9a90620b", size = 3758706, upload-time = "2026-04-24T19:54:04.433Z" },
- { url = "https://files.pythonhosted.org/packages/e0/34/a4fae8ae7c3bc227460c9ae43f56abf1b911da0ec29e0ebac53bb0a4b6b7/cryptography-47.0.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:14432c8a9bcb37009784f9594a62fae211a2ae9543e96c92b2a8e4c3cd5cd0c4", size = 7904072, upload-time = "2026-04-24T19:54:06.411Z" },
- { url = "https://files.pythonhosted.org/packages/01/64/d7b1e54fdb69f22d24a64bb3e88dc718b31c7fb10ef0b9691a3cf7eeea6e/cryptography-47.0.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:07efe86201817e7d3c18781ca9770bc0db04e1e48c994be384e4602bc38f8f27", size = 4635767, upload-time = "2026-04-24T19:54:08.519Z" },
- { url = "https://files.pythonhosted.org/packages/8b/7b/cca826391fb2a94efdcdfe4631eb69306ee1cff0b22f664a412c90713877/cryptography-47.0.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b45761c6ec22b7c726d6a829558777e32d0f1c8be7c3f3480f9c912d5ee8a10", size = 4654350, upload-time = "2026-04-24T19:54:10.795Z" },
- { url = "https://files.pythonhosted.org/packages/4c/65/4b57bcc823f42a991627c51c2f68c9fd6eb1393c1756aac876cba2accae2/cryptography-47.0.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:edd4da498015da5b9f26d38d3bfc2e90257bfa9cbed1f6767c282a0025ae649b", size = 4643394, upload-time = "2026-04-24T19:54:13.275Z" },
- { url = "https://files.pythonhosted.org/packages/f4/c4/2c5fbeea70adbbca2bbae865e1d605d6a4a7f8dbd9d33eaf69645087f06c/cryptography-47.0.0-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9af828c0d5a65c70ec729cd7495a4bf1a67ecb66417b8f02ff125ab8a6326a74", size = 5225777, upload-time = "2026-04-24T19:54:15.18Z" },
- { url = "https://files.pythonhosted.org/packages/7e/b8/ac57107ef32749d2b244e36069bb688792a363aaaa3acc9e3cf84c130315/cryptography-47.0.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:256d07c78a04d6b276f5df935a9923275f53bd1522f214447fdf365494e2d515", size = 4688771, upload-time = "2026-04-24T19:54:17.835Z" },
- { url = "https://files.pythonhosted.org/packages/56/fc/9f1de22ff8be99d991f240a46863c52d475404c408886c5a38d2b5c3bb26/cryptography-47.0.0-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:5d0e362ff51041b0c0d219cc7d6924d7b8996f57ce5712bdcef71eb3c65a59cc", size = 4270753, upload-time = "2026-04-24T19:54:19.963Z" },
- { url = "https://files.pythonhosted.org/packages/00/68/d70c852797aa68e8e48d12e5a87170c43f67bb4a59403627259dd57d15de/cryptography-47.0.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:1581aef4219f7ca2849d0250edaa3866212fb74bf5667284f46aa92f9e65c1ca", size = 4642911, upload-time = "2026-04-24T19:54:21.818Z" },
- { url = "https://files.pythonhosted.org/packages/a5/51/661cbee74f594c5d97ff82d34f10d5551c085ca4668645f4606ebd22bd5d/cryptography-47.0.0-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:a49a3eb5341b9503fa3000a9a0db033161db90d47285291f53c2a9d2cd1b7f76", size = 5181411, upload-time = "2026-04-24T19:54:24.376Z" },
- { url = "https://files.pythonhosted.org/packages/94/87/f2b6c374a82cf076cfa1416992ac8e8ec94d79facc37aec87c1a5cb72352/cryptography-47.0.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2207a498b03275d0051589e326b79d4cf59985c99031b05bb292ac52631c37fe", size = 4688262, upload-time = "2026-04-24T19:54:26.946Z" },
- { url = "https://files.pythonhosted.org/packages/14/e2/8b7462f4acf21ec509616f0245018bb197194ab0b65c2ea21a0bdd53c0eb/cryptography-47.0.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7a02675e2fabd0c0fc04c868b8781863cbf1967691543c22f5470500ff840b31", size = 4775506, upload-time = "2026-04-24T19:54:28.926Z" },
- { url = "https://files.pythonhosted.org/packages/70/75/158e494e4c08dc05e039da5bb48553826bd26c23930cf8d3cd5f21fa8921/cryptography-47.0.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:80887c5cbd1774683cb126f0ab4184567f080071d5acf62205acb354b4b753b7", size = 4912060, upload-time = "2026-04-24T19:54:30.869Z" },
- { url = "https://files.pythonhosted.org/packages/06/bd/0a9d3edbf5eadbac926d7b9b3cd0c4be584eeeae4a003d24d9eda4affbbd/cryptography-47.0.0-cp38-abi3-win32.whl", hash = "sha256:ed67ea4e0cfb5faa5bc7ecb6e2b8838f3807a03758eec239d6c21c8769355310", size = 3248487, upload-time = "2026-04-24T19:54:33.494Z" },
- { url = "https://files.pythonhosted.org/packages/60/80/5681af756d0da3a599b7bdb586fac5a1540f1bcefd2717a20e611ddade45/cryptography-47.0.0-cp38-abi3-win_amd64.whl", hash = "sha256:835d2d7f47cdc53b3224e90810fb1d36ca94ea29cc1801fb4c1bc43876735769", size = 3755737, upload-time = "2026-04-24T19:54:35.408Z" },
- { url = "https://files.pythonhosted.org/packages/1b/a0/928c9ce0d120a40a81aa99e3ba383e87337b9ac9ef9f6db02e4d7822424d/cryptography-47.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f1207974a904e005f762869996cf620e9bf79ecb4622f148550bb48e0eb35a7", size = 3909893, upload-time = "2026-04-24T19:54:38.334Z" },
- { url = "https://files.pythonhosted.org/packages/81/75/d691e284750df5d9569f2b1ce4a00a71e1d79566da83b2b3e5549c84917f/cryptography-47.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1a405c08857258c11016777e11c02bacbe7ef596faf259305d282272a3a05cbe", size = 4587867, upload-time = "2026-04-24T19:54:40.619Z" },
- { url = "https://files.pythonhosted.org/packages/07/d6/1b90f1a4e453009730b4545286f0b39bb348d805c11181fc31544e4f9a65/cryptography-47.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:20fdbe3e38fb67c385d233c89371fa27f9909f6ebca1cecc20c13518dae65475", size = 4627192, upload-time = "2026-04-24T19:54:42.849Z" },
- { url = "https://files.pythonhosted.org/packages/dc/53/cb358a80e9e359529f496870dd08c102aa8a4b5b9f9064f00f0d6ed5b527/cryptography-47.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:f7db373287273d8af1414cf95dc4118b13ffdc62be521997b0f2b270771fef50", size = 4587486, upload-time = "2026-04-24T19:54:44.908Z" },
- { url = "https://files.pythonhosted.org/packages/8b/57/aaa3d53876467a226f9a7a82fd14dd48058ad2de1948493442dfa16e2ffd/cryptography-47.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:9fe6b7c64926c765f9dff301f9c1b867febcda5768868ca084e18589113732ab", size = 4626327, upload-time = "2026-04-24T19:54:47.813Z" },
- { url = "https://files.pythonhosted.org/packages/ab/9c/51f28c3550276bcf35660703ba0ab829a90b88be8cd98a71ef23c2413913/cryptography-47.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:cffbba3392df0fa8629bb7f43454ee2925059ee158e23c54620b9063912b86c8", size = 3698916, upload-time = "2026-04-24T19:54:49.782Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/9f/a9/db8f313fdcd85d767d4973515e1db101f9c71f95fced83233de224673757/cryptography-48.0.0.tar.gz", hash = "sha256:5c3932f4436d1cccb036cb0eaef46e6e2db91035166f1ad6505c3c9d5a635920", size = 832984, upload-time = "2026-05-04T22:59:38.133Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/df/3d/01f6dd9190170a5a241e0e98c2d04be3664a9e6f5b9b872cde63aff1c3dd/cryptography-48.0.0-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:0c558d2cdffd8f4bbb30fc7134c74d2ca9a476f830bb053074498fbc86f41ed6", size = 8001587, upload-time = "2026-05-04T22:57:36.803Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/6e/e90527eef33f309beb811cf7c982c3aeffcce8e3edb178baa4ca3ae4a6fa/cryptography-48.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f5333311663ea94f75dd408665686aaf426563556bb5283554a3539177e03b8c", size = 4690433, upload-time = "2026-05-04T22:57:40.373Z" },
+ { url = "https://files.pythonhosted.org/packages/90/04/673510ed51ddff56575f306cf1617d80411ee76831ccd3097599140efdfe/cryptography-48.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7995ef305d7165c3f11ae07f2517e5a4f1d5c18da1376a0a9ed496336b69e5f3", size = 4710620, upload-time = "2026-05-04T22:57:42.935Z" },
+ { url = "https://files.pythonhosted.org/packages/14/d5/e9c4ef932c8d800490c34d8bd589d64a31d5890e27ec9e9ad532be893294/cryptography-48.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:40ba1f85eaa6959837b1d51c9767e230e14612eea4ef110ee8854ada22da1bf5", size = 4696283, upload-time = "2026-05-04T22:57:45.294Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/29/174b9dfb60b12d59ecfc6cfa04bc88c21b42a54f01b8aae09bb6e51e4c7f/cryptography-48.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:369a6348999f94bbd53435c894377b20ab95f25a9065c283570e70150d8abc3c", size = 5296573, upload-time = "2026-05-04T22:57:47.933Z" },
+ { url = "https://files.pythonhosted.org/packages/95/38/0d29a6fd7d0d1373f0c0c88a04ba20e359b257753ac497564cd660fc1d55/cryptography-48.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a0e692c683f4df67815a2d258b324e66f4738bd7a96a218c826dce4f4bd05d8f", size = 4743677, upload-time = "2026-05-04T22:57:50.067Z" },
+ { url = "https://files.pythonhosted.org/packages/30/be/eef653013d5c63b6a490529e0316f9ac14a37602965d4903efed1399f32b/cryptography-48.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:18349bbc56f4743c8b12dc32e2bccb2cf83ee8b69a3bba74ef8ae857e26b3d25", size = 4330808, upload-time = "2026-05-04T22:57:52.301Z" },
+ { url = "https://files.pythonhosted.org/packages/84/9e/500463e87abb7a0a0f9f256ec21123ecde0a7b5541a15e840ea54551fd81/cryptography-48.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e8eac43dfca5c4cccc6dad9a80504436fca53bb9bc3100a2386d730fbe6b602", size = 4695941, upload-time = "2026-05-04T22:57:54.603Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/dc/7303087450c2ec9e7fbb750e17c2abfbc658f23cbd0e54009509b7cc4091/cryptography-48.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9ccdac7d40688ecb5a3b4a604b8a88c8002e3442d6c60aead1db2a89a041560c", size = 5252579, upload-time = "2026-05-04T22:57:57.207Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/c0/7101d3b7215edcdc90c45da544961fd8ed2d6448f77577460fa75a8443f7/cryptography-48.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:bd72e68b06bb1e96913f97dd4901119bc17f39d4586a5adf2d3e47bc2b9d58b5", size = 4743326, upload-time = "2026-05-04T22:57:59.535Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/d8/5b833bad13016f562ab9d063d68199a4bd121d18458e439515601d3357ec/cryptography-48.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:59baa2cb386c4f0b9905bd6eb4c2a79a69a128408fd31d32ca4d7102d4156321", size = 4826672, upload-time = "2026-05-04T22:58:01.996Z" },
+ { url = "https://files.pythonhosted.org/packages/98/e1/7074eb8bf3c135558c73fc2bcf0f5633f912e6fb87e868a55c454080ef09/cryptography-48.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9249e3cd978541d665967ac2cb2787fd6a62bddf1e75b3e347a594d7dacf4f74", size = 4972574, upload-time = "2026-05-04T22:58:03.968Z" },
+ { url = "https://files.pythonhosted.org/packages/04/70/e5a1b41d325f797f39427aa44ef8baf0be500065ab6d8e10369d850d4a4f/cryptography-48.0.0-cp311-abi3-win32.whl", hash = "sha256:9c459db21422be75e2809370b829a87eb37f74cd785fc4aa9ea1e5f43b47cda4", size = 3294868, upload-time = "2026-05-04T22:58:06.467Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/ac/8ac51b4a5fc5932eb7ee5c517ba7dc8cd834f0048962b6b352f00f41ebf9/cryptography-48.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:5b012212e08b8dd5edc78ef54da83dd9892fd9105323b3993eff6bea65dc21d7", size = 3817107, upload-time = "2026-05-04T22:58:08.845Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/84/70e3feea9feea87fd7cbe77efb2712ae1e3e6edf10749dc6e95f4e60e455/cryptography-48.0.0-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:3cb07a3ed6431663cd321ea8a000a1314c74211f823e4177fefa2255e057d1ec", size = 7986556, upload-time = "2026-05-04T22:58:11.172Z" },
+ { url = "https://files.pythonhosted.org/packages/89/6e/18e07a618bb5442ba10cf4df16e99c071365528aa570dfcb8c02e25a303b/cryptography-48.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c7378637d7d88016fa6791c159f698b3d3eed28ebf844ac36b9dc04a14dae18", size = 4684776, upload-time = "2026-05-04T22:58:13.712Z" },
+ { url = "https://files.pythonhosted.org/packages/be/6a/4ea3b4c6c6759794d5ee2103c304a5076dc4b19ae1f9fe47dba439e159e9/cryptography-48.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc90c0b39b2e3c65ef52c804b72e3c58f8a04ab2a1871272798e5f9572c17d20", size = 4698121, upload-time = "2026-05-04T22:58:16.448Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/59/6ff6ad6cae03bb887da2a5860b2c9805f8dac969ef01ce563336c49bd1d1/cryptography-48.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:76341972e1eff8b4bea859f09c0d3e64b96ce931b084f9b9b7db8ef364c30eff", size = 4690042, upload-time = "2026-05-04T22:58:18.544Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/b4/fc334ed8cfd705aca282fe4d8f5ae64a8e0f74932e9feecb344610cf6e4d/cryptography-48.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:55b7718303bf06a5753dcdccf2f3945cf18ad7bffde41b61226e4db31ab89a9c", size = 5282526, upload-time = "2026-05-04T22:58:20.75Z" },
+ { url = "https://files.pythonhosted.org/packages/11/08/9f8c5386cc4cd90d8255c7cdd0f5baf459a08502a09de30dc51f553d38dc/cryptography-48.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:a64697c641c7b1b2178e573cbc31c7c6684cd56883a478d75143dbb7118036db", size = 4733116, upload-time = "2026-05-04T22:58:23.627Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/77/99307d7574045699f8805aa500fa0fb83422d115b5400a064ddd306d7750/cryptography-48.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:561215ea3879cb1cbbf272867e2efda62476f240fb58c64de6b393ae19246741", size = 4316030, upload-time = "2026-05-04T22:58:25.581Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/36/a608b98337af3cb2aff4818e406649d30572b7031918b04c87d979495348/cryptography-48.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ad64688338ed4bc1a6618076ba75fd7194a5f1797ac60b47afe926285adb3166", size = 4689640, upload-time = "2026-05-04T22:58:27.747Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/a6/825010a291b4438aecc1f568bc428189fc1175515223632477c07dc0a6df/cryptography-48.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:906cbf0670286c6e0044156bc7d4af9cbb0ef6db9f73e52c3ec56ba6bdde5336", size = 5237657, upload-time = "2026-05-04T22:58:29.848Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/09/4e76a09b4caa29aad535ddc806f5d4c5d01885bd978bd984fbc6ca032cae/cryptography-48.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:ea8990436d914540a40ab24b6a77c0969695ed52f4a4874c5137ccf7045a7057", size = 4732362, upload-time = "2026-05-04T22:58:32.009Z" },
+ { url = "https://files.pythonhosted.org/packages/18/78/444fa04a77d0cb95f417dda20d450e13c56ba8e5220fc892a1658f44f882/cryptography-48.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c18684a7f0cc9a3cb60328f496b8e3372def7c5d2df39ac267878b05565aaaae", size = 4819580, upload-time = "2026-05-04T22:58:34.254Z" },
+ { url = "https://files.pythonhosted.org/packages/38/85/ea67067c70a1fd4be2c63d35eeed82658023021affccc7b17705f8527dd2/cryptography-48.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9be5aafa5736574f8f15f262adc81b2a9869e2cfe9014d52a44633905b40d52c", size = 4963283, upload-time = "2026-05-04T22:58:36.376Z" },
+ { url = "https://files.pythonhosted.org/packages/75/54/cc6d0f3deac3e81c7f847e8a189a12b6cdd65059b43dad25d4316abd849a/cryptography-48.0.0-cp314-cp314t-win32.whl", hash = "sha256:c17dfe85494deaeddc5ce251aebd1d60bbe6afc8b62071bb0b469431a000124f", size = 3270954, upload-time = "2026-05-04T22:58:38.791Z" },
+ { url = "https://files.pythonhosted.org/packages/49/67/cc947e288c0758a4e5473d1dcb743037ab7785541265a969240b8885441a/cryptography-48.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27241b1dc9962e056062a8eef1991d02c3a24569c95975bd2322a8a52c6e5e12", size = 3797313, upload-time = "2026-05-04T22:58:40.746Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/63/61d4a4e1c6b6bab6ce1e213cd36a24c415d90e76d78c5eb8577c5541d2e8/cryptography-48.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:58d00498e8933e4a194f3076aee1b4a97dfec1a6da444535755822fe5d8b0b86", size = 7983482, upload-time = "2026-05-04T22:58:43.769Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/ac/f5b5995b87770c693e2596559ffafe195b4033a57f14a82268a2842953f3/cryptography-48.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:614d0949f4790582d2cc25553abd09dd723025f0c0e7c67376a1d77196743d6e", size = 4683266, upload-time = "2026-05-04T22:58:46.064Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/c6/8b14f67e18338fbc4adb76f66c001f5c3610b3e2d1837f268f47a347dbbb/cryptography-48.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ce4bfae76319a532a2dc68f82cc32f5676ee792a983187dac07183690e5c66f", size = 4696228, upload-time = "2026-05-04T22:58:48.22Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/73/f808fbae9514bd91b47875b003f13e284c8c6bdfd904b7944e803937eec1/cryptography-48.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2eb992bbd4661238c5a397594c83f5b4dc2bc5b848c365c8f991b6780efcc5c7", size = 4689097, upload-time = "2026-05-04T22:58:50.9Z" },
+ { url = "https://files.pythonhosted.org/packages/93/01/d86632d7d28db8ae83221995752eeb6639ffb374c2d22955648cf8d52797/cryptography-48.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:22a5cb272895dce158b2cacdfdc3debd299019659f42947dbdac6f32d68fe832", size = 5283582, upload-time = "2026-05-04T22:58:53.017Z" },
+ { url = "https://files.pythonhosted.org/packages/02/e1/50edc7a50334807cc4791fc4a0ce7468b4a1416d9138eab358bfc9a3d70b/cryptography-48.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2b4d59804e8408e2fea7d1fbaf218e5ec984325221db76e6a241a9abd6cdd95c", size = 4730479, upload-time = "2026-05-04T22:58:55.611Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/af/99a582b1b1641ff5911ac559beb45097cf79efd4ead4657f578ef1af2d47/cryptography-48.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:984a20b0f62a26f48a3396c72e4bc34c66e356d356bf370053066b3b6d54634a", size = 4326481, upload-time = "2026-05-04T22:58:57.607Z" },
+ { url = "https://files.pythonhosted.org/packages/90/ee/89aa26a06ef0a7d7611788ffd571a7c50e368cc6a4d5eef8b4884e866edb/cryptography-48.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5a5ed8fde7a1d09376ca0b40e68cd59c69fe23b1f9768bd5824f54681626032a", size = 4688713, upload-time = "2026-05-04T22:59:00.077Z" },
+ { url = "https://files.pythonhosted.org/packages/70/ba/bcb1b0bb7a33d4c7c0c4d4c7874b4a62ae4f56113a5f4baefa362dfb1f0f/cryptography-48.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:8cd666227ef7af430aa5914a9910e0ddd703e75f039cef0825cd0da71b6b711a", size = 5238165, upload-time = "2026-05-04T22:59:02.317Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/70/ca4003b1ce5ca3dc3186ada51908c8a9b9ff7d5cab83cc0d43ee14ec144f/cryptography-48.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9071196d81abc88b3516ac8cdfad32e2b66dd4a5393a8e68a961e9161ddc6239", size = 4729947, upload-time = "2026-05-04T22:59:05.255Z" },
+ { url = "https://files.pythonhosted.org/packages/44/a0/4ec7cf774207905aef1a8d11c3750d5a1db805eb380ee4e16df317870128/cryptography-48.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1e2d54c8be6152856a36f0882ab231e70f8ec7f14e93cf87db8a2ed056bf160c", size = 4822059, upload-time = "2026-05-04T22:59:07.802Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/75/a2e55f99c16fcac7b5d6c1eb19ad8e00799854d6be5ca845f9259eae1681/cryptography-48.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a5da777e32ffed6f85a7b2b3f7c5cbc88c146bfcd0a1d7baf5fcc6c52ee35dd4", size = 4960575, upload-time = "2026-05-04T22:59:09.851Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/23/6e6f32143ab5d8b36ca848a502c4bcd477ae75b9e1677e3530d669062578/cryptography-48.0.0-cp39-abi3-win32.whl", hash = "sha256:77a2ccbbe917f6710e05ba9adaa25fb5075620bf3ea6fb751997875aff4ae4bd", size = 3279117, upload-time = "2026-05-04T22:59:12.019Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/9a/0fea98a70cf1749d41d738836f6349d97945f7c89433a259a6c2642eefeb/cryptography-48.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:16cd65b9330583e4619939b3a3843eec1e6e789744bb01e7c7e2e62e33c239c8", size = 3792100, upload-time = "2026-05-04T22:59:14.884Z" },
+ { url = "https://files.pythonhosted.org/packages/be/d2/024b5e06be9d44cb021fb0e1a03d34d63989cf56a0fe62f3dfbab695b9b4/cryptography-48.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:84cf79f0dc8b36ac5da873481716e87aef31fcfa0444f9e1d8b4b2cece142855", size = 3950391, upload-time = "2026-05-04T22:59:17.415Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/17/3861e17c56fa0fd37491a14a8673fdb77c57fc5693cafe745ea8b06dba75/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:fdfef35d751d510fcef5252703621574364fec16418c4a1e5e1055248401054b", size = 4637126, upload-time = "2026-05-04T22:59:20.197Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/0a/7e226dbff530f21480727eb764973a7bff2b912f8e15cd4f129e71b56d1d/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0890f502ddf7d9c6426129c3f49f5c0a39278ed7cd6322c8755ffca6ee675a13", size = 4667270, upload-time = "2026-05-04T22:59:22.647Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/f2/5a72274ca9f1b2a8b44a662ee0bf1b435909deb473d6f97bcd035bcdbc71/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:ecde28a596bead48b0cfd2a1b4416c3d43074c2d785e3a398d7ec1fc4d0f7fbb", size = 4636797, upload-time = "2026-05-04T22:59:24.912Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/e1/48cedb2fe63626e91ded1edad159e2a4fb8b6906c4425eb7749673077ce7/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:4defde8685ae324a9eb9d818717e93b4638ef67070ac9bc15b8ca85f63048355", size = 4666800, upload-time = "2026-05-04T22:59:27.474Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/ca/7e8365deec19afb2b2c7be7c1c0aa8f99633b54e90c570999acda93260fc/cryptography-48.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:db63bf618e5dea46c07de12e900fe1cdd2541e6dc9dbae772a70b7d4d4765f6a", size = 3739536, upload-time = "2026-05-04T22:59:29.61Z" },
]
[[package]]
@@ -712,7 +752,7 @@ name = "cuda-bindings"
version = "12.9.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "cuda-pathfinder" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/1f/a5/e9d37c10f6c27c9c65d53c6cd6d9763e1df99c004780585fc2ad9041fbe3/cuda_bindings-12.9.6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2662f59db67d9aeaf8959c593c91f600792c2970cf02cae2814387fc687b115a", size = 7090971, upload-time = "2026-03-11T14:47:29.526Z" },
@@ -747,37 +787,37 @@ wheels = [
[package.optional-dependencies]
cublas = [
- { name = "nvidia-cublas-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-cublas-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
cudart = [
- { name = "nvidia-cuda-runtime-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-cuda-runtime-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
cufft = [
- { name = "nvidia-cufft-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-cufft-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
cufile = [
{ name = "nvidia-cufile-cu12", marker = "sys_platform == 'linux'" },
]
cupti = [
- { name = "nvidia-cuda-cupti-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-cuda-cupti-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
curand = [
- { name = "nvidia-curand-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-curand-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
cusolver = [
- { name = "nvidia-cusolver-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-cusolver-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
cusparse = [
- { name = "nvidia-cusparse-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-cusparse-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
nvjitlink = [
- { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
nvrtc = [
- { name = "nvidia-cuda-nvrtc-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-cuda-nvrtc-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
nvtx = [
- { name = "nvidia-nvtx-cu12", marker = "sys_platform == 'linux'" },
+ { name = "nvidia-nvtx-cu12", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
]
[[package]]
@@ -800,38 +840,38 @@ wheels = [
[[package]]
name = "duckdb"
-version = "1.5.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/0c/66/744b4931b799a42f8cb9bc7a6f169e7b8e51195b62b246db407fd90bf15f/duckdb-1.5.2.tar.gz", hash = "sha256:638da0d5102b6cb6f7d47f83d0600708ac1d3cb46c5e9aaabc845f9ba4d69246", size = 18017166, upload-time = "2026-04-13T11:30:09.065Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/9a/b0/d13e7e396d86c245290b3e93f692a2d27c2fe99f857aaf9205003c00c978/duckdb-1.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f69164b048e498b9e9140a24343108a5ae5f17bfb3485185f55fdf9b1aa924d", size = 30020978, upload-time = "2026-04-13T11:28:52.486Z" },
- { url = "https://files.pythonhosted.org/packages/70/7b/ae1ec7f516394aa55501d1949af1f731be8d9d7433f0acc3f4632a0ba484/duckdb-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81fc4fbf0b5e25840b39ba2a10b78c6953c0314d5d0434191e7898f34ab1bba3", size = 15947821, upload-time = "2026-04-13T11:28:55.981Z" },
- { url = "https://files.pythonhosted.org/packages/8a/a5/cae0105e01a85f85ead61723bb42dab14c2f8ec49f91e67a2372c02574a4/duckdb-1.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56d38b3c4e0ef2abb58898d0fd423933999ed535c45e75e9d9f72e1d5fed69b8", size = 14201656, upload-time = "2026-04-13T11:28:58.316Z" },
- { url = "https://files.pythonhosted.org/packages/50/db/46c57e8813ac33762bddc9545610ed648751c5b6a379abf2dc6035505ce4/duckdb-1.5.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:376856066c65ccd55fcb3a380bbe33a71ce089fc4623d229ffc6e82251afdb6d", size = 19285181, upload-time = "2026-04-13T11:29:01.041Z" },
- { url = "https://files.pythonhosted.org/packages/dc/a2/67694010693ec8c8c975e6991f48ef886d35ecbdaa2f287234882a403c21/duckdb-1.5.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c69907354ffee94ba8cf782daf0480dab7557f21ce27fffa6c0ea8f74ed4b8e2", size = 21394852, upload-time = "2026-04-13T11:29:03.814Z" },
- { url = "https://files.pythonhosted.org/packages/52/9f/2b1618c5a93949a70dcf105293db7e27bb2b2cc4aeb1ff46b806f430ec81/duckdb-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:d9b4f5430bf4f05d4c0dc4c55c75def3a5af4be0343be20fa2bfc577343fbfc9", size = 13095526, upload-time = "2026-04-13T11:29:06.265Z" },
- { url = "https://files.pythonhosted.org/packages/b8/e9/cb39e0d94a32f5333e819112fd01439a31f541f9c56a31b66f9bd209704b/duckdb-1.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:2323c1195c10fb2bb982fc0218c730b43d1b92a355d61e68e3c5f3ac9d44c34f", size = 13946215, upload-time = "2026-04-13T11:29:08.672Z" },
- { url = "https://files.pythonhosted.org/packages/41/de/ebe66bbe78125fc610f4fd415447a65349d94245950f3b3dfb31d028af02/duckdb-1.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e6495b00cad16888384119842797c49316a96ae1cb132bb03856d980d95afee1", size = 30064950, upload-time = "2026-04-13T11:29:11.468Z" },
- { url = "https://files.pythonhosted.org/packages/2d/8a/3e25b5d03bcf1fb99d189912f8ce92b1db4f9c8778e1b1f55745973a855a/duckdb-1.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d72b8856b1839d35648f38301b058f6232f4d36b463fe4dc8f4d3fdff2df1a2e", size = 15969113, upload-time = "2026-04-13T11:29:14.139Z" },
- { url = "https://files.pythonhosted.org/packages/19/bb/58001f0815002b1a93431bf907f77854085c7d049b83d521814a07b9db0b/duckdb-1.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1de4f4d454b8c97aec546c82003fc834d3422ce4bc6a19902f3462ef293bed", size = 14224774, upload-time = "2026-04-13T11:29:16.758Z" },
- { url = "https://files.pythonhosted.org/packages/d3/2f/a7f0de9509d1cef35608aeb382919041cdd70f58c173865c3da6a0d87979/duckdb-1.5.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce0b8141a10d37ecef729c45bc41d334854013f4389f1488bd6035c5579aaac1", size = 19313510, upload-time = "2026-04-13T11:29:19.574Z" },
- { url = "https://files.pythonhosted.org/packages/26/78/eb1e064ea8b9df3b87b167bfd7a407b2f615a4291e06cba756727adfa06c/duckdb-1.5.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99ef73a277c8921bc0a1f16dee38d924484251d9cfd20951748c20fcd5ed855", size = 21429692, upload-time = "2026-04-13T11:29:22.575Z" },
- { url = "https://files.pythonhosted.org/packages/5b/12/05b0c47d14839925c5e35b79081d918ca82e3f236bb724a6f58409dd5291/duckdb-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:8d599758b4e48bf12e18c9b960cf491d219f0c4972d19a45489c05cc5ab36f83", size = 13107594, upload-time = "2026-04-13T11:29:25.43Z" },
- { url = "https://files.pythonhosted.org/packages/0b/2c/80558a82b236e044330e84a154b96aacddb343316b479f3d49be03ea11cb/duckdb-1.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:fc85a5dbcbe6eccac1113c72370d1d3aacfdd49198d63950bdf7d8638a307f00", size = 13927537, upload-time = "2026-04-13T11:29:27.842Z" },
- { url = "https://files.pythonhosted.org/packages/98/f2/e3d742808f138d374be4bb516fade3d1f33749b813650810ab7885cdc363/duckdb-1.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4420b3f47027a7849d0e1815532007f377fa95ee5810b47ea717d35525c12f79", size = 30064879, upload-time = "2026-04-13T11:29:30.763Z" },
- { url = "https://files.pythonhosted.org/packages/72/0d/f3dc1cf97e1267ca15e4307d456f96ce583961f0703fd75e62b2ad8d64fa/duckdb-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bb42e6ed543902e14eae647850da24103a89f0bc2587dec5601b1c1f213bd2ed", size = 15969327, upload-time = "2026-04-13T11:29:33.481Z" },
- { url = "https://files.pythonhosted.org/packages/b1/e0/d5418def53ae4e05a63075705ff44ed5af5a1a5932627eb2b600c5df1c93/duckdb-1.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:98c0535cd6d901f61a5ea3c2e26a1fd28482953d794deb183daf568e3aa5dda6", size = 14225107, upload-time = "2026-04-13T11:29:35.882Z" },
- { url = "https://files.pythonhosted.org/packages/16/a7/15aaa59dbecc35e9711980fcdbf525b32a52470b32d18ef678193a146213/duckdb-1.5.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:486c862bf7f163c0110b6d85b3e5c031d224a671cca468f12ebb1d3a348f6b39", size = 19313433, upload-time = "2026-04-13T11:29:38.367Z" },
- { url = "https://files.pythonhosted.org/packages/bd/21/d903cc63a5140c822b7b62b373a87dc557e60c29b321dfb435061c5e67cf/duckdb-1.5.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70631c847ca918ee710ec874241b00cf9d2e5be90762cbb2a0389f17823c08f7", size = 21429837, upload-time = "2026-04-13T11:29:41.135Z" },
- { url = "https://files.pythonhosted.org/packages/e3/0a/b770d1f60c70597302130d6247f418549b7094251a02348fbaf1c7e147ae/duckdb-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:52a21823f3fbb52f0f0e5425e20b07391ad882464b955879499b5ff0b45a376b", size = 13107699, upload-time = "2026-04-13T11:29:43.905Z" },
- { url = "https://files.pythonhosted.org/packages/d9/cf/e200fe431d700962d1a908d2ce89f53ccee1cc8db260174ae663ba09686b/duckdb-1.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:411ad438bd4140f189a10e7f515781335962c5d18bd07837dc6d202e3985253d", size = 13927646, upload-time = "2026-04-13T11:29:46.598Z" },
- { url = "https://files.pythonhosted.org/packages/83/a1/f6286c67726cc1ea60a6e3c0d9fbc66527dde24ae089a51bbe298b13ca78/duckdb-1.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6b0fe75c148000f060aa1a27b293cacc0ea08cc1cad724fbf2143d56070a3785", size = 30078598, upload-time = "2026-04-13T11:29:49.828Z" },
- { url = "https://files.pythonhosted.org/packages/de/6a/59febb02f21a4a5c6b0b0099ef7c965fdd5e61e4904cf813809bb792e35f/duckdb-1.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:35579b8e3a064b5eaf15b0eafc558056a13f79a0a62e34cc4baf57119daecfec", size = 15975120, upload-time = "2026-04-13T11:29:52.631Z" },
- { url = "https://files.pythonhosted.org/packages/09/70/ce750854d37bb5a45cccbb2c3cb04df4af56aea8fc30a2499bb643b4a9c0/duckdb-1.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea58ff5b0880593a280cf5511734b17711b32ee1f58b47d726e8600848358160", size = 14227762, upload-time = "2026-04-13T11:29:55.564Z" },
- { url = "https://files.pythonhosted.org/packages/28/dc/ad45ac3c0b6c4687dc649e8f6cf01af1c8b0443932a39b2abb4ebcb3babd/duckdb-1.5.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef461bca07313412dc09961c4a4757a851f56b95ac01c58fac6007632b7b94f2", size = 19315668, upload-time = "2026-04-13T11:29:58.427Z" },
- { url = "https://files.pythonhosted.org/packages/cc/b1/1464f468d2e5813f5808de95df9d3113a645a5bfa2ffcaecbc542ddae272/duckdb-1.5.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be37680ddb380015cb37318e378c53511c45c4f0d8fac5599d22b7d092b9217a", size = 21434056, upload-time = "2026-04-13T11:30:01.238Z" },
- { url = "https://files.pythonhosted.org/packages/ce/32/6673607e024722473fa7aafdd29c0e3dd231dd528f6cd8b5797fbeeb229d/duckdb-1.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:0b291786014df1133f8f18b9df4d004484613146e858d71a21791e0fcca16cf4", size = 13633667, upload-time = "2026-04-13T11:30:04.05Z" },
- { url = "https://files.pythonhosted.org/packages/7a/e3/9d34173ec068631faea3ea6e73050700729363e7e33306a9a3218e5cdc61/duckdb-1.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:c9f3e0b71b8a50fccfb42794899285d9d318ce2503782b9dd54868e5ecd0ad31", size = 14402513, upload-time = "2026-04-13T11:30:06.609Z" },
+version = "1.5.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/69/00/d579dcb2a536b6ea3a2563cdad6844f77d81a9b2d4b22a858097f2468acf/duckdb-1.5.3.tar.gz", hash = "sha256:df39428eb130faa35ae96fd35245bdeae6ecf43936250b116b5fead568eb9f16", size = 18026640, upload-time = "2026-05-20T11:55:31.901Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3c/fc/a8a89c6c73f31c2b58c6abbc2f543e0b736042dd5ef7cc1784c24ec31428/duckdb-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:341a2672e2551ba51c95c1898f0ade983e76675e79038ccb16342c3d6cfb82d7", size = 32583465, upload-time = "2026-05-20T11:54:13.132Z" },
+ { url = "https://files.pythonhosted.org/packages/63/f1/3423a2f523dd034e505d4a5dd8e210ae577212e152598dc13b6a5e736e1b/duckdb-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c9e8fa408705081160ede7ead238d16e73a36b8561b700f2bf2d650ae48e7b92", size = 17278520, upload-time = "2026-05-20T11:54:16.368Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/1a/7bf5ba1b7ea520557e6b2dbee1c85abab016bdac0c1779d9d0ef76c87300/duckdb-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70a18f932cf6d87bd0e554613657a515c1443a1724aacfc7ec5137dd28698b03", size = 15424794, upload-time = "2026-05-20T11:54:19.891Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/16/ce4b1e386e45fab0268edbf1b85bace20e9437589e9edb2bd5f9a226fa44/duckdb-1.5.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e80eb4d0fb59869cb2c7d7ef494c07fb92014fe8e77d96c170cd1ebc1488a708", size = 19306666, upload-time = "2026-05-20T11:54:22.77Z" },
+ { url = "https://files.pythonhosted.org/packages/99/1f/651f8453f26931e8061b7e27b3090f868868185814ecb9216d0bd71ec8ef/duckdb-1.5.3-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3248b49cd835ea322574bc6aac0ae7a83be85547f49d4f5f5777cb380ee6627f", size = 21418306, upload-time = "2026-05-20T11:54:25.616Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/64/e1ffebf010b1631a6fef8d1508f46d4eab3e97c18729af986bb796fa8452/duckdb-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:f4eff89c12c3a362efa012262e57b7b4ab904a7f79bad9178fe365510077abe8", size = 13101423, upload-time = "2026-05-20T11:54:28.107Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/42/b1d4e34f9658cc0e13d7aae581ab82643f50a548d5aee8767f0c587cc3a4/duckdb-1.5.3-cp311-cp311-win_arm64.whl", hash = "sha256:75d13308c9da3ee431d1e72b8ab720aa74a1b3e9159d4124cb62435924496334", size = 13951740, upload-time = "2026-05-20T11:54:30.886Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/c4/2e34929b16c8d544ef664fad8f7f3a2a9db05746aae1e7c8c4ee3a8b23e4/duckdb-1.5.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ff11a457258148337ef9a392148a8cdbd1069b6c27c21958816c7b67fe6c542d", size = 32626494, upload-time = "2026-05-20T11:54:33.738Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/53/3af681793d03771365ae3e2215331151c196a3ac8193f613344840694671/duckdb-1.5.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fd25f533cb1b6b2c84cc767a9a9bab7769bb1aa44571a2a0bfc91ac3e4a38ac", size = 17301121, upload-time = "2026-05-20T11:54:36.928Z" },
+ { url = "https://files.pythonhosted.org/packages/15/e2/c80af1eac2ab5d35fc2c372ef0a84668842e549fbbf7799277b3fccf3e39/duckdb-1.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:10960400ed60cdf0fe05bab2086fa8eb733889cb0ceca18d07ff9a00c0e0be7b", size = 15449283, upload-time = "2026-05-20T11:54:39.777Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/9a/c63af233c9f761bf5178a5210437e1bc6bcb30fa8a9073de6398cfb12c03/duckdb-1.5.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c5f18e7561403054433706c187589e86629a7af09a7efc23a06a8b308e6acc68", size = 19332762, upload-time = "2026-05-20T11:54:42.51Z" },
+ { url = "https://files.pythonhosted.org/packages/21/cc/2d77af4fff86012f334ef82e6d54a995a86c8745e58074f1218ed7d25171/duckdb-1.5.3-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fb7516255a8764545e30f7efacea408cc847764a3027b3b0b3e7d1a7bebbc5c", size = 21453290, upload-time = "2026-05-20T11:54:45.272Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/5e/9bc4817a98feb4dab83e56f2245cd3a30d00ee646d4dec7926464e2b3f28/duckdb-1.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:8001eccbc28be244dfd04d708526f34ddd6460b47a8aeb5d0e39d6f7f9e3fe15", size = 13118308, upload-time = "2026-05-20T11:54:48.058Z" },
+ { url = "https://files.pythonhosted.org/packages/81/35/e3f32e4e53e2450ddb1db8312a17d1ce455d60cc4941b6ad2cfc908794b0/duckdb-1.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:6d2835e39bb6af73891f73c0f8d4324f98afe00d0b00c6d34b2a582c2256cbb0", size = 13927187, upload-time = "2026-05-20T11:54:50.584Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/9c/a528eb09d8be51954c485864bd06753e616939a080cbc3dd4417e8c94a57/duckdb-1.5.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e75a6122c12579a99848517f6f00a4e342aebda3590c30fe9b5cc5f39d5e6afc", size = 32626254, upload-time = "2026-05-20T11:54:53.65Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/3c/1534c0a6db347c05eb7d0f6ecfb7aefbe74cbff398e4892a8fd1903a20e8/duckdb-1.5.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd3963c1cb9d9567777f4a898a9dbe388a2fe9724681801b1e7d6d93eecf1b76", size = 17300917, upload-time = "2026-05-20T11:54:56.628Z" },
+ { url = "https://files.pythonhosted.org/packages/23/fa/beafb91e6e152d2161c4a9cbc472334c87607eb61ad7104b5a7fa8d8d7b1/duckdb-1.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3d5db8c0b55e072cf437948ebb5d7e23d7b9d03d905fa5f9145583e65aa447f7", size = 15449411, upload-time = "2026-05-20T11:54:59.089Z" },
+ { url = "https://files.pythonhosted.org/packages/50/0a/49b6fe04e2fcd63729eb607dadd44818dde77342a4f5ce086c6c92f1dd4d/duckdb-1.5.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ce80aed7a538422129a57eaca9141e3afb51f8bf562b1908b1576c9725b5b22", size = 19333120, upload-time = "2026-05-20T11:55:01.727Z" },
+ { url = "https://files.pythonhosted.org/packages/63/4c/0907c3f76adb9dd90e67610b31e0304a35814e65c4c41a354a262c09b885/duckdb-1.5.3-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:787df63824f07bf18022dbc3b8ca4b2bfab0ebe616464f55c6e8cd0f59ea762e", size = 21453266, upload-time = "2026-05-20T11:55:04.5Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/9c/d2f23a7803ddbbd9413f7572ecf66a15120ed5ced7ce5c73e698c1406b76/duckdb-1.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:bb5bb5dcdd09d62ee60f0ddbbef918e71cce304ffe28428b1131949d39ffaabf", size = 13118640, upload-time = "2026-05-20T11:55:07.389Z" },
+ { url = "https://files.pythonhosted.org/packages/27/d5/7ba2316415bcdab6edd765bbbe35c2ca8a3800f2fe695cd70e3cdb997f09/duckdb-1.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:2fa17ecdd5d3db122836cb71bb93601c2106a3be883c17dffddc02fbf3fa7888", size = 13926409, upload-time = "2026-05-20T11:55:10.166Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/c2/d4b6f8a5e4d3bc25773be6da76a99d9661ebbf3552c007c460d2dd59dbf8/duckdb-1.5.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:4bfa9a4dadf71e83e2c4eaca2f9421c82a54defecc1b0b4c0be95e2389dec4fe", size = 32636685, upload-time = "2026-05-20T11:55:13.158Z" },
+ { url = "https://files.pythonhosted.org/packages/42/58/e835c8298979d29db7a62cb5acc29e9b57aeaca7cdde2fcd3ac980f5cb18/duckdb-1.5.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aea7baf67ad7e1829ac76f67d7dcbd7fb1f57c3eb179d55ac30952df4709ae30", size = 17308134, upload-time = "2026-05-20T11:55:16.194Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/46/617b51363f5613418c8b224b3cce16b58e6dde80904566bec232579c1d4e/duckdb-1.5.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b0b4f088a65d77e1217ce5d7eff889e63fedc44281200d899ff47c84d8ff836", size = 15449891, upload-time = "2026-05-20T11:55:18.687Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/72/354146656e8d9ba3853d3a5ee80a481b8c5f70edfc3d5ae80a8c4479c967/duckdb-1.5.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe8d0c1f6a120aa03fa6e0d03897c71a1842e6cf7afd31d181348391f7108fe1", size = 19338499, upload-time = "2026-05-20T11:55:21.34Z" },
+ { url = "https://files.pythonhosted.org/packages/56/8f/65fc623b51448f2bfba1a9ec6ab3debb4664c0876c0113a5e782600b53ac/duckdb-1.5.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0405eae18ec6e8210a471c97dbfe87a7e4d605274b7fe572a1f276e92158f13", size = 21455828, upload-time = "2026-05-20T11:55:23.847Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/db/d0274cbe9f5fe219f77c0bdf900ac77103569e83c102a4225ce04cbc607d/duckdb-1.5.3-cp314-cp314-win_amd64.whl", hash = "sha256:33ae08b3e818d7613d8936744b67718c2062c2f530376895bfd89efb51b81538", size = 13640011, upload-time = "2026-05-20T11:55:26.276Z" },
+ { url = "https://files.pythonhosted.org/packages/07/5d/8f1899b8bef291caf953992fcd6c24df9f29387a35645e58c2504a5ca473/duckdb-1.5.3-cp314-cp314-win_arm64.whl", hash = "sha256:746433e49bbc667b4df283153415fbe37e9083e0eff6c3cd6e54de7536869cd4", size = 14411554, upload-time = "2026-05-20T11:55:29.037Z" },
]
[[package]]
@@ -975,15 +1015,15 @@ wheels = [
[[package]]
name = "genai-prices"
-version = "0.0.57"
+version = "0.0.61"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "httpx" },
{ name = "pydantic" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/be/30/11f3d683cf3b1d9612475ad8bfffe3423ce9f50fc617733109033e73a038/genai_prices-0.0.57.tar.gz", hash = "sha256:6e101e9c53975557ceffa237b0995787d81fe75aac12410f2898504188bcad89", size = 66555, upload-time = "2026-04-21T13:42:52.554Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/65/71/0c76010eec75f4b3623d521044785c0977c14adabe1cac72b004349567fb/genai_prices-0.0.61.tar.gz", hash = "sha256:4b3bcfd49f174c05831b09f9ee36557d3648569e2f594af6c24b72031b3f0e52", size = 67806, upload-time = "2026-05-19T17:01:36.902Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/a9/fe/d0095040c120d97cb63d055224ecd4e913dc5655315c203c8e83bf13aa86/genai_prices-0.0.57-py3-none-any.whl", hash = "sha256:14e50fb69cdc5a06ddb2a6df5a7fe06741b9e44304ce3f1728f56abdf1856cca", size = 69654, upload-time = "2026-04-21T13:42:51.236Z" },
+ { url = "https://files.pythonhosted.org/packages/de/ec/b08dc2e834ca00fd8dfedcb17ae2e920667adaad617b45e32b7a3b146f24/genai_prices-0.0.61-py3-none-any.whl", hash = "sha256:d77142f61c13e69909ac19c8e44fd315fd65f3afd714e8d55e914fab0eaf47a2", size = 70853, upload-time = "2026-05-19T17:01:37.858Z" },
]
[[package]]
@@ -1000,15 +1040,15 @@ wheels = [
[[package]]
name = "google-auth"
-version = "2.50.0"
+version = "2.53.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cryptography" },
{ name = "pyasn1-modules" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/5f/18/238d7021d151bdab868f23433817b027dd759135202f4dfce0670d1230ca/google_auth-2.50.0.tar.gz", hash = "sha256:f35eafb191195328e8ce10a7883970877e7aeb49c2bfaa54aa0e394316d353d0", size = 336523, upload-time = "2026-04-30T21:19:29.659Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/c6/ad/ff781329bbbdc0974a098d996e89c9e1f7024262f9e3eec442fbb9ad1ac6/google_auth-2.53.0.tar.gz", hash = "sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c", size = 335844, upload-time = "2026-05-15T20:53:07.928Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/37/cf/4880c2137c14280b2f59975cdf12cc442bc0ae1f9ea473a26eaa0c146786/google_auth-2.50.0-py3-none-any.whl", hash = "sha256:04382175e28b94f49694977f0a792688b59a668def1499e9d8de996dc9ce5b15", size = 246495, upload-time = "2026-04-30T21:19:27.664Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/c9/db44165ba7c581268c6d46017ef63339110378305062830104fc7fa144cb/google_auth-2.53.0-py3-none-any.whl", hash = "sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68", size = 246071, upload-time = "2026-05-15T20:53:05.609Z" },
]
[package.optional-dependencies]
@@ -1018,7 +1058,7 @@ requests = [
[[package]]
name = "google-genai"
-version = "1.74.0"
+version = "2.5.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -1032,9 +1072,9 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "websockets" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/33/c8/4a8f1de0a3268d526a345b8c74456b3e1e6ffd200982626326cf7ca83e5b/google_genai-1.74.0.tar.gz", hash = "sha256:c4c473cebdeb6e5adbb0639326de66a3a85a2209e0d32de7d66bf05c698abae8", size = 536772, upload-time = "2026-04-29T22:16:35.881Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/5e/08/c7f3a6f49bb6674891ce6fb9e9eeeb7a7522cb51f3422afff5d5a59bf347/google_genai-2.5.0.tar.gz", hash = "sha256:643d8158a718eecb8d14d4155ed973f43034f8ae757ac922fb6b093dd374e2af", size = 552293, upload-time = "2026-05-20T18:59:00.473Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ca/2b/539c328b66f7bfef2df869371a1789361228e5a7694ba02a642608367b46/google_genai-1.74.0-py3-none-any.whl", hash = "sha256:87d0b311c67d4b2a0ca741e9fc6891330c29defae81d46d8db41079aa1a3d80a", size = 790433, upload-time = "2026-04-29T22:16:33.979Z" },
+ { url = "https://files.pythonhosted.org/packages/52/a7/b90fcd62461d74e08ded24e8265af5d2e53c0fd2dcc309a14687fdf2077a/google_genai-2.5.0-py3-none-any.whl", hash = "sha256:bba50cdb3a14cb3dea7b3e43a8f23b50191fd77bd19097df98b051ce1a619352", size = 818214, upload-time = "2026-05-20T18:58:58.435Z" },
]
[[package]]
@@ -1164,14 +1204,14 @@ wheels = [
[[package]]
name = "holidays"
-version = "0.96"
+version = "0.97"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "python-dateutil" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/3e/dd/068cb4636a3cb433251e7d018d145f1a8c3c57c6fb0452d022561a35c46a/holidays-0.96.tar.gz", hash = "sha256:9d4d15bc28fa690969b82f07a1d6571aa14d4073cc98802510c08dfe3b1f2d25", size = 906699, upload-time = "2026-05-04T17:37:21.258Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/0c/61/058f3f05dd318b9d9546df513f8f6611557919e5360cd608a3ce7c7500d4/holidays-0.97.tar.gz", hash = "sha256:8fe491270bd4aeed6f9584d459d5df506a414727ba76fdd9ebd6323def606935", size = 911304, upload-time = "2026-05-18T19:48:19.37Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/00/a2/05cbe4e2309a08a09bbfab04d3d37d687b5852abf7d037fea19313d2eb60/holidays-0.96-py3-none-any.whl", hash = "sha256:9d4f06603090304584f685b2f3d9f4289eb5c52b83fca472f922cb83cc3fb93f", size = 1473213, upload-time = "2026-05-04T17:37:18.933Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/54/7947b0cba0c91b81801da793ea2d273aab5bdd5484a5ba6c2d3863110f07/holidays-0.97-py3-none-any.whl", hash = "sha256:0bcd55e64abddce2f9aa9224d68afe87acdd7eac7c2aef251b0ef7986bb5220b", size = 1479247, upload-time = "2026-05-18T19:48:16.881Z" },
]
[[package]]
@@ -1213,23 +1253,23 @@ wheels = [
[[package]]
name = "hypothesis"
-version = "6.152.4"
+version = "6.152.9"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "sortedcontainers" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/fa/c7/3147bd903d6b18324a016d43a259cf5b4bb4545e1ead6773dc8a0374e70a/hypothesis-6.152.4.tar.gz", hash = "sha256:31c8f9ce619716f543e2710b489b1633c833586641d9e6c94cee03f109a5afc4", size = 466444, upload-time = "2026-04-27T20:18:37.594Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/3b/fb/a5651eb0cd03ecee644e8f4d8cd2027b40a08bf1488f46201e794aebe9b5/hypothesis-6.152.9.tar.gz", hash = "sha256:de4711d69ce3a18009047c3b44882810fd0c0348c1558e920a4b0d2c45f59e1e", size = 472009, upload-time = "2026-05-19T17:10:19.586Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/19/89/0f50dd0d92e8a7dffc24f69ab910ff81db89b2f082ba42682bd57695e4d2/hypothesis-6.152.4-py3-none-any.whl", hash = "sha256:e730fd93c7578182efadc7f90b3c5437ee4d55edf738930eb5043c81ac1d97e8", size = 532145, upload-time = "2026-04-27T20:18:35.043Z" },
+ { url = "https://files.pythonhosted.org/packages/79/d9/40ef7ed22f0c45c2316467edb9afb8fc172cd089cb329c0ee6da6b74416c/hypothesis-6.152.9-py3-none-any.whl", hash = "sha256:9c4fdccb1eac0b12ec740c12290d0e6a0bea3526a3f0bf812b7643bb563c2d8b", size = 538148, upload-time = "2026-05-19T17:10:16.131Z" },
]
[[package]]
name = "idna"
-version = "3.13"
+version = "3.15"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210, upload-time = "2026-04-22T16:42:42.314Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size = 199245, upload-time = "2026-05-12T22:45:57.011Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629, upload-time = "2026-04-22T16:42:40.909Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size = 72340, upload-time = "2026-05-12T22:45:55.733Z" },
]
[[package]]
@@ -1241,18 +1281,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441, upload-time = "2026-03-03T14:18:27.892Z" },
]
-[[package]]
-name = "importlib-metadata"
-version = "8.7.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "zipp" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" },
-]
-
[[package]]
name = "inflection"
version = "0.5.1"
@@ -1315,92 +1343,92 @@ wheels = [
[[package]]
name = "jiter"
-version = "0.14.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/6e/c1/0cddc6eb17d4c53a99840953f95dd3accdc5cfc7a337b0e9b26476276be9/jiter-0.14.0.tar.gz", hash = "sha256:e8a39e66dac7153cf3f964a12aad515afa8d74938ec5cc0018adcdae5367c79e", size = 165725, upload-time = "2026-04-10T14:28:42.01Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/8a/1f/198ae537fccb7080a0ed655eb56abf64a92f79489dfbf79f40fa34225bcd/jiter-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7e791e247b8044512e070bd1f3633dc08350d32776d2d6e7473309d0edf256a2", size = 316896, upload-time = "2026-04-10T14:26:01.986Z" },
- { url = "https://files.pythonhosted.org/packages/cf/34/da67cff3fce964a36d03c3e365fb0f8726ade2a6cfd4d3c70107e216ead6/jiter-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71527ce13fd5a0c4e40ad37331f8c547177dbb2dd0a93e5278b6a5eecf748804", size = 321085, upload-time = "2026-04-10T14:26:03.364Z" },
- { url = "https://files.pythonhosted.org/packages/ed/36/4c72e67180d4e71a4f5dcf7886d0840e83c49ab11788172177a77570326e/jiter-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c4a7ab56f746014874f2c525584c0daca1dec37f66fd707ecef3b7e5c2228c", size = 347393, upload-time = "2026-04-10T14:26:05.314Z" },
- { url = "https://files.pythonhosted.org/packages/bc/db/9b39e09ceafa9878235c0fc29e3e3f9b12a4c6a98ea3085b998cadf3accc/jiter-0.14.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:376e9dafff914253bb9d46cdc5f7965607fbe7feb0a491c34e35f92b2770702e", size = 372937, upload-time = "2026-04-10T14:26:06.884Z" },
- { url = "https://files.pythonhosted.org/packages/b0/96/0dcba1d7a82c1b720774b48ef239376addbaf30df24c34742ac4a57b67b2/jiter-0.14.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23ad2a7a9da1935575c820428dd8d2490ce4d23189691ce33da1fc0a58e14e1c", size = 463646, upload-time = "2026-04-10T14:26:08.345Z" },
- { url = "https://files.pythonhosted.org/packages/f1/e3/f61b71543e746e6b8b805e7755814fc242715c16f1dba58e1cbccb8032c2/jiter-0.14.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54b3ddf5786bc7732d293bba3411ac637ecfa200a39983166d1df86a59a43c9f", size = 380225, upload-time = "2026-04-10T14:26:10.161Z" },
- { url = "https://files.pythonhosted.org/packages/ad/5e/0ddeb7096aca099114abe36c4921016e8d251e6f35f5890240b31f1f60ae/jiter-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c001d5a646c2a50dc055dd526dad5d5245969e8234d2b1131d0451e81f3a373", size = 358682, upload-time = "2026-04-10T14:26:11.574Z" },
- { url = "https://files.pythonhosted.org/packages/e9/d1/fe0c46cd7fda9cad8f1ff9ad217dc61f1e4280b21052ec6dfe88c1446ef2/jiter-0.14.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:834bb5bdabca2e91592a03d373838a8d0a1b8bbde7077ae6913fd2fc51812d00", size = 359973, upload-time = "2026-04-10T14:26:13.316Z" },
- { url = "https://files.pythonhosted.org/packages/ac/21/f5317f91729b501019184771c80d60abd89907009e7bfa6c7e348c5bdd44/jiter-0.14.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4e9178be60e229b1b2b0710f61b9e24d1f4f8556985a83ff4c4f95920eea7314", size = 397568, upload-time = "2026-04-10T14:26:15.212Z" },
- { url = "https://files.pythonhosted.org/packages/e9/05/79d8f33fb2bf168db0df5c9cd16fe440a8ada57e929d3677b22712c2568f/jiter-0.14.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a7e4ccff04ec03614e62c613e976a3a5860dc9714ce8266f44328bdc8b1cab2c", size = 522535, upload-time = "2026-04-10T14:26:16.956Z" },
- { url = "https://files.pythonhosted.org/packages/5c/00/d1e3ff3d2a465e67f08507d74bafb2dcd29eba91dc939820e39e8dea38b8/jiter-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:69539d936fb5d55caf6ecd33e2e884de083ff0ea28579780d56c4403094bb8d9", size = 556709, upload-time = "2026-04-10T14:26:18.5Z" },
- { url = "https://files.pythonhosted.org/packages/60/5b/bbb2189f62ace8d95e869aa4c84c9946616f301e2d02895a6f20dcc3bba3/jiter-0.14.0-cp311-cp311-win32.whl", hash = "sha256:4927d09b3e572787cc5e0a5318601448e1ab9391bcef95677f5840c2d00eaa6d", size = 208660, upload-time = "2026-04-10T14:26:20.511Z" },
- { url = "https://files.pythonhosted.org/packages/b8/86/c500b53dcbf08575f5963e536ebd757a1f7c568272ba5d180b212c9a87fb/jiter-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:42d6ed359ac49eb922fdd565f209c57340aa06d589c84c8413e42a0f9ae1b842", size = 204659, upload-time = "2026-04-10T14:26:22.152Z" },
- { url = "https://files.pythonhosted.org/packages/75/4a/a676249049d42cb29bef82233e4fe0524d414cbe3606c7a4b311193c2f77/jiter-0.14.0-cp311-cp311-win_arm64.whl", hash = "sha256:6dd689f5f4a5a33747b28686e051095beb214fe28cfda5e9fe58a295a788f593", size = 194772, upload-time = "2026-04-10T14:26:23.458Z" },
- { url = "https://files.pythonhosted.org/packages/5a/68/7390a418f10897da93b158f2d5a8bd0bcd73a0f9ec3bb36917085bb759ef/jiter-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2fb2ce3a7bc331256dfb14cefc34832366bb28a9aca81deaf43bbf2a5659e607", size = 316295, upload-time = "2026-04-10T14:26:24.887Z" },
- { url = "https://files.pythonhosted.org/packages/60/a0/5854ac00ff63551c52c6c89534ec6aba4b93474e7924d64e860b1c94165b/jiter-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5252a7ca23785cef5d02d4ece6077a1b556a410c591b379f82091c3001e14844", size = 315898, upload-time = "2026-04-10T14:26:26.601Z" },
- { url = "https://files.pythonhosted.org/packages/41/a1/4f44832650a16b18e8391f1bf1d6ca4909bc738351826bcc198bba4357f4/jiter-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c409578cbd77c338975670ada777add4efd53379667edf0aceea730cabede6fb", size = 343730, upload-time = "2026-04-10T14:26:28.326Z" },
- { url = "https://files.pythonhosted.org/packages/48/64/a329e9d469f86307203594b1707e11ae51c3348d03bfd514a5f997870012/jiter-0.14.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ede4331a1899d604463369c730dbb961ffdc5312bc7f16c41c2896415b1304a", size = 370102, upload-time = "2026-04-10T14:26:30.089Z" },
- { url = "https://files.pythonhosted.org/packages/94/c1/5e3dfc59635aa4d4c7bd20a820ac1d09b8ed851568356802cf1c08edb3cf/jiter-0.14.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92cd8b6025981a041f5310430310b55b25ca593972c16407af8837d3d7d2ca01", size = 461335, upload-time = "2026-04-10T14:26:31.911Z" },
- { url = "https://files.pythonhosted.org/packages/e3/1b/dd157009dbc058f7b00108f545ccb72a2d56461395c4fc7b9cfdccb00af4/jiter-0.14.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:351bf6eda4e3a7ceb876377840c702e9a3e4ecc4624dbfb2d6463c67ae52637d", size = 378536, upload-time = "2026-04-10T14:26:33.595Z" },
- { url = "https://files.pythonhosted.org/packages/91/78/256013667b7c10b8834f8e6e54cd3e562d4c6e34227a1596addccc05e38c/jiter-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1dcfbeb93d9ecd9ca128bbf8910120367777973fa193fb9a39c31237d8df165", size = 353859, upload-time = "2026-04-10T14:26:35.098Z" },
- { url = "https://files.pythonhosted.org/packages/de/d9/137d65ade9093a409fe80955ce60b12bb753722c986467aeda47faf450ad/jiter-0.14.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:ae039aaef8de3f8157ecc1fdd4d85043ac4f57538c245a0afaecb8321ec951c3", size = 357626, upload-time = "2026-04-10T14:26:36.685Z" },
- { url = "https://files.pythonhosted.org/packages/2e/48/76750835b87029342727c1a268bea8878ab988caf81ee4e7b880900eeb5a/jiter-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7d9d51eb96c82a9652933bd769fe6de66877d6eb2b2440e281f2938c51b5643e", size = 393172, upload-time = "2026-04-10T14:26:38.097Z" },
- { url = "https://files.pythonhosted.org/packages/a6/60/456c4e81d5c8045279aefe60e9e483be08793828800a4e64add8fdde7f2a/jiter-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d824ca4148b705970bf4e120924a212fdfca9859a73e42bd7889a63a4ea6bb98", size = 520300, upload-time = "2026-04-10T14:26:39.532Z" },
- { url = "https://files.pythonhosted.org/packages/a8/9f/2020e0984c235f678dced38fe4eec3058cf528e6af36ebf969b410305941/jiter-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff3a6465b3a0f54b1a430f45c3c0ba7d61ceb45cbc3e33f9e1a7f638d690baf3", size = 553059, upload-time = "2026-04-10T14:26:40.991Z" },
- { url = "https://files.pythonhosted.org/packages/ef/32/e2d298e1a22a4bbe6062136d1c7192db7dba003a6975e51d9a9eecabc4c2/jiter-0.14.0-cp312-cp312-win32.whl", hash = "sha256:5dec7c0a3e98d2a3f8a2e67382d0d7c3ac60c69103a4b271da889b4e8bb1e129", size = 206030, upload-time = "2026-04-10T14:26:42.517Z" },
- { url = "https://files.pythonhosted.org/packages/36/ac/96369141b3d8a4a8e4590e983085efe1c436f35c0cda940dd76d942e3e40/jiter-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:fc7e37b4b8bc7e80a63ad6cfa5fc11fab27dbfea4cc4ae644b1ab3f273dc348f", size = 201603, upload-time = "2026-04-10T14:26:44.328Z" },
- { url = "https://files.pythonhosted.org/packages/01/c3/75d847f264647017d7e3052bbcc8b1e24b95fa139c320c5f5066fa7a0bdd/jiter-0.14.0-cp312-cp312-win_arm64.whl", hash = "sha256:ee4a72f12847ef29b072aee9ad5474041ab2924106bdca9fcf5d7d965853e057", size = 191525, upload-time = "2026-04-10T14:26:46Z" },
- { url = "https://files.pythonhosted.org/packages/97/2a/09f70020898507a89279659a1afe3364d57fc1b2c89949081975d135f6f5/jiter-0.14.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:af72f204cf4d44258e5b4c1745130ac45ddab0e71a06333b01de660ab4187a94", size = 315502, upload-time = "2026-04-10T14:26:47.697Z" },
- { url = "https://files.pythonhosted.org/packages/d6/be/080c96a45cd74f9fce5db4fd68510b88087fb37ffe2541ff73c12db92535/jiter-0.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4b77da71f6e819be5fbcec11a453fde5b1d0267ef6ed487e2a392fd8e14e4e3a", size = 314870, upload-time = "2026-04-10T14:26:49.149Z" },
- { url = "https://files.pythonhosted.org/packages/7d/5e/2d0fee155826a968a832cc32438de5e2a193292c8721ca70d0b53e58245b/jiter-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f4ea612fe8b84b8b04e51d0e78029ecf3466348e25973f953de6e6a59aa4c1", size = 343406, upload-time = "2026-04-10T14:26:50.762Z" },
- { url = "https://files.pythonhosted.org/packages/70/af/bf9ee0d3a4f8dc0d679fc1337f874fe60cdbf841ebbb304b374e1c9aaceb/jiter-0.14.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62fe2451f8fcc0240261e6a4df18ecbcd58327857e61e625b2393ea3b468aac9", size = 369415, upload-time = "2026-04-10T14:26:52.188Z" },
- { url = "https://files.pythonhosted.org/packages/0f/83/8e8561eadba31f4d3948a5b712fb0447ec71c3560b57a855449e7b8ddc98/jiter-0.14.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6112f26f5afc75bcb475787d29da3aa92f9d09c7858f632f4be6ffe607be82e9", size = 461456, upload-time = "2026-04-10T14:26:53.611Z" },
- { url = "https://files.pythonhosted.org/packages/f6/c9/c5299e826a5fe6108d172b344033f61c69b1bb979dd8d9ddd4278a160971/jiter-0.14.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:215a6cb8fb7dc702aa35d475cc00ddc7f970e5c0b1417fb4b4ac5d82fa2a29db", size = 378488, upload-time = "2026-04-10T14:26:55.211Z" },
- { url = "https://files.pythonhosted.org/packages/5d/37/c16d9d15c0a471b8644b1abe3c82668092a707d9bedcf076f24ff2e380cd/jiter-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ab96a30fb3cb2c7e0cd33f7616c8860da5f5674438988a54ac717caccdbaa", size = 353242, upload-time = "2026-04-10T14:26:56.705Z" },
- { url = "https://files.pythonhosted.org/packages/58/ea/8050cb0dc654e728e1bfacbc0c640772f2181af5dedd13ae70145743a439/jiter-0.14.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3a99c1387b1f2928f799a9de899193484d66206a50e98233b6b088a7f0c1edb2", size = 356823, upload-time = "2026-04-10T14:26:58.281Z" },
- { url = "https://files.pythonhosted.org/packages/b0/3b/cf71506d270e5f84d97326bf220e47aed9b95e9a4a060758fb07772170ab/jiter-0.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab18d11074485438695f8d34a1b6da61db9754248f96d51341956607a8f39985", size = 392564, upload-time = "2026-04-10T14:27:00.018Z" },
- { url = "https://files.pythonhosted.org/packages/b0/cc/8c6c74a3efb5bd671bfd14f51e8a73375464ca914b1551bc3b40e26ac2c9/jiter-0.14.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:801028dcfc26ac0895e4964cbc0fd62c73be9fd4a7d7b1aaf6e5790033a719b7", size = 520322, upload-time = "2026-04-10T14:27:01.664Z" },
- { url = "https://files.pythonhosted.org/packages/41/24/68d7b883ec959884ddf00d019b2e0e82ba81b167e1253684fa90519ce33c/jiter-0.14.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ad425b087aafb4a1c7e1e98a279200743b9aaf30c3e0ba723aec93f061bd9bc8", size = 552619, upload-time = "2026-04-10T14:27:03.316Z" },
- { url = "https://files.pythonhosted.org/packages/b6/89/b1a0985223bbf3150ff9e8f46f98fc9360c1de94f48abe271bbe1b465682/jiter-0.14.0-cp313-cp313-win32.whl", hash = "sha256:882bcb9b334318e233950b8be366fe5f92c86b66a7e449e76975dfd6d776a01f", size = 205699, upload-time = "2026-04-10T14:27:04.662Z" },
- { url = "https://files.pythonhosted.org/packages/4c/19/3f339a5a7f14a11730e67f6be34f9d5105751d547b615ef593fa122a5ded/jiter-0.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:9b8c571a5dba09b98bd3462b5a53f27209a5cbbe85670391692ede71974e979f", size = 201323, upload-time = "2026-04-10T14:27:06.139Z" },
- { url = "https://files.pythonhosted.org/packages/50/56/752dd89c84be0e022a8ea3720bcfa0a8431db79a962578544812ce061739/jiter-0.14.0-cp313-cp313-win_arm64.whl", hash = "sha256:34f19dcc35cb1abe7c369b3756babf8c7f04595c0807a848df8f26ef8298ef92", size = 191099, upload-time = "2026-04-10T14:27:07.564Z" },
- { url = "https://files.pythonhosted.org/packages/91/28/292916f354f25a1fe8cf2c918d1415c699a4a659ae00be0430e1c5d9ffea/jiter-0.14.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e89bcd7d426a75bb4952c696b267075790d854a07aad4c9894551a82c5b574ab", size = 320880, upload-time = "2026-04-10T14:27:09.326Z" },
- { url = "https://files.pythonhosted.org/packages/ad/c7/b002a7d8b8957ac3d469bd59c18ef4b1595a5216ae0de639a287b9816023/jiter-0.14.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b25beaa0d4447ea8c7ae0c18c688905d34840d7d0b937f2f7bdd52162c98a40", size = 346563, upload-time = "2026-04-10T14:27:11.287Z" },
- { url = "https://files.pythonhosted.org/packages/f9/3b/f8d07580d8706021d255a6356b8fab13ee4c869412995550ce6ed4ddf97d/jiter-0.14.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:651a8758dd413c51e3b7f6557cdc6921faf70b14106f45f969f091f5cda990ea", size = 357928, upload-time = "2026-04-10T14:27:12.729Z" },
- { url = "https://files.pythonhosted.org/packages/47/5b/ac1a974da29e35507230383110ffec59998b290a8732585d04e19a9eb5ba/jiter-0.14.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e1a7eead856a5038a8d291f1447176ab0b525c77a279a058121b5fccee257f6f", size = 203519, upload-time = "2026-04-10T14:27:14.125Z" },
- { url = "https://files.pythonhosted.org/packages/96/6d/9fc8433d667d2454271378a79747d8c76c10b51b482b454e6190e511f244/jiter-0.14.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e692633a12cda97e352fdcd1c4acc971b1c28707e1e33aeef782b0cbf051975", size = 190113, upload-time = "2026-04-10T14:27:16.638Z" },
- { url = "https://files.pythonhosted.org/packages/4f/1e/354ed92461b165bd581f9ef5150971a572c873ec3b68a916d5aa91da3cc2/jiter-0.14.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:6f396837fc7577871ca8c12edaf239ed9ccef3bbe39904ae9b8b63ce0a48b140", size = 315277, upload-time = "2026-04-10T14:27:18.109Z" },
- { url = "https://files.pythonhosted.org/packages/a6/95/8c7c7028aa8636ac21b7a55faef3e34215e6ed0cbf5ae58258427f621aa3/jiter-0.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a4d50ea3d8ba4176f79754333bd35f1bbcd28e91adc13eb9b7ca91bc52a6cef9", size = 315923, upload-time = "2026-04-10T14:27:19.603Z" },
- { url = "https://files.pythonhosted.org/packages/47/40/e2a852a44c4a089f2681a16611b7ce113224a80fd8504c46d78491b47220/jiter-0.14.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce17f8a050447d1b4153bda4fb7d26e6a9e74eb4f4a41913f30934c5075bf615", size = 344943, upload-time = "2026-04-10T14:27:21.262Z" },
- { url = "https://files.pythonhosted.org/packages/fc/1f/670f92adee1e9895eac41e8a4d623b6da68c4d46249d8b556b60b63f949e/jiter-0.14.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f4f1c4b125e1652aefbc2e2c1617b60a160ab789d180e3d423c41439e5f32850", size = 369725, upload-time = "2026-04-10T14:27:22.766Z" },
- { url = "https://files.pythonhosted.org/packages/01/2f/541c9ba567d05de1c4874a0f8f8c5e3fd78e2b874266623da9a775cf46e0/jiter-0.14.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be808176a6a3a14321d18c603f2d40741858a7c4fc982f83232842689fe86dd9", size = 461210, upload-time = "2026-04-10T14:27:24.315Z" },
- { url = "https://files.pythonhosted.org/packages/ce/a9/c31cbec09627e0d5de7aeaec7690dba03e090caa808fefd8133137cf45bc/jiter-0.14.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26679d58ba816f88c3849306dd58cb863a90a1cf352cdd4ef67e30ccf8a77994", size = 380002, upload-time = "2026-04-10T14:27:26.155Z" },
- { url = "https://files.pythonhosted.org/packages/50/02/3c05c1666c41904a2f607475a73e7a4763d1cbde2d18229c4f85b22dc253/jiter-0.14.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80381f5a19af8fa9aef743f080e34f6b25ebd89656475f8cf0470ec6157052aa", size = 354678, upload-time = "2026-04-10T14:27:27.701Z" },
- { url = "https://files.pythonhosted.org/packages/7d/97/e15b33545c2b13518f560d695f974b9891b311641bdcf178d63177e8801e/jiter-0.14.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:004df5fdb8ecbd6d99f3227df18ba1a259254c4359736a2e6f036c944e02d7c5", size = 358920, upload-time = "2026-04-10T14:27:29.256Z" },
- { url = "https://files.pythonhosted.org/packages/ad/d2/8b1461def6b96ba44530df20d07ef7a1c7da22f3f9bf1727e2d611077bf1/jiter-0.14.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cff5708f7ed0fa098f2b53446c6fa74c48469118e5cd7497b4f1cd569ab06928", size = 394512, upload-time = "2026-04-10T14:27:31.344Z" },
- { url = "https://files.pythonhosted.org/packages/e3/88/837566dd6ed6e452e8d3205355afd484ce44b2533edfa4ed73a298ea893e/jiter-0.14.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:2492e5f06c36a976d25c7cc347a60e26d5470178d44cde1b9b75e60b4e519f28", size = 521120, upload-time = "2026-04-10T14:27:33.299Z" },
- { url = "https://files.pythonhosted.org/packages/89/6b/b00b45c4d1b4c031777fe161d620b755b5b02cdade1e316dcb46e4471d63/jiter-0.14.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:7609cfbe3a03d37bfdbf5052012d5a879e72b83168a363deae7b3a26564d57de", size = 553668, upload-time = "2026-04-10T14:27:34.868Z" },
- { url = "https://files.pythonhosted.org/packages/ad/d8/6fe5b42011d19397433d345716eac16728ac241862a2aac9c91923c7509a/jiter-0.14.0-cp314-cp314-win32.whl", hash = "sha256:7282342d32e357543565286b6450378c3cd402eea333fc1ebe146f1fabb306fc", size = 207001, upload-time = "2026-04-10T14:27:36.455Z" },
- { url = "https://files.pythonhosted.org/packages/e5/43/5c2e08da1efad5e410f0eaaabeadd954812612c33fbbd8fd5328b489139d/jiter-0.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:bd77945f38866a448e73b0b7637366afa814d4617790ecd88a18ca74377e6c02", size = 202187, upload-time = "2026-04-10T14:27:38Z" },
- { url = "https://files.pythonhosted.org/packages/aa/1f/6e39ac0b4cdfa23e606af5b245df5f9adaa76f35e0c5096790da430ca506/jiter-0.14.0-cp314-cp314-win_arm64.whl", hash = "sha256:f2d4c61da0821ee42e0cdf5489da60a6d074306313a377c2b35af464955a3611", size = 192257, upload-time = "2026-04-10T14:27:39.504Z" },
- { url = "https://files.pythonhosted.org/packages/05/57/7dbc0ffbbb5176a27e3518716608aa464aee2e2887dc938f0b900a120449/jiter-0.14.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1bf7ff85517dd2f20a5750081d2b75083c1b269cf75afc7511bdf1f9548beb3b", size = 323441, upload-time = "2026-04-10T14:27:41.039Z" },
- { url = "https://files.pythonhosted.org/packages/83/6e/7b3314398d8983f06b557aa21b670511ec72d3b79a68ee5e4d9bff972286/jiter-0.14.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8ef8791c3e78d6c6b157c6d360fbb5c715bebb8113bc6a9303c5caff012754a", size = 348109, upload-time = "2026-04-10T14:27:42.552Z" },
- { url = "https://files.pythonhosted.org/packages/ae/4f/8dc674bcd7db6dba566de73c08c763c337058baff1dbeb34567045b27cdc/jiter-0.14.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e74663b8b10da1fe0f4e4703fd7980d24ad17174b6bb35d8498d6e3ebce2ae6a", size = 368328, upload-time = "2026-04-10T14:27:44.574Z" },
- { url = "https://files.pythonhosted.org/packages/3b/5f/188e09a1f20906f98bbdec44ed820e19f4e8eb8aff88b9d1a5a497587ff3/jiter-0.14.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1aca29ba52913f78362ec9c2da62f22cdc4c3083313403f90c15460979b84d9b", size = 463301, upload-time = "2026-04-10T14:27:46.717Z" },
- { url = "https://files.pythonhosted.org/packages/ac/f0/19046ef965ed8f349e8554775bb12ff4352f443fbe12b95d31f575891256/jiter-0.14.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b39b7d87a952b79949af5fef44d2544e58c21a28da7f1bae3ef166455c61746", size = 378891, upload-time = "2026-04-10T14:27:48.32Z" },
- { url = "https://files.pythonhosted.org/packages/c4/c3/da43bd8431ee175695777ee78cf0e93eacbb47393ff493f18c45231b427d/jiter-0.14.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d918a68b26e9fab068c2b5453577ef04943ab2807b9a6275df2a812599a310", size = 360749, upload-time = "2026-04-10T14:27:49.88Z" },
- { url = "https://files.pythonhosted.org/packages/72/26/e054771be889707c6161dbdec9c23d33a9ec70945395d70f07cfea1e9a6f/jiter-0.14.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:b08997c35aee1201c1a5361466a8fb9162d03ae7bf6568df70b6c859f1e654a4", size = 358526, upload-time = "2026-04-10T14:27:51.504Z" },
- { url = "https://files.pythonhosted.org/packages/c3/0f/7bea65ea2a6d91f2bf989ff11a18136644392bf2b0497a1fa50934c30a9c/jiter-0.14.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:260bf7ca20704d58d41f669e5e9fe7fe2fa72901a6b324e79056f5d52e9c9be2", size = 393926, upload-time = "2026-04-10T14:27:53.368Z" },
- { url = "https://files.pythonhosted.org/packages/3c/a1/b1ff7d70deef61ac0b7c6c2f12d2ace950cdeecb4fdc94500a0926802857/jiter-0.14.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:37826e3df29e60f30a382f9294348d0238ef127f4b5d7f5f8da78b5b9e050560", size = 521052, upload-time = "2026-04-10T14:27:55.058Z" },
- { url = "https://files.pythonhosted.org/packages/0b/7b/3b0649983cbaf15eda26a414b5b1982e910c67bd6f7b1b490f3cfc76896a/jiter-0.14.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:645be49c46f2900937ba0eaf871ad5183c96858c0af74b6becc7f4e367e36e06", size = 553716, upload-time = "2026-04-10T14:27:57.269Z" },
- { url = "https://files.pythonhosted.org/packages/97/f8/33d78c83bd93ae0c0af05293a6660f88a1977caef39a6d72a84afab94ce0/jiter-0.14.0-cp314-cp314t-win32.whl", hash = "sha256:2f7877ed45118de283786178eceaf877110abacd04fde31efff3940ae9672674", size = 207957, upload-time = "2026-04-10T14:27:59.285Z" },
- { url = "https://files.pythonhosted.org/packages/d6/ac/2b760516c03e2227826d1f7025d89bf6bf6357a28fe75c2a2800873c50bf/jiter-0.14.0-cp314-cp314t-win_amd64.whl", hash = "sha256:14c0cb10337c49f5eafe8e7364daca5e29a020ea03580b8f8e6c597fed4e1588", size = 204690, upload-time = "2026-04-10T14:28:00.962Z" },
- { url = "https://files.pythonhosted.org/packages/dc/2e/a44c20c58aeed0355f2d326969a181696aeb551a25195f47563908a815be/jiter-0.14.0-cp314-cp314t-win_arm64.whl", hash = "sha256:5419d4aa2024961da9fe12a9cfe7484996735dca99e8e090b5c88595ef1951ff", size = 191338, upload-time = "2026-04-10T14:28:02.853Z" },
- { url = "https://files.pythonhosted.org/packages/32/a1/ef34ca2cab2962598591636a1804b93645821201cc0095d4a93a9a329c9d/jiter-0.14.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:a25ffa2dbbdf8721855612f6dca15c108224b12d0c4024d0ac3d7902132b4211", size = 311366, upload-time = "2026-04-10T14:28:27.943Z" },
- { url = "https://files.pythonhosted.org/packages/60/bb/520576a532a6b8a6f42747afed289c8448c879a34d7802fe2c832d4fd38f/jiter-0.14.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ac9cbaa86c10996b92bd12c91659b60f939f8e28fcfa6bc11a0e90a774ce95b", size = 309873, upload-time = "2026-04-10T14:28:29.688Z" },
- { url = "https://files.pythonhosted.org/packages/b2/7c/c16db114ea1f2f532f198aa8dc39585026af45af362c69a0492f31bc4821/jiter-0.14.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:844e73b6c56b505e9e169234ea3bdea2ea43f769f847f47ac559ba1d2361ebea", size = 344816, upload-time = "2026-04-10T14:28:31.348Z" },
- { url = "https://files.pythonhosted.org/packages/99/8f/15e7741ff19e9bcd4d753f7ff22f988fd54592f134ca13701c13ea8c20e0/jiter-0.14.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e52c076f187405fc21523c746c04399c9af8ece566077ed147b2126f2bcba577", size = 351445, upload-time = "2026-04-10T14:28:33.093Z" },
- { url = "https://files.pythonhosted.org/packages/21/42/9042c3f3019de4adcb8c16591c325ec7255beea9fcd33a42a43f3b0b1000/jiter-0.14.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:fbd9e482663ca9d005d051330e4d2d8150bb208a209409c10f7e7dfdf7c49da9", size = 308810, upload-time = "2026-04-10T14:28:34.673Z" },
- { url = "https://files.pythonhosted.org/packages/60/cf/a7e19b308bd86bb04776803b1f01a5f9a287a4c55205f4708827ee487fbf/jiter-0.14.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:33a20d838b91ef376b3a56896d5b04e725c7df5bc4864cc6569cf046a8d73b6d", size = 308443, upload-time = "2026-04-10T14:28:36.658Z" },
- { url = "https://files.pythonhosted.org/packages/ca/44/e26ede3f0caeff93f222559cb0cc4ca68579f07d009d7b6010c5b586f9b1/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:432c4db5255d86a259efde91e55cb4c8d18c0521d844c9e2e7efcce3899fb016", size = 343039, upload-time = "2026-04-10T14:28:38.356Z" },
- { url = "https://files.pythonhosted.org/packages/da/e9/1f9ada30cef7b05e74bb06f52127e7a724976c225f46adb65c37b1dadfb6/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f00d94b281174144d6532a04b66a12cb866cbdc47c3af3bfe2973677f9861a", size = 349613, upload-time = "2026-04-10T14:28:40.066Z" },
+version = "0.15.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/13/daa722f5765c393576f466378f9dfd29d77c9bed939e0688f96afa3601ea/jiter-0.15.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0f862193b8696249d22ec433e85fd2ab0ad9596bc3e45e6c0bc55e8aeba97be2", size = 310899, upload-time = "2026-05-19T10:07:12.89Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/82/2d2551829b082f4b6d82b9f939b031fb808a10aab1ec0664f82e150bb9a2/jiter-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1303d4d68a9b051ea90502402063ecf3807da00ad2affa19ca1ae3b90b3c5f67", size = 314963, upload-time = "2026-05-19T10:07:14.539Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/0a/8b1a51466f7fe9f31dbe4bc7e0ca848674f9825e0f737b929b97e8c60aa7/jiter-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:392b8ab019e5502d08aff85c6272209c24bc2cbe706ea82a56368f524236614a", size = 341730, upload-time = "2026-05-19T10:07:15.869Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/2a/e71dea19822e2e404e83992a08c1d6b9b617bb944f28c9c2fbd85d02c91e/jiter-0.15.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:773b6eb282ce11ee19f05f6b2d4404fa308e5bbd353b0b80a0262caad6db2cd7", size = 366214, upload-time = "2026-05-19T10:07:17.259Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/59/97e1fa539d124a509a00ab7f669289d1c1d236ecabf12948a18f16c91082/jiter-0.15.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2c0c44d569ce0f2850f5c926f8caeb5f245fbc84475aeb36efccc2103e6dbd", size = 459527, upload-time = "2026-05-19T10:07:18.741Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/7a/4a68d331aef8cf2e2393c14a3aacb635c62aa86071b0229899fb5baaa907/jiter-0.15.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:032396229564bca02440396bd327710719f724f5e7b7e9f7a8eb3faa4a2c2281", size = 375451, upload-time = "2026-05-19T10:07:20.208Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/7e/1c445c2b6f0e30a274dc8082e0c3c7825411cce80d726bccd697c98cc8d3/jiter-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d37768fce7f88dd2a8c6091f2325dea27d30d30d5c6e7a1c0f0af77723b708", size = 349428, upload-time = "2026-05-19T10:07:22.372Z" },
+ { url = "https://files.pythonhosted.org/packages/00/94/e20d38984fc17a636371bffd2ae0f698124fdc8e75ef969cd2da6ba7cea7/jiter-0.15.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2c9cb907439d20bd0c7d7565ca01ee52234203208433749bae5b516907526928", size = 355405, upload-time = "2026-05-19T10:07:23.916Z" },
+ { url = "https://files.pythonhosted.org/packages/94/fa/4d09f814779d0ea80a28ed8e4c6662ec9a4a8ecef0ac52190ebac6262d14/jiter-0.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9100ddbec09741cc66feb0fc6773f8bdbd0e3c345689368f260082ff85dcc0cd", size = 393688, upload-time = "2026-05-19T10:07:25.854Z" },
+ { url = "https://files.pythonhosted.org/packages/54/9d/8eb5d4fb8bf7e93a75964a5da71a75c67c864baf7fa3f98598187b3c7e57/jiter-0.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ae1b0d82ac2d987f9ea512b1c9adfcc71a28de3dea3a6039b54d76cffda9901e", size = 520853, upload-time = "2026-05-19T10:07:27.303Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/2c/5e07874e59e623a943a0acf1552a80d05b70f31b402287a8fc6d7ec634c7/jiter-0.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8020c99ec13a7db2b6f96cbe82ef4721c88b426a4892f27478044af0284615ef", size = 551016, upload-time = "2026-05-19T10:07:28.846Z" },
+ { url = "https://files.pythonhosted.org/packages/22/ed/d2d34422143474cadc15b60d482b1c35683dbc5c63c24346ddd0df09bcaf/jiter-0.15.0-cp311-cp311-win32.whl", hash = "sha256:42bfb257930800cf43e7c62c832402c704ab60797c992faf88d20e903eac8f32", size = 209518, upload-time = "2026-05-19T10:07:30.431Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/7d/52778b930e5cc3e52a37d950b1c10494244308b4329b25a0ff0d88303a81/jiter-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:860a74063284a2ae9bfedd694f299cc2c68e2696c5f3d440cc9d18bb81b9dd04", size = 200565, upload-time = "2026-05-19T10:07:32.125Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/4f/d9b4067feb69b3fa6eb0488e1b59e2ad5b463fe39f59e527eab2aca00bb0/jiter-0.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:37a10c377ce3a4a85f4a67f28b7afe093154cde77eaf248a72e856aa08b4d865", size = 195488, upload-time = "2026-05-19T10:07:33.846Z" },
+ { url = "https://files.pythonhosted.org/packages/44/53/4f6bddbcde3c71e56d0aa1337ec95950f3d27dd4153e25aadf0feac71751/jiter-0.15.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0e90a1c315a0226ec822d973817967f9223b7701546c8c2a7913e7ab0926294d", size = 308793, upload-time = "2026-05-19T10:07:35.25Z" },
+ { url = "https://files.pythonhosted.org/packages/01/84/c01099b59a285a1ebba64ae93f62bfa036675340fd1b0045ae65890a0442/jiter-0.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8c9004af7c8d67cce7f1aae1026fb55607f4aa600710d08ede3a3ce4aeefe7e0", size = 309570, upload-time = "2026-05-19T10:07:36.919Z" },
+ { url = "https://files.pythonhosted.org/packages/58/64/8fb7f9d45bb98190355454cd04dad8d8f27223d6bd52f83af07f637168a6/jiter-0.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c210f8b35dc6f30aafd4b4365ca89b9d1189f21ab49b8e68fa6322a847aef138", size = 336783, upload-time = "2026-05-19T10:07:38.694Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/b6/f5739011d009b3a30f6a53c5240979030ba29ae46a8c67e3a15759f7c37d/jiter-0.15.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f30bae8bc1c2d613e28e5af3e8cceb09b742f1c8a8a5f839fb67afaffc03b61", size = 363555, upload-time = "2026-05-19T10:07:40.832Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/12/98a9d9f766665e8a3b6252454e17cb0c464606a28cf2fa09399b003345fa/jiter-0.15.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60e71b6d10cfc284c9bf36bd885e8d44c46f688ce50aa91b5edd90181dea687", size = 452255, upload-time = "2026-05-19T10:07:42.62Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/d5/60f972840f79c5e7544fce567c56f1e4e50468f996baba3e78d823dd62a6/jiter-0.15.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ab068bce62a45aa3e7367eceaffb5dde60b7eb853be8dece45132e3d0ff4879", size = 373559, upload-time = "2026-05-19T10:07:44.201Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/cf/d46ef1234ba335aabc2f013210db8e0821a22f5e644a2e9449df199ecc23/jiter-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa248c9eb220197d363f688818dac2fd4b2f0cd7d843ca7105d652034823427d", size = 346055, upload-time = "2026-05-19T10:07:46.005Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/63/4d2749d8d54d230bad9b3a6b0d00cc28c6ff6b2fdffc26a8ccf76cc5a974/jiter-0.15.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2a77aadd57cac1682e4401a72724d2796d89a4ba129b1a5812aa94ee480826eb", size = 351406, upload-time = "2026-05-19T10:07:47.855Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/b9/9965b990035d8773328e0a8c8b457a87bf2b19f6c4126d9d99296be5d16a/jiter-0.15.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ae901f3a55bfafdde31d289590fa25e3245735a2b1e8c7cc15871710a002871", size = 389357, upload-time = "2026-05-19T10:07:49.665Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/55/9ddf903deda1413e87fed792f416b7123daee5b8efbad6a202a7421c36a5/jiter-0.15.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f0b271b462769543716f92d3a4f90527df6ef5ed05ee95ec4137f513e21e1b77", size = 517263, upload-time = "2026-05-19T10:07:51.537Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/76/a0c40ad064d3a20a4fde231e35d56e9a01ce82164278180e82d5daf85469/jiter-0.15.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2fb6a5d26af81fc0f00f9360a891e05cf755e149bba391c4d563adc54812973d", size = 548646, upload-time = "2026-05-19T10:07:53.196Z" },
+ { url = "https://files.pythonhosted.org/packages/23/4f/eca9b954942916ba2f453891b8593ab444cd872396fe66a3936616f236f3/jiter-0.15.0-cp312-cp312-win32.whl", hash = "sha256:c2f6bb8b5216ab9e7873bc08b5d7bef2b8abbb578a3069bf1cd14a45d71d771d", size = 206427, upload-time = "2026-05-19T10:07:55.307Z" },
+ { url = "https://files.pythonhosted.org/packages/95/bf/8ead82a87495149542748e828d153fd232a512a22c83b02c4815c1a9c7d8/jiter-0.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:40b2c7e92c44a84d748d21706c68dc6ff8161d80b59c99d774721a0d2317d7c7", size = 197300, upload-time = "2026-05-19T10:07:56.651Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/e4/9b8a78fb2d894471bc344e37f1949bdd784bd914d031dba0ba3a40c71dd7/jiter-0.15.0-cp312-cp312-win_arm64.whl", hash = "sha256:cc0bc345cf2df9d1c00ac443f50d543c1ccfa8b0422cb85b1ab70d681c0b255b", size = 192702, upload-time = "2026-05-19T10:07:58.307Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/f4/f708c900ecee41b2025ef8413d5351e5649eb2125c506f6720cc69b06f5c/jiter-0.15.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1c11465f97e2abf45a014b83b730222f8f1c5335e802c7055a67d50de6f1f4e3", size = 307829, upload-time = "2026-05-19T10:07:59.704Z" },
+ { url = "https://files.pythonhosted.org/packages/86/59/db537c0949e83668c38481d426b9f2fd5ab758c4ee53a811dd0a510626a0/jiter-0.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d1e7b1776f0797956c509e123d0952d10d293a9492dea9f288ab9570ec01d1a5", size = 308445, upload-time = "2026-05-19T10:08:01.184Z" },
+ { url = "https://files.pythonhosted.org/packages/37/38/ea0e13b18c30ef951da0d47d39e7fa9edb82a93a62990ffbd7cea9b622d4/jiter-0.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:351a341c2105aa430b7047e30f1bf7975f6313b00165d3fc07be2edaf741f279", size = 336181, upload-time = "2026-05-19T10:08:02.688Z" },
+ { url = "https://files.pythonhosted.org/packages/58/fc/2303901b16c4ba05865588990a420c0b4156270b44379c20931544a1d962/jiter-0.15.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ab395feec8d249ec4044e228e98a7033f043426a265df439dc3698823f0a4e4", size = 362985, upload-time = "2026-05-19T10:08:04.394Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/6f/11bace093c52e7d4d26c8e606ccd7ae8c972189622469ec0d9e28161e28b/jiter-0.15.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2a438005b6f22d0273413484d6094d7c2c5d10ec1b3a3bf128e0d1d3ba53258", size = 453292, upload-time = "2026-05-19T10:08:05.967Z" },
+ { url = "https://files.pythonhosted.org/packages/22/db/987f2f086ca4d7a6582eb4ccd513f9b26b42d9e4243a087609a3137a8fc7/jiter-0.15.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f18f85e4218d1b40f000f42a92239a7a61a902cd42c65e6c360dbd17dcb20894", size = 373501, upload-time = "2026-05-19T10:08:07.857Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/7c/89fbcabb2739b7a5b8dc959a1b6c5761f6484f5fed3486854b3c789bb1de/jiter-0.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1aa62e277fc1cbd80e6deacae6f4d983b41b3d7728e0645c5d741a6149bba45", size = 344683, upload-time = "2026-05-19T10:08:09.431Z" },
+ { url = "https://files.pythonhosted.org/packages/30/6f/6cca7692e7dddfec6d8d76c54dc97f2af2a41df4ac0674b999df1f09a5f3/jiter-0.15.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:6550fa135c7deb8ead6af49ed7ff648532ea8334a1447fe34a36315ef79c5c29", size = 350892, upload-time = "2026-05-19T10:08:11.352Z" },
+ { url = "https://files.pythonhosted.org/packages/39/14/0338d6190cb8e6d22e677ab1d4eabd4117f67cca70c54cd04b82ff64e068/jiter-0.15.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:066f8f33f18b2419cd8213b2436fa7fbc9c499f315971cfa3ce1f9820c001b1b", size = 388723, upload-time = "2026-05-19T10:08:12.912Z" },
+ { url = "https://files.pythonhosted.org/packages/90/31/cc19f4a1bdb6afb09ce6a2f2615aa8d44d994eba0d8e6105ed1af920e736/jiter-0.15.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:75e8a04e91432dde9f1838373cf93d23726c79d3e908d319acf0e796f85592e7", size = 516648, upload-time = "2026-05-19T10:08:14.808Z" },
+ { url = "https://files.pythonhosted.org/packages/49/9f/833c541512cd091b63c10c0381973dfe11bc7a503a818c16384417e0c81e/jiter-0.15.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a97261f1fccb8e50ecd2890a96e46efdc3f57c80a197324c6777827231eca712", size = 547382, upload-time = "2026-05-19T10:08:16.927Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/11/e7b70e91f90bc4477e8eee9e8a5f7cf3cb41b4525d6394dc98a714eb8f7f/jiter-0.15.0-cp313-cp313-win32.whl", hash = "sha256:c77496cb10bd7549690fbbab3e5ec05857b83e49276f4a9423a766ddd2afcd4c", size = 205845, upload-time = "2026-05-19T10:08:18.401Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/23/5c20d9ad6f02c493e4023e5d2d09e1c1f15fe2753c9102c544aff068a88e/jiter-0.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b15741f501469009ae0ae90b7147958a664a7dede40aa7ff174a8a4645f546d0", size = 196842, upload-time = "2026-05-19T10:08:20.131Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/11/1eb400ef248e8c925fd883fbe325daf5e42cd1b0d308539dd332bd4f7ffc/jiter-0.15.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d6a60072b44c3c2b797a7ddcbcbbf2b34ea3cfd4721580fbfd2a09d9d9b84ba", size = 192212, upload-time = "2026-05-19T10:08:21.807Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/60/2fd8d7c79da8acf9b7b277c7616847773779356b92acfc9bb158452174da/jiter-0.15.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ef1fd24d9413f6209e00d3d5a453e67acfe004a25cc6c8e8484faed4311ab9e8", size = 315065, upload-time = "2026-05-19T10:08:23.218Z" },
+ { url = "https://files.pythonhosted.org/packages/46/f4/008fb7d65e8ac2abf00811651a661e025c4ba80bbc6f378450384ddd3aed/jiter-0.15.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:144f8e72cb53dab146347b91cceac01f5481237f2b93b4a339a1ee8f8878b67c", size = 339444, upload-time = "2026-05-19T10:08:24.701Z" },
+ { url = "https://files.pythonhosted.org/packages/00/55/90b0c7b9c6896c0f2a591dd36d36b71d22e09674bfef178fa03ba3f81499/jiter-0.15.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553fcac2ef2cb990877f9fc0833b8b629a3e6a5670b6b5fd58219b41a653ddc4", size = 347779, upload-time = "2026-05-19T10:08:26.408Z" },
+ { url = "https://files.pythonhosted.org/packages/51/6b/69666cec5000fd57734c118437394516c749ae8dbeea9fb66d6fef9c4775/jiter-0.15.0-cp313-cp313t-win_amd64.whl", hash = "sha256:774f93f65031856bf14ad9f59bdcab8b8cad501e5ceabd51ba3525f76937a25b", size = 200395, upload-time = "2026-05-19T10:08:28.055Z" },
+ { url = "https://files.pythonhosted.org/packages/39/04/a6aa62cd27e8149b0d28df5561f10f6cceaf7935a9ccf3f1c5a05f9a0cd8/jiter-0.15.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f1e1754960f38ec40613a07e5e372df67acb3b890fb383b6fb3de3e49ddbf3c7", size = 190516, upload-time = "2026-05-19T10:08:29.35Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/d2/079f350ebf7859d081de30aa890f9e3be68516f754f3ba32366ffff4dcee/jiter-0.15.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:ac0d9ddea4350974be7a221fc25895f251a8fee748c889bdced2141c0fec1a49", size = 308884, upload-time = "2026-05-19T10:08:31.667Z" },
+ { url = "https://files.pythonhosted.org/packages/04/4e/a2c30a7f69b48c03b20935d647479106fe932f6e63f75faf53937197e05d/jiter-0.15.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:01a8222cf05ab1128e239421156c207949808acaaea2bdfd33130ae666786e86", size = 310028, upload-time = "2026-05-19T10:08:33.304Z" },
+ { url = "https://files.pythonhosted.org/packages/40/90/2e7cdfd3cf8ca967be38c48f5cf474d79f089efaf559a40f15984a77ae69/jiter-0.15.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:182226cbc930c9fab81bc2e41a4da672f89539906dadb05e75670ac07b94f71f", size = 337485, upload-time = "2026-05-19T10:08:35.259Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/11/15a1aa28b120b8ee5b4f1fb894c125046225f09847738bd64233d3b84883/jiter-0.15.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:71683c38c825452999b5717fcae07ea708e8c93003e808be4319c1b02e3d176e", size = 364223, upload-time = "2026-05-19T10:08:36.694Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/25/f442e8af5f3d0dcf47b39e83a0efd9ee45ea946aa6d04625dc3181eae3b6/jiter-0.15.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f2218e6a9e5c18bc10fe6d41ac189c442c88eacf11bad9f28ef95a9bef00e6", size = 456387, upload-time = "2026-05-19T10:08:38.143Z" },
+ { url = "https://files.pythonhosted.org/packages/da/f4/37f2d2c9f64f49af7da652ed7532bb5a2372e588e6927c3fdd76f911db65/jiter-0.15.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5157de9f76eb4bc5ea74a1219366a25f945ad305641d74e04f59c54087091aa9", size = 374461, upload-time = "2026-05-19T10:08:39.869Z" },
+ { url = "https://files.pythonhosted.org/packages/60/28/edcfbbbf0cb15436f36664a8908a0df47ab9006298d4cd937dc08ea932d6/jiter-0.15.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c5db5527c221249a876160663ab891ace358c17f7b9c93ec1478b7f0550e5c", size = 345924, upload-time = "2026-05-19T10:08:41.668Z" },
+ { url = "https://files.pythonhosted.org/packages/47/13/89fba6398dab7f202b7278c4b4aac122399d2c0183971c4a57a3b7088df5/jiter-0.15.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:3e4540b8e74e4268811ac05db226a6a128ff572e7e0ce3f1163b693cadb184cd", size = 352283, upload-time = "2026-05-19T10:08:43.091Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/da/0f6af8cef2c565a1ab44d970f268c43ccaa72707386ea6388e6fe2b6cd26/jiter-0.15.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:62ebd14e47e9aed9df4472afcb2663668ce4d74891cd54f86bf6e44029d6dc89", size = 389985, upload-time = "2026-05-19T10:08:44.915Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/ec/b9cb7d6d29e24ee14910266157d2a279d7a8f60ee0df7fa840882976ba64/jiter-0.15.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0be6f5ad41a809f303f416d17cec92a7a725902fb9b4f3de3d19362ac0ef8554", size = 517695, upload-time = "2026-05-19T10:08:46.486Z" },
+ { url = "https://files.pythonhosted.org/packages/64/5e/6d1bda880723aae0ad86b4b763f044362448efe31e3e819635d41cb03451/jiter-0.15.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:813dfbb17d65328bf86e5f0905dd277ba2265d3ca20556e86c0c7035b7182e5a", size = 548868, upload-time = "2026-05-19T10:08:48.026Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/72/7de501cf38dcacaf35098796f3a50e0f2e338baba18a58946c618544b809/jiter-0.15.0-cp314-cp314-win32.whl", hash = "sha256:50e51156192722a9c58db112837d3f8ef96fb3c5ecc14e95f409134b08b158ec", size = 206380, upload-time = "2026-05-19T10:08:49.738Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/a9/e19addf4b0c1bdce52c6da12351e6bc42c340c45e7c09e2158e46d293ccc/jiter-0.15.0-cp314-cp314-win_amd64.whl", hash = "sha256:30ce1a5d16b5641dc935d50ef775af6a0871e3d14ab05d6fc54dff371b78e558", size = 197687, upload-time = "2026-05-19T10:08:51.088Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/c9/776b1db01db25fc6c1d58d1979a37b0a9fe787e5f5b1d062d2eaacb77923/jiter-0.15.0-cp314-cp314-win_arm64.whl", hash = "sha256:510c8b3c17a0ed9ac69850c0438dada3c9b82d9c4d589fcb62002a5a9cf3a866", size = 192571, upload-time = "2026-05-19T10:08:52.451Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/f6/45bb4670bacf300fd2c7abadbfb3af376e5f1b6ae75fd9bc069891d15870/jiter-0.15.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7553333dd0930c104a5a0db8df72bf7219fe663d731383b576bb6ed6351c984d", size = 317151, upload-time = "2026-05-19T10:08:53.867Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/68/ed635ad5acd7b73e454283083bbb7c8205ad10e88b0d9d7d793b09fe8226/jiter-0.15.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2143ab06181d2b029eedcb6af3cebe95f11bbac62441781860f98ee9330a6a6", size = 341243, upload-time = "2026-05-19T10:08:55.383Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/db/3ff4176b817b8ea33879e71e13d8bc2b0d481a7ed3fe9e080f333d415c16/jiter-0.15.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eac374c5c975709b69c10f09afd199df74150172156ad10c8d4fd785b7da995", size = 363629, upload-time = "2026-05-19T10:08:56.928Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/24/5f8270e0ba9c883582f96f722f8a0b58015c7ce1f8c6d4571cf394e99b6b/jiter-0.15.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3b3b775e33d3bfaec9899edc526ae97b0da0bf9d071a46124ba419149a414f8", size = 456198, upload-time = "2026-05-19T10:08:58.618Z" },
+ { url = "https://files.pythonhosted.org/packages/45/5b/76fc02b0b5c54c3d18c60653156e2f76fde1816f9b4722db68d6ee2c897e/jiter-0.15.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3071db3346334beae1360b46da4606da57bf3528c167b3c38533afaf9f2c5", size = 373710, upload-time = "2026-05-19T10:09:00.151Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/52/4310821b0ea9277994d3e1f49fc6a4b34e4800caebacb2c0af81da59a454/jiter-0.15.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6694a173ecabc12eb60efbc0b474464ead1951ff65cd8b1e72100715c64512b", size = 349901, upload-time = "2026-05-19T10:09:01.621Z" },
+ { url = "https://files.pythonhosted.org/packages/93/fe/67648c35b3594fba8854ac64cc8a826d8bcd18324bbdb53d77697c60b6ef/jiter-0.15.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:a254e10b593624d230c365b6d616b22ca0ad65e63a16e6631c2b3466022e6ba8", size = 352438, upload-time = "2026-05-19T10:09:03.216Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/28/0a1879d07ad6b3e025a2750027363452ced93c2d16d1c9d4b153ffd51c91/jiter-0.15.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d8d2955167274e15d79a7a020afdd9b39c990eb80b2d89fca695d92dcfdd38ec", size = 388152, upload-time = "2026-05-19T10:09:04.741Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/78/46c6f6b56ba85c90021f4afd72ed42f691f8f84daacb5fe27277070e3858/jiter-0.15.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:acf4ee4d1fc55917239fe72972fb292dd773055d05eb040d36f4326e02cc2c0e", size = 517707, upload-time = "2026-05-19T10:09:06.231Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/cb/720662d4c88fcad606e826fef5424365527ba43ce4868a479aed8f8c507e/jiter-0.15.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:e7196e56f1cd69af1dbb07dff02dcfb260a50b45a82d409d92a06fedb32473b5", size = 548241, upload-time = "2026-05-19T10:09:08.093Z" },
+ { url = "https://files.pythonhosted.org/packages/60/e3/935b8034fd143f21125c87d51404a9e0e1449186a494405721ff5d1d695e/jiter-0.15.0-cp314-cp314t-win32.whl", hash = "sha256:7f6163c0f10b055245f814dcc59f4818da60dfe72f3e72ab89fc24b6bd5e9c52", size = 207950, upload-time = "2026-05-19T10:09:09.616Z" },
+ { url = "https://files.pythonhosted.org/packages/93/59/984fd9ece895953dad3e0880a650e766f5a2da2c5514f0eafdaaabbeb5f9/jiter-0.15.0-cp314-cp314t-win_amd64.whl", hash = "sha256:980c256edb05b78a111b99c4de3b1d32e31634b867fd1fc2cf726e7b7bba9854", size = 200055, upload-time = "2026-05-19T10:09:11.367Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/a4/cf8d779feb133a27a2e3bc833bccb9e13aa332cdf820497ebf72c10ce8c3/jiter-0.15.0-cp314-cp314t-win_arm64.whl", hash = "sha256:66b1880df2d01e206e8339769d1c7c1753bcb653efd6289e203f6f24ebada0c0", size = 191244, upload-time = "2026-05-19T10:09:12.74Z" },
+ { url = "https://files.pythonhosted.org/packages/65/43/1fc62172aa98b50a7de9a25554060db510f85c89cfbed0dfe13e1907a139/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:411fa4dfa5a7ae3d11491027ffb9beadec3996010a986862db70d91abba1c750", size = 305585, upload-time = "2026-05-19T10:09:35.995Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/c4/dd58fcd9e2df83666e5c1c1347bef58ce919cd8efc3ffa38aeea62ce493b/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:2b0074e2f56eb2dacca1689760fd2852a068f85a0547a157b82cb4cafeb6768b", size = 306936, upload-time = "2026-05-19T10:09:37.435Z" },
+ { url = "https://files.pythonhosted.org/packages/39/86/b695e16f1180c07f43ea98e73ecd21cf63fa2e1b0c1103739013784d11ae/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:913d02d29c9606643418d9ccfc3b72492ab25a6bf7889934e09a3490f8d3438b", size = 342453, upload-time = "2026-05-19T10:09:39.294Z" },
+ { url = "https://files.pythonhosted.org/packages/34/56/55d76614af37fe3f22a3347d1e410d2a15da581997cb2da499a625000bb5/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b15d3ec9b0449c40e85319bdb4caa8b77ab526e74f5532ed94bec15e2f66822c", size = 345606, upload-time = "2026-05-19T10:09:40.727Z" },
+ { url = "https://files.pythonhosted.org/packages/73/38/505941b2b092fd5bbbd60a52a880db1173f1690ae6751bed3af1c9ddcb4e/jiter-0.15.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:631f13a3d04e97d4e083993b10f4b99530e3a10d953e2eb5e196b7dc7f812ce0", size = 303769, upload-time = "2026-05-19T10:09:42.203Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/95/a06692b29e77473f286e1ec1f426d3ca44d7b5843be8ad21d7a5f3fcdcc0/jiter-0.15.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:b6c0ffae686c39bf3737be60793783267628783ea42545632c10b291105aee45", size = 305128, upload-time = "2026-05-19T10:09:43.657Z" },
+ { url = "https://files.pythonhosted.org/packages/23/85/7270d7ad41d6061a25b950c6bf91d638bd9aacb113200a8c8d57a055fd67/jiter-0.15.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d54fb5b31dea401a41af3f8a7d2512e9b6a6a005491e6166c7e4ffab9639a9c", size = 340459, upload-time = "2026-05-19T10:09:45.452Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/8d/302cb2057b7513327b4d575cff6b1d066ee6431a5357fc3f8867cd684406/jiter-0.15.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d5d6090cdc1b7c9e780dfb04949a990adb1e301a2fc0bbcee7de4638d33f9a", size = 344469, upload-time = "2026-05-19T10:09:46.864Z" },
]
[[package]]
@@ -1447,84 +1475,84 @@ wheels = [
[[package]]
name = "librt"
-version = "0.9.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/eb/6b/3d5c13fb3e3c4f43206c8f9dfed13778c2ed4f000bacaa0b7ce3c402a265/librt-0.9.0.tar.gz", hash = "sha256:a0951822531e7aee6e0dfb556b30d5ee36bbe234faf60c20a16c01be3530869d", size = 184368, upload-time = "2026-04-09T16:06:26.173Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/e2/1e/2ec7afcebcf3efea593d13aee18bbcfdd3a243043d848ebf385055e9f636/librt-0.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90904fac73c478f4b83f4ed96c99c8208b75e6f9a8a1910548f69a00f1eaa671", size = 67155, upload-time = "2026-04-09T16:04:42.933Z" },
- { url = "https://files.pythonhosted.org/packages/18/77/72b85afd4435268338ad4ec6231b3da8c77363f212a0227c1ff3b45e4d35/librt-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:789fff71757facc0738e8d89e3b84e4f0251c1c975e85e81b152cdaca927cc2d", size = 69916, upload-time = "2026-04-09T16:04:44.042Z" },
- { url = "https://files.pythonhosted.org/packages/27/fb/948ea0204fbe2e78add6d46b48330e58d39897e425560674aee302dca81c/librt-0.9.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1bf465d1e5b0a27713862441f6467b5ab76385f4ecf8f1f3a44f8aa3c695b4b6", size = 199635, upload-time = "2026-04-09T16:04:45.5Z" },
- { url = "https://files.pythonhosted.org/packages/ac/cd/894a29e251b296a27957856804cfd21e93c194aa131de8bb8032021be07e/librt-0.9.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f819e0c6413e259a17a7c0d49f97f405abadd3c2a316a3b46c6440b7dbbedbb1", size = 211051, upload-time = "2026-04-09T16:04:47.016Z" },
- { url = "https://files.pythonhosted.org/packages/18/8f/dcaed0bc084a35f3721ff2d081158db569d2c57ea07d35623ddaca5cfc8e/librt-0.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e0785c2fb4a81e1aece366aa3e2e039f4a4d7d21aaaded5227d7f3c703427882", size = 224031, upload-time = "2026-04-09T16:04:48.207Z" },
- { url = "https://files.pythonhosted.org/packages/03/44/88f6c1ed1132cd418601cc041fbd92fed28b3a09f39de81978e0822d13ff/librt-0.9.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:80b25c7b570a86c03b5da69e665809deb39265476e8e21d96a9328f9762f9990", size = 218069, upload-time = "2026-04-09T16:04:50.025Z" },
- { url = "https://files.pythonhosted.org/packages/a3/90/7d02e981c2db12188d82b4410ff3e35bfdb844b26aecd02233626f46af2b/librt-0.9.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d4d16b608a1c43d7e33142099a75cd93af482dadce0bf82421e91cad077157f4", size = 224857, upload-time = "2026-04-09T16:04:51.684Z" },
- { url = "https://files.pythonhosted.org/packages/ef/c3/c77e706b7215ca32e928d47535cf13dbc3d25f096f84ddf8fbc06693e229/librt-0.9.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:194fc1a32e1e21fe809d38b5faea66cc65eaa00217c8901fbdb99866938adbdb", size = 219865, upload-time = "2026-04-09T16:04:52.949Z" },
- { url = "https://files.pythonhosted.org/packages/52/d1/32b0c1a0eb8461c70c11656c46a29f760b7c7edf3c36d6f102470c17170f/librt-0.9.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8c6bc1384d9738781cfd41d09ad7f6e8af13cfea2c75ece6bd6d2566cdea2076", size = 218451, upload-time = "2026-04-09T16:04:54.174Z" },
- { url = "https://files.pythonhosted.org/packages/74/d1/adfd0f9c44761b1d49b1bec66173389834c33ee2bd3c7fd2e2367f1942d4/librt-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:15cb151e52a044f06e54ac7f7b47adbfc89b5c8e2b63e1175a9d587c43e8942a", size = 241300, upload-time = "2026-04-09T16:04:55.452Z" },
- { url = "https://files.pythonhosted.org/packages/09/b0/9074b64407712f0003c27f5b1d7655d1438979155f049720e8a1abd9b1a1/librt-0.9.0-cp311-cp311-win32.whl", hash = "sha256:f100bfe2acf8a3689af9d0cc660d89f17286c9c795f9f18f7b62dd1a6b247ae6", size = 55668, upload-time = "2026-04-09T16:04:56.689Z" },
- { url = "https://files.pythonhosted.org/packages/24/19/40b77b77ce80b9389fb03971431b09b6b913911c38d412059e0b3e2a9ef2/librt-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:0b73e4266307e51c95e09c0750b7ec383c561d2e97d58e473f6f6a209952fbb8", size = 62976, upload-time = "2026-04-09T16:04:57.733Z" },
- { url = "https://files.pythonhosted.org/packages/70/9d/9fa7a64041e29035cb8c575af5f0e3840be1b97b4c4d9061e0713f171849/librt-0.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc5518873822d2faa8ebdd2c1a4d7c8ef47b01a058495ab7924cb65bdbf5fc9a", size = 53502, upload-time = "2026-04-09T16:04:58.806Z" },
- { url = "https://files.pythonhosted.org/packages/bf/90/89ddba8e1c20b0922783cd93ed8e64f34dc05ab59c38a9c7e313632e20ff/librt-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9b3e3bc363f71bda1639a4ee593cb78f7fbfeacc73411ec0d4c92f00730010a4", size = 68332, upload-time = "2026-04-09T16:05:00.09Z" },
- { url = "https://files.pythonhosted.org/packages/a8/40/7aa4da1fb08bdeeb540cb07bfc8207cb32c5c41642f2594dbd0098a0662d/librt-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a09c2f5869649101738653a9b7ab70cf045a1105ac66cbb8f4055e61df78f2d", size = 70581, upload-time = "2026-04-09T16:05:01.213Z" },
- { url = "https://files.pythonhosted.org/packages/48/ac/73a2187e1031041e93b7e3a25aae37aa6f13b838c550f7e0f06f66766212/librt-0.9.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5ca8e133d799c948db2ab1afc081c333a825b5540475164726dcbf73537e5c2f", size = 203984, upload-time = "2026-04-09T16:05:02.542Z" },
- { url = "https://files.pythonhosted.org/packages/5e/3d/23460d571e9cbddb405b017681df04c142fb1b04cbfce77c54b08e28b108/librt-0.9.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:603138ee838ee1583f1b960b62d5d0007845c5c423feb68e44648b1359014e27", size = 215762, upload-time = "2026-04-09T16:05:04.127Z" },
- { url = "https://files.pythonhosted.org/packages/de/1e/42dc7f8ab63e65b20640d058e63e97fd3e482c1edbda3570d813b4d0b927/librt-0.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4003f70c56a5addd6aa0897f200dd59afd3bf7bcd5b3cce46dd21f925743bc2", size = 230288, upload-time = "2026-04-09T16:05:05.883Z" },
- { url = "https://files.pythonhosted.org/packages/dc/08/ca812b6d8259ad9ece703397f8ad5c03af5b5fedfce64279693d3ce4087c/librt-0.9.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:78042f6facfd98ecb25e9829c7e37cce23363d9d7c83bc5f72702c5059eb082b", size = 224103, upload-time = "2026-04-09T16:05:07.148Z" },
- { url = "https://files.pythonhosted.org/packages/b6/3f/620490fb2fa66ffd44e7f900254bc110ebec8dac6c1b7514d64662570e6f/librt-0.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a361c9434a64d70a7dbb771d1de302c0cc9f13c0bffe1cf7e642152814b35265", size = 232122, upload-time = "2026-04-09T16:05:08.386Z" },
- { url = "https://files.pythonhosted.org/packages/e9/83/12864700a1b6a8be458cf5d05db209b0d8e94ae281e7ec261dbe616597b4/librt-0.9.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:dd2c7e082b0b92e1baa4da28163a808672485617bc855cc22a2fd06978fa9084", size = 225045, upload-time = "2026-04-09T16:05:09.707Z" },
- { url = "https://files.pythonhosted.org/packages/fd/1b/845d339c29dc7dbc87a2e992a1ba8d28d25d0e0372f9a0a2ecebde298186/librt-0.9.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7e6274fd33fc5b2a14d41c9119629d3ff395849d8bcbc80cf637d9e8d2034da8", size = 227372, upload-time = "2026-04-09T16:05:10.942Z" },
- { url = "https://files.pythonhosted.org/packages/8d/fe/277985610269d926a64c606f761d58d3db67b956dbbf40024921e95e7fcb/librt-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5093043afb226ecfa1400120d1ebd4442b4f99977783e4f4f7248879009b227f", size = 248224, upload-time = "2026-04-09T16:05:12.254Z" },
- { url = "https://files.pythonhosted.org/packages/92/1b/ee486d244b8de6b8b5dbaefabe6bfdd4a72e08f6353edf7d16d27114da8d/librt-0.9.0-cp312-cp312-win32.whl", hash = "sha256:9edcc35d1cae9fd5320171b1a838c7da8a5c968af31e82ecc3dff30b4be0957f", size = 55986, upload-time = "2026-04-09T16:05:13.529Z" },
- { url = "https://files.pythonhosted.org/packages/89/7a/ba1737012308c17dc6d5516143b5dce9a2c7ba3474afd54e11f44a4d1ef3/librt-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:3cc2917258e131ae5f958a4d872e07555b51cb7466a43433218061c74ef33745", size = 63260, upload-time = "2026-04-09T16:05:14.68Z" },
- { url = "https://files.pythonhosted.org/packages/36/e4/01752c113da15127f18f7bf11142f5640038f062407a611c059d0036c6aa/librt-0.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:90e6d5420fc8a300518d4d2288154ff45005e920425c22cbbfe8330f3f754bd9", size = 53694, upload-time = "2026-04-09T16:05:16.095Z" },
- { url = "https://files.pythonhosted.org/packages/5f/d7/1b3e26fffde1452d82f5666164858a81c26ebe808e7ae8c9c88628981540/librt-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29b68cd9714531672db62cc54f6e8ff981900f824d13fa0e00749189e13778e", size = 68367, upload-time = "2026-04-09T16:05:17.243Z" },
- { url = "https://files.pythonhosted.org/packages/a5/5b/c61b043ad2e091fbe1f2d35d14795e545d0b56b03edaa390fa1dcee3d160/librt-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d5c8a5929ac325729f6119802070b561f4db793dffc45e9ac750992a4ed4d22", size = 70595, upload-time = "2026-04-09T16:05:18.471Z" },
- { url = "https://files.pythonhosted.org/packages/a3/22/2448471196d8a73370aa2f23445455dc42712c21404081fcd7a03b9e0749/librt-0.9.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:756775d25ec8345b837ab52effee3ad2f3b2dfd6bbee3e3f029c517bd5d8f05a", size = 204354, upload-time = "2026-04-09T16:05:19.593Z" },
- { url = "https://files.pythonhosted.org/packages/ac/5e/39fc4b153c78cfd2c8a2dcb32700f2d41d2312aa1050513183be4540930d/librt-0.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b8f5d00b49818f4e2b1667db994488b045835e0ac16fe2f924f3871bd2b8ac5", size = 216238, upload-time = "2026-04-09T16:05:20.868Z" },
- { url = "https://files.pythonhosted.org/packages/d7/42/bc2d02d0fa7badfa63aa8d6dcd8793a9f7ef5a94396801684a51ed8d8287/librt-0.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c81aef782380f0f13ead670aae01825eb653b44b046aa0e5ebbb79f76ed4aa11", size = 230589, upload-time = "2026-04-09T16:05:22.305Z" },
- { url = "https://files.pythonhosted.org/packages/c8/7b/e2d95cc513866373692aa5edf98080d5602dd07cabfb9e5d2f70df2f25f7/librt-0.9.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66b58fed90a545328e80d575467244de3741e088c1af928f0b489ebec3ef3858", size = 224610, upload-time = "2026-04-09T16:05:23.647Z" },
- { url = "https://files.pythonhosted.org/packages/31/d5/6cec4607e998eaba57564d06a1295c21b0a0c8de76e4e74d699e627bd98c/librt-0.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e78fb7419e07d98c2af4b8567b72b3eaf8cb05caad642e9963465569c8b2d87e", size = 232558, upload-time = "2026-04-09T16:05:25.025Z" },
- { url = "https://files.pythonhosted.org/packages/95/8c/27f1d8d3aaf079d3eb26439bf0b32f1482340c3552e324f7db9dca858671/librt-0.9.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c3786f0f4490a5cd87f1ed6cefae833ad6b1060d52044ce0434a2e85893afd0", size = 225521, upload-time = "2026-04-09T16:05:26.311Z" },
- { url = "https://files.pythonhosted.org/packages/6b/d8/1e0d43b1c329b416017619469b3c3801a25a6a4ef4a1c68332aeaa6f72ca/librt-0.9.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8494cfc61e03542f2d381e71804990b3931175a29b9278fdb4a5459948778dc2", size = 227789, upload-time = "2026-04-09T16:05:27.624Z" },
- { url = "https://files.pythonhosted.org/packages/2c/b4/d3d842e88610fcd4c8eec7067b0c23ef2d7d3bff31496eded6a83b0f99be/librt-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:07cf11f769831186eeac424376e6189f20ace4f7263e2134bdb9757340d84d4d", size = 248616, upload-time = "2026-04-09T16:05:29.181Z" },
- { url = "https://files.pythonhosted.org/packages/ec/28/527df8ad0d1eb6c8bdfa82fc190f1f7c4cca5a1b6d7b36aeabf95b52d74d/librt-0.9.0-cp313-cp313-win32.whl", hash = "sha256:850d6d03177e52700af605fd60db7f37dcb89782049a149674d1a9649c2138fd", size = 56039, upload-time = "2026-04-09T16:05:30.709Z" },
- { url = "https://files.pythonhosted.org/packages/f3/a7/413652ad0d92273ee5e30c000fc494b361171177c83e57c060ecd3c21538/librt-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:a5af136bfba820d592f86c67affcef9b3ff4d4360ac3255e341e964489b48519", size = 63264, upload-time = "2026-04-09T16:05:31.881Z" },
- { url = "https://files.pythonhosted.org/packages/a4/0a/92c244309b774e290ddb15e93363846ae7aa753d9586b8aad511c5e6145b/librt-0.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:4c4d0440a3a8e31d962340c3e1cc3fc9ee7febd34c8d8f770d06adb947779ea5", size = 53728, upload-time = "2026-04-09T16:05:33.31Z" },
- { url = "https://files.pythonhosted.org/packages/cd/c1/184e539543f06ea2912f4b92a5ffaede4f9b392689e3f00acbf8134bee92/librt-0.9.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:3f05d145df35dca5056a8bc3838e940efebd893a54b3e19b2dda39ceaa299bcb", size = 67830, upload-time = "2026-04-09T16:05:34.517Z" },
- { url = "https://files.pythonhosted.org/packages/f3/ad/23399bdcb7afca819acacdef31b37ee59de261bd66b503a7995c03c4b0dc/librt-0.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1c587494461ebd42229d0f1739f3aa34237dd9980623ecf1be8d3bcba79f4499", size = 70280, upload-time = "2026-04-09T16:05:35.649Z" },
- { url = "https://files.pythonhosted.org/packages/9f/0b/4542dc5a2b8772dbf92cafb9194701230157e73c14b017b6961a23598b03/librt-0.9.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b0a2040f801406b93657a70b72fa12311063a319fee72ce98e1524da7200171f", size = 201925, upload-time = "2026-04-09T16:05:36.739Z" },
- { url = "https://files.pythonhosted.org/packages/31/d4/8ee7358b08fd0cfce051ef96695380f09b3c2c11b77c9bfbc367c921cce5/librt-0.9.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f38bc489037eca88d6ebefc9c4d41a4e07c8e8b4de5188a9e6d290273ad7ebb1", size = 212381, upload-time = "2026-04-09T16:05:38.043Z" },
- { url = "https://files.pythonhosted.org/packages/f2/94/a2025fe442abedf8b038038dab3dba942009ad42b38ea064a1a9e6094241/librt-0.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3fd278f5e6bf7c75ccd6d12344eb686cc020712683363b66f46ac79d37c799f", size = 227065, upload-time = "2026-04-09T16:05:39.394Z" },
- { url = "https://files.pythonhosted.org/packages/7c/e9/b9fcf6afa909f957cfbbf918802f9dada1bd5d3c1da43d722fd6a310dc3f/librt-0.9.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fcbdf2a9ca24e87bbebb47f1fe34e531ef06f104f98c9ccfc953a3f3344c567a", size = 221333, upload-time = "2026-04-09T16:05:40.999Z" },
- { url = "https://files.pythonhosted.org/packages/ac/7c/ba54cd6aa6a3c8cd12757a6870e0c79a64b1e6327f5248dcff98423f4d43/librt-0.9.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e306d956cfa027fe041585f02a1602c32bfa6bb8ebea4899d373383295a6c62f", size = 229051, upload-time = "2026-04-09T16:05:42.605Z" },
- { url = "https://files.pythonhosted.org/packages/4b/4b/8cfdbad314c8677a0148bf0b70591d6d18587f9884d930276098a235461b/librt-0.9.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:465814ab157986acb9dfa5ccd7df944be5eefc0d08d31ec6e8d88bc71251d845", size = 222492, upload-time = "2026-04-09T16:05:43.842Z" },
- { url = "https://files.pythonhosted.org/packages/1f/d1/2eda69563a1a88706808decdce035e4b32755dbfbb0d05e1a65db9547ed1/librt-0.9.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:703f4ae36d6240bfe24f542bac784c7e4194ec49c3ba5a994d02891649e2d85b", size = 223849, upload-time = "2026-04-09T16:05:45.054Z" },
- { url = "https://files.pythonhosted.org/packages/04/44/b2ed37df6be5b3d42cfe36318e0598e80843d5c6308dd63d0bf4e0ce5028/librt-0.9.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3be322a15ee5e70b93b7a59cfd074614f22cc8c9ff18bd27f474e79137ea8d3b", size = 245001, upload-time = "2026-04-09T16:05:46.34Z" },
- { url = "https://files.pythonhosted.org/packages/47/e7/617e412426df89169dd2a9ed0cc8752d5763336252c65dbf945199915119/librt-0.9.0-cp314-cp314-win32.whl", hash = "sha256:b8da9f8035bb417770b1e1610526d87ad4fc58a2804dc4d79c53f6d2cf5a6eb9", size = 51799, upload-time = "2026-04-09T16:05:47.738Z" },
- { url = "https://files.pythonhosted.org/packages/24/ed/c22ca4db0ca3cbc285e4d9206108746beda561a9792289c3c31281d7e9df/librt-0.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:b8bd70d5d816566a580d193326912f4a76ec2d28a97dc4cd4cc831c0af8e330e", size = 59165, upload-time = "2026-04-09T16:05:49.198Z" },
- { url = "https://files.pythonhosted.org/packages/24/56/875398fafa4cbc8f15b89366fc3287304ddd3314d861f182a4b87595ace0/librt-0.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:fc5758e2b7a56532dc33e3c544d78cbaa9ecf0a0f2a2da2df882c1d6b99a317f", size = 49292, upload-time = "2026-04-09T16:05:50.362Z" },
- { url = "https://files.pythonhosted.org/packages/4c/61/bc448ecbf9b2d69c5cff88fe41496b19ab2a1cbda0065e47d4d0d51c0867/librt-0.9.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f24b90b0e0c8cc9491fb1693ae91fe17cb7963153a1946395acdbdd5818429a4", size = 70175, upload-time = "2026-04-09T16:05:51.564Z" },
- { url = "https://files.pythonhosted.org/packages/60/f2/c47bb71069a73e2f04e70acbd196c1e5cc411578ac99039a224b98920fd4/librt-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3fe56e80badb66fdcde06bef81bbaa5bfcf6fbd7aefb86222d9e369c38c6b228", size = 72951, upload-time = "2026-04-09T16:05:52.699Z" },
- { url = "https://files.pythonhosted.org/packages/29/19/0549df59060631732df758e8886d92088da5fdbedb35b80e4643664e8412/librt-0.9.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:527b5b820b47a09e09829051452bb0d1dd2122261254e2a6f674d12f1d793d54", size = 225864, upload-time = "2026-04-09T16:05:53.895Z" },
- { url = "https://files.pythonhosted.org/packages/9d/f8/3b144396d302ac08e50f89e64452c38db84bc7b23f6c60479c5d3abd303c/librt-0.9.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d429bdd4ac0ab17c8e4a8af0ed2a7440b16eba474909ab357131018fe8c7e71", size = 241155, upload-time = "2026-04-09T16:05:55.191Z" },
- { url = "https://files.pythonhosted.org/packages/7a/ce/ee67ec14581de4043e61d05786d2aed6c9b5338816b7859bcf07455c6a9f/librt-0.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7202bdcac47d3a708271c4304a474a8605a4a9a4a709e954bf2d3241140aa938", size = 252235, upload-time = "2026-04-09T16:05:56.549Z" },
- { url = "https://files.pythonhosted.org/packages/8a/fa/0ead15daa2b293a54101550b08d4bafe387b7d4a9fc6d2b985602bae69b6/librt-0.9.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0d620e74897f8c2613b3c4e2e9c1e422eb46d2ddd07df540784d44117836af3", size = 244963, upload-time = "2026-04-09T16:05:57.858Z" },
- { url = "https://files.pythonhosted.org/packages/29/68/9fbf9a9aa704ba87689e40017e720aced8d9a4d2b46b82451d8142f91ec9/librt-0.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d69fc39e627908f4c03297d5a88d9284b73f4d90b424461e32e8c2485e21c283", size = 257364, upload-time = "2026-04-09T16:05:59.686Z" },
- { url = "https://files.pythonhosted.org/packages/1a/8d/9d60869f1b6716c762e45f66ed945b1e5dd649f7377684c3b176ae424648/librt-0.9.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c2640e23d2b7c98796f123ffd95cf2022c7777aa8a4a3b98b36c570d37e85eee", size = 247661, upload-time = "2026-04-09T16:06:00.938Z" },
- { url = "https://files.pythonhosted.org/packages/70/ff/a5c365093962310bfdb4f6af256f191085078ffb529b3f0cbebb5b33ebe2/librt-0.9.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:451daa98463b7695b0a30aa56bf637831ea559e7b8101ac2ef6382e8eb15e29c", size = 248238, upload-time = "2026-04-09T16:06:02.537Z" },
- { url = "https://files.pythonhosted.org/packages/a0/3c/2d34365177f412c9e19c0a29f969d70f5343f27634b76b765a54d8b27705/librt-0.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:928bd06eca2c2bbf4349e5b817f837509b0604342e65a502de1d50a7570afd15", size = 269457, upload-time = "2026-04-09T16:06:03.833Z" },
- { url = "https://files.pythonhosted.org/packages/bc/cd/de45b239ea3bdf626f982a00c14bfcf2e12d261c510ba7db62c5969a27cd/librt-0.9.0-cp314-cp314t-win32.whl", hash = "sha256:a9c63e04d003bc0fb6a03b348018b9a3002f98268200e22cc80f146beac5dc40", size = 52453, upload-time = "2026-04-09T16:06:05.229Z" },
- { url = "https://files.pythonhosted.org/packages/7f/f9/bfb32ae428aa75c0c533915622176f0a17d6da7b72b5a3c6363685914f70/librt-0.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f162af66a2ed3f7d1d161a82ca584efd15acd9c1cff190a373458c32f7d42118", size = 60044, upload-time = "2026-04-09T16:06:06.398Z" },
- { url = "https://files.pythonhosted.org/packages/aa/47/7d70414bcdbb3bc1f458a8d10558f00bbfdb24e5a11740fc8197e12c3255/librt-0.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:a4b25c6c25cac5d0d9d6d6da855195b254e0021e513e0249f0e3b444dc6e0e61", size = 50009, upload-time = "2026-04-09T16:06:07.995Z" },
+version = "0.11.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/40/08/9e7f6b5d2b5bed6ad055cdd5925f192bb403a51280f86b56554d9d0699a2/librt-0.11.0.tar.gz", hash = "sha256:075dc3ef4458a278e0195cbf6ac9d38808d9b906c5a6c7f7f79c3888276a3fb1", size = 200139, upload-time = "2026-05-10T18:17:25.138Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fe/87/2bf31fe17587b29e3f93ec31421e2b1e1c3e349b8bf6c7c313dbad1d5340/librt-0.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:93d95bd45b7d58343d8b90d904450a545144eec19a002511163426f8ab1fae29", size = 141092, upload-time = "2026-05-10T18:15:34.795Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/08/5c5bf772920b7ebac6e32bc91a643e0ab3870199c0b542356d3baa83970a/librt-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ee278c769a713638cdacd4c0436d72156e75df3ebc0166ab2b9dc43acc386c9", size = 142035, upload-time = "2026-05-10T18:15:36.242Z" },
+ { url = "https://files.pythonhosted.org/packages/06/20/662a03d254e5b000d838e8b345d83303ddb768c080fd488e40634c0fa66b/librt-0.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f230cb1cbc9faaa616f9a678f530ebcf186e414b6bcbd88b960e4ba1b92428d5", size = 475022, upload-time = "2026-05-10T18:15:37.56Z" },
+ { url = "https://files.pythonhosted.org/packages/de/f3/aa81523e45184c6ec23dc7f63263362ec55f80a09d424c012359ecbe7e35/librt-0.11.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5d63c855d86938d9de93e265c9bd8c705b51ec494de5738340ee93767a686e4b", size = 467273, upload-time = "2026-05-10T18:15:39.182Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/6f/59c74b560ca8853834d5501d589c8a2519f4184f273a085ffd0f37a1cc47/librt-0.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:993f028be9e96a08d31df3479ac80d99be374d17f3b78e4796b3fd3c913d4e89", size = 497083, upload-time = "2026-05-10T18:15:40.634Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/7b/5aa4d2c9600a719401160bf7055417df0b2a47439b9d88286ce45e56b65f/librt-0.11.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:258d73a0aa66a055e65b2e4d1b8cdb23b9d132c5bb915d9547d804fcaed116cc", size = 489139, upload-time = "2026-05-10T18:15:41.934Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/31/9143803d7da6856a69153785768c4936864430eec0fd9461c3ea527d9922/librt-0.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0827efe7854718f04aaddf6496e96960a956e676fe1d0f04eb41511fd8ad06d5", size = 508442, upload-time = "2026-05-10T18:15:43.206Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/5a/bce08184488426bda4ccc2c4964ac048c8f68ae89bd7120082eef4233cfd/librt-0.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7753e57d6e12d019c0d8786f1c09c709f4c3fcc57c3887b24e36e6c06ec938b7", size = 514230, upload-time = "2026-05-10T18:15:44.761Z" },
+ { url = "https://files.pythonhosted.org/packages/89/8c/bb5e213d254b7505a0e658da199d8ab719086632ce09eef311ab27976523/librt-0.11.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11bd19822431cc21af9f27374e7ae2e58103c7d98bda823536a6c47f6bb2bb3d", size = 494231, upload-time = "2026-05-10T18:15:46.308Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/fb/541cdad5b1ab1300398c74c4c9a497b88e5074c21b1244c8f49731d3a284/librt-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:22bdf239b219d3993761a148ffa134b19e52e9989c84f845d5d7b71d70a17412", size = 537585, upload-time = "2026-05-10T18:15:47.629Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/f2/464bb69295c320cb06bddb4f14a4ec67934ee14b2bffb12b19fb7ab287ba/librt-0.11.0-cp311-cp311-win32.whl", hash = "sha256:46c60b61e308eb535fbd6fa622b1ee1bb2815691c1ad9c98bf7b84952ec3bc8d", size = 100509, upload-time = "2026-05-10T18:15:49.157Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/e7/a17ee1788f9e4fbf548c19f4afa07c92089b9e24fef6cb2410863781ef4c/librt-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:902e546ff044f579ff1c953ff5fce97b636fe9e3943996b2177710c6ef076f73", size = 118628, upload-time = "2026-05-10T18:15:50.345Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/c7/6c766214f9f9903bcfcfbef97d807af8d8f5aa3502d247858ab17582d212/librt-0.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:65ac3bc20f78aa0ee5ae84baa68917f89fef4af63e941084dd019a0d0e749f0c", size = 103122, upload-time = "2026-05-10T18:15:52.068Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/d0/07c77e067f0838949b43bd89232c29d72efebb9d2801a9750184eb706b71/librt-0.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b87504f1690a23b9a2cca841191a04f83895d4fc2dd04df91d82b1a04ca2ad46", size = 144147, upload-time = "2026-05-10T18:15:53.227Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/24/8493538fa4f62f982686398a5b8f68008138a75086abdea19ade64bf4255/librt-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40071fc5fe0ce8daa6de616702314a01e1250711682b0523d6ab8d4525910cb3", size = 143614, upload-time = "2026-05-10T18:15:54.657Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/1e/f8bad050810d9171f34a1648ed910e56814c2ba61639f2bd53c6377ae24b/librt-0.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:137e79445c896a0ea7b265f52d23954e05b64222ee1af69e2cb34219067cbb67", size = 485538, upload-time = "2026-05-10T18:15:56.117Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/fe/3594ebfbaf03084ba4b120c9ba5c3183fd938a48725e9bbe6ff0a5159ad8/librt-0.11.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:cca6644054e78746d8d4ef238681f9c34ff8b584fe6b988ecebb8db3b15e622a", size = 479623, upload-time = "2026-05-10T18:15:57.544Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/da/5d1876984b3746c85dbd219dbfcb73c85f54ee263fd32e5b2a632ec14571/librt-0.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5b0eea49f5562861ee8d757a32ef7d559c1d35be2aaaa1ec28941d74c9ffc8a", size = 513082, upload-time = "2026-05-10T18:15:58.805Z" },
+ { url = "https://files.pythonhosted.org/packages/19/6e/55bdf5d5ca00c3e18430690bf2c953d8d3ffd3c337418173d33dec985dc9/librt-0.11.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0d1029d7e1ae1a7e647ed6fb5df8c4ce2dffefb7a9f5fd1376a4554d96dac09f", size = 508105, upload-time = "2026-05-10T18:16:00.2Z" },
+ { url = "https://files.pythonhosted.org/packages/07/10/f1f23a7c595ee90ece4d35c851e5d104b1311a887ed1b4ac4c35bbd13da8/librt-0.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bc3ce6b33c5828d9e80592011a5c584cb2ce86edbc4088405f70da47dc1d1b3b", size = 522268, upload-time = "2026-05-10T18:16:01.708Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/02/5720f5697a7f54b78b3aefbe20df3a48cedcff1276618c4aa481177942ed/librt-0.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:936c5995f3514a42111f20099397d8177c79b4d7e70961e396c6f5a0a3566766", size = 527348, upload-time = "2026-05-10T18:16:03.496Z" },
+ { url = "https://files.pythonhosted.org/packages/50/db/b4a47c6f91db4ff76348a0b3dd0cc65e090a078b765a810a62ff9434c3d3/librt-0.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9bc0ca6ad9381cbe8e4aa6e5726e4c80c78115a6e9723c599ed1d73e092bc49d", size = 516294, upload-time = "2026-05-10T18:16:05.173Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/58/9384b2f4eb1ed1d273d40948a7c5c4b2360213b402ef3be4641c06299f9c/librt-0.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:070aa8c26c0a74774317a72df8851facc7f0f012a5b406557ac56992d92e1ec8", size = 553608, upload-time = "2026-05-10T18:16:06.839Z" },
+ { url = "https://files.pythonhosted.org/packages/21/7b/5aa8848a7c6a9278c79375146da1812e695754ceec5f005e6043461a7315/librt-0.11.0-cp312-cp312-win32.whl", hash = "sha256:6bf14feb84b05ae945277395451998c89c54d0def4070eb5c08de544930b245a", size = 101879, upload-time = "2026-05-10T18:16:08.103Z" },
+ { url = "https://files.pythonhosted.org/packages/37/33/8a745436944947575b584231750a41417de1a38cf6a2e9251d1065651c09/librt-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:75672f0bc524ede266287d532d7923dbce94c7514ad07627bac3d0c6d92cc4d9", size = 119831, upload-time = "2026-05-10T18:16:09.174Z" },
+ { url = "https://files.pythonhosted.org/packages/59/67/a6739ac96e28b7855808bdb0370e250606104a859750d209e5a0716fe7ab/librt-0.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:2f10cf143e4a9bb0f4f5af568a00df94a2d69ef41c2579584454bb0fe5cc642c", size = 103470, upload-time = "2026-05-10T18:16:10.369Z" },
+ { url = "https://files.pythonhosted.org/packages/82/61/e59168d4d0bf2bf90f4f0caf7a001bfc60254c3af4586013b04dc3ef517b/librt-0.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:78dc31f7fdfe9c9d0eb0e8f42d139db230e826415bbcabd9f0e9faaaee909894", size = 144119, upload-time = "2026-05-10T18:16:11.771Z" },
+ { url = "https://files.pythonhosted.org/packages/61/fd/caa1d60b12f7dd79ccea23054e06eeaebe266a5f52c40a6b651069200ce5/librt-0.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fa475675db22290c3158e1d42326d0f5a65f04f44a0e68c3630a25b53560fb9c", size = 143565, upload-time = "2026-05-10T18:16:13.334Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/a9/dc744f5c2b4978d48db970be29f22716d3413d28b14ad99740817315cf2c/librt-0.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:621db29691044bdeda22e789e482e1b0f3a985d90e3426c9c6d17606416205ea", size = 485395, upload-time = "2026-05-10T18:16:14.729Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/21/7f8e97a1e4dae952a5a95948f6f8507a173bc1e669f54340bba6ca1ca31b/librt-0.11.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:a9010e2ed5b3a9e158c5fd966b3ab7e834bb3d3aacc8f66c91dd4b57a3799230", size = 479383, upload-time = "2026-05-10T18:16:16.321Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/6d/d8ee9c114bebf2c50e29ec2aa940826fccb62a645c3e4c18760987d0e16d/librt-0.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c39513d8b7477a2e1ed8c43fc21c524e8d5a0f8d4e8b7b074dbdbe7820a08e2", size = 513010, upload-time = "2026-05-10T18:16:17.647Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/43/0b5708af2bd30a46400e72ba6bdaa8f066f15fb9a688527e34220e8d6c06/librt-0.11.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7aef3cf1d5af86e770ab04bfd993dfc4ae8b8c17f66fb77dd4a7d50de7bbb1a3", size = 508433, upload-time = "2026-05-10T18:16:19.309Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/50/356187247d09013490481033183b3532b58acf8028bcb34b2b56a375c9b2/librt-0.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:557183ddc36babe46b27dd60facbd5adb4492181a5be887587d57cda6e092f21", size = 522595, upload-time = "2026-05-10T18:16:20.642Z" },
+ { url = "https://files.pythonhosted.org/packages/40/e7/c6ac4240899c7f3248079d5a9900debe0dadb3fdeaf856684c987105ba47/librt-0.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:83d3e1f72bd42f6c5c0b7daec530c3f829bd02db42c70b8ddf0c2d90a2459930", size = 527255, upload-time = "2026-05-10T18:16:22.352Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/b5/a81322dbeedeeaf9c1ee6f001734d28a09d8383ac9e6779bc24bbd0743c6/librt-0.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4ce1f21fbe589bc1afd7872dece84fb0e1144f794a288e58a10d2c54a55c43be", size = 516847, upload-time = "2026-05-10T18:16:23.627Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/66/6e6323787d592b55204a42595ff1102da5115601b53a7e9ddebc889a6da5/librt-0.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b09f7044ea2b64c9da42fd3d335666518cfd1c6e8a182c95da73d0214b41e", size = 553920, upload-time = "2026-05-10T18:16:25.025Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/21/623f8ca230857102066d9ca8c6c1734995908c4d0d1bee7bb2ef0021cb33/librt-0.11.0-cp313-cp313-win32.whl", hash = "sha256:78fddc31cd4d3caa897ad5d31f856b1faadc9474021ad6cb182b9018793e254e", size = 101898, upload-time = "2026-05-10T18:16:26.649Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/1d/b4ebd44dd723f768469007515cb92251e0ae286c94c140f374801140fa74/librt-0.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ca8aa88751a775870b764e93bad5135385f563cb8dcee399abf034ea4d3cb47", size = 119812, upload-time = "2026-05-10T18:16:27.859Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/e4/b2f4ca7965ca373b491cdb4bc25cdb30c1649ca81a8782056a83850292a9/librt-0.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:96f044bb325fd9cf1a723015638c219e9143f0dfbc0ca54c565df2b7fc748b44", size = 103448, upload-time = "2026-05-10T18:16:29.066Z" },
+ { url = "https://files.pythonhosted.org/packages/29/eb/dbce197da4e227779e56b5735f2decc3eb36e55a1cdbf1bd65d6639d76c1/librt-0.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4a017a95e5837dc15a8c5661d60e05daa96b90908b1aa6b7acdf443cd25c8ebd", size = 143345, upload-time = "2026-05-10T18:16:30.674Z" },
+ { url = "https://files.pythonhosted.org/packages/76/a3/254bebd0c11c8ba684018efb8006ff22e466abce445215cca6c778e7d9de/librt-0.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b1ecbd9819deccc39b7542bf4d2a740d8a620694d39989e58661d3763458f8d4", size = 143131, upload-time = "2026-05-10T18:16:32.037Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/3f/f77d6122d21ac7bf6ae8a7dfced1bd2a7ac545d3273ebdcaf8042f6d619f/librt-0.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7da327dacd7be8f8ec36547373550744a3cc0e536d54665cd83f8bcd961200e8", size = 477024, upload-time = "2026-05-10T18:16:33.493Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/0a/2c996dadebaa7d9bbbd43ef2d4f3e66b6da545f838a41694ef6172cebec8/librt-0.11.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:0dc56b1f8d06e60db362cc3fdae206681817f86ce4725d34511473487f12a34b", size = 474221, upload-time = "2026-05-10T18:16:34.864Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/7e/f5d92af8486b8272c23b3e686b46ff72d89c8169585eb61eef01a2ac7147/librt-0.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05fb8fb2ab90e21c8d12ea240d744ad514da9baf381ebfa70d91d20d21713175", size = 505174, upload-time = "2026-05-10T18:16:36.705Z" },
+ { url = "https://files.pythonhosted.org/packages/af/1a/cb0734fe86398eb33193ab753b7326255c74cac5eb09e76b9b16536e7adb/librt-0.11.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cae74872be221df4374d10fec61f93ed1513b9546ea84f2c0bf73ab3e9bd0b03", size = 497216, upload-time = "2026-05-10T18:16:38.418Z" },
+ { url = "https://files.pythonhosted.org/packages/18/06/094820f91558b66e29943c0ec41c9914f460f48dd51fc503c3101e10842d/librt-0.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:32bcc918c0148eb7e3d57385125bac7e5f9e4359d05f07448b09f6f778c2f31c", size = 513921, upload-time = "2026-05-10T18:16:39.848Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/c2/00de9018871a282f530cacb457d5ec0428f6ac7e6fedde9aff7468d9fb04/librt-0.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f9743fc99135d5f78d2454435615f6dec0473ca507c26ce9d92b10b562a280d3", size = 520850, upload-time = "2026-05-10T18:16:41.471Z" },
+ { url = "https://files.pythonhosted.org/packages/51/9d/64631832348fd1834fb3a61b996434edddaaf25a31d03b0a76273159d2cf/librt-0.11.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5ba067f4aadae8fda802d91d2124c90c42195ff32d9161d3549e6d05cfe26f96", size = 504237, upload-time = "2026-05-10T18:16:43.15Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/ec/ae5525eb16edc827a044e7bb8777a455ff95d4bca9379e7e6bddd7383647/librt-0.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:de3bf945454d032f9e390b85c4072e0a0570bf825421c8be0e71209fa65e1abe", size = 546261, upload-time = "2026-05-10T18:16:44.408Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/09/adce371f27ca039411da9659f7430fcc2ba6cd0c7b3e4467a0f091be7fa9/librt-0.11.0-cp314-cp314-win32.whl", hash = "sha256:d2277a05f6dcb9fd13db9566aac4fabd68c3ea1ea46ee5567d4eef8efa495a2f", size = 96965, upload-time = "2026-05-10T18:16:46.039Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/ee/8ac720d98548f173c7ce2e632a7ca94673f74cacd5c8162a84af5b35958a/librt-0.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:ab73e8db5e3f564d812c1f5c3a175930a5f9bc96ccb5e3b22a34d7858b401cf7", size = 115151, upload-time = "2026-05-10T18:16:47.133Z" },
+ { url = "https://files.pythonhosted.org/packages/94/20/c900cf14efeb09b6bef2b2dff20779f73464b97fd58d1c6bccc379588ae3/librt-0.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:aea3caa317752e3a466fa8af45d91ee0ea8c7fdd96e42b0a8dd9b76a7931eba1", size = 98850, upload-time = "2026-05-10T18:16:48.597Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/71/944bfe4b64e12abffcd3c15e1cce07f72f3d55655083786285f4dedeb532/librt-0.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d1b36540d7aaf9b9101b3a6f376c8d8e9f7a9aec93ed05918f2c69d493ffef72", size = 151138, upload-time = "2026-05-10T18:16:49.839Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/10/99e64a5c86989357fda078c8143c533389585f6473b7439172dd8f3b3b2d/librt-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:efbb343ab2ce3540f4ecbe6315d677ed70f37cd9a72b1e58066c918ca83acbaa", size = 151976, upload-time = "2026-05-10T18:16:51.062Z" },
+ { url = "https://files.pythonhosted.org/packages/21/31/5072ad880946d83e5ea4147d6d018c78eefce85b77819b19bdd0ee229435/librt-0.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0dd688aab3f7914d3e6e5e3554978e0383312fb8e771d84be008a35b9ee548", size = 557927, upload-time = "2026-05-10T18:16:52.632Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/8d/70b5fb7cfbab60edbe7381614ab985da58e144fbf465c86d44c95f43cdca/librt-0.11.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:f5fb36b8c6c63fdcbb1d526d94c0d1331610d43f4118cc1beb4efef4f3faacb2", size = 539698, upload-time = "2026-05-10T18:16:53.934Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/a3/ba3495a0b3edbd24a4cae0d1d3c64f39a9fc45d06e812101289b50c1a619/librt-0.11.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a9a237d13addb93715b6fee74023d5ee3469b53fce527626c0e088aa585805f", size = 577162, upload-time = "2026-05-10T18:16:55.589Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/db/36e25fb81f99937ff1b96612a1dc9fd66f039cb9cc3aee12c01fac31aab9/librt-0.11.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5ddd17bd87b2c56ddd60e546a7984a2e64c4e8eab92fb4cf3830a48ad5469d51", size = 566494, upload-time = "2026-05-10T18:16:56.975Z" },
+ { url = "https://files.pythonhosted.org/packages/33/0d/3f622b47f0b013eeb9cf4cc07ae9bfe378d832a4eec998b2b209fe84244d/librt-0.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd43992b4473d42f12ff9e68326079f0696d9d4e6000e8f39a0238d482ba6ee2", size = 596858, upload-time = "2026-05-10T18:16:58.374Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/02/71b90bc93039c46a2000651f6ad60122b114c8f54c4ad306e0e96f5b75ad/librt-0.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:f8e3e8056dd674e279741485e2e512d6e9a751c7455809d0114e6ebf8d781085", size = 590318, upload-time = "2026-05-10T18:16:59.676Z" },
+ { url = "https://files.pythonhosted.org/packages/04/04/418cb3f75621e2b761fb1ab0f017f4d70a1a72a6e7c74ee4f7e8d198c2f3/librt-0.11.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c1f708d8ae9c56cf38a903c44297243d2ec83fd82b396b977e0144a3e76217e3", size = 575115, upload-time = "2026-05-10T18:17:01.007Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/2c/5a2183ac58dd911f26b5d7e7d7d8f1d87fcecdddd99d6c12169a258ff62c/librt-0.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0add982e0e7b9fc14cf4b33789d5f13f66581889b88c2f58099f6ce8f92617bd", size = 617918, upload-time = "2026-05-10T18:17:02.682Z" },
+ { url = "https://files.pythonhosted.org/packages/15/1f/dc6771a52592a4451be6effa200cbfc9cec61e4393d3033d81a9d307961d/librt-0.11.0-cp314-cp314t-win32.whl", hash = "sha256:2b481d846ac894c4e8403c5fd0e87c5d11d6499e404b474602508a224ff531c8", size = 103562, upload-time = "2026-05-10T18:17:03.99Z" },
+ { url = "https://files.pythonhosted.org/packages/62/4a/7d1415567027286a75ba1093ec4aca11f073e0f559c530cf3e0a757ad55c/librt-0.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:28edb433edde181112a908c78907af28f964eabc15f4dd16c9d66c834302677c", size = 124327, upload-time = "2026-05-10T18:17:05.465Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/62/b40b382fa0c66fee1478073eb8db352a4a6beda4a1adccf1df911d8c289c/librt-0.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dee008f20b542e3cd162ba338a7f9ec0f6d23d395f66fe8aeeec3c9d067ea253", size = 102572, upload-time = "2026-05-10T18:17:06.809Z" },
]
[[package]]
name = "logfire-api"
-version = "4.32.1"
+version = "4.33.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/58/1b/0c74ad85f977743ba4c589e46e0cb138d6a6e69487830f4e86ebbdb145a3/logfire_api-4.32.1.tar.gz", hash = "sha256:5e8714b2bb5fb5d1f4a4a833941e4ca711b75d2c1f98e76c5ad680fe6991af6a", size = 78788, upload-time = "2026-04-15T14:11:58.788Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/47/1a/c44eb3a02407aa739669822d19734e76e8751284b86cd99c73baca36998a/logfire_api-4.33.0.tar.gz", hash = "sha256:0a604f710e803db08a2ddc41e6152bf8d8a56b549f8856cbf82baa36bc7de2c9", size = 81483, upload-time = "2026-05-13T15:14:17.348Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0c/ab/d5adeab6253c7ecd5904fc5ef3265859f218610caf4e1e55efe9aff6ac49/logfire_api-4.32.1-py3-none-any.whl", hash = "sha256:4b4c27cf6e27e8e26ef4b22a77f2a2988dd1d07e2d24ee70673ef34b234fb8a5", size = 124394, upload-time = "2026-04-15T14:11:56.157Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/58/dc21672e0d5294668f4d35aaba4d839d031f096b4cf6802399c4b411b5fc/logfire_api-4.33.0-py3-none-any.whl", hash = "sha256:b992727bab71412b5a00f54453eec18e559232c83d7120cf5c6a9edd33fb0c4e", size = 128896, upload-time = "2026-05-13T15:14:14.322Z" },
]
[[package]]
@@ -1628,7 +1656,7 @@ wheels = [
[[package]]
name = "marimo"
-version = "0.23.5"
+version = "0.23.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
@@ -1650,9 +1678,9 @@ dependencies = [
{ name = "uvicorn" },
{ name = "websockets" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/45/99/13a8947b4544b1b65ed279a550b2d2a57bbcb24fb6591020542f46dca86b/marimo-0.23.5.tar.gz", hash = "sha256:4eb4c7c12ea1c3e8f25e56a9365a4ae1b0b995faa2bd614c576fa0ea3e0c4cad", size = 38417181, upload-time = "2026-05-04T18:51:26.277Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/db/96/7f03859bfc88b9ee25f1562ad1e7e0284c442f2956eaf0f9c849836d378f/marimo-0.23.6.tar.gz", hash = "sha256:d63aeeee1e9ea7cac79bf2530daba915199153dce4d156fade7546474679d3ca", size = 38426356, upload-time = "2026-05-11T21:39:57.588Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0c/d1/f2300ce52c391c5e0fa86a6292e45cb419898626b2900c2c1b44a3ba7162/marimo-0.23.5-py3-none-any.whl", hash = "sha256:9cf039ba5a11a5a3035ed0a165d3f84e2d67a4046422925b77fde154062c5112", size = 38835716, upload-time = "2026-05-04T18:51:21.64Z" },
+ { url = "https://files.pythonhosted.org/packages/44/a7/c19a6481dfe7762eb07a5bd0a7d7ae560a2ab5505a519bce159d0fd08beb/marimo-0.23.6-py3-none-any.whl", hash = "sha256:e8d19d875b0212600faa80eaaed0fd3f34dfb7b5241e630cf2b1cedd8dd14509", size = 38849553, upload-time = "2026-05-11T21:39:53.996Z" },
]
[[package]]
@@ -1666,14 +1694,14 @@ wheels = [
[[package]]
name = "markdown-it-py"
-version = "4.0.0"
+version = "4.2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "mdurl" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
]
[[package]]
@@ -1752,7 +1780,7 @@ wheels = [
[[package]]
name = "mcp"
-version = "1.27.0"
+version = "1.27.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -1770,9 +1798,9 @@ dependencies = [
{ name = "typing-inspection" },
{ name = "uvicorn", marker = "sys_platform != 'emscripten'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/8b/eb/c0cfc62075dc6e1ec1c64d352ae09ac051d9334311ed226f1f425312848a/mcp-1.27.0.tar.gz", hash = "sha256:d3dc35a7eec0d458c1da4976a48f982097ddaab87e278c5511d5a4a56e852b83", size = 607509, upload-time = "2026-04-02T14:48:08.88Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/38/83/d1efe7c2980d8a3afa476f4e3d42d53dd54c0ab94c27bee5d755b45c8b73/mcp-1.27.1.tar.gz", hash = "sha256:0f47e1820f8f8f941466b39749eb1d1839a04caddca2bc60e9d46e8a99914924", size = 608458, upload-time = "2026-05-08T16:50:12.601Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/9c/46/f6b4ad632c67ef35209a66127e4bddc95759649dd595f71f13fba11bdf9a/mcp-1.27.0-py3-none-any.whl", hash = "sha256:5ce1fa81614958e267b21fb2aa34e0aea8e2c6ede60d52aba45fd47246b4d741", size = 215967, upload-time = "2026-04-02T14:48:07.24Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/73/42d9596facebdb533b7f0b86c1b0364ef350d1f8ba78b1052e8a58b48b65/mcp-1.27.1-py3-none-any.whl", hash = "sha256:1af3c4203b329430fde7a87b4fcb6392a041f5cb851fd68fc674016ab4e7c06f", size = 216260, upload-time = "2026-05-08T16:50:10.547Z" },
]
[[package]]
@@ -2122,52 +2150,53 @@ wheels = [
[[package]]
name = "mypy"
-version = "1.20.2"
+version = "2.1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
+ { name = "ast-serialize" },
{ name = "librt", marker = "platform_python_implementation != 'PyPy'" },
{ name = "mypy-extensions" },
{ name = "pathspec" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/04/af/e3d4b3e9ec91a0ff9aabfdb38692952acf49bbb899c2e4c29acb3a6da3ae/mypy-1.20.2.tar.gz", hash = "sha256:e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665", size = 3817349, upload-time = "2026-04-21T17:12:28.473Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/1f/4d/9ebeae211caccbdaddde7ed5e31dfcf57faac66be9b11deb1dc6526c8078/mypy-1.20.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4077797a273e56e8843d001e9dfe4ba10e33323d6ade647ff260e5cd97d9758c", size = 14371307, upload-time = "2026-04-21T17:08:56.442Z" },
- { url = "https://files.pythonhosted.org/packages/95/d7/93473d34b61f04fac1aecc01368485c89c5c4af7a4b9a0cab5d77d04b63f/mypy-1.20.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cdecf62abcc4292500d7858aeae87a1f8f1150f4c4dd08fb0b336ee79b2a6df3", size = 13258917, upload-time = "2026-04-21T17:05:50.978Z" },
- { url = "https://files.pythonhosted.org/packages/e2/30/3dd903e8bafb7b5f7bf87fcd58f8382086dea2aa19f0a7b357f21f63071b/mypy-1.20.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c566c3a88b6ece59b3d70f65bedef17304f48eb52ff040a6a18214e1917b3254", size = 13700516, upload-time = "2026-04-21T17:11:33.161Z" },
- { url = "https://files.pythonhosted.org/packages/07/05/c61a140aba4c729ac7bc99ae26fc627c78a6e08f5b9dd319244ea71a3d7e/mypy-1.20.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0deb80d062b2479f2c87ae568f89845afc71d11bc41b04179e58165fd9f31e98", size = 14562889, upload-time = "2026-04-21T17:05:27.674Z" },
- { url = "https://files.pythonhosted.org/packages/fd/87/da78243742ffa8a36d98c3010f0d829f93d5da4e6786f1a1a6f2ad616502/mypy-1.20.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bba9ad231e92a3e424b3e56b65aa17704993425bba97e302c832f9466bb85bac", size = 14803844, upload-time = "2026-04-21T17:10:06.2Z" },
- { url = "https://files.pythonhosted.org/packages/37/52/10a1ddf91b40f843943a3c6db51e2df59c9e237f29d355e95eaab427461f/mypy-1.20.2-cp311-cp311-win_amd64.whl", hash = "sha256:baf593f2765fa3a6b1ef95807dbaa3d25b594f6a52adcc506a6b9cb115e1be67", size = 10846300, upload-time = "2026-04-21T17:12:23.886Z" },
- { url = "https://files.pythonhosted.org/packages/20/02/f9a4415b664c53bd34d6709be59da303abcae986dc4ac847b402edb6fa1e/mypy-1.20.2-cp311-cp311-win_arm64.whl", hash = "sha256:20175a1c0f49863946ec20b7f63255768058ac4f07d2b9ded6a6b46cfb5a9100", size = 9779498, upload-time = "2026-04-21T17:09:23.695Z" },
- { url = "https://files.pythonhosted.org/packages/71/4e/7560e4528db9e9b147e4c0f22660466bf30a0a1fe3d63d1b9d3b0fd354ee/mypy-1.20.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4dbfcf869f6b0517f70cf0030ba6ea1d6645e132337a7d5204a18d8d5636c02b", size = 14539393, upload-time = "2026-04-21T17:07:12.52Z" },
- { url = "https://files.pythonhosted.org/packages/32/d9/34a5efed8124f5a9234f55ac6a4ced4201e2c5b81e1109c49ad23190ec8c/mypy-1.20.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b6481b228d072315b053210b01ac320e1be243dc17f9e5887ef167f23f5fae4", size = 13361642, upload-time = "2026-04-21T17:06:53.742Z" },
- { url = "https://files.pythonhosted.org/packages/d1/14/eb377acf78c03c92d566a1510cda8137348215b5335085ef662ab82ecd3a/mypy-1.20.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34397cdced6b90b836e38182076049fdb41424322e0b0728c946b0939ebdf9f6", size = 13740347, upload-time = "2026-04-21T17:12:04.73Z" },
- { url = "https://files.pythonhosted.org/packages/b9/94/7e4634a32b641aa1c112422eed1bbece61ee16205f674190e8b536f884de/mypy-1.20.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5da6976f20cae27059ea8d0c86e7cef3de720e04c4bb9ee18e3690fdb792066", size = 14734042, upload-time = "2026-04-21T17:07:43.16Z" },
- { url = "https://files.pythonhosted.org/packages/7a/f3/f7e62395cb7f434541b4491a01149a4439e28ace4c0c632bbf5431e92d1f/mypy-1.20.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:56908d7e08318d39f85b1f0c6cfd47b0cac1a130da677630dac0de3e0623e102", size = 14964958, upload-time = "2026-04-21T17:11:00.665Z" },
- { url = "https://files.pythonhosted.org/packages/3e/0d/47e3c3a0ec2a876e35aeac365df3cac7776c36bbd4ed18cc521e1b9d255b/mypy-1.20.2-cp312-cp312-win_amd64.whl", hash = "sha256:d52ad8d78522da1d308789df651ee5379088e77c76cb1994858d40a426b343b9", size = 10911340, upload-time = "2026-04-21T17:10:49.179Z" },
- { url = "https://files.pythonhosted.org/packages/d6/b2/6c852d72e0ea8b01f49da817fb52539993cde327e7d010e0103dc12d0dac/mypy-1.20.2-cp312-cp312-win_arm64.whl", hash = "sha256:785b08db19c9f214dc37d65f7c165d19a30fcecb48abfa30f31b01b5acaabb58", size = 9833947, upload-time = "2026-04-21T17:09:05.267Z" },
- { url = "https://files.pythonhosted.org/packages/5b/c4/b93812d3a192c9bcf5df405bd2f30277cd0e48106a14d1023c7f6ed6e39b/mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026", size = 14524670, upload-time = "2026-04-21T17:10:30.737Z" },
- { url = "https://files.pythonhosted.org/packages/f3/47/42c122501bff18eaf1e8f457f5c017933452d8acdc52918a9f59f6812955/mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943", size = 13336218, upload-time = "2026-04-21T17:08:44.069Z" },
- { url = "https://files.pythonhosted.org/packages/92/8f/75bbc92f41725fbd585fb17b440b1119b576105df1013622983e18640a93/mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517", size = 13724906, upload-time = "2026-04-21T17:08:01.02Z" },
- { url = "https://files.pythonhosted.org/packages/a1/32/4c49da27a606167391ff0c39aa955707a00edc500572e562f7c36c08a71f/mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15", size = 14726046, upload-time = "2026-04-21T17:11:22.354Z" },
- { url = "https://files.pythonhosted.org/packages/7f/fc/4e354a1bd70216359deb0c9c54847ee6b32ef78dfb09f5131ff99b494078/mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee", size = 14955587, upload-time = "2026-04-21T17:12:16.033Z" },
- { url = "https://files.pythonhosted.org/packages/62/b2/c0f2056e9eb8f08c62cafd9715e4584b89132bdc832fcf85d27d07b5f3e5/mypy-1.20.2-cp313-cp313-win_amd64.whl", hash = "sha256:2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f", size = 10922681, upload-time = "2026-04-21T17:06:35.842Z" },
- { url = "https://files.pythonhosted.org/packages/e5/14/065e333721f05de8ef683d0aa804c23026bcc287446b61cac657b902ccac/mypy-1.20.2-cp313-cp313-win_arm64.whl", hash = "sha256:a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330", size = 9830560, upload-time = "2026-04-21T17:07:51.023Z" },
- { url = "https://files.pythonhosted.org/packages/ae/d1/b4ec96b0ecc620a4443570c6e95c867903428cfcde4206518eafdd5880c3/mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30", size = 14524561, upload-time = "2026-04-21T17:06:27.325Z" },
- { url = "https://files.pythonhosted.org/packages/3a/63/d2c2ff4fa66bc49477d32dfa26e8a167ba803ea6a69c5efb416036909d30/mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924", size = 13363883, upload-time = "2026-04-21T17:11:11.239Z" },
- { url = "https://files.pythonhosted.org/packages/2a/56/983916806bf4eddeaaa2c9230903c3669c6718552a921154e1c5182c701f/mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb", size = 13742945, upload-time = "2026-04-21T17:08:34.181Z" },
- { url = "https://files.pythonhosted.org/packages/19/65/0cd9285ab010ee8214c83d67c6b49417c40d86ce46f1aa109457b5a9b8d7/mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc", size = 14706163, upload-time = "2026-04-21T17:05:15.51Z" },
- { url = "https://files.pythonhosted.org/packages/94/97/48ff3b297cafcc94d185243a9190836fb1b01c1b0918fff64e941e973cc9/mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558", size = 14938677, upload-time = "2026-04-21T17:05:39.562Z" },
- { url = "https://files.pythonhosted.org/packages/fd/a1/1b4233d255bdd0b38a1f284feeb1c143ca508c19184964e22f8d837ec851/mypy-1.20.2-cp314-cp314-win_amd64.whl", hash = "sha256:913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8", size = 11089322, upload-time = "2026-04-21T17:06:44.29Z" },
- { url = "https://files.pythonhosted.org/packages/78/c2/ce7ee2ba36aeb954ba50f18fa25d9c1188578654b97d02a66a15b6f09531/mypy-1.20.2-cp314-cp314-win_arm64.whl", hash = "sha256:c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3", size = 10017775, upload-time = "2026-04-21T17:07:20.732Z" },
- { url = "https://files.pythonhosted.org/packages/4e/a1/9d93a7d0b5859af0ead82b4888b46df6c8797e1bc5e1e262a08518c6d48e/mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609", size = 15549002, upload-time = "2026-04-21T17:08:23.107Z" },
- { url = "https://files.pythonhosted.org/packages/00/d2/09a6a10ee1bf0008f6c144d9676f2ca6a12512151b4e0ad0ff6c4fac5337/mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2", size = 14401942, upload-time = "2026-04-21T17:07:31.837Z" },
- { url = "https://files.pythonhosted.org/packages/57/da/9594b75c3c019e805250bed3583bdf4443ff9e6ef08f97e39ae308cb06f2/mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c", size = 15041649, upload-time = "2026-04-21T17:09:34.653Z" },
- { url = "https://files.pythonhosted.org/packages/97/77/f75a65c278e6e8eba2071f7f5a90481891053ecc39878cc444634d892abe/mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744", size = 15864588, upload-time = "2026-04-21T17:11:44.936Z" },
- { url = "https://files.pythonhosted.org/packages/d7/46/1a4e1c66e96c1a3246ddf5403d122ac9b0a8d2b7e65730b9d6533ba7a6d3/mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6", size = 16093956, upload-time = "2026-04-21T17:10:17.683Z" },
- { url = "https://files.pythonhosted.org/packages/5a/2c/78a8851264dec38cd736ca5b8bc9380674df0dd0be7792f538916157716c/mypy-1.20.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec", size = 12568661, upload-time = "2026-04-21T17:11:54.473Z" },
- { url = "https://files.pythonhosted.org/packages/83/01/cd7318aa03493322ce275a0e14f4f52b8896335e4e79d4fb8153a7ad2b77/mypy-1.20.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382", size = 10389240, upload-time = "2026-04-21T17:09:42.719Z" },
- { url = "https://files.pythonhosted.org/packages/28/9a/f23c163e25b11074188251b0b5a0342625fc1cdb6af604757174fa9acc9b/mypy-1.20.2-py3-none-any.whl", hash = "sha256:a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563", size = 2637314, upload-time = "2026-04-21T17:05:54.5Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/82/15/cca9d88503549ed6fedeaa1d448cdddd542ee8a490232d732e278036fbf2/mypy-2.1.0.tar.gz", hash = "sha256:81e76ad12c2d804512e9b13240d1588316531bfba07558286078bfbce9613633", size = 3898359, upload-time = "2026-05-11T18:37:36.237Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0a/a1/639f3024794a2a15899cb90707fe02e044c4412794c39c5769fd3df2e2ef/mypy-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a683016b16fe2f572dc04c72be7ee0504ac1605a265d0200f5cea695fb788f41", size = 14691685, upload-time = "2026-05-11T18:33:27.973Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/08/9a585dea4325f20d8b80dc78623fa50d1fd2173b710f6237afd6ba6ab39b/mypy-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a293c534adb55271fef24a26da04b855540a8c13cc07bc5917b9fd2c394f2ca", size = 13555165, upload-time = "2026-05-11T18:32:16.107Z" },
+ { url = "https://files.pythonhosted.org/packages/81/dc/7c42cc9c6cb01e8eb09961f1f738741d3e9c7e9d5c5b30ec69222625cd5f/mypy-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7406f4d048e71e576f5356d317e5b0a9e666dfd966bd99f9d14ca06e1a341538", size = 13994376, upload-time = "2026-05-11T18:32:39.256Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/fa/285946c33bce716e082c11dfeee9ee196eaf1f5042efb3581a31f9f205e4/mypy-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e0210d626fc8b31ccc90233754c7bc90e1f43205e85d96387f7db1285b55c398", size = 14864618, upload-time = "2026-05-11T18:34:49.765Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/83/82397f48af6c27e295d57979ded8490c9829040152cf7571b2f026aeb9a0/mypy-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3712c20deed54e814eaaa825603bada8ea1c390670a397c95b98405347acc563", size = 15102063, upload-time = "2026-05-11T18:34:05.855Z" },
+ { url = "https://files.pythonhosted.org/packages/40/68/b02dec39057b88eb03dc0aa854732e26e8361f34f9d0e20c7614967d1eba/mypy-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fcaa0e479066e31f7cceb6a3bea39cb22b2ff51a6b2f24f193d19179ba17c389", size = 11060564, upload-time = "2026-05-11T18:35:36.494Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/a8/ea3dcbef31f99b634f2ee23bb0321cbc8c1b388b76a861eb849f13c347dc/mypy-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:0b1a5260c95aa443083f9ed3592662941951bca3d4ca224a5dc517c38b7cf666", size = 9966983, upload-time = "2026-05-11T18:37:14.139Z" },
+ { url = "https://files.pythonhosted.org/packages/95/b1/55861beb5c339b44f9a2ba92df9e2cb1eeb4ae1eee674cdf7772c797778b/mypy-2.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:244358bf1c0da7722230bce60683d52e8e9fd030554926f15b747a84efb5b3af", size = 14874381, upload-time = "2026-05-11T18:37:31.784Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/b3/b7f770114b7d0ac92d0f76e8d93c2780844a70488a90e91821927850da86/mypy-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ec7c57657493c7a75534df2751c8ae2cda383c16ecc55d2106c54476b1b16f6", size = 13665501, upload-time = "2026-05-11T18:34:23.063Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/f3/8ae2037967e2126689a0c11d99e2b707134a565191e92c60ca2572aec60a/mypy-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8161b6ff4392410023224f0969d17db93e1e154bc3e4ba62598e720723ae211", size = 14045750, upload-time = "2026-05-11T18:31:48.151Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/32/615eb5911859e43d054941b0d0a7d06cfa2870eba86529cf385b052b111c/mypy-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf03e12003084a67395184d3eb8cbd6a489dc3655b5664b28c210a9e2403ab0b", size = 15061630, upload-time = "2026-05-11T18:37:06.898Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/03/4eafbfff8bfab1b87082741eae6e6a624028c984e6708b73bce2a8570c9d/mypy-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:20509760fd791c51579d573153407d226385ec1f8bcce55d730b354f3336bc22", size = 15288831, upload-time = "2026-05-11T18:31:18.07Z" },
+ { url = "https://files.pythonhosted.org/packages/99/ee/919661478e5891a3c96e549c036e467e64563ab85995b10c53c8358e16a3/mypy-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:6753d0c1fdd6b1a23b9e4f283ce80b2153b724adcb2653b20b85a8a28ac6436b", size = 11135228, upload-time = "2026-05-11T18:34:31.23Z" },
+ { url = "https://files.pythonhosted.org/packages/24/0a/6a12b9782ca0831a553192f351679f4548abc9d19a7cc93bb7feb02084c7/mypy-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:98ebb6589bb3b6d0c6f0c459d53ca55b8091fbc13d277c4041c885392e8195e8", size = 10040684, upload-time = "2026-05-11T18:36:48.199Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/dd/c7191469c777f07689c032a8f7326e393ea34c92d6d76eb7ce5ba57ea66d/mypy-2.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35aac3bb114e03888f535d5eb51b8bafbb3266586b599da1940f9b1be3ec5bd5", size = 14852174, upload-time = "2026-05-11T18:31:38.929Z" },
+ { url = "https://files.pythonhosted.org/packages/55/8c/aed55408879043d72bb9135f4d0d19a02b886dd569631e113e3d2706cb8d/mypy-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8de55a8c861f2a49331f807be98d90caeceeef520bde13d43a160207f8af613e", size = 13651542, upload-time = "2026-05-11T18:36:04.636Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/8e/f371a824b1f1fa8ea6e3dbb8703d232977d572be2329554a3bc4d960302f/mypy-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fdf2941a07434af755837d9880f7d7d25f1dacb1af9dcd4b9b66f2220a3024e", size = 14033929, upload-time = "2026-05-11T18:35:55.742Z" },
+ { url = "https://files.pythonhosted.org/packages/94/21/f54be870d6dd53a82c674407e0f8eed7174b05ec78d42e5abd7b42e84fd5/mypy-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e195b817c13f02352a9c124301f9f30f078405444679b6753c1b96b6eed37285", size = 15039200, upload-time = "2026-05-11T18:33:10.281Z" },
+ { url = "https://files.pythonhosted.org/packages/17/99/bf21748626a40ce59fd29a39386ab46afec88b7bd2f0fa6c3a97c995523f/mypy-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5431d42af987ebd92ba2f71d45c85ed41d8e6ca9f5fd209a69f68f707d2469e5", size = 15272690, upload-time = "2026-05-11T18:32:07.205Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/d7/9e90d2cf47100bea550ed2bc7b0d4de3a62181d84d5e37da0003e8462637/mypy-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:767fe8c66dc3e01e19e1737d4c38ebefead16125e1b8e58ad421903b376f5c65", size = 11147435, upload-time = "2026-05-11T18:33:56.477Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/46/e5c449e858798e35ffc90946282a27c62a77be743fe17480e4977374eb91/mypy-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:ecfe70d43775ab99562ab128ce49854a362044c9f894961f68f898c23cb7429d", size = 10035052, upload-time = "2026-05-11T18:32:30.049Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/ca/b279a672e874aedd5498ae25f722dacc8aa86bbffb939b3f97cbb1cf6686/mypy-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7354c5a7f69d9345c3d6e69921d57088eea3ddeeb6b20d34c1b3855b02c36ec2", size = 14848422, upload-time = "2026-05-11T18:35:45.984Z" },
+ { url = "https://files.pythonhosted.org/packages/27/e6/3efe56c631d959b9b4454e208b0ac4b7f4f58b404c89f8bec7b49efdfc21/mypy-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:49890d4f76ac9e06ec117f9e09f3174da70a620a0c300953d8595c926e80947f", size = 13677374, upload-time = "2026-05-11T18:36:57.188Z" },
+ { url = "https://files.pythonhosted.org/packages/84/7f/8107ea87a44fd1f1b59882442f033c9c3488c127201b1d1d15f1cbd6022e/mypy-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:761be68e023ef5d94678772396a8af1220030f80837a3afd8d0aef3b419666f4", size = 14055743, upload-time = "2026-05-11T18:35:18.361Z" },
+ { url = "https://files.pythonhosted.org/packages/51/4d/b6d34db183133b83761b9199a82d31557cdbb70a380d8c3b3438e11882a3/mypy-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c90345fc182dc363b891350457ec69c35140858538f38b4540845afcc32b1aef", size = 15020937, upload-time = "2026-05-11T18:34:59.618Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/d7/f08360c691d758acb02f45022c34d98b92892f4ea756644e1000d4b9f3d8/mypy-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b84802e7b5a6daf1f5e15bc9fcd7ddae77be13981ffab037f1c67bb84d67d135", size = 15253371, upload-time = "2026-05-11T18:36:41.081Z" },
+ { url = "https://files.pythonhosted.org/packages/67/1b/09460a13719530a19bce27bd3bc8449e83569dd2ba7faf51c9c3c30c0b61/mypy-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:022c771234936ceac541ebaf836fe9e2abeb3f5e09aff21588fe543ff006fe21", size = 11326429, upload-time = "2026-05-11T18:34:13.526Z" },
+ { url = "https://files.pythonhosted.org/packages/40/62/75dbf0f82f7b6680340efc614af29dd0b3c17b8a4f1cd09b8bd2fd6bc814/mypy-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:498207db725cec88829a6a5c2fc771205fd043719ef98bc49aba8fb9fc4e6d57", size = 10218799, upload-time = "2026-05-11T18:32:23.491Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/66/caca04ed7d972fb6eb6dd1ccd6df1de5c38fae8c5b3dc1c4e8e0d85ee6b9/mypy-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d5e5cad0efeba72b93cd17490cc0d69c5ac9ca132994fe3fb0314808aeeb83e", size = 15923458, upload-time = "2026-05-11T18:35:28.64Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/52/2d90cbe49d014b13ed7ff337930c30bad35893fe38a1e4641e756bb62191/mypy-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ff715050c127d724fd260a2e666e7747fdd83511c0c47d449d98238970aef780", size = 14757697, upload-time = "2026-05-11T18:36:14.208Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/37/d98f4a14e081b238992d0ed96b6d39c7cc0148c9699eb71eaa68629665ea/mypy-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82208da9e09414d520e912d3e462d454854bed0810b71540bb016dcbca7308fd", size = 15405638, upload-time = "2026-05-11T18:33:48.249Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/c2/15c46613b24a84fad2aea1248bf9619b99c2767ae9071fe224c179a0b7d4/mypy-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e79ebc1b904b84f0310dff7469655a9c36c7a68bddb37bdd42b67a332df61d08", size = 16215852, upload-time = "2026-05-11T18:32:50.296Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/90/9c16a57f482c76d25f6379762b56bbf65c711d8158cf271fb2802cfb0640/mypy-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e583edc957cfb0deb142079162ae826f58449b116c1d442f2d91c69d9fced081", size = 16452695, upload-time = "2026-05-11T18:33:38.182Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/4c/215a4eeb63cacc5f17f516691ea7285d11e249802b942476bff15922a314/mypy-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b33b6cd332695bba180d55e717a79d3038e479a2c49cc5eb3d53603409b9a5d7", size = 12866622, upload-time = "2026-05-11T18:34:39.945Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/50/1043e1db5f455ffe4c9ab22747cd8ca2bc492b1e4f4e21b130a44ee2b217/mypy-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:4f910fe825376a7b66ef7ca8c98e5a149e8cd64c19ae71d84047a74ee060d4e6", size = 10610798, upload-time = "2026-05-11T18:36:31.444Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/2a/13ca1f292f6db1b98ff495ef3467736b331621c5917cad984b7043e7348d/mypy-2.1.0-py3-none-any.whl", hash = "sha256:a663814603a5c563fb87a4f96fb473eeb30d1f5a4885afcf44f9db000a366289", size = 2693302, upload-time = "2026-05-11T18:31:29.246Z" },
]
[[package]]
@@ -2181,11 +2210,11 @@ wheels = [
[[package]]
name = "narwhals"
-version = "2.20.0"
+version = "2.21.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/e9/f3/257adc69a71011b4c8cda321b00f02c5bf1980ae38ffd05a58d9632d4de8/narwhals-2.20.0.tar.gz", hash = "sha256:c10994975fa7dc5a68c2cffcddbd5908fc8ebb2d463c5bab085309c0ee1f551e", size = 627848, upload-time = "2026-04-20T12:11:45.427Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/cf/a0/6198c56d42ef2f3c6ed0c42ba30dbcefdc86a91262d7d449010770ae085b/narwhals-2.21.2.tar.gz", hash = "sha256:5c5b2d0b47aef7c73ea412cfcbcd467f2f2d5be73e3c2ab19d78f4a97718790a", size = 632176, upload-time = "2026-05-16T08:49:08.314Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d0/69/f24d3d1c38ad69e256138b4ec2452a8c7cf66be49dc214771ae99dd4f0a0/narwhals-2.20.0-py3-none-any.whl", hash = "sha256:16e750ea5507d4ba6e8d03455b5f93a535e0405976561baea235bca5dc9f475d", size = 449373, upload-time = "2026-04-20T12:11:43.596Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/77/928ea2e70641ca177a11140062cc5840d421795f2e82749d408d0cce900a/narwhals-2.21.2-py3-none-any.whl", hash = "sha256:7bb57c3700486039215455b9bf2d64261915cc0fd845cc30272d631df696b251", size = 451201, upload-time = "2026-05-16T08:49:05.536Z" },
]
[[package]]
@@ -2199,81 +2228,81 @@ wheels = [
[[package]]
name = "numpy"
-version = "2.4.4"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587, upload-time = "2026-03-29T13:22:01.298Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/ef/c6/4218570d8c8ecc9704b5157a3348e486e84ef4be0ed3e38218ab473c83d2/numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db", size = 16976799, upload-time = "2026-03-29T13:18:15.438Z" },
- { url = "https://files.pythonhosted.org/packages/dd/92/b4d922c4a5f5dab9ed44e6153908a5c665b71acf183a83b93b690996e39b/numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0", size = 14971552, upload-time = "2026-03-29T13:18:18.606Z" },
- { url = "https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015", size = 5476566, upload-time = "2026-03-29T13:18:21.532Z" },
- { url = "https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40", size = 6806482, upload-time = "2026-03-29T13:18:23.634Z" },
- { url = "https://files.pythonhosted.org/packages/68/62/63417c13aa35d57bee1337c67446761dc25ea6543130cf868eace6e8157b/numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d", size = 15973376, upload-time = "2026-03-29T13:18:26.677Z" },
- { url = "https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502", size = 16925137, upload-time = "2026-03-29T13:18:30.14Z" },
- { url = "https://files.pythonhosted.org/packages/7e/43/80020edacb3f84b9efdd1591120a4296462c23fd8db0dde1666f6ef66f13/numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd", size = 17329414, upload-time = "2026-03-29T13:18:33.733Z" },
- { url = "https://files.pythonhosted.org/packages/fd/06/af0658593b18a5f73532d377188b964f239eb0894e664a6c12f484472f97/numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5", size = 18658397, upload-time = "2026-03-29T13:18:37.511Z" },
- { url = "https://files.pythonhosted.org/packages/e6/ce/13a09ed65f5d0ce5c7dd0669250374c6e379910f97af2c08c57b0608eee4/numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e", size = 6239499, upload-time = "2026-03-29T13:18:40.372Z" },
- { url = "https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e", size = 12614257, upload-time = "2026-03-29T13:18:42.95Z" },
- { url = "https://files.pythonhosted.org/packages/87/c5/8168052f080c26fa984c413305012be54741c9d0d74abd7fbeeccae3889f/numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e", size = 10486775, upload-time = "2026-03-29T13:18:45.835Z" },
- { url = "https://files.pythonhosted.org/packages/28/05/32396bec30fb2263770ee910142f49c1476d08e8ad41abf8403806b520ce/numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b", size = 16689272, upload-time = "2026-03-29T13:18:49.223Z" },
- { url = "https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e", size = 14699573, upload-time = "2026-03-29T13:18:52.629Z" },
- { url = "https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842", size = 5204782, upload-time = "2026-03-29T13:18:55.579Z" },
- { url = "https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8", size = 6552038, upload-time = "2026-03-29T13:18:57.769Z" },
- { url = "https://files.pythonhosted.org/packages/7f/37/eed308a8f56cba4d1fdf467a4fc67ef4ff4bf1c888f5fc980481890104b1/numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121", size = 15670666, upload-time = "2026-03-29T13:19:00.341Z" },
- { url = "https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e", size = 16645480, upload-time = "2026-03-29T13:19:03.63Z" },
- { url = "https://files.pythonhosted.org/packages/34/49/f2312c154b82a286758ee2f1743336d50651f8b5195db18cdb63675ff649/numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44", size = 17020036, upload-time = "2026-03-29T13:19:07.428Z" },
- { url = "https://files.pythonhosted.org/packages/7b/e9/736d17bd77f1b0ec4f9901aaec129c00d59f5d84d5e79bba540ef12c2330/numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d", size = 18368643, upload-time = "2026-03-29T13:19:10.775Z" },
- { url = "https://files.pythonhosted.org/packages/63/f6/d417977c5f519b17c8a5c3bc9e8304b0908b0e21136fe43bf628a1343914/numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827", size = 5961117, upload-time = "2026-03-29T13:19:13.464Z" },
- { url = "https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a", size = 12320584, upload-time = "2026-03-29T13:19:16.155Z" },
- { url = "https://files.pythonhosted.org/packages/58/89/e4e856ac82a68c3ed64486a544977d0e7bdd18b8da75b78a577ca31c4395/numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec", size = 10221450, upload-time = "2026-03-29T13:19:18.994Z" },
- { url = "https://files.pythonhosted.org/packages/14/1d/d0a583ce4fefcc3308806a749a536c201ed6b5ad6e1322e227ee4848979d/numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50", size = 16684933, upload-time = "2026-03-29T13:19:22.47Z" },
- { url = "https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115", size = 14694532, upload-time = "2026-03-29T13:19:25.581Z" },
- { url = "https://files.pythonhosted.org/packages/e5/87/499737bfba066b4a3bebff24a8f1c5b2dee410b209bc6668c9be692580f0/numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af", size = 5199661, upload-time = "2026-03-29T13:19:28.31Z" },
- { url = "https://files.pythonhosted.org/packages/cd/da/464d551604320d1491bc345efed99b4b7034143a85787aab78d5691d5a0e/numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c", size = 6547539, upload-time = "2026-03-29T13:19:30.97Z" },
- { url = "https://files.pythonhosted.org/packages/7d/90/8d23e3b0dafd024bf31bdec225b3bb5c2dbfa6912f8a53b8659f21216cbf/numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103", size = 15668806, upload-time = "2026-03-29T13:19:33.887Z" },
- { url = "https://files.pythonhosted.org/packages/d1/73/a9d864e42a01896bb5974475438f16086be9ba1f0d19d0bb7a07427c4a8b/numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83", size = 16632682, upload-time = "2026-03-29T13:19:37.336Z" },
- { url = "https://files.pythonhosted.org/packages/34/fb/14570d65c3bde4e202a031210475ae9cde9b7686a2e7dc97ee67d2833b35/numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed", size = 17019810, upload-time = "2026-03-29T13:19:40.963Z" },
- { url = "https://files.pythonhosted.org/packages/8a/77/2ba9d87081fd41f6d640c83f26fb7351e536b7ce6dd9061b6af5904e8e46/numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959", size = 18357394, upload-time = "2026-03-29T13:19:44.859Z" },
- { url = "https://files.pythonhosted.org/packages/a2/23/52666c9a41708b0853fa3b1a12c90da38c507a3074883823126d4e9d5b30/numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed", size = 5959556, upload-time = "2026-03-29T13:19:47.661Z" },
- { url = "https://files.pythonhosted.org/packages/57/fb/48649b4971cde70d817cf97a2a2fdc0b4d8308569f1dd2f2611959d2e0cf/numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf", size = 12317311, upload-time = "2026-03-29T13:19:50.67Z" },
- { url = "https://files.pythonhosted.org/packages/ba/d8/11490cddd564eb4de97b4579ef6bfe6a736cc07e94c1598590ae25415e01/numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d", size = 10222060, upload-time = "2026-03-29T13:19:54.229Z" },
- { url = "https://files.pythonhosted.org/packages/99/5d/dab4339177a905aad3e2221c915b35202f1ec30d750dd2e5e9d9a72b804b/numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5", size = 14822302, upload-time = "2026-03-29T13:19:57.585Z" },
- { url = "https://files.pythonhosted.org/packages/eb/e4/0564a65e7d3d97562ed6f9b0fd0fb0a6f559ee444092f105938b50043876/numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7", size = 5327407, upload-time = "2026-03-29T13:20:00.601Z" },
- { url = "https://files.pythonhosted.org/packages/29/8d/35a3a6ce5ad371afa58b4700f1c820f8f279948cca32524e0a695b0ded83/numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93", size = 6647631, upload-time = "2026-03-29T13:20:02.855Z" },
- { url = "https://files.pythonhosted.org/packages/f4/da/477731acbd5a58a946c736edfdabb2ac5b34c3d08d1ba1a7b437fa0884df/numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e", size = 15727691, upload-time = "2026-03-29T13:20:06.004Z" },
- { url = "https://files.pythonhosted.org/packages/e6/db/338535d9b152beabeb511579598418ba0212ce77cf9718edd70262cc4370/numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40", size = 16681241, upload-time = "2026-03-29T13:20:09.417Z" },
- { url = "https://files.pythonhosted.org/packages/e2/a9/ad248e8f58beb7a0219b413c9c7d8151c5d285f7f946c3e26695bdbbe2df/numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e", size = 17085767, upload-time = "2026-03-29T13:20:13.126Z" },
- { url = "https://files.pythonhosted.org/packages/b5/1a/3b88ccd3694681356f70da841630e4725a7264d6a885c8d442a697e1146b/numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392", size = 18403169, upload-time = "2026-03-29T13:20:17.096Z" },
- { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477, upload-time = "2026-03-29T13:20:20.195Z" },
- { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487, upload-time = "2026-03-29T13:20:22.946Z" },
- { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002, upload-time = "2026-03-29T13:20:25.909Z" },
- { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353, upload-time = "2026-03-29T13:20:29.504Z" },
- { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914, upload-time = "2026-03-29T13:20:33.547Z" },
- { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005, upload-time = "2026-03-29T13:20:36.45Z" },
- { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974, upload-time = "2026-03-29T13:20:39.014Z" },
- { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591, upload-time = "2026-03-29T13:20:42.146Z" },
- { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700, upload-time = "2026-03-29T13:20:46.204Z" },
- { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781, upload-time = "2026-03-29T13:20:50.242Z" },
- { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959, upload-time = "2026-03-29T13:20:54.019Z" },
- { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768, upload-time = "2026-03-29T13:20:56.912Z" },
- { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181, upload-time = "2026-03-29T13:20:59.548Z" },
- { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035, upload-time = "2026-03-29T13:21:02.524Z" },
- { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958, upload-time = "2026-03-29T13:21:05.671Z" },
- { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020, upload-time = "2026-03-29T13:21:08.635Z" },
- { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758, upload-time = "2026-03-29T13:21:10.949Z" },
- { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948, upload-time = "2026-03-29T13:21:14.047Z" },
- { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325, upload-time = "2026-03-29T13:21:17.561Z" },
- { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883, upload-time = "2026-03-29T13:21:21.106Z" },
- { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474, upload-time = "2026-03-29T13:21:24.828Z" },
- { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500, upload-time = "2026-03-29T13:21:28.205Z" },
- { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755, upload-time = "2026-03-29T13:21:31.107Z" },
- { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643, upload-time = "2026-03-29T13:21:34.339Z" },
- { url = "https://files.pythonhosted.org/packages/6b/33/8fae8f964a4f63ed528264ddf25d2b683d0b663e3cba26961eb838a7c1bd/numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4", size = 16854491, upload-time = "2026-03-29T13:21:38.03Z" },
- { url = "https://files.pythonhosted.org/packages/bc/d0/1aabee441380b981cf8cdda3ae7a46aa827d1b5a8cce84d14598bc94d6d9/numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e", size = 14895830, upload-time = "2026-03-29T13:21:41.509Z" },
- { url = "https://files.pythonhosted.org/packages/a5/b8/aafb0d1065416894fccf4df6b49ef22b8db045187949545bced89c034b8e/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c", size = 5400927, upload-time = "2026-03-29T13:21:44.747Z" },
- { url = "https://files.pythonhosted.org/packages/d6/77/063baa20b08b431038c7f9ff5435540c7b7265c78cf56012a483019ca72d/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3", size = 6715557, upload-time = "2026-03-29T13:21:47.406Z" },
- { url = "https://files.pythonhosted.org/packages/c7/a8/379542d45a14f149444c5c4c4e7714707239ce9cc1de8c2803958889da14/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7", size = 15804253, upload-time = "2026-03-29T13:21:50.753Z" },
- { url = "https://files.pythonhosted.org/packages/a2/c8/f0a45426d6d21e7ea3310a15cf90c43a14d9232c31a837702dba437f3373/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f", size = 16753552, upload-time = "2026-03-29T13:21:54.344Z" },
- { url = "https://files.pythonhosted.org/packages/04/74/f4c001f4714c3ad9ce037e18cf2b9c64871a84951eaa0baf683a9ca9301c/numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119", size = 12509075, upload-time = "2026-03-29T13:21:57.644Z" },
+version = "2.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" },
+ { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" },
+ { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" },
+ { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" },
+ { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" },
+ { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" },
+ { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" },
+ { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" },
+ { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" },
+ { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" },
+ { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" },
+ { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" },
+ { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" },
+ { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" },
+ { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" },
+ { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" },
+ { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" },
+ { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" },
+ { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" },
+ { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" },
+ { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" },
+ { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" },
+ { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" },
+ { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" },
+ { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" },
+ { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" },
+ { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" },
+ { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" },
+ { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" },
+ { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" },
+ { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" },
]
[[package]]
@@ -2321,7 +2350,7 @@ name = "nvidia-cudnn-cu12"
version = "9.10.2.21"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "nvidia-cublas-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "nvidia-cublas-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/fa/41/e79269ce215c857c935fd86bcfe91a451a584dfc27f1e068f568b9ad1ab7/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8", size = 705026878, upload-time = "2025-06-06T21:52:51.348Z" },
@@ -2333,7 +2362,7 @@ name = "nvidia-cufft-cu12"
version = "11.3.0.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "nvidia-nvjitlink-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/1f/37/c50d2b2f2c07e146776389e3080f4faf70bcc4fa6e19d65bb54ca174ebc3/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d16079550df460376455cba121db6564089176d9bac9e4f360493ca4741b22a6", size = 200164144, upload-time = "2024-11-20T17:40:58.288Z" },
@@ -2367,9 +2396,9 @@ name = "nvidia-cusolver-cu12"
version = "11.7.1.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "nvidia-cublas-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
- { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
- { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "nvidia-cublas-cu12" },
+ { name = "nvidia-cusparse-cu12" },
+ { name = "nvidia-nvjitlink-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/93/17/dbe1aa865e4fdc7b6d4d0dd308fdd5aaab60f939abfc0ea1954eac4fb113/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0ce237ef60acde1efc457335a2ddadfd7610b892d94efee7b776c64bb1cac9e0", size = 157833628, upload-time = "2024-10-01T17:05:05.591Z" },
@@ -2383,7 +2412,7 @@ name = "nvidia-cusparse-cu12"
version = "12.5.4.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "nvidia-nvjitlink-cu12" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/eb/eb/6681efd0aa7df96b4f8067b3ce7246833dd36830bb4cec8896182773db7d/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d25b62fb18751758fe3c93a4a08eff08effedfe4edf1c6bb5afd0890fe88f887", size = 216451147, upload-time = "2024-11-20T17:44:18.055Z" },
@@ -2403,11 +2432,11 @@ wheels = [
[[package]]
name = "nvidia-nccl-cu12"
-version = "2.28.9"
+version = "2.29.3"
source = { registry = "https://pypi.org/simple" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/08/c4/120d2dfd92dff2c776d68f361ff8705fdea2ca64e20b612fab0fd3f581ac/nvidia_nccl_cu12-2.28.9-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:50a36e01c4a090b9f9c47d92cec54964de6b9fcb3362d0e19b8ffc6323c21b60", size = 296766525, upload-time = "2025-11-18T05:49:16.094Z" },
- { url = "https://files.pythonhosted.org/packages/4a/4e/44dbb46b3d1b0ec61afda8e84837870f2f9ace33c564317d59b70bc19d3e/nvidia_nccl_cu12-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:485776daa8447da5da39681af455aa3b2c2586ddcf4af8772495e7c532c7e5ab", size = 296782137, upload-time = "2025-11-18T05:49:34.248Z" },
+ { url = "https://files.pythonhosted.org/packages/28/cf/bcf8bb0c0030b1b9a345331f6281c37d2a8669758521eb93c382f6f87c8f/nvidia_nccl_cu12-2.29.3-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:6351b79dc7d2cc3d654ea1523616b9eeded71fe9c8da66b71eef9a5d1b2adad4", size = 289708535, upload-time = "2026-02-03T21:10:58.804Z" },
+ { url = "https://files.pythonhosted.org/packages/31/5a/cac7d231f322b66caa16fd4b136ebc8e4b18b2805811c2d58dc47210cdea/nvidia_nccl_cu12-2.29.3-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:35ad42e7d5d722a83c36a3a478e281c20a5646383deaf1b9ed1a9ab7d61bed53", size = 289760316, upload-time = "2026-02-03T21:11:37.899Z" },
]
[[package]]
@@ -2441,7 +2470,7 @@ wheels = [
[[package]]
name = "openai"
-version = "2.34.0"
+version = "2.37.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -2453,90 +2482,89 @@ dependencies = [
{ name = "tqdm" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/7b/89/f1e78f5f828f4e97a6ebca8f45c6b35667da12b074ac490dc8362b882279/openai-2.34.0.tar.gz", hash = "sha256:828b4efcbb126352c2b5eb97d33ae890c92a71ab72511aefc1b7fe64aeccb07b", size = 759556, upload-time = "2026-05-04T17:34:08.721Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/32/50/5901f01ef14e6c27788beb91e54fef5d6204fb5fb9e97402fc8a14de2e32/openai-2.37.0.tar.gz", hash = "sha256:f4bc562cc5f3a43d40d678105572d9d44765f6e0f50c125f63055419b72f4bd9", size = 754706, upload-time = "2026-05-15T22:30:35.428Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f2/40/f090499f10514515081d09cb9da09f25b821eb20497e9423afe4f07b4ecf/openai-2.34.0-py3-none-any.whl", hash = "sha256:c996a71b1a210f3569844572ad4c609307e978515fb76877cf449b72596e549e", size = 1316535, upload-time = "2026-05-04T17:34:06.773Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/4c/bce61680d0699a78a405fd9a67989b175ba020590428831aab2ab1d2be7c/openai-2.37.0-py3-none-any.whl", hash = "sha256:814633888b8f3b1ffd6615697c6e4ef93632d08b7c2e28c8c5ef3556e5a10107", size = 1303238, upload-time = "2026-05-15T22:30:32.767Z" },
]
[[package]]
name = "opentelemetry-api"
-version = "1.41.1"
+version = "1.42.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "importlib-metadata" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/fa/fc/b7564cbef36601aef0d6c9bc01f7badb64be8e862c2e1c3c5c3b43b53e4f/opentelemetry_api-1.41.1.tar.gz", hash = "sha256:0ad1814d73b875f84494387dae86ce0b12c68556331ce6ce8fe789197c949621", size = 71416, upload-time = "2026-04-24T13:15:38.262Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/86/ca/25288069c399be6769159d9fb7b1190b603537d82aad2fa2746a0cc2c8c6/opentelemetry_api-1.42.0.tar.gz", hash = "sha256:ea84c893ad177791d138e0349d6ceebd8d3bf006440900400ce220008dafc372", size = 72300, upload-time = "2026-05-19T09:46:29.885Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/29/59/3e7118ed140f76b0982ba4321bdaed1997a0473f9720de2d10788a577033/opentelemetry_api-1.41.1-py3-none-any.whl", hash = "sha256:a22df900e75c76dc08440710e51f52f1aa6b451b429298896023e60db5b3139f", size = 69007, upload-time = "2026-04-24T13:15:15.662Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/0b/be5daf659b82b525338fde371dfcfab09b606a19bb5620c37076964710ec/opentelemetry_api-1.42.0-py3-none-any.whl", hash = "sha256:558d88f88192a973579910ef6f2c13db47a268d5ec2e53e83e50e74a39a02922", size = 61310, upload-time = "2026-05-19T09:46:06.561Z" },
]
[[package]]
name = "orjson"
-version = "3.11.8"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9d/1b/2024d06792d0779f9dbc51531b61c24f76c75b9f4ce05e6f3377a1814cea/orjson-3.11.8.tar.gz", hash = "sha256:96163d9cdc5a202703e9ad1b9ae757d5f0ca62f4fa0cc93d1f27b0e180cc404e", size = 5603832, upload-time = "2026-03-31T16:16:27.878Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/67/41/5aa7fa3b0f4dc6b47dcafc3cea909299c37e40e9972feabc8b6a74e2730d/orjson-3.11.8-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:003646067cc48b7fcab2ae0c562491c9b5d2cbd43f1e5f16d98fd118c5522d34", size = 229229, upload-time = "2026-03-31T16:14:50.424Z" },
- { url = "https://files.pythonhosted.org/packages/0a/d7/57e7f2458e0a2c41694f39fc830030a13053a84f837a5b73423dca1f0938/orjson-3.11.8-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ed193ce51d77a3830cad399a529cd4ef029968761f43ddc549e1bc62b40d88f8", size = 128871, upload-time = "2026-03-31T16:14:51.888Z" },
- { url = "https://files.pythonhosted.org/packages/53/4a/e0fdb9430983e6c46e0299559275025075568aad5d21dd606faee3703924/orjson-3.11.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30491bc4f862aa15744b9738517454f1e46e56c972a2be87d70d727d5b2a8f8", size = 132104, upload-time = "2026-03-31T16:14:53.142Z" },
- { url = "https://files.pythonhosted.org/packages/08/4a/2025a60ff3f5c8522060cda46612d9b1efa653de66ed2908591d8d82f22d/orjson-3.11.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eda5b8b6be91d3f26efb7dc6e5e68ee805bc5617f65a328587b35255f138bf4", size = 130483, upload-time = "2026-03-31T16:14:54.605Z" },
- { url = "https://files.pythonhosted.org/packages/2d/3c/b9cde05bdc7b2385c66014e0620627da638d3d04e4954416ab48c31196c5/orjson-3.11.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee8db7bfb6fe03581bbab54d7c4124a6dd6a7f4273a38f7267197890f094675f", size = 135481, upload-time = "2026-03-31T16:14:55.901Z" },
- { url = "https://files.pythonhosted.org/packages/ff/f2/a8238e7734de7cb589fed319857a8025d509c89dc52fdcc88f39c6d03d5a/orjson-3.11.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8b5231de76c528a46b57010bbd83fb51e056aa0220a372fd5065e978406f1c", size = 146819, upload-time = "2026-03-31T16:14:57.548Z" },
- { url = "https://files.pythonhosted.org/packages/db/10/dbf1e2a3cafea673b1b4350e371877b759060d6018a998643b7040e5de48/orjson-3.11.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58a4a208a6fbfdb7a7327b8f201c6014f189f721fd55d047cafc4157af1bc62a", size = 132846, upload-time = "2026-03-31T16:14:58.91Z" },
- { url = "https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c", size = 133580, upload-time = "2026-03-31T16:15:00.519Z" },
- { url = "https://files.pythonhosted.org/packages/7e/a6/c08c589a9aad0cb46c4831d17de212a2b6901f9d976814321ff8e69e8785/orjson-3.11.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0022bb50f90da04b009ce32c512dc1885910daa7cb10b7b0cba4505b16db82a8", size = 142042, upload-time = "2026-03-31T16:15:01.906Z" },
- { url = "https://files.pythonhosted.org/packages/5c/cc/2f78ea241d52b717d2efc38878615fe80425bf2beb6e68c984dde257a766/orjson-3.11.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ff51f9d657d1afb6f410cb435792ce4e1fe427aab23d2fcd727a2876e21d4cb6", size = 423845, upload-time = "2026-03-31T16:15:03.703Z" },
- { url = "https://files.pythonhosted.org/packages/70/07/c17dcf05dd8045457538428a983bf1f1127928df5bf328cb24d2b7cddacb/orjson-3.11.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6dbe9a97bdb4d8d9d5367b52a7c32549bba70b2739c58ef74a6964a6d05ae054", size = 147729, upload-time = "2026-03-31T16:15:05.203Z" },
- { url = "https://files.pythonhosted.org/packages/90/6c/0fb6e8a24e682e0958d71711ae6f39110e4b9cd8cab1357e2a89cb8e1951/orjson-3.11.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5c370674ebabe16c6ccac33ff80c62bf8a6e59439f5e9d40c1f5ab8fd2215b7", size = 136425, upload-time = "2026-03-31T16:15:07.052Z" },
- { url = "https://files.pythonhosted.org/packages/b2/35/4d3cc3a3d616035beb51b24a09bb872942dc452cf2df0c1d11ab35046d9f/orjson-3.11.8-cp311-cp311-win32.whl", hash = "sha256:0e32f7154299f42ae66f13488963269e5eccb8d588a65bc839ed986919fc9fac", size = 131870, upload-time = "2026-03-31T16:15:08.678Z" },
- { url = "https://files.pythonhosted.org/packages/13/26/9fe70f81d16b702f8c3a775e8731b50ad91d22dacd14c7599b60a0941cd1/orjson-3.11.8-cp311-cp311-win_amd64.whl", hash = "sha256:25e0c672a2e32348d2eb33057b41e754091f2835f87222e4675b796b92264f06", size = 127440, upload-time = "2026-03-31T16:15:09.994Z" },
- { url = "https://files.pythonhosted.org/packages/e8/c6/b038339f4145efd2859c1ca53097a52c0bb9cbdd24f947ebe146da1ad067/orjson-3.11.8-cp311-cp311-win_arm64.whl", hash = "sha256:9185589c1f2a944c17e26c9925dcdbc2df061cc4a145395c57f0c51f9b5dbfcd", size = 127399, upload-time = "2026-03-31T16:15:11.412Z" },
- { url = "https://files.pythonhosted.org/packages/01/f6/8d58b32ab32d9215973a1688aebd098252ee8af1766c0e4e36e7831f0295/orjson-3.11.8-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1cd0b77e77c95758f8e1100139844e99f3ccc87e71e6fc8e1c027e55807c549f", size = 229233, upload-time = "2026-03-31T16:15:12.762Z" },
- { url = "https://files.pythonhosted.org/packages/a9/8b/2ffe35e71f6b92622e8ea4607bf33ecf7dfb51b3619dcfabfd36cbe2d0a5/orjson-3.11.8-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:6a3d159d5ffa0e3961f353c4b036540996bf8b9697ccc38261c0eac1fd3347a6", size = 128772, upload-time = "2026-03-31T16:15:14.237Z" },
- { url = "https://files.pythonhosted.org/packages/27/d2/1f8682ae50d5c6897a563cb96bc106da8c9cb5b7b6e81a52e4cc086679b9/orjson-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76070a76e9c5ae661e2d9848f216980d8d533e0f8143e6ed462807b242e3c5e8", size = 131946, upload-time = "2026-03-31T16:15:15.607Z" },
- { url = "https://files.pythonhosted.org/packages/52/4b/5500f76f0eece84226e0689cb48dcde081104c2fa6e2483d17ca13685ffb/orjson-3.11.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54153d21520a71a4c82a0dbb4523e468941d549d221dc173de0f019678cf3813", size = 130368, upload-time = "2026-03-31T16:15:17.066Z" },
- { url = "https://files.pythonhosted.org/packages/da/4e/58b927e08fbe9840e6c920d9e299b051ea667463b1f39a56e668669f8508/orjson-3.11.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:469ac2125611b7c5741a0b3798cd9e5786cbad6345f9f400c77212be89563bec", size = 135540, upload-time = "2026-03-31T16:15:18.404Z" },
- { url = "https://files.pythonhosted.org/packages/56/7c/ba7cb871cba1bcd5cd02ee34f98d894c6cea96353ad87466e5aef2429c60/orjson-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14778ffd0f6896aa613951a7fbf4690229aa7a543cb2bfbe9f358e08aafa9546", size = 146877, upload-time = "2026-03-31T16:15:19.833Z" },
- { url = "https://files.pythonhosted.org/packages/0b/5d/eb9c25fc1386696c6a342cd361c306452c75e0b55e86ad602dd4827a7fd7/orjson-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea56a955056a6d6c550cf18b3348656a9d9a4f02e2d0c02cabf3c73f1055d506", size = 132837, upload-time = "2026-03-31T16:15:21.282Z" },
- { url = "https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a0f57e59a530d18a142f4d4ba6dfc708dc5fdedce45e98ff06b44930a2a48f", size = 133624, upload-time = "2026-03-31T16:15:22.641Z" },
- { url = "https://files.pythonhosted.org/packages/22/09/90048793db94ee4b2fcec4ac8e5ddb077367637d6650be896b3494b79bb7/orjson-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b48e274f8824567d74e2158199e269597edf00823a1b12b63d48462bbf5123e", size = 141904, upload-time = "2026-03-31T16:15:24.435Z" },
- { url = "https://files.pythonhosted.org/packages/c0/cf/eb284847487821a5d415e54149a6449ba9bfc5872ce63ab7be41b8ec401c/orjson-3.11.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3f262401086a3960586af06c054609365e98407151f5ea24a62893a40d80dbbb", size = 423742, upload-time = "2026-03-31T16:15:26.155Z" },
- { url = "https://files.pythonhosted.org/packages/44/09/e12423d327071c851c13e76936f144a96adacfc037394dec35ac3fc8d1e8/orjson-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e8c6218b614badf8e229b697865df4301afa74b791b6c9ade01d19a9953a942", size = 147806, upload-time = "2026-03-31T16:15:27.909Z" },
- { url = "https://files.pythonhosted.org/packages/b3/6d/37c2589ba864e582ffe7611643314785c6afb1f83c701654ef05daa8fcc7/orjson-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:093d489fa039ddade2db541097dbb484999fcc65fc2b0ff9819141e2ab364f25", size = 136485, upload-time = "2026-03-31T16:15:29.749Z" },
- { url = "https://files.pythonhosted.org/packages/be/c9/135194a02ab76b04ed9a10f68624b7ebd238bbe55548878b11ff15a0f352/orjson-3.11.8-cp312-cp312-win32.whl", hash = "sha256:e0950ed1bcb9893f4293fd5c5a7ee10934fbf82c4101c70be360db23ce24b7d2", size = 131966, upload-time = "2026-03-31T16:15:31.687Z" },
- { url = "https://files.pythonhosted.org/packages/ed/9a/9796f8fbe3cf30ce9cb696748dbb535e5c87be4bf4fe2e9ca498ef1fa8cf/orjson-3.11.8-cp312-cp312-win_amd64.whl", hash = "sha256:3cf17c141617b88ced4536b2135c552490f07799f6ad565948ea07bef0dcb9a6", size = 127441, upload-time = "2026-03-31T16:15:33.333Z" },
- { url = "https://files.pythonhosted.org/packages/cc/47/5aaf54524a7a4a0dd09dd778f3fa65dd2108290615b652e23d944152bc8e/orjson-3.11.8-cp312-cp312-win_arm64.whl", hash = "sha256:48854463b0572cc87dac7d981aa72ed8bf6deedc0511853dc76b8bbd5482d36d", size = 127364, upload-time = "2026-03-31T16:15:34.748Z" },
- { url = "https://files.pythonhosted.org/packages/66/7f/95fba509bb2305fab0073558f1e8c3a2ec4b2afe58ed9fcb7d3b8beafe94/orjson-3.11.8-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3f23426851d98478c8970da5991f84784a76682213cd50eb73a1da56b95239dc", size = 229180, upload-time = "2026-03-31T16:15:36.426Z" },
- { url = "https://files.pythonhosted.org/packages/f6/9d/b237215c743ca073697d759b5503abd2cb8a0d7b9c9e21f524bcf176ab66/orjson-3.11.8-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:ebaed4cef74a045b83e23537b52ef19a367c7e3f536751e355a2a394f8648559", size = 128754, upload-time = "2026-03-31T16:15:38.049Z" },
- { url = "https://files.pythonhosted.org/packages/42/3d/27d65b6d11e63f133781425f132807aef793ed25075fec686fc8e46dd528/orjson-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97c8f5d3b62380b70c36ffacb2a356b7c6becec86099b177f73851ba095ef623", size = 131877, upload-time = "2026-03-31T16:15:39.484Z" },
- { url = "https://files.pythonhosted.org/packages/dd/cc/faee30cd8f00421999e40ef0eba7332e3a625ce91a58200a2f52c7fef235/orjson-3.11.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:436c4922968a619fb7fef1ccd4b8b3a76c13b67d607073914d675026e911a65c", size = 130361, upload-time = "2026-03-31T16:15:41.274Z" },
- { url = "https://files.pythonhosted.org/packages/5c/bb/a6c55896197f97b6d4b4e7c7fd77e7235517c34f5d6ad5aadd43c54c6d7c/orjson-3.11.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ab359aff0436d80bfe8a23b46b5fea69f1e18aaf1760a709b4787f1318b317f", size = 135521, upload-time = "2026-03-31T16:15:42.758Z" },
- { url = "https://files.pythonhosted.org/packages/9c/7c/ca3a3525aa32ff636ebb1778e77e3587b016ab2edb1b618b36ba96f8f2c0/orjson-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f89b6d0b3a8d81e1929d3ab3d92bbc225688bd80a770c49432543928fe09ac55", size = 146862, upload-time = "2026-03-31T16:15:44.341Z" },
- { url = "https://files.pythonhosted.org/packages/3c/0c/18a9d7f18b5edd37344d1fd5be17e94dc652c67826ab749c6e5948a78112/orjson-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29c009e7a2ca9ad0ed1376ce20dd692146a5d9fe4310848904b6b4fee5c5c137", size = 132847, upload-time = "2026-03-31T16:15:46.368Z" },
- { url = "https://files.pythonhosted.org/packages/23/91/7e722f352ad67ca573cee44de2a58fb810d0f4eb4e33276c6a557979fd8a/orjson-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b895b781b3e395c067129d8551655642dfe9437273211d5404e87ac752b53", size = 133637, upload-time = "2026-03-31T16:15:48.123Z" },
- { url = "https://files.pythonhosted.org/packages/af/04/32845ce13ac5bd1046ddb02ac9432ba856cc35f6d74dde95864fe0ad5523/orjson-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:88006eda83858a9fdf73985ce3804e885c2befb2f506c9a3723cdeb5a2880e3e", size = 141906, upload-time = "2026-03-31T16:15:49.626Z" },
- { url = "https://files.pythonhosted.org/packages/02/5e/c551387ddf2d7106d9039369862245c85738b828844d13b99ccb8d61fd06/orjson-3.11.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:55120759e61309af7fcf9e961c6f6af3dde5921cdb3ee863ef63fd9db126cae6", size = 423722, upload-time = "2026-03-31T16:15:51.176Z" },
- { url = "https://files.pythonhosted.org/packages/00/a3/ecfe62434096f8a794d4976728cb59bcfc4a643977f21c2040545d37eb4c/orjson-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:98bdc6cb889d19bed01de46e67574a2eab61f5cc6b768ed50e8ac68e9d6ffab6", size = 147801, upload-time = "2026-03-31T16:15:52.939Z" },
- { url = "https://files.pythonhosted.org/packages/18/6d/0dce10b9f6643fdc59d99333871a38fa5a769d8e2fc34a18e5d2bfdee900/orjson-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:708c95f925a43ab9f34625e45dcdadf09ec8a6e7b664a938f2f8d5650f6c090b", size = 136460, upload-time = "2026-03-31T16:15:54.431Z" },
- { url = "https://files.pythonhosted.org/packages/01/d6/6dde4f31842d87099238f1f07b459d24edc1a774d20687187443ab044191/orjson-3.11.8-cp313-cp313-win32.whl", hash = "sha256:01c4e5a6695dc09098f2e6468a251bc4671c50922d4d745aff1a0a33a0cf5b8d", size = 131956, upload-time = "2026-03-31T16:15:56.081Z" },
- { url = "https://files.pythonhosted.org/packages/c1/f9/4e494a56e013db957fb77186b818b916d4695b8fa2aa612364974160e91b/orjson-3.11.8-cp313-cp313-win_amd64.whl", hash = "sha256:c154a35dd1330707450bb4d4e7dd1f17fa6f42267a40c1e8a1daa5e13719b4b8", size = 127410, upload-time = "2026-03-31T16:15:57.54Z" },
- { url = "https://files.pythonhosted.org/packages/57/7f/803203d00d6edb6e9e7eef421d4e1adbb5ea973e40b3533f3cfd9aeb374e/orjson-3.11.8-cp313-cp313-win_arm64.whl", hash = "sha256:4861bde57f4d253ab041e374f44023460e60e71efaa121f3c5f0ed457c3a701e", size = 127338, upload-time = "2026-03-31T16:15:59.106Z" },
- { url = "https://files.pythonhosted.org/packages/6d/35/b01910c3d6b85dc882442afe5060cbf719c7d1fc85749294beda23d17873/orjson-3.11.8-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ec795530a73c269a55130498842aaa762e4a939f6ce481a7e986eeaa790e9da4", size = 229171, upload-time = "2026-03-31T16:16:00.651Z" },
- { url = "https://files.pythonhosted.org/packages/c2/56/c9ec97bd11240abef39b9e5d99a15462809c45f677420fd148a6c5e6295e/orjson-3.11.8-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:c492a0e011c0f9066e9ceaa896fbc5b068c54d365fea5f3444b697ee01bc8625", size = 128746, upload-time = "2026-03-31T16:16:02.673Z" },
- { url = "https://files.pythonhosted.org/packages/3b/e4/66d4f30a90de45e2f0cbd9623588e8ae71eef7679dbe2ae954ed6d66a41f/orjson-3.11.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:883206d55b1bd5f5679ad5e6ddd3d1a5e3cac5190482927fdb8c78fb699193b5", size = 131867, upload-time = "2026-03-31T16:16:04.342Z" },
- { url = "https://files.pythonhosted.org/packages/19/30/2a645fc9286b928675e43fa2a3a16fb7b6764aa78cc719dc82141e00f30b/orjson-3.11.8-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5774c1fdcc98b2259800b683b19599c133baeb11d60033e2095fd9d4667b82db", size = 124664, upload-time = "2026-03-31T16:16:05.837Z" },
- { url = "https://files.pythonhosted.org/packages/db/44/77b9a86d84a28d52ba3316d77737f6514e17118119ade3f91b639e859029/orjson-3.11.8-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7381c83dd3d4a6347e6635950aa448f54e7b8406a27c7ecb4a37e9f1ae08b", size = 129701, upload-time = "2026-03-31T16:16:07.407Z" },
- { url = "https://files.pythonhosted.org/packages/b3/ea/eff3d9bfe47e9bc6969c9181c58d9f71237f923f9c86a2d2f490cd898c82/orjson-3.11.8-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14439063aebcb92401c11afc68ee4e407258d2752e62d748b6942dad20d2a70d", size = 141202, upload-time = "2026-03-31T16:16:09.48Z" },
- { url = "https://files.pythonhosted.org/packages/52/c8/90d4b4c60c84d62068d0cf9e4d8f0a4e05e76971d133ac0c60d818d4db20/orjson-3.11.8-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa72e71977bff96567b0f500fc5bfd2fdf915f34052c782a4c6ebbdaa97aa858", size = 127194, upload-time = "2026-03-31T16:16:11.02Z" },
- { url = "https://files.pythonhosted.org/packages/8d/c7/ea9e08d1f0ba981adffb629811148b44774d935171e7b3d780ae43c4c254/orjson-3.11.8-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7679bc2f01bb0d219758f1a5f87bb7c8a81c0a186824a393b366876b4948e14f", size = 133639, upload-time = "2026-03-31T16:16:13.434Z" },
- { url = "https://files.pythonhosted.org/packages/6c/8c/ddbbfd6ba59453c8fc7fe1d0e5983895864e264c37481b2a791db635f046/orjson-3.11.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:14f7b8fcb35ef403b42fa5ecfa4ed032332a91f3dc7368fbce4184d59e1eae0d", size = 141914, upload-time = "2026-03-31T16:16:14.955Z" },
- { url = "https://files.pythonhosted.org/packages/4e/31/dbfbefec9df060d34ef4962cd0afcb6fa7a9ec65884cb78f04a7859526c3/orjson-3.11.8-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:c2bdf7b2facc80b5e34f48a2d557727d5c5c57a8a450de122ae81fa26a81c1bc", size = 423800, upload-time = "2026-03-31T16:16:16.594Z" },
- { url = "https://files.pythonhosted.org/packages/87/cf/f74e9ae9803d4ab46b163494adba636c6d7ea955af5cc23b8aaa94cfd528/orjson-3.11.8-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ccd7ba1b0605813a0715171d39ec4c314cb97a9c85893c2c5c0c3a3729df38bf", size = 147837, upload-time = "2026-03-31T16:16:18.585Z" },
- { url = "https://files.pythonhosted.org/packages/64/e6/9214f017b5db85e84e68602792f742e5dc5249e963503d1b356bee611e01/orjson-3.11.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdbc8c9c02463fef4d3c53a9ba3336d05496ec8e1f1c53326a1e4acc11f5c600", size = 136441, upload-time = "2026-03-31T16:16:20.151Z" },
- { url = "https://files.pythonhosted.org/packages/24/dd/3590348818f58f837a75fb969b04cdf187ae197e14d60b5e5a794a38b79d/orjson-3.11.8-cp314-cp314-win32.whl", hash = "sha256:0b57f67710a8cd459e4e54eb96d5f77f3624eba0c661ba19a525807e42eccade", size = 131983, upload-time = "2026-03-31T16:16:21.823Z" },
- { url = "https://files.pythonhosted.org/packages/3f/0f/b6cb692116e05d058f31ceee819c70f097fa9167c82f67fabe7516289abc/orjson-3.11.8-cp314-cp314-win_amd64.whl", hash = "sha256:735e2262363dcbe05c35e3a8869898022af78f89dde9e256924dc02e99fe69ca", size = 127396, upload-time = "2026-03-31T16:16:23.685Z" },
- { url = "https://files.pythonhosted.org/packages/c0/d1/facb5b5051fabb0ef9d26c6544d87ef19a939a9a001198655d0d891062dd/orjson-3.11.8-cp314-cp314-win_arm64.whl", hash = "sha256:6ccdea2c213cf9f3d9490cbd5d427693c870753df41e6cb375bd79bcbafc8817", size = 127330, upload-time = "2026-03-31T16:16:25.496Z" },
+version = "3.11.9"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" },
+ { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" },
+ { url = "https://files.pythonhosted.org/packages/88/b1/6ceafc2eefd0a553e3be77ce6c49d107e772485d9568629376171c50e634/orjson-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ee05097750de0ff69ed5b7bbcf0732182fd57a24043dcc2a1da780a5ead3a5", size = 132306, upload-time = "2026-05-06T15:09:38.299Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/76/f11311285324a40aab1e3031385c50b635a7cd0734fdaf60c7e89a696f60/orjson-3.11.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6082706765a95a6680d812e1daf1c0cfe8adec7831b3ff3b625693f3b461b1c", size = 127988, upload-time = "2026-05-06T15:09:39.597Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/85/0ef63bcf1337f44031ce9b91b1919563f62a37527b3ea4368bb15a22e5d7/orjson-3.11.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:277fefe9d76ee17eb14debf399e3533d4d63b5f677a4d3719eb763536af1f4bd", size = 135188, upload-time = "2026-05-06T15:09:40.957Z" },
+ { url = "https://files.pythonhosted.org/packages/05/94/b0d27090ea8a2095db3c2bd1b1c96f96f19bbb494d7fef33130e846e613d/orjson-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03db380e3780fa0015ed776a90f20e8e20bb11dde13b216ce19e5718e3dfba62", size = 145937, upload-time = "2026-05-06T15:09:42.249Z" },
+ { url = "https://files.pythonhosted.org/packages/09/eb/75d50c29c05b8054013e221e598820a365c8e64065312e75e202ed880709/orjson-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33d7d766701847dc6729846362dc27895d2f2d2251264f9d10e7cb9878194877", size = 132758, upload-time = "2026-05-06T15:09:43.945Z" },
+ { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/30/3178eb16f3221aeef068b6f1f1ebe05f656ea5c6dffe9f6c917329fe17a3/orjson-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3513550321f8c8c811a7c3297b8a630e82dc08e4c10216d07703c997776236cd", size = 141685, upload-time = "2026-05-06T15:09:46.858Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/f1/ff2f19ed0225f9680fafa42febca3570dd59444ebf190980738d376214c2/orjson-3.11.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c5d001196b89fa9cf0a4ab79766cd835b991a166e4b621ba95089edc50c429ff", size = 415167, upload-time = "2026-05-06T15:09:48.312Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/61/863bddf0da6e9e586765414debd54b4e58db05f560902b6d00658cb88636/orjson-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:16969c9d369c98eb084889c6e4d2d39b77c7eb38ceccf8da2a9fff62ae908980", size = 147913, upload-time = "2026-05-06T15:09:49.733Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533, upload-time = "2026-05-06T15:09:52.637Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106, upload-time = "2026-05-06T15:09:54.204Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848, upload-time = "2026-05-06T15:09:55.551Z" },
+ { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" },
+ { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" },
+ { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" },
+ { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" },
+ { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" },
+ { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" },
+ { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" },
+ { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" },
+ { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" },
+ { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" },
+ { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" },
+ { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" },
+ { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" },
+ { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" },
+ { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" },
+ { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" },
+ { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" },
+ { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" },
+ { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" },
]
[[package]]
@@ -2559,62 +2587,62 @@ wheels = [
[[package]]
name = "pandas"
-version = "3.0.2"
+version = "3.0.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
{ name = "python-dateutil" },
{ name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/da/99/b342345300f13440fe9fe385c3c481e2d9a595ee3bab4d3219247ac94e9a/pandas-3.0.2.tar.gz", hash = "sha256:f4753e73e34c8d83221ba58f232433fca2748be8b18dbca02d242ed153945043", size = 4645855, upload-time = "2026-03-31T06:48:30.816Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/97/35/6411db530c618e0e0005187e35aa02ce60ae4c4c4d206964a2f978217c27/pandas-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a727a73cbdba2f7458dc82449e2315899d5140b449015d822f515749a46cbbe0", size = 10326926, upload-time = "2026-03-31T06:46:08.29Z" },
- { url = "https://files.pythonhosted.org/packages/c4/d3/b7da1d5d7dbdc5ef52ed7debd2b484313b832982266905315dad5a0bf0b1/pandas-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbbd4aa20ca51e63b53bbde6a0fa4254b1aaabb74d2f542df7a7959feb1d760c", size = 9926987, upload-time = "2026-03-31T06:46:11.724Z" },
- { url = "https://files.pythonhosted.org/packages/52/77/9b1c2d6070b5dbe239a7bc889e21bfa58720793fb902d1e070695d87c6d0/pandas-3.0.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:339dda302bd8369dedeae979cb750e484d549b563c3f54f3922cb8ff4978c5eb", size = 10757067, upload-time = "2026-03-31T06:46:14.903Z" },
- { url = "https://files.pythonhosted.org/packages/20/17/ec40d981705654853726e7ac9aea9ddbb4a5d9cf54d8472222f4f3de06c2/pandas-3.0.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61c2fd96d72b983a9891b2598f286befd4ad262161a609c92dc1652544b46b76", size = 11258787, upload-time = "2026-03-31T06:46:17.683Z" },
- { url = "https://files.pythonhosted.org/packages/90/e3/3f1126d43d3702ca8773871a81c9f15122a1f412342cc56284ffda5b1f70/pandas-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c934008c733b8bbea273ea308b73b3156f0181e5b72960790b09c18a2794fe1e", size = 11771616, upload-time = "2026-03-31T06:46:20.532Z" },
- { url = "https://files.pythonhosted.org/packages/2e/cf/0f4e268e1f5062e44a6bda9f925806721cd4c95c2b808a4c82ebe914f96b/pandas-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:60a80bb4feacbef5e1447a3f82c33209c8b7e07f28d805cfd1fb951e5cb443aa", size = 12337623, upload-time = "2026-03-31T06:46:23.754Z" },
- { url = "https://files.pythonhosted.org/packages/44/a0/97a6339859d4acb2536efb24feb6708e82f7d33b2ed7e036f2983fcced82/pandas-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed72cb3f45190874eb579c64fa92d9df74e98fd63e2be7f62bce5ace0ade61df", size = 9897372, upload-time = "2026-03-31T06:46:26.703Z" },
- { url = "https://files.pythonhosted.org/packages/8f/eb/781516b808a99ddf288143cec46b342b3016c3414d137da1fdc3290d8860/pandas-3.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:f12b1a9e332c01e09510586f8ca9b108fd631fd656af82e452d7315ef6df5f9f", size = 9154922, upload-time = "2026-03-31T06:46:30.284Z" },
- { url = "https://files.pythonhosted.org/packages/f3/b0/c20bd4d6d3f736e6bd6b55794e9cd0a617b858eaad27c8f410ea05d953b7/pandas-3.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:232a70ebb568c0c4d2db4584f338c1577d81e3af63292208d615907b698a0f18", size = 10347921, upload-time = "2026-03-31T06:46:33.36Z" },
- { url = "https://files.pythonhosted.org/packages/35/d0/4831af68ce30cc2d03c697bea8450e3225a835ef497d0d70f31b8cdde965/pandas-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:970762605cff1ca0d3f71ed4f3a769ea8f85fc8e6348f6e110b8fea7e6eb5a14", size = 9888127, upload-time = "2026-03-31T06:46:36.253Z" },
- { url = "https://files.pythonhosted.org/packages/61/a9/16ea9346e1fc4a96e2896242d9bc674764fb9049b0044c0132502f7a771e/pandas-3.0.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aff4e6f4d722e0652707d7bcb190c445fe58428500c6d16005b02401764b1b3d", size = 10399577, upload-time = "2026-03-31T06:46:39.224Z" },
- { url = "https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef8b27695c3d3dc78403c9a7d5e59a62d5464a7e1123b4e0042763f7104dc74f", size = 10880030, upload-time = "2026-03-31T06:46:42.412Z" },
- { url = "https://files.pythonhosted.org/packages/da/65/7225c0ea4d6ce9cb2160a7fb7f39804871049f016e74782e5dade4d14109/pandas-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f8d68083e49e16b84734eb1a4dcae4259a75c90fb6e2251ab9a00b61120c06ab", size = 11409468, upload-time = "2026-03-31T06:46:45.2Z" },
- { url = "https://files.pythonhosted.org/packages/fa/5b/46e7c76032639f2132359b5cf4c785dd8cf9aea5ea64699eac752f02b9db/pandas-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:32cc41f310ebd4a296d93515fcac312216adfedb1894e879303987b8f1e2b97d", size = 11936381, upload-time = "2026-03-31T06:46:48.293Z" },
- { url = "https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:a4785e1d6547d8427c5208b748ae2efb64659a21bd82bf440d4262d02bfa02a4", size = 9744993, upload-time = "2026-03-31T06:46:51.488Z" },
- { url = "https://files.pythonhosted.org/packages/d5/18/7f0bd34ae27b28159aa80f2a6799f47fda34f7fb938a76e20c7b7fe3b200/pandas-3.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:08504503f7101300107ecdc8df73658e4347586db5cfdadabc1592e9d7e7a0fd", size = 9056118, upload-time = "2026-03-31T06:46:54.548Z" },
- { url = "https://files.pythonhosted.org/packages/bf/ca/3e639a1ea6fcd0617ca4e8ca45f62a74de33a56ae6cd552735470b22c8d3/pandas-3.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5918ba197c951dec132b0c5929a00c0bf05d5942f590d3c10a807f6e15a57d3", size = 10321105, upload-time = "2026-03-31T06:46:57.327Z" },
- { url = "https://files.pythonhosted.org/packages/0b/77/dbc82ff2fb0e63c6564356682bf201edff0ba16c98630d21a1fb312a8182/pandas-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d606a041c89c0a474a4702d532ab7e73a14fe35c8d427b972a625c8e46373668", size = 9864088, upload-time = "2026-03-31T06:46:59.935Z" },
- { url = "https://files.pythonhosted.org/packages/5c/2b/341f1b04bbca2e17e13cd3f08c215b70ef2c60c5356ef1e8c6857449edc7/pandas-3.0.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:710246ba0616e86891b58ab95f2495143bb2bc83ab6b06747c74216f583a6ac9", size = 10369066, upload-time = "2026-03-31T06:47:02.792Z" },
- { url = "https://files.pythonhosted.org/packages/12/c5/cbb1ffefb20a93d3f0e1fdcda699fb84976210d411b008f97f48bf6ce27e/pandas-3.0.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5d3cfe227c725b1f3dff4278b43d8c784656a42a9325b63af6b1492a8232209e", size = 10876780, upload-time = "2026-03-31T06:47:06.205Z" },
- { url = "https://files.pythonhosted.org/packages/98/fe/2249ae5e0a69bd0ddf17353d0a5d26611d70970111f5b3600cdc8be883e7/pandas-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c3b723df9087a9a9a840e263ebd9f88b64a12075d1bf2ea401a5a42f254f084d", size = 11375181, upload-time = "2026-03-31T06:47:09.383Z" },
- { url = "https://files.pythonhosted.org/packages/de/64/77a38b09e70b6464883b8d7584ab543e748e42c1b5d337a2ee088e0df741/pandas-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3096110bf9eac0070b7208465f2740e2d8a670d5cb6530b5bb884eca495fd39", size = 11928899, upload-time = "2026-03-31T06:47:12.686Z" },
- { url = "https://files.pythonhosted.org/packages/5e/52/42855bf626868413f761addd574acc6195880ae247a5346477a4361c3acb/pandas-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:07a10f5c36512eead51bc578eb3354ad17578b22c013d89a796ab5eee90cd991", size = 9746574, upload-time = "2026-03-31T06:47:15.64Z" },
- { url = "https://files.pythonhosted.org/packages/88/39/21304ae06a25e8bf9fc820d69b29b2c495b2ae580d1e143146c309941760/pandas-3.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:5fdbfa05931071aba28b408e59226186b01eb5e92bea2ab78b65863ca3228d84", size = 9047156, upload-time = "2026-03-31T06:47:18.595Z" },
- { url = "https://files.pythonhosted.org/packages/72/20/7defa8b27d4f330a903bb68eea33be07d839c5ea6bdda54174efcec0e1d2/pandas-3.0.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:dbc20dea3b9e27d0e66d74c42b2d0c1bed9c2ffe92adea33633e3bedeb5ac235", size = 10756238, upload-time = "2026-03-31T06:47:22.012Z" },
- { url = "https://files.pythonhosted.org/packages/e9/95/49433c14862c636afc0e9b2db83ff16b3ad92959364e52b2955e44c8e94c/pandas-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b75c347eff42497452116ce05ef461822d97ce5b9ff8df6edacb8076092c855d", size = 10408520, upload-time = "2026-03-31T06:47:25.197Z" },
- { url = "https://files.pythonhosted.org/packages/3b/f8/462ad2b5881d6b8ec8e5f7ed2ea1893faa02290d13870a1600fe72ad8efc/pandas-3.0.2-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1478075142e83a5571782ad007fb201ed074bdeac7ebcc8890c71442e96adf7", size = 10324154, upload-time = "2026-03-31T06:47:28.097Z" },
- { url = "https://files.pythonhosted.org/packages/0a/65/d1e69b649cbcddda23ad6e4c40ef935340f6f652a006e5cbc3555ac8adb3/pandas-3.0.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5880314e69e763d4c8b27937090de570f1fb8d027059a7ada3f7f8e98bdcb677", size = 10714449, upload-time = "2026-03-31T06:47:30.85Z" },
- { url = "https://files.pythonhosted.org/packages/47/a4/85b59bc65b8190ea3689882db6cdf32a5003c0ccd5a586c30fdcc3ffc4fc/pandas-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b5329e26898896f06035241a626d7c335daa479b9bbc82be7c2742d048e41172", size = 11338475, upload-time = "2026-03-31T06:47:34.026Z" },
- { url = "https://files.pythonhosted.org/packages/1e/c4/bc6966c6e38e5d9478b935272d124d80a589511ed1612a5d21d36f664c68/pandas-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:81526c4afd31971f8b62671442a4b2b51e0aa9acc3819c9f0f12a28b6fcf85f1", size = 11786568, upload-time = "2026-03-31T06:47:36.941Z" },
- { url = "https://files.pythonhosted.org/packages/e8/74/09298ca9740beed1d3504e073d67e128aa07e5ca5ca2824b0c674c0b8676/pandas-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:7cadd7e9a44ec13b621aec60f9150e744cfc7a3dd32924a7e2f45edff31823b0", size = 10488652, upload-time = "2026-03-31T06:47:40.612Z" },
- { url = "https://files.pythonhosted.org/packages/bb/40/c6ea527147c73b24fc15c891c3fcffe9c019793119c5742b8784a062c7db/pandas-3.0.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:db0dbfd2a6cdf3770aa60464d50333d8f3d9165b2f2671bcc299b72de5a6677b", size = 10326084, upload-time = "2026-03-31T06:47:43.834Z" },
- { url = "https://files.pythonhosted.org/packages/95/25/bdb9326c3b5455f8d4d3549fce7abcf967259de146fe2cf7a82368141948/pandas-3.0.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0555c5882688a39317179ab4a0ed41d3ebc8812ab14c69364bbee8fb7a3f6288", size = 9914146, upload-time = "2026-03-31T06:47:46.67Z" },
- { url = "https://files.pythonhosted.org/packages/8d/77/3a227ff3337aa376c60d288e1d61c5d097131d0ac71f954d90a8f369e422/pandas-3.0.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01f31a546acd5574ef77fe199bc90b55527c225c20ccda6601cf6b0fd5ed597c", size = 10444081, upload-time = "2026-03-31T06:47:49.681Z" },
- { url = "https://files.pythonhosted.org/packages/15/88/3cdd54fa279341afa10acf8d2b503556b1375245dccc9315659f795dd2e9/pandas-3.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:deeca1b5a931fdf0c2212c8a659ade6d3b1edc21f0914ce71ef24456ca7a6535", size = 10897535, upload-time = "2026-03-31T06:47:53.033Z" },
- { url = "https://files.pythonhosted.org/packages/06/9d/98cc7a7624f7932e40f434299260e2917b090a579d75937cb8a57b9d2de3/pandas-3.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0f48afd9bb13300ffb5a3316973324c787054ba6665cda0da3fbd67f451995db", size = 11446992, upload-time = "2026-03-31T06:47:56.193Z" },
- { url = "https://files.pythonhosted.org/packages/9a/cd/19ff605cc3760e80602e6826ddef2824d8e7050ed80f2e11c4b079741dc3/pandas-3.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6c4d8458b97a35717b62469a4ea0e85abd5ed8687277f5ccfc67f8a5126f8c53", size = 11968257, upload-time = "2026-03-31T06:47:59.137Z" },
- { url = "https://files.pythonhosted.org/packages/db/60/aba6a38de456e7341285102bede27514795c1eaa353bc0e7638b6b785356/pandas-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:b35d14bb5d8285d9494fe93815a9e9307c0876e10f1e8e89ac5b88f728ec8dcf", size = 9865893, upload-time = "2026-03-31T06:48:02.038Z" },
- { url = "https://files.pythonhosted.org/packages/08/71/e5ec979dd2e8a093dacb8864598c0ff59a0cee0bbcdc0bfec16a51684d4f/pandas-3.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:63d141b56ef686f7f0d714cfb8de4e320475b86bf4b620aa0b7da89af8cbdbbb", size = 9188644, upload-time = "2026-03-31T06:48:05.045Z" },
- { url = "https://files.pythonhosted.org/packages/f1/6c/7b45d85db19cae1eb524f2418ceaa9d85965dcf7b764ed151386b7c540f0/pandas-3.0.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:140f0cffb1fa2524e874dde5b477d9defe10780d8e9e220d259b2c0874c89d9d", size = 10776246, upload-time = "2026-03-31T06:48:07.789Z" },
- { url = "https://files.pythonhosted.org/packages/a8/3e/7b00648b086c106e81766f25322b48aa8dfa95b55e621dbdf2fdd413a117/pandas-3.0.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae37e833ff4fed0ba352f6bdd8b73ba3ab3256a85e54edfd1ab51ae40cca0af8", size = 10424801, upload-time = "2026-03-31T06:48:10.897Z" },
- { url = "https://files.pythonhosted.org/packages/da/6e/558dd09a71b53b4008e7fc8a98ec6d447e9bfb63cdaeea10e5eb9b2dabe8/pandas-3.0.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d888a5c678a419a5bb41a2a93818e8ed9fd3172246555c0b37b7cc27027effd", size = 10345643, upload-time = "2026-03-31T06:48:13.7Z" },
- { url = "https://files.pythonhosted.org/packages/be/e3/921c93b4d9a280409451dc8d07b062b503bbec0531d2627e73a756e99a82/pandas-3.0.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b444dc64c079e84df91baa8bf613d58405645461cabca929d9178f2cd392398d", size = 10743641, upload-time = "2026-03-31T06:48:16.659Z" },
- { url = "https://files.pythonhosted.org/packages/56/ca/fd17286f24fa3b4d067965d8d5d7e14fe557dd4f979a0b068ac0deaf8228/pandas-3.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4544c7a54920de8eeacaa1466a6b7268ecfbc9bc64ab4dbb89c6bbe94d5e0660", size = 11361993, upload-time = "2026-03-31T06:48:19.475Z" },
- { url = "https://files.pythonhosted.org/packages/e4/a5/2f6ed612056819de445a433ca1f2821ac3dab7f150d569a59e9cc105de1d/pandas-3.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:734be7551687c00fbd760dc0522ed974f82ad230d4a10f54bf51b80d44a08702", size = 11815274, upload-time = "2026-03-31T06:48:22.695Z" },
- { url = "https://files.pythonhosted.org/packages/00/2f/b622683e99ec3ce00b0854bac9e80868592c5b051733f2cf3a868e5fea26/pandas-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:57a07209bebcbcf768d2d13c9b78b852f9a15978dac41b9e6421a81ad4cdd276", size = 10888530, upload-time = "2026-03-31T06:48:25.806Z" },
- { url = "https://files.pythonhosted.org/packages/cb/2b/f8434233fab2bd66a02ec014febe4e5adced20e2693e0e90a07d118ed30e/pandas-3.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:5371b72c2d4d415d08765f32d689217a43227484e81b2305b52076e328f6f482", size = 9455341, upload-time = "2026-03-31T06:48:28.418Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" },
+ { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" },
+ { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" },
+ { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" },
+ { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" },
+ { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" },
+ { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" },
+ { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" },
+ { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" },
+ { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" },
+ { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" },
+ { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" },
+ { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" },
+ { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" },
+ { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" },
+ { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" },
+ { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" },
+ { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" },
+ { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" },
+ { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" },
+ { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" },
+ { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" },
+ { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" },
]
[[package]]
@@ -2726,101 +2754,113 @@ wheels = [
[[package]]
name = "propcache"
-version = "0.4.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/8c/d4/4e2c9aaf7ac2242b9358f98dccd8f90f2605402f5afeff6c578682c2c491/propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf", size = 80208, upload-time = "2025-10-08T19:46:24.597Z" },
- { url = "https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5", size = 45777, upload-time = "2025-10-08T19:46:25.733Z" },
- { url = "https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e", size = 47647, upload-time = "2025-10-08T19:46:27.304Z" },
- { url = "https://files.pythonhosted.org/packages/58/1a/3c62c127a8466c9c843bccb503d40a273e5cc69838805f322e2826509e0d/propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566", size = 214929, upload-time = "2025-10-08T19:46:28.62Z" },
- { url = "https://files.pythonhosted.org/packages/56/b9/8fa98f850960b367c4b8fe0592e7fc341daa7a9462e925228f10a60cf74f/propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165", size = 221778, upload-time = "2025-10-08T19:46:30.358Z" },
- { url = "https://files.pythonhosted.org/packages/46/a6/0ab4f660eb59649d14b3d3d65c439421cf2f87fe5dd68591cbe3c1e78a89/propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc", size = 228144, upload-time = "2025-10-08T19:46:32.607Z" },
- { url = "https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48", size = 210030, upload-time = "2025-10-08T19:46:33.969Z" },
- { url = "https://files.pythonhosted.org/packages/40/e2/27e6feebb5f6b8408fa29f5efbb765cd54c153ac77314d27e457a3e993b7/propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570", size = 208252, upload-time = "2025-10-08T19:46:35.309Z" },
- { url = "https://files.pythonhosted.org/packages/9e/f8/91c27b22ccda1dbc7967f921c42825564fa5336a01ecd72eb78a9f4f53c2/propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85", size = 202064, upload-time = "2025-10-08T19:46:36.993Z" },
- { url = "https://files.pythonhosted.org/packages/f2/26/7f00bd6bd1adba5aafe5f4a66390f243acab58eab24ff1a08bebb2ef9d40/propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e", size = 212429, upload-time = "2025-10-08T19:46:38.398Z" },
- { url = "https://files.pythonhosted.org/packages/84/89/fd108ba7815c1117ddca79c228f3f8a15fc82a73bca8b142eb5de13b2785/propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757", size = 216727, upload-time = "2025-10-08T19:46:39.732Z" },
- { url = "https://files.pythonhosted.org/packages/79/37/3ec3f7e3173e73f1d600495d8b545b53802cbf35506e5732dd8578db3724/propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f", size = 205097, upload-time = "2025-10-08T19:46:41.025Z" },
- { url = "https://files.pythonhosted.org/packages/61/b0/b2631c19793f869d35f47d5a3a56fb19e9160d3c119f15ac7344fc3ccae7/propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1", size = 38084, upload-time = "2025-10-08T19:46:42.693Z" },
- { url = "https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6", size = 41637, upload-time = "2025-10-08T19:46:43.778Z" },
- { url = "https://files.pythonhosted.org/packages/9c/e9/754f180cccd7f51a39913782c74717c581b9cc8177ad0e949f4d51812383/propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239", size = 38064, upload-time = "2025-10-08T19:46:44.872Z" },
- { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" },
- { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" },
- { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" },
- { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" },
- { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" },
- { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" },
- { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" },
- { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" },
- { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" },
- { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" },
- { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" },
- { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" },
- { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" },
- { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" },
- { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" },
- { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" },
- { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" },
- { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" },
- { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" },
- { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" },
- { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" },
- { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" },
- { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" },
- { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" },
- { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" },
- { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" },
- { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" },
- { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" },
- { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" },
- { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" },
- { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" },
- { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" },
- { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" },
- { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" },
- { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" },
- { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" },
- { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" },
- { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" },
- { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" },
- { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" },
- { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" },
- { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" },
- { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" },
- { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" },
- { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" },
- { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" },
- { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" },
- { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" },
- { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" },
- { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" },
- { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" },
- { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" },
- { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" },
- { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" },
- { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" },
- { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" },
- { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" },
- { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" },
- { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" },
- { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" },
- { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" },
- { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" },
- { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" },
- { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" },
- { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" },
- { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" },
- { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" },
- { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" },
- { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" },
- { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" },
- { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" },
- { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" },
- { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" },
- { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" },
- { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" },
- { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" },
+version = "0.5.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" },
+ { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" },
+ { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" },
+ { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" },
+ { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" },
+ { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" },
+ { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" },
+ { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" },
+ { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/cb/e27bc2b2737a0bb49962b275efa051e8f1c35a936df7d5139b6b658b7dc9/propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba", size = 95887, upload-time = "2026-05-08T21:00:11.277Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a", size = 54654, upload-time = "2026-05-08T21:00:12.604Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/7d/49777a3e20b55863d4794384a38acd460c04157b0a00f8602b0d508b8431/propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf", size = 55190, upload-time = "2026-05-08T21:00:13.935Z" },
+ { url = "https://files.pythonhosted.org/packages/44/c7/085d0cd63062e84044e3f05797749c3f8e3938ff3aeb0eb2f69d43fafc91/propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144", size = 59995, upload-time = "2026-05-08T21:00:15.526Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/42/32cf8e3009e92b2645cf1e944f701e8ea4e924dffde1ee26db860bcbf7e4/propcache-0.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9", size = 63422, upload-time = "2026-05-08T21:00:16.824Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/1b/f112433f99fc979431b87a39ef169e3f8df070d99a72792c56d6937ac48b/propcache-0.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42", size = 64342, upload-time = "2026-05-08T21:00:18.362Z" },
+ { url = "https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476", size = 61639, upload-time = "2026-05-08T21:00:19.692Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/da/4d775080b1490c0ae604acda868bd71aabe3a89ed16f2aa4339eb8a283e7/propcache-0.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba", size = 61588, upload-time = "2026-05-08T21:00:21.155Z" },
+ { url = "https://files.pythonhosted.org/packages/04/ac/f076982cbe2195ee9cf32de5a1e46951d9fb399fc207f390562dd0fd8fb2/propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a", size = 60029, upload-time = "2026-05-08T21:00:22.713Z" },
+ { url = "https://files.pythonhosted.org/packages/70/60/189be62e0dd898dce3b331e1b8c7a543cd3a405ac0c81fe8ee8a9d5d77e1/propcache-0.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64", size = 56774, upload-time = "2026-05-08T21:00:24.001Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/9e/93377b9c7939c1ffae98f878dee955efadfd638078bc86dbc21f9d52f651/propcache-0.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913", size = 63532, upload-time = "2026-05-08T21:00:25.545Z" },
+ { url = "https://files.pythonhosted.org/packages/14/f9/590ef6cfb9b8028d516d287812ece32bb0bc5f11fbb9c8bf6b2e6313fec8/propcache-0.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1", size = 61592, upload-time = "2026-05-08T21:00:27.186Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/5e/70958b3034c297a630bba2f17ca7abc2d5f39a803ad7e370ab79d1ecd022/propcache-0.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33", size = 64788, upload-time = "2026-05-08T21:00:28.8Z" },
+ { url = "https://files.pythonhosted.org/packages/12/fd/77fe5936d8c3086ca9048f7f415f122ed82e53884a9ec193646b42deef06/propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a", size = 62514, upload-time = "2026-05-08T21:00:30.098Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/74/66bd798b5b3be70aa1b391f5cc9d6a0a5532d7fd3b19ec0b213e72e6ad9d/propcache-0.5.2-cp312-cp312-win32.whl", hash = "sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031", size = 39018, upload-time = "2026-05-08T21:00:31.622Z" },
+ { url = "https://files.pythonhosted.org/packages/61/7c/5c0d34aa3024694d6dcb9271cdbdd08c4e47c1c0ad95ec7e7bc74cdea145/propcache-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42", size = 42322, upload-time = "2026-05-08T21:00:32.918Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/91/875812f1a3feb20ceba818ef39fbe4d92f1081e04ac815c822496d0d038b/propcache-0.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84", size = 38172, upload-time = "2026-05-08T21:00:35.124Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/09/f049e45385503fe67db75a6b6186a7b9f0c3930366dc960522c312a825b1/propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a", size = 94457, upload-time = "2026-05-08T21:00:36.355Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/65/83d1d05655baf63113731bd5a1008435e14f8d1e5a06cbe4ec5b23ad7a31/propcache-0.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117", size = 53835, upload-time = "2026-05-08T21:00:38.072Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/12/a6ba6482bb5ea3260c000c9b20881c95fa11c6b30173715668259f844ed7/propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098", size = 54545, upload-time = "2026-05-08T21:00:39.319Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/19/7fa086f5764c59ec8a8e157cd93aa8497acc00aba9dcdec56bfffb32602d/propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4", size = 59886, upload-time = "2026-05-08T21:00:40.621Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/e4/5d7663dc8235956c8f5281698a3af1d351d8820341ddd890f59d9a9127f2/propcache-0.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e", size = 63261, upload-time = "2026-05-08T21:00:41.775Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/4a/15a03adee24d6350da4292caeac44c34c033d2afe5e87eb370f38854560f/propcache-0.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7", size = 64184, upload-time = "2026-05-08T21:00:43.018Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/c6/979176efdaa3d239e36d503d5af63a0a773b36662ed8f52e5b6a6d9fd40e/propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d", size = 61534, upload-time = "2026-05-08T21:00:44.507Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/22/63e8cd1bae4c2d2be6493b6b7d10566ddafad88137cfbc99964a1119853c/propcache-0.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a", size = 61500, upload-time = "2026-05-08T21:00:45.796Z" },
+ { url = "https://files.pythonhosted.org/packages/60/5a/28e5d9acbac1cc9ccb67045e8c1b943aa8d79fdf39c93bd73cacd68008ea/propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2", size = 59994, upload-time = "2026-05-08T21:00:47.093Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/40/db650677f554a95b9c01a7c9d93d629e93a15562f5deb4573c9ee136fed2/propcache-0.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa", size = 56884, upload-time = "2026-05-08T21:00:48.376Z" },
+ { url = "https://files.pythonhosted.org/packages/80/45/70b39b89516ff8b96bf732fa6fded8cef20f293cb1508690101c3c07ec51/propcache-0.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853", size = 63464, upload-time = "2026-05-08T21:00:49.954Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/e2/fa59d3a89eac5534293124af4f1d0d0ada091ce4a0ab4610ce03fd2bdd8d/propcache-0.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a", size = 61588, upload-time = "2026-05-08T21:00:51.281Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/97/efb547a55c4bc7381cfb202d6a2239ac621045277bc1ea5dfd3a7f0516c0/propcache-0.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704", size = 64667, upload-time = "2026-05-08T21:00:52.602Z" },
+ { url = "https://files.pythonhosted.org/packages/92/56/f5c7d9b4b7595d5127da38974d791b2153f3d1eae6c674af3583ace92ad3/propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4", size = 62463, upload-time = "2026-05-08T21:00:54.303Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/3b/484a3a65fc9f9f60c41dcd17b428bace5389544e2c680994534a20755066/propcache-0.5.2-cp313-cp313-win32.whl", hash = "sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d", size = 38621, upload-time = "2026-05-08T21:00:55.808Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/fd/3f0f10dba4dabad3bf53102be007abf55481067952bde0fdddff439e7c61/propcache-0.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757", size = 41649, upload-time = "2026-05-08T21:00:57.061Z" },
+ { url = "https://files.pythonhosted.org/packages/90/ec/6ce619cc32bb500a482f811f9cd509368b4e58e638d13f2c68f370d6b475/propcache-0.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f", size = 37636, upload-time = "2026-05-08T21:00:58.646Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/82/c1d268bbbf2ef981c5bf0fbbe746db617c66e3bcefe431a1aa8943fbe23a/propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d", size = 98872, upload-time = "2026-05-08T21:00:59.889Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/d4/52c871e73e864e6b34c0e2d58ac1ec5ccd149497ddc7ad2137ae98323a35/propcache-0.5.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa", size = 56257, upload-time = "2026-05-08T21:01:01.195Z" },
+ { url = "https://files.pythonhosted.org/packages/67/f0/9b90ca2a210b3d09bcfcd96ecd0f55545c091535abce2a45de2775cfd357/propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94", size = 56696, upload-time = "2026-05-08T21:01:02.941Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/0e/6e9d4ba07c8e56e21ddec1e75f12148142b21ca83a51871babce095334f4/propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164", size = 62378, upload-time = "2026-05-08T21:01:04.475Z" },
+ { url = "https://files.pythonhosted.org/packages/65/19/c10badaa463dde8a27ce884f8ee2ec37e6035b7c9f5ff0c8f74f06f08dac/propcache-0.5.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f", size = 65283, upload-time = "2026-05-08T21:01:05.959Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/b6/93bea99ca80e19cef6512a8580e5b7857bbe09422d9daa7fd4ef5723306c/propcache-0.5.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c", size = 66616, upload-time = "2026-05-08T21:01:07.228Z" },
+ { url = "https://files.pythonhosted.org/packages/83/e4/5c7462e50625f051f37fb38b8224f7639f667184bbd34424ec83819bb1b7/propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc", size = 63773, upload-time = "2026-05-08T21:01:08.514Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/b6/99238894047b13c823be25027e736626cd414a52a5e30d2c3347c2733529/propcache-0.5.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f", size = 63664, upload-time = "2026-05-08T21:01:09.874Z" },
+ { url = "https://files.pythonhosted.org/packages/85/1e/a3a1a63116a2b8edb415a8bb9a6f0c34bd03830b1e18e8ce2904e1dc1cf4/propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb", size = 62643, upload-time = "2026-05-08T21:01:11.132Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/03/893cf147de2fc6543c5eaa07ad833170e7e2a2385725bbebe8c0503723bb/propcache-0.5.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751", size = 59595, upload-time = "2026-05-08T21:01:12.387Z" },
+ { url = "https://files.pythonhosted.org/packages/86/3b/04c1a2e12c57766568ba75ba72b3bf2042818d4c1425fab6fc07155c7cff/propcache-0.5.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836", size = 65711, upload-time = "2026-05-08T21:01:13.676Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/34/80f8d0099f8d6bacc4de1624c85672681c8cd1149ca2da0e38fd120b817f/propcache-0.5.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f", size = 64247, upload-time = "2026-05-08T21:01:14.936Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/1a/8b08f3a5f1037e9e370c55883ceeeee0f6dd0416fb2d2d67b8bfc91f2a79/propcache-0.5.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55", size = 67102, upload-time = "2026-05-08T21:01:16.281Z" },
+ { url = "https://files.pythonhosted.org/packages/34/68/8bdb7bb7756d76e005490649d10e4a8369e610c74d619f71e1aedf889e9c/propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568", size = 64964, upload-time = "2026-05-08T21:01:17.57Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/aa/50fb0b5d3968b61a510926ff8b8465f1d6e976b3ab74496d7a4b9fc42515/propcache-0.5.2-cp313-cp313t-win32.whl", hash = "sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191", size = 42546, upload-time = "2026-05-08T21:01:18.946Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/4c/0ddbae64321bd4a95bcbfc19307238016b5b1fee645c84626c8d539e5b74/propcache-0.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7", size = 46330, upload-time = "2026-05-08T21:01:20.162Z" },
+ { url = "https://files.pythonhosted.org/packages/00/d9/9cddc8efb78d8af264c5ec9f6d10b62f57c515feda8d321595f56010fb23/propcache-0.5.2-cp313-cp313t-win_arm64.whl", hash = "sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96", size = 40521, upload-time = "2026-05-08T21:01:21.399Z" },
+ { url = "https://files.pythonhosted.org/packages/e2/ea/23ee535d90ce8bcc465a3028eb3cc0ce3bd1005f4bb27710b30587de798d/propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999", size = 94662, upload-time = "2026-05-08T21:01:22.683Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/06/c5a52f419b5d8972f8d46a7577476090d8e3263ff589ce40b5ca4968d5be/propcache-0.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e", size = 53928, upload-time = "2026-05-08T21:01:23.986Z" },
+ { url = "https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539", size = 54650, upload-time = "2026-05-08T21:01:25.305Z" },
+ { url = "https://files.pythonhosted.org/packages/70/06/2f46c318e3307cd7a6a7481def374ce838c0fe20084b39dd54b0879d0e99/propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e", size = 59912, upload-time = "2026-05-08T21:01:26.545Z" },
+ { url = "https://files.pythonhosted.org/packages/4c/29/fe1aebec2ce57ab985a9c382bded1124431f85078113aa222c5d278430d4/propcache-0.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979", size = 63300, upload-time = "2026-05-08T21:01:27.937Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/18/2334b26768b6c82be8c69e83671b767d5ef426aa09b0cba6c2ea47816774/propcache-0.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80", size = 64208, upload-time = "2026-05-08T21:01:29.484Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825", size = 61633, upload-time = "2026-05-08T21:01:31.068Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/46/b3ff8aba2b4953a3e50de2cf72f1b5748b8eca93b15f3dc2c84339084c09/propcache-0.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39", size = 61724, upload-time = "2026-05-08T21:01:32.374Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/01/814cfcafbcff954f94c01cf30e097ddc88a076b5440fbcf4570753437d40/propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4", size = 60069, upload-time = "2026-05-08T21:01:33.67Z" },
+ { url = "https://files.pythonhosted.org/packages/da/68/5c6f7622d510cc666a300687e06fd060c1a43361c0c9b20d284f06d8096a/propcache-0.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5", size = 57099, upload-time = "2026-05-08T21:01:34.915Z" },
+ { url = "https://files.pythonhosted.org/packages/55/27/9cb0b4c679124085327957d42521c99dba04c88c90c3e55a6f0b633ebccc/propcache-0.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702", size = 63391, upload-time = "2026-05-08T21:01:36.231Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/9d/7258aaa5bdf60fc6f27591eef6fe52768cb0beda7140be477c8b12c9794a/propcache-0.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3", size = 61626, upload-time = "2026-05-08T21:01:37.545Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/0d/41c602003e8a9b16fe1e7eadf62c7bfba9d5474370b24200bf48b315f45f/propcache-0.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5", size = 64781, upload-time = "2026-05-08T21:01:38.83Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/f3/38e66b1856e9bd079deea015bc4a55f7767c0e4db2f7dcf69e7e680ba4ce/propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4", size = 62570, upload-time = "2026-05-08T21:01:40.415Z" },
+ { url = "https://files.pythonhosted.org/packages/95/ca/bbfe9b910ce57dde8bb4876b4520fc02a4e89497c10de26be936758a3aaa/propcache-0.5.2-cp314-cp314-win32.whl", hash = "sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0", size = 39436, upload-time = "2026-05-08T21:01:41.654Z" },
+ { url = "https://files.pythonhosted.org/packages/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c", size = 42373, upload-time = "2026-05-08T21:01:43.041Z" },
+ { url = "https://files.pythonhosted.org/packages/44/68/9ea5103f41d5217d7d6ec24db90018e23aebec070c3f9a6e54d12b841fd8/propcache-0.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0", size = 38554, upload-time = "2026-05-08T21:01:44.336Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/81/fadf555f42d3b762eea8a53950b0489fdc0aa9da5f8ed9e10ce0a4e01b48/propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb", size = 99395, upload-time = "2026-05-08T21:01:45.883Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/c9/c61e134a686949cf7971af3a390148b1156f7be81c73bc0cd12c873e2d48/propcache-0.5.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078", size = 56653, upload-time = "2026-05-08T21:01:47.307Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/73/daf935ea7048ddd7ec8eec5345b4a40b619d2d178b3c0a0900796bc3c794/propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa", size = 56914, upload-time = "2026-05-08T21:01:48.573Z" },
+ { url = "https://files.pythonhosted.org/packages/79/9f/aba959b435ea18617edd7cf0a7ad0b9c574b8fc7e3d2cd55fb59cb255d33/propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917", size = 62567, upload-time = "2026-05-08T21:01:49.903Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/a1/859942de9a791ff42f6141736f5b37749b8f53e65edfa49638c67dd67e6a/propcache-0.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe", size = 65542, upload-time = "2026-05-08T21:01:51.204Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/61/315bc0fd6c0fc7f80a528b8afd209e5fc4a875ea79571b91b8f50f442907/propcache-0.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03", size = 66845, upload-time = "2026-05-08T21:01:52.539Z" },
+ { url = "https://files.pythonhosted.org/packages/47/f7/9f8122e3132e8e354ac41975ef8f1099be7d5a16bc7ae562734e993665c0/propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335", size = 63985, upload-time = "2026-05-08T21:01:53.847Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/54/c317819ec157cbf6f35df9df9657a6f82daf34d5faf15948b2f639c2192e/propcache-0.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285", size = 63999, upload-time = "2026-05-08T21:01:55.179Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/56/387e3f7dfce0a9233df41fb888aa1c30222cb4bbbf09537c02dd9bd85fe2/propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837", size = 62779, upload-time = "2026-05-08T21:01:57.489Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/9c/596784cb5824ed61ee960d3f8655a3f0993e107c6e98ab6c818b7fb92ccb/propcache-0.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8", size = 59796, upload-time = "2026-05-08T21:01:58.736Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/3d/1a6cfa1726a48542c1e8784a0761421476a5b68e09b7f36bf95eb954aaba/propcache-0.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366", size = 66023, upload-time = "2026-05-08T21:02:00.228Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/0e/05fd6990369477076e4e280bcb970de760fddf0161a46e988bc95f7940ec/propcache-0.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56", size = 64448, upload-time = "2026-05-08T21:02:01.888Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/86/5f8da315a4309c62c10c0b2516b17492d5d3bbe1bb862b96604db67e2a37/propcache-0.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d", size = 67329, upload-time = "2026-05-08T21:02:03.484Z" },
+ { url = "https://files.pythonhosted.org/packages/da/d3/3368efe79ab21f0cdf86ef49895811c9cc933131d4cde1f28a624e22e712/propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2", size = 65172, upload-time = "2026-05-08T21:02:04.745Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/07/127e8b0bacfb325396196f9d976a22453049b89b9b2b08477cc3145faa44/propcache-0.5.2-cp314-cp314t-win32.whl", hash = "sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821", size = 43813, upload-time = "2026-05-08T21:02:06.025Z" },
+ { url = "https://files.pythonhosted.org/packages/88/fb/46dad6c0ae49ed230ab1b16c890c2b6314e2403e6c412976f4a72d64a527/propcache-0.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370", size = 47764, upload-time = "2026-05-08T21:02:07.353Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/c4/a47d0a63aa309d10d59ede6e9d4cff03a344a79d1f0f4cd0cd74997b53e0/propcache-0.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6", size = 41140, upload-time = "2026-05-08T21:02:09.065Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" },
]
[[package]]
@@ -2965,7 +3005,7 @@ wheels = [
[[package]]
name = "pydantic"
-version = "2.13.3"
+version = "2.13.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "annotated-types" },
@@ -2973,14 +3013,14 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "typing-inspection" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/d9/e4/40d09941a2cebcb20609b86a559817d5b9291c49dd6f8c87e5feffbe703a/pydantic-2.13.3.tar.gz", hash = "sha256:af09e9d1d09f4e7fe37145c1f577e1d61ceb9a41924bf0094a36506285d0a84d", size = 844068, upload-time = "2026-04-20T14:46:43.632Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f3/0a/fd7d723f8f8153418fb40cf9c940e82004fce7e987026b08a68a36dd3fe7/pydantic-2.13.3-py3-none-any.whl", hash = "sha256:6db14ac8dfc9a1e57f87ea2c0de670c251240f43cb0c30a5130e9720dc612927", size = 471981, upload-time = "2026-04-20T14:46:41.402Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" },
]
[[package]]
name = "pydantic-ai-slim"
-version = "1.89.1"
+version = "1.100.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "genai-prices" },
@@ -2991,116 +3031,116 @@ dependencies = [
{ name = "pydantic-graph" },
{ name = "typing-inspection" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/23/91/b2134056eb5debb7cb28e4efe7ca19fc5c7b2935e55b299a30ddad0d7746/pydantic_ai_slim-1.89.1.tar.gz", hash = "sha256:3ed967bff8dec992a907c1d1dabab2034a5f4aee75289de22e88b2ef9def8da6", size = 614728, upload-time = "2026-05-01T19:09:38.551Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/68/db/3eb296369e3001f82d7552060c3811307809954b7c7ec30499f383d3c87a/pydantic_ai_slim-1.100.0.tar.gz", hash = "sha256:cc755c7970b2e041764b9d2f74d50cbad3cf7989b14cdbf62d356f25eb2a1222", size = 726289, upload-time = "2026-05-21T04:04:59.061Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/95/14/d0f7c8f828c460a517531e0df7cfe9e20f4315da8357a9068caaf0193bbb/pydantic_ai_slim-1.89.1-py3-none-any.whl", hash = "sha256:9e7d615a0a3e48993d067901e596e85708e9c8d1f6bef96c20c340385028d465", size = 780314, upload-time = "2026-05-01T19:09:28.843Z" },
+ { url = "https://files.pythonhosted.org/packages/49/a6/164b070c59f7c69e81cb5fd38225da24c4587a8fe629af49c72709182ffc/pydantic_ai_slim-1.100.0-py3-none-any.whl", hash = "sha256:422a721b7a7157daff749a6eec9a4ba2e3e7efc28ae5a2bdfe468529eaf81aaf", size = 901788, upload-time = "2026-05-21T04:04:49.147Z" },
]
[[package]]
name = "pydantic-core"
-version = "2.46.3"
+version = "2.46.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/2a/ef/f7abb56c49382a246fd2ce9c799691e3c3e7175ec74b14d99e798bcddb1a/pydantic_core-2.46.3.tar.gz", hash = "sha256:41c178f65b8c29807239d47e6050262eb6bf84eb695e41101e62e38df4a5bc2c", size = 471412, upload-time = "2026-04-20T14:40:56.672Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/22/a2/1ba90a83e85a3f94c796b184f3efde9c72f2830dcda493eea8d59ba78e6d/pydantic_core-2.46.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ab124d49d0459b2373ecf54118a45c28a1e6d4192a533fbc915e70f556feb8e5", size = 2106740, upload-time = "2026-04-20T14:41:20.932Z" },
- { url = "https://files.pythonhosted.org/packages/b6/f6/99ae893c89a0b9d3daec9f95487aa676709aa83f67643b3f0abaf4ab628a/pydantic_core-2.46.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cca67d52a5c7a16aed2b3999e719c4bcf644074eac304a5d3d62dd70ae7d4b2c", size = 1948293, upload-time = "2026-04-20T14:43:42.115Z" },
- { url = "https://files.pythonhosted.org/packages/3e/b8/2e8e636dc9e3f16c2e16bf0849e24be82c5ee82c603c65fc0326666328fc/pydantic_core-2.46.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c024e08c0ba23e6fd68c771a521e9d6a792f2ebb0fa734296b36394dc30390e", size = 1973222, upload-time = "2026-04-20T14:41:57.841Z" },
- { url = "https://files.pythonhosted.org/packages/34/36/0e730beec4d83c5306f417afbd82ff237d9a21e83c5edf675f31ed84c1fe/pydantic_core-2.46.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6645ce7eec4928e29a1e3b3d5c946621d105d3e79f0c9cddf07c2a9770949287", size = 2053852, upload-time = "2026-04-20T14:40:43.077Z" },
- { url = "https://files.pythonhosted.org/packages/4b/f0/3071131f47e39136a17814576e0fada9168569f7f8c0e6ac4d1ede6a4958/pydantic_core-2.46.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a712c7118e6c5ea96562f7b488435172abb94a3c53c22c9efc1412264a45cbbe", size = 2221134, upload-time = "2026-04-20T14:43:03.349Z" },
- { url = "https://files.pythonhosted.org/packages/2f/a9/a2dc023eec5aa4b02a467874bad32e2446957d2adcab14e107eab502e978/pydantic_core-2.46.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69a868ef3ff206343579021c40faf3b1edc64b1cc508ff243a28b0a514ccb050", size = 2279785, upload-time = "2026-04-20T14:41:19.285Z" },
- { url = "https://files.pythonhosted.org/packages/0a/44/93f489d16fb63fbd41c670441536541f6e8cfa1e5a69f40bc9c5d30d8c90/pydantic_core-2.46.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc7e8c32db809aa0f6ea1d6869ebc8518a65d5150fdfad8bcae6a49ae32a22e2", size = 2089404, upload-time = "2026-04-20T14:43:10.108Z" },
- { url = "https://files.pythonhosted.org/packages/2a/78/8692e3aa72b2d004f7a5d937f1dfdc8552ba26caf0bec75f342c40f00dec/pydantic_core-2.46.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:3481bd1341dc85779ee506bc8e1196a277ace359d89d28588a9468c3ecbe63fa", size = 2114898, upload-time = "2026-04-20T14:44:51.475Z" },
- { url = "https://files.pythonhosted.org/packages/6a/62/e83133f2e7832532060175cebf1f13748f4c7e7e7165cdd1f611f174494b/pydantic_core-2.46.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8690eba565c6d68ffd3a8655525cbdd5246510b44a637ee2c6c03a7ebfe64d3c", size = 2157856, upload-time = "2026-04-20T14:43:46.64Z" },
- { url = "https://files.pythonhosted.org/packages/6d/ec/6a500e3ad7718ee50583fae79c8651f5d37e3abce1fa9ae177ae65842c53/pydantic_core-2.46.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4de88889d7e88d50d40ee5b39d5dac0bcaef9ba91f7e536ac064e6b2834ecccf", size = 2180168, upload-time = "2026-04-20T14:42:00.302Z" },
- { url = "https://files.pythonhosted.org/packages/d8/53/8267811054b1aa7fc1dc7ded93812372ef79a839f5e23558136a6afbfde1/pydantic_core-2.46.3-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:e480080975c1ef7f780b8f99ed72337e7cc5efea2e518a20a692e8e7b278eb8b", size = 2322885, upload-time = "2026-04-20T14:41:05.253Z" },
- { url = "https://files.pythonhosted.org/packages/c8/c1/1c0acdb3aa0856ddc4ecc55214578f896f2de16f400cf51627eb3c26c1c4/pydantic_core-2.46.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:de3a5c376f8cd94da9a1b8fd3dd1c16c7a7b216ed31dc8ce9fd7a22bf13b836e", size = 2360328, upload-time = "2026-04-20T14:41:43.991Z" },
- { url = "https://files.pythonhosted.org/packages/f0/d0/ef39cd0f4a926814f360e71c1adeab48ad214d9727e4deb48eedfb5bce1a/pydantic_core-2.46.3-cp311-cp311-win32.whl", hash = "sha256:fc331a5314ffddd5385b9ee9d0d2fee0b13c27e0e02dad71b1ae5d6561f51eeb", size = 1979464, upload-time = "2026-04-20T14:43:12.215Z" },
- { url = "https://files.pythonhosted.org/packages/18/9c/f41951b0d858e343f1cf09398b2a7b3014013799744f2c4a8ad6a3eec4f2/pydantic_core-2.46.3-cp311-cp311-win_amd64.whl", hash = "sha256:b5b9c6cf08a8a5e502698f5e153056d12c34b8fb30317e0c5fd06f45162a6346", size = 2070837, upload-time = "2026-04-20T14:41:47.707Z" },
- { url = "https://files.pythonhosted.org/packages/9f/1e/264a17cd582f6ed50950d4d03dd5fefd84e570e238afe1cb3e25cf238769/pydantic_core-2.46.3-cp311-cp311-win_arm64.whl", hash = "sha256:5dfd51cf457482f04ec49491811a2b8fd5b843b64b11eecd2d7a1ee596ea78a6", size = 2053647, upload-time = "2026-04-20T14:42:27.535Z" },
- { url = "https://files.pythonhosted.org/packages/4b/cb/5b47425556ecc1f3fe18ed2a0083188aa46e1dd812b06e406475b3a5d536/pydantic_core-2.46.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b11b59b3eee90a80a36701ddb4576d9ae31f93f05cb9e277ceaa09e6bf074a67", size = 2101946, upload-time = "2026-04-20T14:40:52.581Z" },
- { url = "https://files.pythonhosted.org/packages/a1/4f/2fb62c2267cae99b815bbf4a7b9283812c88ca3153ef29f7707200f1d4e5/pydantic_core-2.46.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af8653713055ea18a3abc1537fe2ebc42f5b0bbb768d1eb79fd74eb47c0ac089", size = 1951612, upload-time = "2026-04-20T14:42:42.996Z" },
- { url = "https://files.pythonhosted.org/packages/50/6e/b7348fd30d6556d132cddd5bd79f37f96f2601fe0608afac4f5fb01ec0b3/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75a519dab6d63c514f3a81053e5266c549679e4aa88f6ec57f2b7b854aceb1b0", size = 1977027, upload-time = "2026-04-20T14:42:02.001Z" },
- { url = "https://files.pythonhosted.org/packages/82/11/31d60ee2b45540d3fb0b29302a393dbc01cd771c473f5b5147bcd353e593/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6cd87cb1575b1ad05ba98894c5b5c96411ef678fa2f6ed2576607095b8d9789", size = 2063008, upload-time = "2026-04-20T14:44:17.952Z" },
- { url = "https://files.pythonhosted.org/packages/8a/db/3a9d1957181b59258f44a2300ab0f0be9d1e12d662a4f57bb31250455c52/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f80a55484b8d843c8ada81ebf70a682f3f00a3d40e378c06cf17ecb44d280d7d", size = 2233082, upload-time = "2026-04-20T14:40:57.934Z" },
- { url = "https://files.pythonhosted.org/packages/9c/e1/3277c38792aeb5cfb18c2f0c5785a221d9ff4e149abbe1184d53d5f72273/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3861f1731b90c50a3266316b9044f5c9b405eecb8e299b0a7120596334e4fe9c", size = 2304615, upload-time = "2026-04-20T14:42:12.584Z" },
- { url = "https://files.pythonhosted.org/packages/5e/d5/e3d9717c9eba10855325650afd2a9cba8e607321697f18953af9d562da2f/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb528e295ed31570ac3dcc9bfdd6e0150bc11ce6168ac87a8082055cf1a67395", size = 2094380, upload-time = "2026-04-20T14:43:05.522Z" },
- { url = "https://files.pythonhosted.org/packages/a1/20/abac35dedcbfd66c6f0b03e4e3564511771d6c9b7ede10a362d03e110d9b/pydantic_core-2.46.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:367508faa4973b992b271ba1494acaab36eb7e8739d1e47be5035fb1ea225396", size = 2135429, upload-time = "2026-04-20T14:41:55.549Z" },
- { url = "https://files.pythonhosted.org/packages/6c/a5/41bfd1df69afad71b5cf0535055bccc73022715ad362edbc124bc1e021d7/pydantic_core-2.46.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ad3c826fe523e4becf4fe39baa44286cff85ef137c729a2c5e269afbfd0905d", size = 2174582, upload-time = "2026-04-20T14:41:45.96Z" },
- { url = "https://files.pythonhosted.org/packages/79/65/38d86ea056b29b2b10734eb23329b7a7672ca604df4f2b6e9c02d4ee22fe/pydantic_core-2.46.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ec638c5d194ef8af27db69f16c954a09797c0dc25015ad6123eb2c73a4d271ca", size = 2187533, upload-time = "2026-04-20T14:40:55.367Z" },
- { url = "https://files.pythonhosted.org/packages/b6/55/a1129141678a2026badc539ad1dee0a71d06f54c2f06a4bd68c030ac781b/pydantic_core-2.46.3-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:28ed528c45446062ee66edb1d33df5d88828ae167de76e773a3c7f64bd14e976", size = 2332985, upload-time = "2026-04-20T14:44:13.05Z" },
- { url = "https://files.pythonhosted.org/packages/d7/60/cb26f4077719f709e54819f4e8e1d43f4091f94e285eb6bd21e1190a7b7c/pydantic_core-2.46.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aed19d0c783886d5bd86d80ae5030006b45e28464218747dcf83dabfdd092c7b", size = 2373670, upload-time = "2026-04-20T14:41:53.421Z" },
- { url = "https://files.pythonhosted.org/packages/6b/7e/c3f21882bdf1d8d086876f81b5e296206c69c6082551d776895de7801fa0/pydantic_core-2.46.3-cp312-cp312-win32.whl", hash = "sha256:06d5d8820cbbdb4147578c1fe7ffcd5b83f34508cb9f9ab76e807be7db6ff0a4", size = 1966722, upload-time = "2026-04-20T14:44:30.588Z" },
- { url = "https://files.pythonhosted.org/packages/57/be/6b5e757b859013ebfbd7adba02f23b428f37c86dcbf78b5bb0b4ffd36e99/pydantic_core-2.46.3-cp312-cp312-win_amd64.whl", hash = "sha256:c3212fda0ee959c1dd04c60b601ec31097aaa893573a3a1abd0a47bcac2968c1", size = 2072970, upload-time = "2026-04-20T14:42:54.248Z" },
- { url = "https://files.pythonhosted.org/packages/bf/f8/a989b21cc75e9a32d24192ef700eea606521221a89faa40c919ce884f2b1/pydantic_core-2.46.3-cp312-cp312-win_arm64.whl", hash = "sha256:f1f8338dd7a7f31761f1f1a3c47503a9a3b34eea3c8b01fa6ee96408affb5e72", size = 2035963, upload-time = "2026-04-20T14:44:20.4Z" },
- { url = "https://files.pythonhosted.org/packages/9b/3c/9b5e8eb9821936d065439c3b0fb1490ffa64163bfe7e1595985a47896073/pydantic_core-2.46.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:12bc98de041458b80c86c56b24df1d23832f3e166cbaff011f25d187f5c62c37", size = 2102109, upload-time = "2026-04-20T14:41:24.219Z" },
- { url = "https://files.pythonhosted.org/packages/91/97/1c41d1f5a19f241d8069f1e249853bcce378cdb76eec8ab636d7bc426280/pydantic_core-2.46.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:85348b8f89d2c3508b65b16c3c33a4da22b8215138d8b996912bb1532868885f", size = 1951820, upload-time = "2026-04-20T14:42:14.236Z" },
- { url = "https://files.pythonhosted.org/packages/30/b4/d03a7ae14571bc2b6b3c7b122441154720619afe9a336fa3a95434df5e2f/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1105677a6df914b1fb71a81b96c8cce7726857e1717d86001f29be06a25ee6f8", size = 1977785, upload-time = "2026-04-20T14:42:31.648Z" },
- { url = "https://files.pythonhosted.org/packages/ae/0c/4086f808834b59e3c8f1aa26df8f4b6d998cdcf354a143d18ef41529d1fe/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87082cd65669a33adeba5470769e9704c7cf026cc30afb9cc77fd865578ebaad", size = 2062761, upload-time = "2026-04-20T14:40:37.093Z" },
- { url = "https://files.pythonhosted.org/packages/fa/71/a649be5a5064c2df0db06e0a512c2281134ed2fcc981f52a657936a7527c/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60e5f66e12c4f5212d08522963380eaaeac5ebd795826cfd19b2dfb0c7a52b9c", size = 2232989, upload-time = "2026-04-20T14:42:59.254Z" },
- { url = "https://files.pythonhosted.org/packages/a2/84/7756e75763e810b3a710f4724441d1ecc5883b94aacb07ca71c5fb5cfb69/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6cdf19bf84128d5e7c37e8a73a0c5c10d51103a650ac585d42dd6ae233f2b7f", size = 2303975, upload-time = "2026-04-20T14:41:32.287Z" },
- { url = "https://files.pythonhosted.org/packages/6c/35/68a762e0c1e31f35fa0dac733cbd9f5b118042853698de9509c8e5bf128b/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031bb17f4885a43773c8c763089499f242aee2ea85cf17154168775dccdecf35", size = 2095325, upload-time = "2026-04-20T14:42:47.685Z" },
- { url = "https://files.pythonhosted.org/packages/77/bf/1bf8c9a8e91836c926eae5e3e51dce009bf495a60ca56060689d3df3f340/pydantic_core-2.46.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:bcf2a8b2982a6673693eae7348ef3d8cf3979c1d63b54fca7c397a635cc68687", size = 2133368, upload-time = "2026-04-20T14:41:22.766Z" },
- { url = "https://files.pythonhosted.org/packages/e5/50/87d818d6bab915984995157ceb2380f5aac4e563dddbed6b56f0ed057aba/pydantic_core-2.46.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28e8cf2f52d72ced402a137145923a762cbb5081e48b34312f7a0c8f55928ec3", size = 2173908, upload-time = "2026-04-20T14:42:52.044Z" },
- { url = "https://files.pythonhosted.org/packages/91/88/a311fb306d0bd6185db41fa14ae888fb81d0baf648a761ae760d30819d33/pydantic_core-2.46.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:17eaface65d9fc5abb940003020309c1bf7a211f5f608d7870297c367e6f9022", size = 2186422, upload-time = "2026-04-20T14:43:29.55Z" },
- { url = "https://files.pythonhosted.org/packages/8f/79/28fd0d81508525ab2054fef7c77a638c8b5b0afcbbaeee493cf7c3fef7e1/pydantic_core-2.46.3-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:93fd339f23408a07e98950a89644f92c54d8729719a40b30c0a30bb9ebc55d23", size = 2332709, upload-time = "2026-04-20T14:42:16.134Z" },
- { url = "https://files.pythonhosted.org/packages/b3/21/795bf5fe5c0f379308b8ef19c50dedab2e7711dbc8d0c2acf08f1c7daa05/pydantic_core-2.46.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:23cbdb3aaa74dfe0837975dbf69b469753bbde8eacace524519ffdb6b6e89eb7", size = 2372428, upload-time = "2026-04-20T14:41:10.974Z" },
- { url = "https://files.pythonhosted.org/packages/45/b3/ed14c659cbe7605e3ef063077680a64680aec81eb1a04763a05190d49b7f/pydantic_core-2.46.3-cp313-cp313-win32.whl", hash = "sha256:610eda2e3838f401105e6326ca304f5da1e15393ae25dacae5c5c63f2c275b13", size = 1965601, upload-time = "2026-04-20T14:41:42.128Z" },
- { url = "https://files.pythonhosted.org/packages/ef/bb/adb70d9a762ddd002d723fbf1bd492244d37da41e3af7b74ad212609027e/pydantic_core-2.46.3-cp313-cp313-win_amd64.whl", hash = "sha256:68cc7866ed863db34351294187f9b729964c371ba33e31c26f478471c52e1ed0", size = 2071517, upload-time = "2026-04-20T14:43:36.096Z" },
- { url = "https://files.pythonhosted.org/packages/52/eb/66faefabebfe68bd7788339c9c9127231e680b11906368c67ce112fdb47f/pydantic_core-2.46.3-cp313-cp313-win_arm64.whl", hash = "sha256:f64b5537ac62b231572879cd08ec05600308636a5d63bcbdb15063a466977bec", size = 2035802, upload-time = "2026-04-20T14:43:38.507Z" },
- { url = "https://files.pythonhosted.org/packages/7f/db/a7bcb4940183fda36022cd18ba8dd12f2dff40740ec7b58ce7457befa416/pydantic_core-2.46.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:afa3aa644f74e290cdede48a7b0bee37d1c35e71b05105f6b340d484af536d9b", size = 2097614, upload-time = "2026-04-20T14:44:38.374Z" },
- { url = "https://files.pythonhosted.org/packages/24/35/e4066358a22e3e99519db370494c7528f5a2aa1367370e80e27e20283543/pydantic_core-2.46.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ced3310e51aa425f7f77da8bbbb5212616655bedbe82c70944320bc1dbe5e018", size = 1951896, upload-time = "2026-04-20T14:40:53.996Z" },
- { url = "https://files.pythonhosted.org/packages/87/92/37cf4049d1636996e4b888c05a501f40a43ff218983a551d57f9d5e14f0d/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e29908922ce9da1a30b4da490bd1d3d82c01dcfdf864d2a74aacee674d0bfa34", size = 1979314, upload-time = "2026-04-20T14:41:49.446Z" },
- { url = "https://files.pythonhosted.org/packages/d8/36/9ff4d676dfbdfb2d591cf43f3d90ded01e15b1404fd101180ed2d62a2fd3/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c9ff69140423eea8ed2d5477df3ba037f671f5e897d206d921bc9fdc39613e7", size = 2056133, upload-time = "2026-04-20T14:42:23.574Z" },
- { url = "https://files.pythonhosted.org/packages/bc/f0/405b442a4d7ba855b06eec8b2bf9c617d43b8432d099dfdc7bf999293495/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b675ab0a0d5b1c8fdb81195dc5bcefea3f3c240871cdd7ff9a2de8aa50772eb2", size = 2228726, upload-time = "2026-04-20T14:44:22.816Z" },
- { url = "https://files.pythonhosted.org/packages/e7/f8/65cd92dd5a0bd89ba277a98ecbfaf6fc36bbd3300973c7a4b826d6ab1391/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0087084960f209a9a4af50ecd1fb063d9ad3658c07bb81a7a53f452dacbfb2ba", size = 2301214, upload-time = "2026-04-20T14:44:48.792Z" },
- { url = "https://files.pythonhosted.org/packages/fd/86/ef96a4c6e79e7a2d0410826a68fbc0eccc0fd44aa733be199d5fcac3bb87/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed42e6cc8e1b0e2b9b96e2276bad70ae625d10d6d524aed0c93de974ae029f9f", size = 2099927, upload-time = "2026-04-20T14:41:40.196Z" },
- { url = "https://files.pythonhosted.org/packages/6d/53/269caf30e0096e0a8a8f929d1982a27b3879872cca2d917d17c2f9fdf4fe/pydantic_core-2.46.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:f1771ce258afb3e4201e67d154edbbae712a76a6081079fe247c2f53c6322c22", size = 2128789, upload-time = "2026-04-20T14:41:15.868Z" },
- { url = "https://files.pythonhosted.org/packages/00/b0/1a6d9b6a587e118482910c244a1c5acf4d192604174132efd12bf0ac486f/pydantic_core-2.46.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7610b6a5242a6c736d8ad47fd5fff87fcfe8f833b281b1c409c3d6835d9227f", size = 2173815, upload-time = "2026-04-20T14:44:25.152Z" },
- { url = "https://files.pythonhosted.org/packages/87/56/e7e00d4041a7e62b5a40815590114db3b535bf3ca0bf4dca9f16cef25246/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:ff5e7783bcc5476e1db448bf268f11cb257b1c276d3e89f00b5727be86dd0127", size = 2181608, upload-time = "2026-04-20T14:41:28.933Z" },
- { url = "https://files.pythonhosted.org/packages/e8/22/4bd23c3d41f7c185d60808a1de83c76cf5aeabf792f6c636a55c3b1ec7f9/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:9d2e32edcc143bc01e95300671915d9ca052d4f745aa0a49c48d4803f8a85f2c", size = 2326968, upload-time = "2026-04-20T14:42:03.962Z" },
- { url = "https://files.pythonhosted.org/packages/24/ac/66cd45129e3915e5ade3b292cb3bc7fd537f58f8f8dbdaba6170f7cabb74/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d83d1c6b87fa56b521479cff237e626a292f3b31b6345c15a99121b454c1", size = 2369842, upload-time = "2026-04-20T14:41:35.52Z" },
- { url = "https://files.pythonhosted.org/packages/a2/51/dd4248abb84113615473aa20d5545b7c4cd73c8644003b5259686f93996c/pydantic_core-2.46.3-cp314-cp314-win32.whl", hash = "sha256:07bc6d2a28c3adb4f7c6ae46aa4f2d2929af127f587ed44057af50bf1ce0f505", size = 1959661, upload-time = "2026-04-20T14:41:00.042Z" },
- { url = "https://files.pythonhosted.org/packages/20/eb/59980e5f1ae54a3b86372bd9f0fa373ea2d402e8cdcd3459334430f91e91/pydantic_core-2.46.3-cp314-cp314-win_amd64.whl", hash = "sha256:8940562319bc621da30714617e6a7eaa6b98c84e8c685bcdc02d7ed5e7c7c44e", size = 2071686, upload-time = "2026-04-20T14:43:16.471Z" },
- { url = "https://files.pythonhosted.org/packages/8c/db/1cf77e5247047dfee34bc01fa9bca134854f528c8eb053e144298893d370/pydantic_core-2.46.3-cp314-cp314-win_arm64.whl", hash = "sha256:5dcbbcf4d22210ced8f837c96db941bdb078f419543472aca5d9a0bb7cddc7df", size = 2026907, upload-time = "2026-04-20T14:43:31.732Z" },
- { url = "https://files.pythonhosted.org/packages/57/c0/b3df9f6a543276eadba0a48487b082ca1f201745329d97dbfa287034a230/pydantic_core-2.46.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d0fe3dce1e836e418f912c1ad91c73357d03e556a4d286f441bf34fed2dbeecf", size = 2095047, upload-time = "2026-04-20T14:42:37.982Z" },
- { url = "https://files.pythonhosted.org/packages/66/57/886a938073b97556c168fd99e1a7305bb363cd30a6d2c76086bf0587b32a/pydantic_core-2.46.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9ce92e58abc722dac1bf835a6798a60b294e48eb0e625ec9fd994b932ac5feee", size = 1934329, upload-time = "2026-04-20T14:43:49.655Z" },
- { url = "https://files.pythonhosted.org/packages/0b/7c/b42eaa5c34b13b07ecb51da21761297a9b8eb43044c864a035999998f328/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03e6467f0f5ab796a486146d1b887b2dc5e5f9b3288898c1b1c3ad974e53e4a", size = 1974847, upload-time = "2026-04-20T14:42:10.737Z" },
- { url = "https://files.pythonhosted.org/packages/e6/9b/92b42db6543e7de4f99ae977101a2967b63122d4b6cf7773812da2d7d5b5/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2798b6ba041b9d70acfb9071a2ea13c8456dd1e6a5555798e41ba7b0790e329c", size = 2041742, upload-time = "2026-04-20T14:40:44.262Z" },
- { url = "https://files.pythonhosted.org/packages/0f/19/46fbe1efabb5aa2834b43b9454e70f9a83ad9c338c1291e48bdc4fecf167/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9be3e221bdc6d69abf294dcf7aff6af19c31a5cdcc8f0aa3b14be29df4bd03b1", size = 2236235, upload-time = "2026-04-20T14:41:27.307Z" },
- { url = "https://files.pythonhosted.org/packages/77/da/b3f95bc009ad60ec53120f5d16c6faa8cabdbe8a20d83849a1f2b8728148/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13936129ce841f2a5ddf6f126fea3c43cd128807b5a59588c37cf10178c2e64", size = 2282633, upload-time = "2026-04-20T14:44:33.271Z" },
- { url = "https://files.pythonhosted.org/packages/cc/6e/401336117722e28f32fb8220df676769d28ebdf08f2f4469646d404c43a3/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28b5f2ef03416facccb1c6ef744c69793175fd27e44ef15669201601cf423acb", size = 2109679, upload-time = "2026-04-20T14:44:41.065Z" },
- { url = "https://files.pythonhosted.org/packages/fc/53/b289f9bc8756a32fe718c46f55afaeaf8d489ee18d1a1e7be1db73f42cc4/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:830d1247d77ad23852314f069e9d7ddafeec5f684baf9d7e7065ed46a049c4e6", size = 2108342, upload-time = "2026-04-20T14:42:50.144Z" },
- { url = "https://files.pythonhosted.org/packages/10/5b/8292fc7c1f9111f1b2b7c1b0dcf1179edcd014fc3ea4517499f50b829d71/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0793c90c1a3c74966e7975eaef3ed30ebdff3260a0f815a62a22adc17e4c01c", size = 2157208, upload-time = "2026-04-20T14:42:08.133Z" },
- { url = "https://files.pythonhosted.org/packages/2b/9e/f80044e9ec07580f057a89fc131f78dda7a58751ddf52bbe05eaf31db50f/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d2d0aead851b66f5245ec0c4fb2612ef457f8bbafefdf65a2bf9d6bac6140f47", size = 2167237, upload-time = "2026-04-20T14:42:25.412Z" },
- { url = "https://files.pythonhosted.org/packages/f8/84/6781a1b037f3b96be9227edbd1101f6d3946746056231bf4ac48cdff1a8d/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:2f40e4246676beb31c5ce77c38a55ca4e465c6b38d11ea1bd935420568e0b1ab", size = 2312540, upload-time = "2026-04-20T14:40:40.313Z" },
- { url = "https://files.pythonhosted.org/packages/3e/db/19c0839feeb728e7df03255581f198dfdf1c2aeb1e174a8420b63c5252e5/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:cf489cf8986c543939aeee17a09c04d6ffb43bfef8ca16fcbcc5cfdcbed24dba", size = 2369556, upload-time = "2026-04-20T14:41:09.427Z" },
- { url = "https://files.pythonhosted.org/packages/e0/15/3228774cb7cd45f5f721ddf1b2242747f4eb834d0c491f0c02d606f09fed/pydantic_core-2.46.3-cp314-cp314t-win32.whl", hash = "sha256:ffe0883b56cfc05798bf994164d2b2ff03efe2d22022a2bb080f3b626176dd56", size = 1949756, upload-time = "2026-04-20T14:41:25.717Z" },
- { url = "https://files.pythonhosted.org/packages/b8/2a/c79cf53fd91e5a87e30d481809f52f9a60dd221e39de66455cf04deaad37/pydantic_core-2.46.3-cp314-cp314t-win_amd64.whl", hash = "sha256:706d9d0ce9cf4593d07270d8e9f53b161f90c57d315aeec4fb4fd7a8b10240d8", size = 2051305, upload-time = "2026-04-20T14:43:18.627Z" },
- { url = "https://files.pythonhosted.org/packages/0b/db/d8182a7f1d9343a032265aae186eb063fe26ca4c40f256b21e8da4498e89/pydantic_core-2.46.3-cp314-cp314t-win_arm64.whl", hash = "sha256:77706aeb41df6a76568434701e0917da10692da28cb69d5fb6919ce5fdb07374", size = 2026310, upload-time = "2026-04-20T14:41:01.778Z" },
- { url = "https://files.pythonhosted.org/packages/66/7f/03dbad45cd3aa9083fbc93c210ae8b005af67e4136a14186950a747c6874/pydantic_core-2.46.3-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:9715525891ed524a0a1eb6d053c74d4d4ad5017677fb00af0b7c2644a31bae46", size = 2105683, upload-time = "2026-04-20T14:42:19.779Z" },
- { url = "https://files.pythonhosted.org/packages/26/22/4dc186ac8ea6b257e9855031f51b62a9637beac4d68ac06bee02f046f836/pydantic_core-2.46.3-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:9d2f400712a99a013aff420ef1eb9be077f8189a36c1e3ef87660b4e1088a874", size = 1940052, upload-time = "2026-04-20T14:43:59.274Z" },
- { url = "https://files.pythonhosted.org/packages/0d/ca/d376391a5aff1f2e8188960d7873543608130a870961c2b6b5236627c116/pydantic_core-2.46.3-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd2aab0e2e9dc2daf36bd2686c982535d5e7b1d930a1344a7bb6e82baab42a76", size = 1988172, upload-time = "2026-04-20T14:41:17.469Z" },
- { url = "https://files.pythonhosted.org/packages/0e/6b/523b9f85c23788755d6ab949329de692a2e3a584bc6beb67fef5e035aa9d/pydantic_core-2.46.3-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e9d76736da5f362fabfeea6a69b13b7f2be405c6d6966f06b2f6bfff7e64531", size = 2128596, upload-time = "2026-04-20T14:40:41.707Z" },
- { url = "https://files.pythonhosted.org/packages/34/42/f426db557e8ab2791bc7562052299944a118655496fbff99914e564c0a94/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:b12dd51f1187c2eb489af8e20f880362db98e954b54ab792fa5d92e8bcc6b803", size = 2091877, upload-time = "2026-04-20T14:43:27.091Z" },
- { url = "https://files.pythonhosted.org/packages/5c/4f/86a832a9d14df58e663bfdf4627dc00d3317c2bd583c4fb23390b0f04b8e/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f00a0961b125f1a47af7bcc17f00782e12f4cd056f83416006b30111d941dfa3", size = 1932428, upload-time = "2026-04-20T14:40:45.781Z" },
- { url = "https://files.pythonhosted.org/packages/11/1a/fe857968954d93fb78e0d4b6df5c988c74c4aaa67181c60be7cfe327c0ca/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57697d7c056aca4bbb680200f96563e841a6386ac1129370a0102592f4dddff5", size = 1997550, upload-time = "2026-04-20T14:44:02.425Z" },
- { url = "https://files.pythonhosted.org/packages/17/eb/9d89ad2d9b0ba8cd65393d434471621b98912abb10fbe1df08e480ba57b5/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd35aa21299def8db7ef4fe5c4ff862941a9a158ca7b63d61e66fe67d30416b4", size = 2137657, upload-time = "2026-04-20T14:42:45.149Z" },
- { url = "https://files.pythonhosted.org/packages/1f/da/99d40830684f81dec901cac521b5b91c095394cc1084b9433393cde1c2df/pydantic_core-2.46.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:13afdd885f3d71280cf286b13b310ee0f7ccfefd1dbbb661514a474b726e2f25", size = 2107973, upload-time = "2026-04-20T14:42:06.175Z" },
- { url = "https://files.pythonhosted.org/packages/99/a5/87024121818d75bbb2a98ddbaf638e40e7a18b5e0f5492c9ca4b1b316107/pydantic_core-2.46.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f91c0aff3e3ee0928edd1232c57f643a7a003e6edf1860bc3afcdc749cb513f3", size = 1947191, upload-time = "2026-04-20T14:43:14.319Z" },
- { url = "https://files.pythonhosted.org/packages/60/62/0c1acfe10945b83a6a59d19fbaa92f48825381509e5701b855c08f13db76/pydantic_core-2.46.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6529d1d128321a58d30afcc97b49e98836542f68dd41b33c2e972bb9e5290536", size = 2123791, upload-time = "2026-04-20T14:43:22.766Z" },
- { url = "https://files.pythonhosted.org/packages/75/3e/3b2393b4c8f44285561dc30b00cf307a56a2eff7c483a824db3b8221ca51/pydantic_core-2.46.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:975c267cff4f7e7272eacbe50f6cc03ca9a3da4c4fbd66fffd89c94c1e311aa1", size = 2153197, upload-time = "2026-04-20T14:44:27.932Z" },
- { url = "https://files.pythonhosted.org/packages/ba/75/5af02fb35505051eee727c061f2881c555ab4f8ddb2d42da715a42c9731b/pydantic_core-2.46.3-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2b8e4f2bbdf71415c544b4b1138b8060db7b6611bc927e8064c769f64bed651c", size = 2181073, upload-time = "2026-04-20T14:43:20.729Z" },
- { url = "https://files.pythonhosted.org/packages/10/92/7e0e1bd9ca3c68305db037560ca2876f89b2647deb2f8b6319005de37505/pydantic_core-2.46.3-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e61ea8e9fff9606d09178f577ff8ccdd7206ff73d6552bcec18e1033c4254b85", size = 2315886, upload-time = "2026-04-20T14:44:04.826Z" },
- { url = "https://files.pythonhosted.org/packages/b8/d8/101655f27eaf3e44558ead736b2795d12500598beed4683f279396fa186e/pydantic_core-2.46.3-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b504bda01bafc69b6d3c7a0c7f039dcf60f47fab70e06fe23f57b5c75bdc82b8", size = 2360528, upload-time = "2026-04-20T14:40:47.431Z" },
- { url = "https://files.pythonhosted.org/packages/07/0f/1c34a74c8d07136f0d729ffe5e1fdab04fbdaa7684f61a92f92511a84a15/pydantic_core-2.46.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b00b76f7142fc60c762ce579bd29c8fa44aaa56592dd3c54fab3928d0d4ca6ff", size = 2184144, upload-time = "2026-04-20T14:42:57Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" },
+ { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" },
+ { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" },
+ { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" },
+ { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" },
+ { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" },
+ { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" },
+ { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" },
+ { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" },
+ { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" },
+ { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" },
+ { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" },
+ { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" },
+ { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" },
+ { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" },
+ { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" },
+ { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" },
+ { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" },
+ { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" },
+ { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" },
+ { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" },
+ { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" },
+ { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" },
+ { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" },
+ { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" },
+ { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" },
+ { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" },
+ { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" },
+ { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" },
+ { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" },
+ { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" },
+ { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" },
+ { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" },
+ { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" },
+ { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" },
+ { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" },
+ { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" },
+ { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" },
+ { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" },
+ { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" },
+ { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" },
]
[[package]]
name = "pydantic-graph"
-version = "1.89.1"
+version = "1.100.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "httpx" },
@@ -3108,23 +3148,23 @@ dependencies = [
{ name = "pydantic" },
{ name = "typing-inspection" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ea/64/f26c4d17568ab06ae576af0771ad83753cc2661bf9ca5a5698d01404ee20/pydantic_graph-1.89.1.tar.gz", hash = "sha256:99b8ae10fd10400208ee469355969e2dc253a600c3f667a5e790874064846e85", size = 59257, upload-time = "2026-05-01T19:09:40.998Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/90/8b/eee672fa01eec3ea34e7d8962d54aa16d658ad0723466122a7ba2828caa1/pydantic_graph-1.100.0.tar.gz", hash = "sha256:7651fa6ccce9d88a35b1d2cfe79d5d1dbb2415457503009195014bf31f6075bd", size = 62559, upload-time = "2026-05-21T04:05:01.682Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/7e/52/9070e11f52424fe34e2ca96ae122902cab7c4325e2a90b33d44a410843b1/pydantic_graph-1.89.1-py3-none-any.whl", hash = "sha256:2ebce28573e81de9924c2ff68f90f949ccd96bbc2e8dc6cf4bb96208b34fbec0", size = 73065, upload-time = "2026-05-01T19:09:32.912Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/12/21d6a68743229553c8ba9ca19da73c2d7e18dc6f8fbfd56c8c12c5587cb6/pydantic_graph-1.100.0-py3-none-any.whl", hash = "sha256:ba0b0a70bfd320b58b7012614b857f4b12dbb95b233da7127a6ff973c03d24e7", size = 80101, upload-time = "2026-05-21T04:04:53.635Z" },
]
[[package]]
name = "pydantic-settings"
-version = "2.14.0"
+version = "2.14.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
{ name = "python-dotenv" },
{ name = "typing-inspection" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/42/98/c8345dccdc31de4228c039a98f6467a941e39558da41c1744fbe29fa5666/pydantic_settings-2.14.0.tar.gz", hash = "sha256:24285fd4b0e0c06507dd9fdfd331ee23794305352aaec8fc4eb92d4047aeb67d", size = 235709, upload-time = "2026-04-20T13:37:40.293Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/07/60/1d1e59c9c90d54591469ada7d268251f71c24bdb765f1a8a832cee8c6653/pydantic_settings-2.14.1.tar.gz", hash = "sha256:e874d3bec7e787b0c9958277956ed9b4dd5de6a80e162188fdaff7c5e26fd5fa", size = 235551, upload-time = "2026-05-08T13:40:06.542Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/01/dd/bebff3040138f00ae8a102d426b27349b9a49acc310fcae7f92112d867e3/pydantic_settings-2.14.0-py3-none-any.whl", hash = "sha256:fc8d5d692eb7092e43c8647c1c35a3ecd00e040fcf02ed86f4cb5458ca62182e", size = 60940, upload-time = "2026-04-20T13:37:38.586Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/8d/f1af3832f5e6eb13ba94ee809e72b8ecb5eef226d27ee0bef7d963d943c7/pydantic_settings-2.14.1-py3-none-any.whl", hash = "sha256:6e3c7edfd8277687cdc598f56e5cff0e9bfff0910a3749deaa8d4401c3a2b9de", size = 60964, upload-time = "2026-05-08T13:40:04.958Z" },
]
[[package]]
@@ -3152,15 +3192,15 @@ crypto = [
[[package]]
name = "pymdown-extensions"
-version = "10.21.2"
+version = "10.21.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markdown" },
{ name = "pyyaml" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/df/08/f1c908c581fd11913da4711ea7ba32c0eee40b0190000996bb863b0c9349/pymdown_extensions-10.21.2.tar.gz", hash = "sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc", size = 853922, upload-time = "2026-03-29T15:01:55.233Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/9e/26/d1015444da4d952a1ca487a236b522eb979766f0295a0bd0c5fc089989a9/pymdown_extensions-10.21.3.tar.gz", hash = "sha256:72cfcf55f07aea0d4af2c4f11dd4e52466ddfb1bb819673146398e0bd3a77354", size = 854140, upload-time = "2026-05-13T12:57:32.267Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl", hash = "sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638", size = 268901, upload-time = "2026-03-29T15:01:53.244Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/85/545a951eecc270fcd688288c600017e2050a1aacb56c711d208586d3e470/pymdown_extensions-10.21.3-py3-none-any.whl", hash = "sha256:d7a5d08014fc571e80ca21dd6f854e31f94c489800350564d55d15b3c41e76b6", size = 269002, upload-time = "2026-05-13T12:57:30.296Z" },
]
[[package]]
@@ -3229,11 +3269,11 @@ wheels = [
[[package]]
name = "python-multipart"
-version = "0.0.27"
+version = "0.0.29"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/69/9b/f23807317a113dc36e74e75eb265a02dd1a4d9082abc3c1064acd22997c4/python_multipart-0.0.27.tar.gz", hash = "sha256:9870a6a8c5a20a5bf4f07c017bd1489006ff8836cff097b6933355ee2b49b602", size = 44043, upload-time = "2026-04-27T10:51:26.649Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/4e/fe/70bd71a6738b09a0bdf6480ca6436b167469ca4578b2a0efbe390b4b0e70/python_multipart-0.0.29.tar.gz", hash = "sha256:643e93849196645e2dbdd81a0f8829a23123ad7f797a84a364c6fb3563f18904", size = 45678, upload-time = "2026-05-17T17:29:47.654Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/99/78/4126abcbdbd3c559d43e0db7f7b9173fc6befe45d39a2856cc0b8ec2a5a6/python_multipart-0.0.27-py3-none-any.whl", hash = "sha256:6fccfad17a27334bd0193681b369f476eda3409f17381a2d65aa7df3f7275645", size = 29254, upload-time = "2026-04-27T10:51:24.997Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/cb/769cfc37177252872a45a71f3fbdde9d51b471a3f3c14bfe95dde3407386/python_multipart-0.0.29-py3-none-any.whl", hash = "sha256:2ddcc971cef266225f54f552d8fa10bcfbb1f14446caec199060daac59ff2d69", size = 29640, upload-time = "2026-05-17T17:29:45.69Z" },
]
[[package]]
@@ -3453,7 +3493,6 @@ book = [
{ name = "altair" },
{ name = "autodocsumm" },
{ name = "duckdb" },
- { name = "fastapi" },
{ name = "marimo" },
{ name = "plotly" },
{ name = "sympy" },
@@ -3472,6 +3511,7 @@ dev = [
{ name = "types-python-dateutil" },
]
docs = [
+ { name = "fastapi" },
{ name = "griffe-pydantic" },
{ name = "griffe-typingdoc" },
{ name = "kaleido" },
@@ -3499,7 +3539,7 @@ requires-dist = [
{ name = "ccy", specifier = ">=2.0.0" },
{ name = "ccy", extras = ["holidays"], marker = "extra == 'ai'", specifier = ">=2.0.0" },
{ name = "duckdb", marker = "extra == 'book'", specifier = ">=1.4.4" },
- { name = "fastapi", marker = "extra == 'book'", specifier = ">=0.129.0" },
+ { name = "fastapi", marker = "extra == 'docs'", specifier = ">=0.129.0" },
{ name = "ghp-import", marker = "extra == 'dev'", specifier = ">=2.0.2" },
{ name = "google-genai", marker = "extra == 'ai'", specifier = ">=1.61.0" },
{ name = "griffe-pydantic", marker = "extra == 'docs'", specifier = ">=1.1.0" },
@@ -3567,7 +3607,7 @@ wheels = [
[[package]]
name = "requests"
-version = "2.33.1"
+version = "2.34.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
@@ -3575,9 +3615,9 @@ dependencies = [
{ name = "idna" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" },
]
[[package]]
@@ -3712,27 +3752,27 @@ wheels = [
[[package]]
name = "ruff"
-version = "0.15.12"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/99/43/3291f1cc9106f4c63bdce7a8d0df5047fe8422a75b091c16b5e9355e0b11/ruff-0.15.12.tar.gz", hash = "sha256:ecea26adb26b4232c0c2ca19ccbc0083a68344180bba2a600605538ce51a40a6", size = 4643852, upload-time = "2026-04-24T18:17:14.305Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/c3/6e/e78ffb61d4686f3d96ba3df2c801161843746dcbcbb17a1e927d4829312b/ruff-0.15.12-py3-none-linux_armv6l.whl", hash = "sha256:f86f176e188e94d6bdbc09f09bfd9dc729059ad93d0e7390b5a73efe19f8861c", size = 10640713, upload-time = "2026-04-24T18:17:22.841Z" },
- { url = "https://files.pythonhosted.org/packages/ae/08/a317bc231fb9e7b93e4ef3089501e51922ff88d6936ce5cf870c4fe55419/ruff-0.15.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e3bcd123364c3770b8e1b7baaf343cc99a35f197c5c6e8af79015c666c423a6c", size = 11069267, upload-time = "2026-04-24T18:17:30.105Z" },
- { url = "https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fe87510d000220aa1ed530d4448a7c696a0cae1213e5ec30e5874287b66557b5", size = 10397182, upload-time = "2026-04-24T18:17:07.177Z" },
- { url = "https://files.pythonhosted.org/packages/71/e0/3310fc6d1b5e1fdea22bf3b1b807c7e187b581021b0d7d4514cccdb5fb71/ruff-0.15.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84a1630093121375a3e2a95b4a6dc7b59e2b4ee76216e32d81aae550a832d002", size = 10758012, upload-time = "2026-04-24T18:16:55.759Z" },
- { url = "https://files.pythonhosted.org/packages/11/c1/a606911aee04c324ddaa883ae418f3569792fd3c4a10c50e0dd0a2311e1e/ruff-0.15.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb129f40f114f089ebe0ca56c0d251cf2061b17651d464bb6478dc01e69f11f5", size = 10447479, upload-time = "2026-04-24T18:16:51.677Z" },
- { url = "https://files.pythonhosted.org/packages/9d/68/4201e8444f0894f21ab4aeeaee68aa4f10b51613514a20d80bd628d57e88/ruff-0.15.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0c862b172d695db7598426b8af465e7e9ac00a3ea2a3630ee67eb82e366aaa6", size = 11234040, upload-time = "2026-04-24T18:17:16.529Z" },
- { url = "https://files.pythonhosted.org/packages/34/ff/8a6d6cf4ccc23fd67060874e832c18919d1557a0611ebef03fdb01fff11e/ruff-0.15.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2849ea9f3484c3aca43a82f484210370319e7170df4dfe4843395ddf6c57bc33", size = 12087377, upload-time = "2026-04-24T18:17:04.944Z" },
- { url = "https://files.pythonhosted.org/packages/85/f6/c669cf73f5152f623d34e69866a46d5e6185816b19fcd5b6dd8a2d299922/ruff-0.15.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e77c7e51c07fe396826d5969a5b846d9cd4c402535835fb6e21ce8b28fef847", size = 11367784, upload-time = "2026-04-24T18:17:25.409Z" },
- { url = "https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b2f4f2f3b1026b5fb449b467d9264bf22067b600f7b6f41fc5958909f449d0", size = 11344088, upload-time = "2026-04-24T18:17:12.258Z" },
- { url = "https://files.pythonhosted.org/packages/c2/8d/49afab3645e31e12c590acb6d3b5b69d7aab5b81926dbaf7461f9441f37a/ruff-0.15.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9ba3b8f1afd7e2e43d8943e55f249e13f9682fde09711644a6e7290eb4f3e339", size = 11271770, upload-time = "2026-04-24T18:17:02.457Z" },
- { url = "https://files.pythonhosted.org/packages/46/06/33f41fe94403e2b755481cdfb9b7ef3e4e0ed031c4581124658d935d52b4/ruff-0.15.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e852ba9fdc890655e1d78f2df1499efbe0e54126bd405362154a75e2bde159c5", size = 10719355, upload-time = "2026-04-24T18:17:27.648Z" },
- { url = "https://files.pythonhosted.org/packages/0d/59/18aa4e014debbf559670e4048e39260a85c7fcee84acfd761ac01e7b8d35/ruff-0.15.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dd8aed930da53780d22fc70bdf84452c843cf64f8cb4eb38984319c24c5cd5fd", size = 10462758, upload-time = "2026-04-24T18:17:32.347Z" },
- { url = "https://files.pythonhosted.org/packages/25/e7/cc9f16fd0f3b5fddcbd7ec3d6ae30c8f3fde1047f32a4093a98d633c6570/ruff-0.15.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:01da3988d225628b709493d7dc67c3b9b12c0210016b08690ef9bd27970b262b", size = 10953498, upload-time = "2026-04-24T18:17:20.674Z" },
- { url = "https://files.pythonhosted.org/packages/72/7a/a9ba7f98c7a575978698f4230c5e8cc54bbc761af34f560818f933dafa0c/ruff-0.15.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9cae0f92bd5700d1213188b31cd3bdd2b315361296d10b96b8e2337d3d11f53e", size = 11447765, upload-time = "2026-04-24T18:17:09.755Z" },
- { url = "https://files.pythonhosted.org/packages/ea/f9/0ae446942c846b8266059ad8a30702a35afae55f5cdc54c5adf8d7afdc27/ruff-0.15.12-py3-none-win32.whl", hash = "sha256:d0185894e038d7043ba8fd6aee7499ece6462dc0ea9f1e260c7451807c714c20", size = 10657277, upload-time = "2026-04-24T18:17:18.591Z" },
- { url = "https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl", hash = "sha256:c87a162d61ab3adca47c03f7f717c68672edec7d1b5499e652331780fe74950d", size = 11837758, upload-time = "2026-04-24T18:17:00.113Z" },
- { url = "https://files.pythonhosted.org/packages/c0/98/6beb4b351e472e5f4c4613f7c35a5290b8be2497e183825310c4c3a3984b/ruff-0.15.12-py3-none-win_arm64.whl", hash = "sha256:a538f7a82d061cee7be55542aca1d86d1393d55d81d4fcc314370f4340930d4f", size = 11120821, upload-time = "2026-04-24T18:16:57.979Z" },
+version = "0.15.14"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/dc/8a/8bce2894573e9dae6ff4d77fe34ad727d79b9e6238ad288c5638990d90f6/ruff-0.15.14.tar.gz", hash = "sha256:48e866b165be4a9bdbf310f7d3c9a07edef2fe8cd63ffeb4e00bb590506ebf9f", size = 4700910, upload-time = "2026-05-21T14:34:55.177Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b9/c8/74a92c6ff9fcfb4f1f947126d3ebee8389276e161ecc85de5bda7cda51bd/ruff-0.15.14-py3-none-linux_armv6l.whl", hash = "sha256:8dd2db9416e487c8d4b01fa7056bb02c4d05969d4f8d17a08c229c2f4ff3c108", size = 10739177, upload-time = "2026-05-21T14:34:37.332Z" },
+ { url = "https://files.pythonhosted.org/packages/45/91/254a35c20acc38a7223c9d2d594af12e794432464f2cdeb52af1dc4a892d/ruff-0.15.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:be4ff55af755bd71a00ab3dc6bd7ffc467bd76e0df6881e286c2e3d23e8fb43b", size = 11144969, upload-time = "2026-05-21T14:34:43.978Z" },
+ { url = "https://files.pythonhosted.org/packages/56/9e/d13e40f83b8d0a94430e6778ce1d94a43b38cf2efe63278bdd2b4c65abbf/ruff-0.15.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:48d5909d7d06276ce7dde6d32bfa4b0d4cb2651145cd8ee4b440722cbc77832f", size = 10478207, upload-time = "2026-05-21T14:34:48.378Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/f1/b15a7839fa4f332f8acec78e20564f26bb2d866e3d21710b877fd0263000/ruff-0.15.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca8cbfa94c4f90984a67561978602746d4cd27103568f745fa90eee3f0d4107d", size = 10818459, upload-time = "2026-05-21T14:34:22.318Z" },
+ { url = "https://files.pythonhosted.org/packages/45/33/53d651177f84f94b400a0e27f8824eeada3dddc9d5ee8aeb048f4352a520/ruff-0.15.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a6bbc0333f1ab053423bcbf6226477d266ca7cec7738c4c8e3f55647803f3c4", size = 10541800, upload-time = "2026-05-21T14:34:20.209Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/a6/868f87e0bf9786ed24b5d0d0ad8676b8a94fd1912f42cddf9cfc7857818a/ruff-0.15.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a24a4f7605d7003a6674d4387651effd939dead3fddd0f36561eb77a9a2e542", size = 11342149, upload-time = "2026-05-21T14:34:46.365Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/8b/38cd5c19faffdcc05a408d2b78edccc69492ab9720eadb49ea15ef80d768/ruff-0.15.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:049b5326e53ed80978f2fc041a280603f69dd6b0c95464342a2bb4572d9d9e2f", size = 12212563, upload-time = "2026-05-21T14:34:28.579Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/4d/a3c5b874a556d5731e3e657aaf04311bb76f0a5c3ec220ed43051be6b64b/ruff-0.15.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4ed42e6696c8dfa5f06728e6441993901f548eb92d73bc472cb5a38d1395fbf", size = 11493299, upload-time = "2026-05-21T14:34:41.836Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/c0/56472c251d09858a53e51efbd485b09e1995d8731668b76d52e5dd6ee0f1/ruff-0.15.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715c543cf450c4888251f91c52f1942a800541d9bddd7ac060aa4e6b77ae7cba", size = 11455931, upload-time = "2026-05-21T14:34:57.276Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/4a/e2e7b4d8dbf233d4eace59c75bc3435fa6d8bd3bae82d351d4e4300c0fd1/ruff-0.15.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:72ebab6013ec887d439d8b7593737a0a4ffb06d45d209d4e4bf2e92813082d3f", size = 11400794, upload-time = "2026-05-21T14:34:39.773Z" },
+ { url = "https://files.pythonhosted.org/packages/97/c7/83c0539fe34c3e09136204d1e75d6052492364e0b3cb05e9465423f567d7/ruff-0.15.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:49072d36abdbe97a8dd7f480afe9c675699c0c495d4c84076e2c1203c4550581", size = 10804759, upload-time = "2026-05-21T14:34:31.045Z" },
+ { url = "https://files.pythonhosted.org/packages/86/a6/18f2bfc095a2ab4a78745644e428205532ce6653a5d0fa8501572891534d/ruff-0.15.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:958522aee105068640c2c2ceae08f413ae44d922f52a1374ac13d6a96032fc93", size = 10539517, upload-time = "2026-05-21T14:34:53.064Z" },
+ { url = "https://files.pythonhosted.org/packages/54/3a/5a8b3b69c654d4e4bf1d246ac5b49cbcdac6eaab6905925f8915f31e3b80/ruff-0.15.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f3707da619a143a2e8830e2abab8224478d69ace2d28cb6c20543ae97c36bf61", size = 11065169, upload-time = "2026-05-21T14:34:24.484Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/c5/8864e4e7925b836ea354b31d57641ec03830564e281a8b6f061f8c3e0ec1/ruff-0.15.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:bb01d645694e3ec0102105d07ef2d53703970407d59c04e59d3ba0b7a1d53553", size = 11560214, upload-time = "2026-05-21T14:34:50.975Z" },
+ { url = "https://files.pythonhosted.org/packages/36/38/012bf76752e1f89ed50b77b99532d90f3a3e287bc7918e1fc0948ac866ac/ruff-0.15.14-py3-none-win32.whl", hash = "sha256:6d0c1ad2a0ab718d39b6d8fd2217981ce4d625cd96a720095f798fb47d8b13e6", size = 10805548, upload-time = "2026-05-21T14:34:33.453Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/b7/4ea2c170f10ad760fff2a5250beb18897719dc8b52b53a24cddbb9dd3f19/ruff-0.15.14-py3-none-win_amd64.whl", hash = "sha256:802342981e056db3851a7836e5b070f8f15f67d4a685ae2a6160939d364b2902", size = 11939523, upload-time = "2026-05-21T14:34:18.077Z" },
+ { url = "https://files.pythonhosted.org/packages/62/d5/bc97ff895ec35cf3925d4bd60f3b39d822f377a446906ec9bcc87405e59b/ruff-0.15.14-py3-none-win_arm64.whl", hash = "sha256:ff47b90a9ef6a40c9e2f3b479c1fb78531adf055b94c1eba0a7ba04b31951826", size = 11208607, upload-time = "2026-05-21T14:34:26.525Z" },
]
[[package]]
@@ -4040,15 +4080,15 @@ wheels = [
[[package]]
name = "sse-starlette"
-version = "3.4.1"
+version = "3.4.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
{ name = "starlette" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/e1/9a/f35932a8c0eb6b2287b66fa65a0321df8c84e4e355a659c1841a37c39fdb/sse_starlette-3.4.1.tar.gz", hash = "sha256:f780bebcf6c8997fe514e3bd8e8c648d8284976b391c8bed0bcb1f611632b555", size = 35127, upload-time = "2026-04-26T13:32:32.292Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f7/2b/58abc2d1fd397e7dde08e947e05c884d8ef2f78d5e2588c17a12d42d6994/sse_starlette-3.4.4.tar.gz", hash = "sha256:07e0fa0460138baf25cdd5fb28683472c3995dc1642225191b3832d62526bcb0", size = 31819, upload-time = "2026-05-12T17:37:17.019Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ff/07/45c21ed03d708c477367305726b89919b020a3a2a01f72aaf5ad941caf35/sse_starlette-3.4.1-py3-none-any.whl", hash = "sha256:6b43cf21f1d574d582a6e1b0cfbde1c94dc86a32a701a7168c99c4475c6bd1d0", size = 16487, upload-time = "2026-04-26T13:32:30.819Z" },
+ { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" },
]
[[package]]
@@ -4210,16 +4250,16 @@ wheels = [
[[package]]
name = "tomlkit"
-version = "0.14.0"
+version = "0.15.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/c3/af/14b24e41977adb296d6bd1fb59402cf7d60ce364f90c890bd2ec65c43b5a/tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064", size = 187167, upload-time = "2026-01-13T01:14:53.304Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/51/db/03eaf4331631ef6b27d6e3c9b68c54dc6f0d63d87201fed600cc409307fd/tomlkit-0.15.0.tar.gz", hash = "sha256:7d1a9ecba3086638211b13814ea79c90dd54dd11993564376f3aa92271f5c7a3", size = 161875, upload-time = "2026-05-10T07:38:22.245Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680", size = 39310, upload-time = "2026-01-13T01:14:51.965Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/43/8bd850ee71a191bf072e31302c73a66be413fecdd98fdcd111ecbcce13ca/tomlkit-0.15.0-py3-none-any.whl", hash = "sha256:4dbc8f0fc024412b57ced8757ac7461305126a648ff8c2c807fcb8e133a78738", size = 41328, upload-time = "2026-05-10T07:38:23.517Z" },
]
[[package]]
name = "torch"
-version = "2.11.0+cu126"
+version = "2.12.0+cu126"
source = { registry = "https://download.pytorch.org/whl/cu126" }
dependencies = [
{ name = "cuda-bindings", marker = "sys_platform == 'linux'" },
@@ -4238,24 +4278,24 @@ dependencies = [
{ name = "typing-extensions" },
]
wheels = [
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:36ae7e5522b86e5d74d70f0c1a5b32eda3a0ae1635749060d0335a8856c778ea", upload-time = "2026-04-27T20:50:19Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a992bf8b3f2f4a8e0f2caf204ea1b1206466535eb485d4f61caf69a881e2fae7", upload-time = "2026-04-27T20:50:51Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp311-cp311-win_amd64.whl", hash = "sha256:ce9aeead7950ae8eb48891568f9314a9a4130996b55e797c75e0c0d2846714ae", upload-time = "2026-04-27T20:52:26Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:dc05f49d97c04a32d139df19d77209ceca3c484083f0db1dc332f168a19ef8d8", upload-time = "2026-04-27T20:54:02Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9235c0c2f5032d1f8af75dd97493f3ad12aaedf81c0f3fab2d13c1d90bc54ff9", upload-time = "2026-04-27T20:54:34Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp312-cp312-win_amd64.whl", hash = "sha256:1b7d728ddcf84b12f64ca10ec5f6ce91dd9edcc5e62ed5f0a7260ca00f029e8b", upload-time = "2026-04-27T20:56:19Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:3bbbfc7ed16d878aef9b91a8e78c033bf131ffb8357e23ff80911210683a31b3", upload-time = "2026-04-27T20:58:05Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5f6e2a5709876dd25a5fe0d4f0ab1ef33b33bb60431fcbfe768ab6468dcfe88a", upload-time = "2026-04-27T20:58:40Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp313-cp313-win_amd64.whl", hash = "sha256:12f7f1b73ba522576ea2050fbe2dc720a30cf681c73b8ea2d4f5480d66fad8f3", upload-time = "2026-04-27T21:00:22Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:7945e39fe82b85d7d018f68085ffaa6c5305a1634adb0bc792d835953b36fc9b", upload-time = "2026-04-27T21:02:11Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:47adcccf4de0fdb4a1550f477d919daec74f1007d15d939acfcef3080d26f9ec", upload-time = "2026-04-27T21:02:46Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp313-cp313t-win_amd64.whl", hash = "sha256:478ba5a57cba329f6878cf4c9bf6baa21c17c2e2b39784e0f7d3ee56b10a85a7", upload-time = "2026-04-27T21:04:33Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:9bef6e2c04c24163bf0cafab82ee2aecdf503b1817f936e1e6f5c652231b06f1", upload-time = "2026-04-27T21:06:48Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:09083ecca5f6f6214b021d12c971763267cd1270df9ffcbb6291c815c483b1a0", upload-time = "2026-04-27T21:07:26Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp314-cp314-win_amd64.whl", hash = "sha256:146a8016c5abba673ea8af7d78e45e297b23e1f53c2a6749418a7c94f5d8d9ed", upload-time = "2026-04-27T21:09:25Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:561ac0b9041f43c6acb927526f892cd64304eff8725536be0d86e27992588ab3", upload-time = "2026-04-27T21:11:25Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:e0e31c656a407c11164d2d9257e31773562ca9ad82f755851dac511d48e9fc4d", upload-time = "2026-04-27T21:12:00Z" },
- { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.11.0%2Bcu126-cp314-cp314t-win_amd64.whl", hash = "sha256:3b4deea8cb01bf8f336ac8f87298f67a44835044f24deea8e0dc2d33f5d3f68d", upload-time = "2026-04-27T21:13:49Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:082514b013f2c091b1902bf94bb0f69a8c3e9ac93ab084edf541ceb1b146d8fe", upload-time = "2026-05-12T23:23:03Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:94eb1c8fc870446adfbeb550633708529c1baa9907e2c82d3bb2e76c7dd1d644", upload-time = "2026-05-12T23:23:38Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp311-cp311-win_amd64.whl", hash = "sha256:dbbdaf04ca82e568228ffbff7a269d5a86cc00ed5a606a2b6d13c205a269fb69", upload-time = "2026-05-12T23:25:13Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7b13d35e799c5b970403ba8ed7f33041ae5c1c0a2b6320ba3288082df3df3a45", upload-time = "2026-05-12T23:26:44Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:792711a06946fa1dcd1a86d46c387dd413744b9324262ff77c05f61830d0e678", upload-time = "2026-05-12T23:27:16Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp312-cp312-win_amd64.whl", hash = "sha256:194f5bd0721b968e769777b8ab4dbe51dd7ffdfdf295db045093b94a1b9765bb", upload-time = "2026-05-12T23:28:57Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:3cf6676d41d8d57350d45d738b35cbed7671e36242a836993cd69b0c18819177", upload-time = "2026-05-12T23:30:41Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8727a3901c34bf9825069aaf82f0984dd28ff622e1a727d2534555cd778fc5dc", upload-time = "2026-05-12T23:31:17Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp313-cp313-win_amd64.whl", hash = "sha256:163a5020765016b11de7580e61d2d94e9595b8a8d0e5641c10b469fc34360e47", upload-time = "2026-05-12T23:32:53Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:debd0815f6a2383c2a69cc2a40b4b3566ab339677f2a0cf8faff23daaa9ae03d", upload-time = "2026-05-12T23:34:19Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1719b4ed6cbe5ff750e5636b2625bade85caeea937436d8b235f5e49e471875d", upload-time = "2026-05-12T23:34:46Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp313-cp313t-win_amd64.whl", hash = "sha256:13558cc2c4432c96deab6e5c4a8b3367d98a3ae5ec15123607529ff2f0f12ed3", upload-time = "2026-05-12T23:36:14Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e9be67e6c64b980cfd75f8cf09463d7aea84dd75cddd9a90c6b2363be221a6b5", upload-time = "2026-05-12T23:37:39Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:149a376813baf61f4a6d1fa2b3dd046a41c98b91d7d2c22a0989984642373f73", upload-time = "2026-05-12T23:38:07Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp314-cp314-win_amd64.whl", hash = "sha256:4b05a1e104739100179ffb0d94daf17f1808b2f71cd895841729ccf06460b0d3", upload-time = "2026-05-12T23:39:31Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:16f9187e12efffae37983c2edd7560cf7b1828bae84a30a3fd6733b3adcbdc6b", upload-time = "2026-05-12T23:40:51Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6c1535d135828f839da6478bdfa94bcb4cf1dbd1bad06ca3d8ca07c94451348f", upload-time = "2026-05-12T23:41:20Z" },
+ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp314-cp314t-win_amd64.whl", hash = "sha256:ec030dd30287eda9338ee401dcca722758862337bd0cdb904325b8eeba5c2694", upload-time = "2026-05-12T23:42:43Z" },
]
[[package]]
@@ -4272,30 +4312,30 @@ wheels = [
[[package]]
name = "triton"
-version = "3.6.0"
+version = "3.7.0"
source = { registry = "https://pypi.org/simple" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0f/2c/96f92f3c60387e14cc45aed49487f3486f89ea27106c1b1376913c62abe4/triton-3.6.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49df5ef37379c0c2b5c0012286f80174fcf0e073e5ade1ca9a86c36814553651", size = 176081190, upload-time = "2026-01-20T16:16:00.523Z" },
- { url = "https://files.pythonhosted.org/packages/e0/12/b05ba554d2c623bffa59922b94b0775673de251f468a9609bc9e45de95e9/triton-3.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8e323d608e3a9bfcc2d9efcc90ceefb764a82b99dea12a86d643c72539ad5d3", size = 188214640, upload-time = "2026-01-20T16:00:35.869Z" },
- { url = "https://files.pythonhosted.org/packages/17/5d/08201db32823bdf77a0e2b9039540080b2e5c23a20706ddba942924ebcd6/triton-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:374f52c11a711fd062b4bfbb201fd9ac0a5febd28a96fb41b4a0f51dde3157f4", size = 176128243, upload-time = "2026-01-20T16:16:07.857Z" },
- { url = "https://files.pythonhosted.org/packages/ab/a8/cdf8b3e4c98132f965f88c2313a4b493266832ad47fb52f23d14d4f86bb5/triton-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74caf5e34b66d9f3a429af689c1c7128daba1d8208df60e81106b115c00d6fca", size = 188266850, upload-time = "2026-01-20T16:00:43.041Z" },
- { url = "https://files.pythonhosted.org/packages/3c/12/34d71b350e89a204c2c7777a9bba0dcf2f19a5bfdd70b57c4dbc5ffd7154/triton-3.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448e02fe6dc898e9e5aa89cf0ee5c371e99df5aa5e8ad976a80b93334f3494fd", size = 176133521, upload-time = "2026-01-20T16:16:13.321Z" },
- { url = "https://files.pythonhosted.org/packages/f9/0b/37d991d8c130ce81a8728ae3c25b6e60935838e9be1b58791f5997b24a54/triton-3.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10c7f76c6e72d2ef08df639e3d0d30729112f47a56b0c81672edc05ee5116ac9", size = 188289450, upload-time = "2026-01-20T16:00:49.136Z" },
- { url = "https://files.pythonhosted.org/packages/ce/4e/41b0c8033b503fd3cfcd12392cdd256945026a91ff02452bef40ec34bee7/triton-3.6.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1722e172d34e32abc3eb7711d0025bb69d7959ebea84e3b7f7a341cd7ed694d6", size = 176276087, upload-time = "2026-01-20T16:16:18.989Z" },
- { url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" },
- { url = "https://files.pythonhosted.org/packages/49/55/5ecf0dcaa0f2fbbd4420f7ef227ee3cb172e91e5fede9d0ecaddc43363b4/triton-3.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5523241e7d1abca00f1d240949eebdd7c673b005edbbce0aca95b8191f1d43", size = 176138577, upload-time = "2026-01-20T16:16:25.426Z" },
- { url = "https://files.pythonhosted.org/packages/df/3d/9e7eee57b37c80cec63322c0231bb6da3cfe535a91d7a4d64896fcb89357/triton-3.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a17a5d5985f0ac494ed8a8e54568f092f7057ef60e1b0fa09d3fd1512064e803", size = 188273063, upload-time = "2026-01-20T16:01:07.278Z" },
- { url = "https://files.pythonhosted.org/packages/48/db/56ee649cab5eaff4757541325aca81f52d02d4a7cd3506776cad2451e060/triton-3.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b3a97e8ed304dfa9bd23bb41ca04cdf6b2e617d5e782a8653d616037a5d537d", size = 176274804, upload-time = "2026-01-20T16:16:31.528Z" },
- { url = "https://files.pythonhosted.org/packages/f6/56/6113c23ff46c00aae423333eb58b3e60bdfe9179d542781955a5e1514cb3/triton-3.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46bd1c1af4b6704e554cad2eeb3b0a6513a980d470ccfa63189737340c7746a7", size = 188397994, upload-time = "2026-01-20T16:01:14.236Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/c1/5d842314bb6c78442cc60437928781701c6050b8d479bc2a1aed691d37ca/triton-3.7.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9e71fc392675fac364e0ecf4ef3f76f85b7f5433a16f4c3c5fe5f05a52c85fe", size = 188480277, upload-time = "2026-05-07T19:05:03.231Z" },
+ { url = "https://files.pythonhosted.org/packages/13/31/8315ea5f8dd18e60970b3022e3a8b93fd37e0b784fbbef86e10c8e6e5ca1/triton-3.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22bacffce443f54593dd20f05294d5a40622e0ea9ab632816f87154504356221", size = 201415942, upload-time = "2026-05-07T18:46:06.479Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/13/ec05adfcd87311d532ba61e3af143e8be59fcd26675884c4682841406a20/triton-3.7.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4bf49b00a7a377a68a6da603a876e797614e6455a80e9021669c476a953ad9a", size = 188505104, upload-time = "2026-05-07T19:05:09.843Z" },
+ { url = "https://files.pythonhosted.org/packages/62/7b/468a576e35beef1426e0828e28e9ba9e65f5474d496f16ee126c15646324/triton-3.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f111161d49bf903c0eaedde3962353a3d841c08a836839b7cc1025b8426efcf", size = 201457567, upload-time = "2026-05-07T18:46:13.505Z" },
+ { url = "https://files.pythonhosted.org/packages/01/e1/a59a583de59b8f62c495d67c80ee3ea97d09e91ac80c4c6e76456ed8d8ac/triton-3.7.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abdf6beaa89b1bcfb9a43cd990536ce66091a997841a4814b260b7bee4c88c3c", size = 188503209, upload-time = "2026-05-07T19:05:17.935Z" },
+ { url = "https://files.pythonhosted.org/packages/30/b1/b7507bb9815d403927c8dd51d4158ed2e11751a92dbc118a044f247b6848/triton-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a35d7afe3f3f058e7ec49fcce09794049e0ffc5c59019ac25ec3413741b8c4e7", size = 201453566, upload-time = "2026-05-07T18:46:20.427Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/8f/0bea7a6a0c989315c9135a1d7fb37e41905cfb3a17cbc1f10044ebd4cc3a/triton-3.7.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc1d61c172d257db80ddf42595131fb196ad2e9bdd751e90fe2ef13531734e8b", size = 188612899, upload-time = "2026-05-07T19:05:24.955Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/02/d96f57828d0912aec733b9bc7e0e7dbfd2c6f079a8fa433ac25cb93d1a30/triton-3.7.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70fb9bbdc9f400afc54bbf6eb2670af28829a6ae3996863317964783141daf56", size = 201553816, upload-time = "2026-05-07T18:46:27.49Z" },
+ { url = "https://files.pythonhosted.org/packages/40/fb/82a802dac4689f2a2fb2e69302e6a138eecc3e175bbe976ba3cfc717683a/triton-3.7.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a44a8476d0d3571eac4e4d1048e1ff75aad81a09ff4602ccfc56c6dea1672e", size = 188507879, upload-time = "2026-05-07T19:05:32.209Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/af/9904ec6d3c93d9b24e5ec360445bbdf758b7f00bfbeedb89cb0eb64eb8bb/triton-3.7.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9b85e72968a9d8bba5ddb24e9b64aaabaf48affb042f2755cb7cfa92b7531ce", size = 201460637, upload-time = "2026-05-07T18:46:34.749Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/f9/4835a8ea746b88727d8899f4e3ccce4f9cacb38abfc3bb0a638266c53111/triton-3.7.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18a160de426fd99f92b0baf509045360afbd3bfaa0b4a5171dde800ec9f09684", size = 188608706, upload-time = "2026-05-07T19:05:39.218Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/68/fa86e5a39608000f645535b2c124920126327ab731f8c4fafd5b07ff8d4b/triton-3.7.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce061073102714b725f3660ec6939d94a1da7984b3aa99c921417cae273672f5", size = 201546766, upload-time = "2026-05-07T18:46:42.088Z" },
]
[[package]]
name = "types-python-dateutil"
-version = "2.9.0.20260408"
+version = "2.9.0.20260518"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/88/f3/2427775f80cd5e19a0a71ba8e5ab7645a01a852f43a5fd0ffc24f66338e0/types_python_dateutil-2.9.0.20260408.tar.gz", hash = "sha256:8b056ec01568674235f64ecbcef928972a5fac412f5aab09c516dfa2acfbb582", size = 16981, upload-time = "2026-04-08T04:28:10.995Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/8d/e8/c01bdf0d7c3659428c091fbd693177093639565bcbc86bc20098e6d37cc6/types_python_dateutil-2.9.0.20260518.tar.gz", hash = "sha256:51f02dc03b61c7f6a07df45797d4dfe8a1aa47f0b7db9ad89f6fd3a1a70e1b51", size = 17082, upload-time = "2026-05-18T06:05:24.508Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/fd/c6/eeba37bfee282a6a97f889faef9352d6172c6a5088eb9a4daf570d9d748d/types_python_dateutil-2.9.0.20260408-py3-none-any.whl", hash = "sha256:473139d514a71c9d1fbd8bb328974bedcb1cc3dba57aad04ffa4157f483c216f", size = 18437, upload-time = "2026-04-08T04:28:10.095Z" },
+ { url = "https://files.pythonhosted.org/packages/36/22/169273273ca34e9ab0ae2f387ba72ed7e09faaaf834da01d6b89c2bea71a/types_python_dateutil-2.9.0.20260518-py3-none-any.whl", hash = "sha256:d6a9c5bd0de61460c8fdef8ab2b400f956a1a1075cce08d4e2b4434e478c50b8", size = 18431, upload-time = "2026-05-18T06:05:23.641Z" },
]
[[package]]
@@ -4330,24 +4370,24 @@ wheels = [
[[package]]
name = "urllib3"
-version = "2.6.3"
+version = "2.7.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
]
[[package]]
name = "uvicorn"
-version = "0.46.0"
+version = "0.47.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
{ name = "h11" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/1f/93/041fca8274050e40e6791f267d82e0e2e27dd165627bd640d3e0e378d877/uvicorn-0.46.0.tar.gz", hash = "sha256:fb9da0926999cc6cb22dc7cd71a94a632f078e6ae47ff683c5c420750fb7413d", size = 88758, upload-time = "2026-04-23T07:16:00.151Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f6/b1/8e7077a8641086aea449e1b5752a570f1b5906c64e0a33cd6d93b63a066b/uvicorn-0.47.0.tar.gz", hash = "sha256:7c9a0ea1a9414106bbab7324609c162d8fa0cdcdcb703060987269d77c7bb533", size = 90582, upload-time = "2026-05-14T18:16:54.455Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/31/a3/5b1562db76a5a488274b2332a97199b32d0442aca0ed193697fd47786316/uvicorn-0.46.0-py3-none-any.whl", hash = "sha256:bbebbcbed972d162afca128605223022bedd345b7bc7855ce66deb31487a9048", size = 70926, upload-time = "2026-04-23T07:15:58.355Z" },
+ { url = "https://files.pythonhosted.org/packages/15/41/ac2dfdbc1f60c7af4f994c7a335cfa7040c01642b605d65f611cecc2a1e4/uvicorn-0.47.0-py3-none-any.whl", hash = "sha256:2c5715bc12d1892d84752049f400cd1c3cb018514967fdfeb97640443a6a9432", size = 71301, upload-time = "2026-05-14T18:16:51.762Z" },
]
[[package]]
@@ -4438,131 +4478,99 @@ wheels = [
[[package]]
name = "yarl"
-version = "1.23.0"
+version = "1.24.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "idna" },
{ name = "multidict" },
{ name = "propcache" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/a2/aa/60da938b8f0997ba3a911263c40d82b6f645a67902a490b46f3355e10fae/yarl-1.23.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b35d13d549077713e4414f927cdc388d62e543987c572baee613bf82f11a4b99", size = 123641, upload-time = "2026-03-01T22:04:42.841Z" },
- { url = "https://files.pythonhosted.org/packages/24/84/e237607faf4e099dbb8a4f511cfd5efcb5f75918baad200ff7380635631b/yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbb0fef01f0c6b38cb0f39b1f78fc90b807e0e3c86a7ff3ce74ad77ce5c7880c", size = 86248, upload-time = "2026-03-01T22:04:44.757Z" },
- { url = "https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432", size = 85988, upload-time = "2026-03-01T22:04:46.365Z" },
- { url = "https://files.pythonhosted.org/packages/8c/6c/4a90d59c572e46b270ca132aca66954f1175abd691f74c1ef4c6711828e2/yarl-1.23.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2c6b50c7b0464165472b56b42d4c76a7b864597007d9c085e8b63e185cf4a7a", size = 100566, upload-time = "2026-03-01T22:04:47.639Z" },
- { url = "https://files.pythonhosted.org/packages/49/fb/c438fb5108047e629f6282a371e6e91cf3f97ee087c4fb748a1f32ceef55/yarl-1.23.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:aafe5dcfda86c8af00386d7781d4c2181b5011b7be3f2add5e99899ea925df05", size = 92079, upload-time = "2026-03-01T22:04:48.925Z" },
- { url = "https://files.pythonhosted.org/packages/d9/13/d269aa1aed3e4f50a5a103f96327210cc5fa5dd2d50882778f13c7a14606/yarl-1.23.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ee33b875f0b390564c1fb7bc528abf18c8ee6073b201c6ae8524aca778e2d83", size = 108741, upload-time = "2026-03-01T22:04:50.838Z" },
- { url = "https://files.pythonhosted.org/packages/85/fb/115b16f22c37ea4437d323e472945bea97301c8ec6089868fa560abab590/yarl-1.23.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c41e021bc6d7affb3364dc1e1e5fa9582b470f283748784bd6ea0558f87f42c", size = 108099, upload-time = "2026-03-01T22:04:52.499Z" },
- { url = "https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598", size = 102678, upload-time = "2026-03-01T22:04:55.176Z" },
- { url = "https://files.pythonhosted.org/packages/85/59/cd98e556fbb2bf8fab29c1a722f67ad45c5f3447cac798ab85620d1e70af/yarl-1.23.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2af5c81a1f124609d5f33507082fc3f739959d4719b56877ab1ee7e7b3d602b", size = 100803, upload-time = "2026-03-01T22:04:56.588Z" },
- { url = "https://files.pythonhosted.org/packages/9e/c0/b39770b56d4a9f0bb5f77e2f1763cd2d75cc2f6c0131e3b4c360348fcd65/yarl-1.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6b41389c19b07c760c7e427a3462e8ab83c4bb087d127f0e854c706ce1b9215c", size = 100163, upload-time = "2026-03-01T22:04:58.492Z" },
- { url = "https://files.pythonhosted.org/packages/e7/64/6980f99ab00e1f0ff67cb84766c93d595b067eed07439cfccfc8fb28c1a6/yarl-1.23.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1dc702e42d0684f42d6519c8d581e49c96cefaaab16691f03566d30658ee8788", size = 93859, upload-time = "2026-03-01T22:05:00.268Z" },
- { url = "https://files.pythonhosted.org/packages/38/69/912e6c5e146793e5d4b5fe39ff5b00f4d22463dfd5a162bec565ac757673/yarl-1.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0e40111274f340d32ebcc0a5668d54d2b552a6cca84c9475859d364b380e3222", size = 108202, upload-time = "2026-03-01T22:05:02.273Z" },
- { url = "https://files.pythonhosted.org/packages/59/97/35ca6767524687ad64e5f5c31ad54bc76d585585a9fcb40f649e7e82ffed/yarl-1.23.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4764a6a7588561a9aef92f65bda2c4fb58fe7c675c0883862e6df97559de0bfb", size = 99866, upload-time = "2026-03-01T22:05:03.597Z" },
- { url = "https://files.pythonhosted.org/packages/d3/1c/1a3387ee6d73589f6f2a220ae06f2984f6c20b40c734989b0a44f5987308/yarl-1.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:03214408cfa590df47728b84c679ae4ef00be2428e11630277be0727eba2d7cc", size = 107852, upload-time = "2026-03-01T22:05:04.986Z" },
- { url = "https://files.pythonhosted.org/packages/a4/b8/35c0750fcd5a3f781058bfd954515dd4b1eab45e218cbb85cf11132215f1/yarl-1.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:170e26584b060879e29fac213e4228ef063f39128723807a312e5c7fec28eff2", size = 102919, upload-time = "2026-03-01T22:05:06.397Z" },
- { url = "https://files.pythonhosted.org/packages/e5/1c/9a1979aec4a81896d597bcb2177827f2dbee3f5b7cc48b2d0dadb644b41d/yarl-1.23.0-cp311-cp311-win32.whl", hash = "sha256:51430653db848d258336cfa0244427b17d12db63d42603a55f0d4546f50f25b5", size = 82602, upload-time = "2026-03-01T22:05:08.444Z" },
- { url = "https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46", size = 87461, upload-time = "2026-03-01T22:05:10.145Z" },
- { url = "https://files.pythonhosted.org/packages/93/95/07e3553fe6f113e6864a20bdc53a78113cda3b9ced8784ee52a52c9f80d8/yarl-1.23.0-cp311-cp311-win_arm64.whl", hash = "sha256:b39cb32a6582750b6cc77bfb3c49c0f8760dc18dc96ec9fb55fbb0f04e08b928", size = 82336, upload-time = "2026-03-01T22:05:11.554Z" },
- { url = "https://files.pythonhosted.org/packages/88/8a/94615bc31022f711add374097ad4144d569e95ff3c38d39215d07ac153a0/yarl-1.23.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1932b6b8bba8d0160a9d1078aae5838a66039e8832d41d2992daa9a3a08f7860", size = 124737, upload-time = "2026-03-01T22:05:12.897Z" },
- { url = "https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:411225bae281f114067578891bc75534cfb3d92a3b4dfef7a6ca78ba354e6069", size = 87029, upload-time = "2026-03-01T22:05:14.376Z" },
- { url = "https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13a563739ae600a631c36ce096615fe307f131344588b0bc0daec108cdb47b25", size = 86310, upload-time = "2026-03-01T22:05:15.71Z" },
- { url = "https://files.pythonhosted.org/packages/99/30/58260ed98e6ff7f90ba84442c1ddd758c9170d70327394a6227b310cd60f/yarl-1.23.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cbf44c5cb4a7633d078788e1b56387e3d3cf2b8139a3be38040b22d6c3221c8", size = 97587, upload-time = "2026-03-01T22:05:17.384Z" },
- { url = "https://files.pythonhosted.org/packages/76/0a/8b08aac08b50682e65759f7f8dde98ae8168f72487e7357a5d684c581ef9/yarl-1.23.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53ad387048f6f09a8969631e4de3f1bf70c50e93545d64af4f751b2498755072", size = 92528, upload-time = "2026-03-01T22:05:18.804Z" },
- { url = "https://files.pythonhosted.org/packages/52/07/0b7179101fe5f8385ec6c6bb5d0cb9f76bd9fb4a769591ab6fb5cdbfc69a/yarl-1.23.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4a59ba56f340334766f3a4442e0efd0af895fae9e2b204741ef885c446b3a1a8", size = 105339, upload-time = "2026-03-01T22:05:20.235Z" },
- { url = "https://files.pythonhosted.org/packages/d3/8a/36d82869ab5ec829ca8574dfcb92b51286fcfb1e9c7a73659616362dc880/yarl-1.23.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:803a3c3ce4acc62eaf01eaca1208dcf0783025ef27572c3336502b9c232005e7", size = 105061, upload-time = "2026-03-01T22:05:22.268Z" },
- { url = "https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51", size = 100132, upload-time = "2026-03-01T22:05:23.638Z" },
- { url = "https://files.pythonhosted.org/packages/cf/26/9c89acf82f08a52cb52d6d39454f8d18af15f9d386a23795389d1d423823/yarl-1.23.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c75eb09e8d55bceb4367e83496ff8ef2bc7ea6960efb38e978e8073ea59ecb67", size = 99289, upload-time = "2026-03-01T22:05:25.749Z" },
- { url = "https://files.pythonhosted.org/packages/6f/54/5b0db00d2cb056922356104468019c0a132e89c8d3ab67d8ede9f4483d2a/yarl-1.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877b0738624280e34c55680d6054a307aa94f7d52fa0e3034a9cc6e790871da7", size = 96950, upload-time = "2026-03-01T22:05:27.318Z" },
- { url = "https://files.pythonhosted.org/packages/f6/40/10fa93811fd439341fad7e0718a86aca0de9548023bbb403668d6555acab/yarl-1.23.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b5405bb8f0e783a988172993cfc627e4d9d00432d6bbac65a923041edacf997d", size = 93960, upload-time = "2026-03-01T22:05:28.738Z" },
- { url = "https://files.pythonhosted.org/packages/bc/d2/8ae2e6cd77d0805f4526e30ec43b6f9a3dfc542d401ac4990d178e4bf0cf/yarl-1.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c3a3598a832590c5a3ce56ab5576361b5688c12cb1d39429cf5dba30b510760", size = 104703, upload-time = "2026-03-01T22:05:30.438Z" },
- { url = "https://files.pythonhosted.org/packages/2f/0c/b3ceacf82c3fe21183ce35fa2acf5320af003d52bc1fcf5915077681142e/yarl-1.23.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8419ebd326430d1cbb7efb5292330a2cf39114e82df5cc3d83c9a0d5ebeaf2f2", size = 98325, upload-time = "2026-03-01T22:05:31.835Z" },
- { url = "https://files.pythonhosted.org/packages/9d/e0/12900edd28bdab91a69bd2554b85ad7b151f64e8b521fe16f9ad2f56477a/yarl-1.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:be61f6fff406ca40e3b1d84716fde398fc08bc63dd96d15f3a14230a0973ed86", size = 105067, upload-time = "2026-03-01T22:05:33.358Z" },
- { url = "https://files.pythonhosted.org/packages/15/61/74bb1182cf79c9bbe4eb6b1f14a57a22d7a0be5e9cedf8e2d5c2086474c3/yarl-1.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ceb13c5c858d01321b5d9bb65e4cf37a92169ea470b70fec6f236b2c9dd7e34", size = 100285, upload-time = "2026-03-01T22:05:35.4Z" },
- { url = "https://files.pythonhosted.org/packages/69/7f/cd5ef733f2550de6241bd8bd8c3febc78158b9d75f197d9c7baa113436af/yarl-1.23.0-cp312-cp312-win32.whl", hash = "sha256:fffc45637bcd6538de8b85f51e3df3223e4ad89bccbfca0481c08c7fc8b7ed7d", size = 82359, upload-time = "2026-03-01T22:05:36.811Z" },
- { url = "https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:f69f57305656a4852f2a7203efc661d8c042e6cc67f7acd97d8667fb448a426e", size = 87674, upload-time = "2026-03-01T22:05:38.171Z" },
- { url = "https://files.pythonhosted.org/packages/d2/35/aeab955d6c425b227d5b7247eafb24f2653fedc32f95373a001af5dfeb9e/yarl-1.23.0-cp312-cp312-win_arm64.whl", hash = "sha256:6e87a6e8735b44816e7db0b2fbc9686932df473c826b0d9743148432e10bb9b9", size = 81879, upload-time = "2026-03-01T22:05:40.006Z" },
- { url = "https://files.pythonhosted.org/packages/9a/4b/a0a6e5d0ee8a2f3a373ddef8a4097d74ac901ac363eea1440464ccbe0898/yarl-1.23.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:16c6994ac35c3e74fb0ae93323bf8b9c2a9088d55946109489667c510a7d010e", size = 123796, upload-time = "2026-03-01T22:05:41.412Z" },
- { url = "https://files.pythonhosted.org/packages/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5", size = 86547, upload-time = "2026-03-01T22:05:42.841Z" },
- { url = "https://files.pythonhosted.org/packages/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b", size = 85854, upload-time = "2026-03-01T22:05:44.85Z" },
- { url = "https://files.pythonhosted.org/packages/c4/f4/4e30b250927ffdab4db70da08b9b8d2194d7c7b400167b8fbeca1e4701ca/yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035", size = 98351, upload-time = "2026-03-01T22:05:46.836Z" },
- { url = "https://files.pythonhosted.org/packages/86/fc/4118c5671ea948208bdb1492d8b76bdf1453d3e73df051f939f563e7dcc5/yarl-1.23.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9d9a4d06d3481eab79803beb4d9bd6f6a8e781ec078ac70d7ef2dcc29d1bea5", size = 92711, upload-time = "2026-03-01T22:05:48.316Z" },
- { url = "https://files.pythonhosted.org/packages/56/11/1ed91d42bd9e73c13dc9e7eb0dd92298d75e7ac4dd7f046ad0c472e231cd/yarl-1.23.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f514f6474e04179d3d33175ed3f3e31434d3130d42ec153540d5b157deefd735", size = 106014, upload-time = "2026-03-01T22:05:50.028Z" },
- { url = "https://files.pythonhosted.org/packages/ce/c9/74e44e056a23fbc33aca71779ef450ca648a5bc472bdad7a82339918f818/yarl-1.23.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fda207c815b253e34f7e1909840fd14299567b1c0eb4908f8c2ce01a41265401", size = 105557, upload-time = "2026-03-01T22:05:51.416Z" },
- { url = "https://files.pythonhosted.org/packages/66/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4", size = 101559, upload-time = "2026-03-01T22:05:52.872Z" },
- { url = "https://files.pythonhosted.org/packages/72/59/c5b8d94b14e3d3c2a9c20cb100119fd534ab5a14b93673ab4cc4a4141ea5/yarl-1.23.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d7504f2b476d21653e4d143f44a175f7f751cd41233525312696c76aa3dbb23f", size = 100502, upload-time = "2026-03-01T22:05:54.954Z" },
- { url = "https://files.pythonhosted.org/packages/77/4f/96976cb54cbfc5c9fd73ed4c51804f92f209481d1fb190981c0f8a07a1d7/yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a", size = 98027, upload-time = "2026-03-01T22:05:56.409Z" },
- { url = "https://files.pythonhosted.org/packages/63/6e/904c4f476471afdbad6b7e5b70362fb5810e35cd7466529a97322b6f5556/yarl-1.23.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:609d3614d78d74ebe35f54953c5bbd2ac647a7ddb9c30a5d877580f5e86b22f2", size = 95369, upload-time = "2026-03-01T22:05:58.141Z" },
- { url = "https://files.pythonhosted.org/packages/9d/40/acfcdb3b5f9d68ef499e39e04d25e141fe90661f9d54114556cf83be8353/yarl-1.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4966242ec68afc74c122f8459abd597afd7d8a60dc93d695c1334c5fd25f762f", size = 105565, upload-time = "2026-03-01T22:06:00.286Z" },
- { url = "https://files.pythonhosted.org/packages/5e/c6/31e28f3a6ba2869c43d124f37ea5260cac9c9281df803c354b31f4dd1f3c/yarl-1.23.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0fd068364a6759bc794459f0a735ab151d11304346332489c7972bacbe9e72b", size = 99813, upload-time = "2026-03-01T22:06:01.712Z" },
- { url = "https://files.pythonhosted.org/packages/08/1f/6f65f59e72d54aa467119b63fc0b0b1762eff0232db1f4720cd89e2f4a17/yarl-1.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:39004f0ad156da43e86aa71f44e033de68a44e5a31fc53507b36dd253970054a", size = 105632, upload-time = "2026-03-01T22:06:03.188Z" },
- { url = "https://files.pythonhosted.org/packages/a3/c4/18b178a69935f9e7a338127d5b77d868fdc0f0e49becd286d51b3a18c61d/yarl-1.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5723c01a56c5028c807c701aa66722916d2747ad737a046853f6c46f4875543", size = 101895, upload-time = "2026-03-01T22:06:04.651Z" },
- { url = "https://files.pythonhosted.org/packages/8f/54/f5b870b5505663911dba950a8e4776a0dbd51c9c54c0ae88e823e4b874a0/yarl-1.23.0-cp313-cp313-win32.whl", hash = "sha256:1b6b572edd95b4fa8df75de10b04bc81acc87c1c7d16bcdd2035b09d30acc957", size = 82356, upload-time = "2026-03-01T22:06:06.04Z" },
- { url = "https://files.pythonhosted.org/packages/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3", size = 87515, upload-time = "2026-03-01T22:06:08.107Z" },
- { url = "https://files.pythonhosted.org/packages/00/fd/7e1c66efad35e1649114fa13f17485f62881ad58edeeb7f49f8c5e748bf9/yarl-1.23.0-cp313-cp313-win_arm64.whl", hash = "sha256:fb4948814a2a98e3912505f09c9e7493b1506226afb1f881825368d6fb776ee3", size = 81785, upload-time = "2026-03-01T22:06:10.181Z" },
- { url = "https://files.pythonhosted.org/packages/9c/fc/119dd07004f17ea43bb91e3ece6587759edd7519d6b086d16bfbd3319982/yarl-1.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:aecfed0b41aa72b7881712c65cf764e39ce2ec352324f5e0837c7048d9e6daaa", size = 130719, upload-time = "2026-03-01T22:06:11.708Z" },
- { url = "https://files.pythonhosted.org/packages/e6/0d/9f2348502fbb3af409e8f47730282cd6bc80dec6630c1e06374d882d6eb2/yarl-1.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a41bcf68efd19073376eb8cf948b8d9be0af26256403e512bb18f3966f1f9120", size = 89690, upload-time = "2026-03-01T22:06:13.429Z" },
- { url = "https://files.pythonhosted.org/packages/50/93/e88f3c80971b42cfc83f50a51b9d165a1dbf154b97005f2994a79f212a07/yarl-1.23.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cde9a2ecd91668bcb7f077c4966d8ceddb60af01b52e6e3e2680e4cf00ad1a59", size = 89851, upload-time = "2026-03-01T22:06:15.53Z" },
- { url = "https://files.pythonhosted.org/packages/1c/07/61c9dd8ba8f86473263b4036f70fb594c09e99c0d9737a799dfd8bc85651/yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512", size = 95874, upload-time = "2026-03-01T22:06:17.553Z" },
- { url = "https://files.pythonhosted.org/packages/9e/e9/f9ff8ceefba599eac6abddcfb0b3bee9b9e636e96dbf54342a8577252379/yarl-1.23.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1009abedb49ae95b136a8904a3f71b342f849ffeced2d3747bf29caeda218c4", size = 88710, upload-time = "2026-03-01T22:06:19.004Z" },
- { url = "https://files.pythonhosted.org/packages/eb/78/0231bfcc5d4c8eec220bc2f9ef82cb4566192ea867a7c5b4148f44f6cbcd/yarl-1.23.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a8d00f29b42f534cc8aa3931cfe773b13b23e561e10d2b26f27a8d309b0e82a1", size = 101033, upload-time = "2026-03-01T22:06:21.203Z" },
- { url = "https://files.pythonhosted.org/packages/cd/9b/30ea5239a61786f18fd25797151a17fbb3be176977187a48d541b5447dd4/yarl-1.23.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:95451e6ce06c3e104556d73b559f5da6c34a069b6b62946d3ad66afcd51642ea", size = 100817, upload-time = "2026-03-01T22:06:22.738Z" },
- { url = "https://files.pythonhosted.org/packages/62/e2/a4980481071791bc83bce2b7a1a1f7adcabfa366007518b4b845e92eeee3/yarl-1.23.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531ef597132086b6cf96faa7c6c1dcd0361dd5f1694e5cc30375907b9b7d3ea9", size = 97482, upload-time = "2026-03-01T22:06:24.21Z" },
- { url = "https://files.pythonhosted.org/packages/e5/1e/304a00cf5f6100414c4b5a01fc7ff9ee724b62158a08df2f8170dfc72a2d/yarl-1.23.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88f9fb0116fbfcefcab70f85cf4b74a2b6ce5d199c41345296f49d974ddb4123", size = 95949, upload-time = "2026-03-01T22:06:25.697Z" },
- { url = "https://files.pythonhosted.org/packages/68/03/093f4055ed4cae649ac53bca3d180bd37102e9e11d048588e9ab0c0108d0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24", size = 95839, upload-time = "2026-03-01T22:06:27.309Z" },
- { url = "https://files.pythonhosted.org/packages/b9/28/4c75ebb108f322aa8f917ae10a8ffa4f07cae10a8a627b64e578617df6a0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:115136c4a426f9da976187d238e84139ff6b51a20839aa6e3720cd1026d768de", size = 90696, upload-time = "2026-03-01T22:06:29.048Z" },
- { url = "https://files.pythonhosted.org/packages/23/9c/42c2e2dd91c1a570402f51bdf066bfdb1241c2240ba001967bad778e77b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ead11956716a940c1abc816b7df3fa2b84d06eaed8832ca32f5c5e058c65506b", size = 100865, upload-time = "2026-03-01T22:06:30.525Z" },
- { url = "https://files.pythonhosted.org/packages/74/05/1bcd60a8a0a914d462c305137246b6f9d167628d73568505fce3f1cb2e65/yarl-1.23.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:fe8f8f5e70e6dbdfca9882cd9deaac058729bcf323cf7a58660901e55c9c94f6", size = 96234, upload-time = "2026-03-01T22:06:32.692Z" },
- { url = "https://files.pythonhosted.org/packages/90/b2/f52381aac396d6778ce516b7bc149c79e65bfc068b5de2857ab69eeea3b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a0e317df055958a0c1e79e5d2aa5a5eaa4a6d05a20d4b0c9c3f48918139c9fc6", size = 100295, upload-time = "2026-03-01T22:06:34.268Z" },
- { url = "https://files.pythonhosted.org/packages/e5/e8/638bae5bbf1113a659b2435d8895474598afe38b4a837103764f603aba56/yarl-1.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f0fd84de0c957b2d280143522c4f91a73aada1923caee763e24a2b3fda9f8a5", size = 97784, upload-time = "2026-03-01T22:06:35.864Z" },
- { url = "https://files.pythonhosted.org/packages/80/25/a3892b46182c586c202629fc2159aa13975d3741d52ebd7347fd501d48d5/yarl-1.23.0-cp313-cp313t-win32.whl", hash = "sha256:93a784271881035ab4406a172edb0faecb6e7d00f4b53dc2f55919d6c9688595", size = 88313, upload-time = "2026-03-01T22:06:37.39Z" },
- { url = "https://files.pythonhosted.org/packages/43/68/8c5b36aa5178900b37387937bc2c2fe0e9505537f713495472dcf6f6fccc/yarl-1.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dd00607bffbf30250fe108065f07453ec124dbf223420f57f5e749b04295e090", size = 94932, upload-time = "2026-03-01T22:06:39.579Z" },
- { url = "https://files.pythonhosted.org/packages/c6/cc/d79ba8292f51f81f4dc533a8ccfb9fc6992cabf0998ed3245de7589dc07c/yarl-1.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ac09d42f48f80c9ee1635b2fcaa819496a44502737660d3c0f2ade7526d29144", size = 84786, upload-time = "2026-03-01T22:06:41.988Z" },
- { url = "https://files.pythonhosted.org/packages/90/98/b85a038d65d1b92c3903ab89444f48d3cee490a883477b716d7a24b1a78c/yarl-1.23.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:21d1b7305a71a15b4794b5ff22e8eef96ff4a6d7f9657155e5aa419444b28912", size = 124455, upload-time = "2026-03-01T22:06:43.615Z" },
- { url = "https://files.pythonhosted.org/packages/39/54/bc2b45559f86543d163b6e294417a107bb87557609007c007ad889afec18/yarl-1.23.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85610b4f27f69984932a7abbe52703688de3724d9f72bceb1cca667deff27474", size = 86752, upload-time = "2026-03-01T22:06:45.425Z" },
- { url = "https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719", size = 86291, upload-time = "2026-03-01T22:06:46.974Z" },
- { url = "https://files.pythonhosted.org/packages/ea/d8/d1cb2378c81dd729e98c716582b1ccb08357e8488e4c24714658cc6630e8/yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319", size = 99026, upload-time = "2026-03-01T22:06:48.459Z" },
- { url = "https://files.pythonhosted.org/packages/0a/ff/7196790538f31debe3341283b5b0707e7feb947620fc5e8236ef28d44f72/yarl-1.23.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:bd654fad46d8d9e823afbb4f87c79160b5a374ed1ff5bde24e542e6ba8f41434", size = 92355, upload-time = "2026-03-01T22:06:50.306Z" },
- { url = "https://files.pythonhosted.org/packages/c1/56/25d58c3eddde825890a5fe6aa1866228377354a3c39262235234ab5f616b/yarl-1.23.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:682bae25f0a0dd23a056739f23a134db9f52a63e2afd6bfb37ddc76292bbd723", size = 106417, upload-time = "2026-03-01T22:06:52.1Z" },
- { url = "https://files.pythonhosted.org/packages/51/8a/882c0e7bc8277eb895b31bce0138f51a1ba551fc2e1ec6753ffc1e7c1377/yarl-1.23.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a82836cab5f197a0514235aaf7ffccdc886ccdaa2324bc0aafdd4ae898103039", size = 106422, upload-time = "2026-03-01T22:06:54.424Z" },
- { url = "https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52", size = 101915, upload-time = "2026-03-01T22:06:55.895Z" },
- { url = "https://files.pythonhosted.org/packages/18/6a/530e16aebce27c5937920f3431c628a29a4b6b430fab3fd1c117b26ff3f6/yarl-1.23.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7f8dc16c498ff06497c015642333219871effba93e4a2e8604a06264aca5c5c", size = 100690, upload-time = "2026-03-01T22:06:58.21Z" },
- { url = "https://files.pythonhosted.org/packages/88/08/93749219179a45e27b036e03260fda05190b911de8e18225c294ac95bbc9/yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae", size = 98750, upload-time = "2026-03-01T22:06:59.794Z" },
- { url = "https://files.pythonhosted.org/packages/d9/cf/ea424a004969f5d81a362110a6ac1496d79efdc6d50c2c4b2e3ea0fc2519/yarl-1.23.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:17235362f580149742739cc3828b80e24029d08cbb9c4bda0242c7b5bc610a8e", size = 94685, upload-time = "2026-03-01T22:07:01.375Z" },
- { url = "https://files.pythonhosted.org/packages/e2/b7/14341481fe568e2b0408bcf1484c652accafe06a0ade9387b5d3fd9df446/yarl-1.23.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0793e2bd0cf14234983bbb371591e6bea9e876ddf6896cdcc93450996b0b5c85", size = 106009, upload-time = "2026-03-01T22:07:03.151Z" },
- { url = "https://files.pythonhosted.org/packages/0a/e6/5c744a9b54f4e8007ad35bce96fbc9218338e84812d36f3390cea616881a/yarl-1.23.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3650dc2480f94f7116c364096bc84b1d602f44224ef7d5c7208425915c0475dd", size = 100033, upload-time = "2026-03-01T22:07:04.701Z" },
- { url = "https://files.pythonhosted.org/packages/0c/23/e3bfc188d0b400f025bc49d99793d02c9abe15752138dcc27e4eaf0c4a9e/yarl-1.23.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f40e782d49630ad384db66d4d8b73ff4f1b8955dc12e26b09a3e3af064b3b9d6", size = 106483, upload-time = "2026-03-01T22:07:06.231Z" },
- { url = "https://files.pythonhosted.org/packages/72/42/f0505f949a90b3f8b7a363d6cbdf398f6e6c58946d85c6d3a3bc70595b26/yarl-1.23.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94f8575fbdf81749008d980c17796097e645574a3b8c28ee313931068dad14fe", size = 102175, upload-time = "2026-03-01T22:07:08.4Z" },
- { url = "https://files.pythonhosted.org/packages/aa/65/b39290f1d892a9dd671d1c722014ca062a9c35d60885d57e5375db0404b5/yarl-1.23.0-cp314-cp314-win32.whl", hash = "sha256:c8aa34a5c864db1087d911a0b902d60d203ea3607d91f615acd3f3108ac32169", size = 83871, upload-time = "2026-03-01T22:07:09.968Z" },
- { url = "https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl", hash = "sha256:63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70", size = 89093, upload-time = "2026-03-01T22:07:11.501Z" },
- { url = "https://files.pythonhosted.org/packages/e0/7d/8a84dc9381fd4412d5e7ff04926f9865f6372b4c2fd91e10092e65d29eb8/yarl-1.23.0-cp314-cp314-win_arm64.whl", hash = "sha256:70efd20be968c76ece7baa8dafe04c5be06abc57f754d6f36f3741f7aa7a208e", size = 83384, upload-time = "2026-03-01T22:07:13.069Z" },
- { url = "https://files.pythonhosted.org/packages/dd/8d/d2fad34b1c08aa161b74394183daa7d800141aaaee207317e82c790b418d/yarl-1.23.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9a18d6f9359e45722c064c97464ec883eb0e0366d33eda61cb19a244bf222679", size = 131019, upload-time = "2026-03-01T22:07:14.903Z" },
- { url = "https://files.pythonhosted.org/packages/19/ff/33009a39d3ccf4b94d7d7880dfe17fb5816c5a4fe0096d9b56abceea9ac7/yarl-1.23.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2803ed8b21ca47a43da80a6fd1ed3019d30061f7061daa35ac54f63933409412", size = 89894, upload-time = "2026-03-01T22:07:17.372Z" },
- { url = "https://files.pythonhosted.org/packages/0c/f1/dab7ac5e7306fb79c0190766a3c00b4cb8d09a1f390ded68c85a5934faf5/yarl-1.23.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:394906945aa8b19fc14a61cf69743a868bb8c465efe85eee687109cc540b98f4", size = 89979, upload-time = "2026-03-01T22:07:19.361Z" },
- { url = "https://files.pythonhosted.org/packages/aa/b1/08e95f3caee1fad6e65017b9f26c1d79877b502622d60e517de01e72f95d/yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c", size = 95943, upload-time = "2026-03-01T22:07:21.266Z" },
- { url = "https://files.pythonhosted.org/packages/c0/cc/6409f9018864a6aa186c61175b977131f373f1988e198e031236916e87e4/yarl-1.23.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:62694e275c93d54f7ccedcfef57d42761b2aad5234b6be1f3e3026cae4001cd4", size = 88786, upload-time = "2026-03-01T22:07:23.129Z" },
- { url = "https://files.pythonhosted.org/packages/76/40/cc22d1d7714b717fde2006fad2ced5efe5580606cb059ae42117542122f3/yarl-1.23.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31de1613658308efdb21ada98cbc86a97c181aa050ba22a808120bb5be3ab94", size = 101307, upload-time = "2026-03-01T22:07:24.689Z" },
- { url = "https://files.pythonhosted.org/packages/8f/0d/476c38e85ddb4c6ec6b20b815bdd779aa386a013f3d8b85516feee55c8dc/yarl-1.23.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb1e8b8d66c278b21d13b0a7ca22c41dd757a7c209c6b12c313e445c31dd3b28", size = 100904, upload-time = "2026-03-01T22:07:26.287Z" },
- { url = "https://files.pythonhosted.org/packages/72/32/0abe4a76d59adf2081dcb0397168553ece4616ada1c54d1c49d8936c74f8/yarl-1.23.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50f9d8d531dfb767c565f348f33dd5139a6c43f5cbdf3f67da40d54241df93f6", size = 97728, upload-time = "2026-03-01T22:07:27.906Z" },
- { url = "https://files.pythonhosted.org/packages/b7/35/7b30f4810fba112f60f5a43237545867504e15b1c7647a785fbaf588fac2/yarl-1.23.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575aa4405a656e61a540f4a80eaa5260f2a38fff7bfdc4b5f611840d76e9e277", size = 95964, upload-time = "2026-03-01T22:07:30.198Z" },
- { url = "https://files.pythonhosted.org/packages/2d/86/ed7a73ab85ef00e8bb70b0cb5421d8a2a625b81a333941a469a6f4022828/yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4", size = 95882, upload-time = "2026-03-01T22:07:32.132Z" },
- { url = "https://files.pythonhosted.org/packages/19/90/d56967f61a29d8498efb7afb651e0b2b422a1e9b47b0ab5f4e40a19b699b/yarl-1.23.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d38c1e8231722c4ce40d7593f28d92b5fc72f3e9774fe73d7e800ec32299f63a", size = 90797, upload-time = "2026-03-01T22:07:34.404Z" },
- { url = "https://files.pythonhosted.org/packages/72/00/8b8f76909259f56647adb1011d7ed8b321bcf97e464515c65016a47ecdf0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d53834e23c015ee83a99377db6e5e37d8484f333edb03bd15b4bc312cc7254fb", size = 101023, upload-time = "2026-03-01T22:07:35.953Z" },
- { url = "https://files.pythonhosted.org/packages/ac/e2/cab11b126fb7d440281b7df8e9ddbe4851e70a4dde47a202b6642586b8d9/yarl-1.23.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2e27c8841126e017dd2a054a95771569e6070b9ee1b133366d8b31beb5018a41", size = 96227, upload-time = "2026-03-01T22:07:37.594Z" },
- { url = "https://files.pythonhosted.org/packages/c2/9b/2c893e16bfc50e6b2edf76c1a9eb6cb0c744346197e74c65e99ad8d634d0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:76855800ac56f878847a09ce6dba727c93ca2d89c9e9d63002d26b916810b0a2", size = 100302, upload-time = "2026-03-01T22:07:39.334Z" },
- { url = "https://files.pythonhosted.org/packages/28/ec/5498c4e3a6d5f1003beb23405671c2eb9cdbf3067d1c80f15eeafe301010/yarl-1.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e09fd068c2e169a7070d83d3bde728a4d48de0549f975290be3c108c02e499b4", size = 98202, upload-time = "2026-03-01T22:07:41.717Z" },
- { url = "https://files.pythonhosted.org/packages/fe/c3/cd737e2d45e70717907f83e146f6949f20cc23cd4bf7b2688727763aa458/yarl-1.23.0-cp314-cp314t-win32.whl", hash = "sha256:73309162a6a571d4cbd3b6a1dcc703c7311843ae0d1578df6f09be4e98df38d4", size = 90558, upload-time = "2026-03-01T22:07:43.433Z" },
- { url = "https://files.pythonhosted.org/packages/e1/19/3774d162f6732d1cfb0b47b4140a942a35ca82bb19b6db1f80e9e7bdc8f8/yarl-1.23.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4503053d296bc6e4cbd1fad61cf3b6e33b939886c4f249ba7c78b602214fabe2", size = 97610, upload-time = "2026-03-01T22:07:45.773Z" },
- { url = "https://files.pythonhosted.org/packages/51/47/3fa2286c3cb162c71cdb34c4224d5745a1ceceb391b2bd9b19b668a8d724/yarl-1.23.0-cp314-cp314t-win_arm64.whl", hash = "sha256:44bb7bef4ea409384e3f8bc36c063d77ea1b8d4a5b2706956c0d6695f07dcc25", size = 86041, upload-time = "2026-03-01T22:07:49.026Z" },
- { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" },
-]
-
-[[package]]
-name = "zipp"
-version = "3.23.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/30/21/093488dfc7cc8964ded15ab726fad40f25fd3d788fd741cc1c5a17d78ee8/zipp-3.23.1.tar.gz", hash = "sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110", size = 25965, upload-time = "2026-04-13T23:21:46.6Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/08/8a/0861bec20485572fbddf3dfba2910e38fe249796cb73ecdeb74e07eeb8d3/zipp-3.23.1-py3-none-any.whl", hash = "sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc", size = 10378, upload-time = "2026-04-13T23:21:45.386Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" },
+ { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" },
+ { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" },
+ { url = "https://files.pythonhosted.org/packages/03/ce/d4a646508bed2f8dec6435b40166fe9308dd191262033d3f307b2bbcaecd/yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae", size = 105704, upload-time = "2026-05-19T21:28:25.872Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" },
+ { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/5d/31be8a729531ab3e55ac3e7e5c800be8c89ea98947f418b2f6ea259fb6ee/yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f", size = 105322, upload-time = "2026-05-19T21:28:36.642Z" },
+ { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/bf/0de123bec8619e45c80cbded9085f61b5b4a9eddb8abe6d25d28ee1ec866/yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b", size = 111345, upload-time = "2026-05-19T21:28:43.93Z" },
+ { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" },
+ { url = "https://files.pythonhosted.org/packages/21/3c/f960d7a65ef97d8ba9b424fb5128796a4bc710fc6df2ddbbd7dfdc3bbd20/yarl-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45", size = 92808, upload-time = "2026-05-19T21:28:48.465Z" },
+ { url = "https://files.pythonhosted.org/packages/03/1a/49fb03750e4de4d2284cd5b885a383133c34eef45bd59631b2bb8b7e81e8/yarl-1.24.2-cp311-cp311-win_arm64.whl", hash = "sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122", size = 87610, upload-time = "2026-05-19T21:28:50.07Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/da/866bcb01076ba49d2b42b309867bed3826421f1c479655eb7a607b44f20b/yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8", size = 129957, upload-time = "2026-05-19T21:28:51.695Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2", size = 92164, upload-time = "2026-05-19T21:28:53.242Z" },
+ { url = "https://files.pythonhosted.org/packages/29/b6/170e2b8d4e3bc30e6bfdcca53556537f5bf595e938632dfcb059311f3ff6/yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d", size = 91688, upload-time = "2026-05-19T21:28:54.865Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/a5/c9f655d5553ea0b99fdac9d6a99ad3f9b3e73b8e5758bb46f58c9831f74c/yarl-1.24.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035", size = 102902, upload-time = "2026-05-19T21:28:56.963Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/bc/6b9664d815d79af4ee553337f9d606c56bbf269186ada9172de45f1b5f60/yarl-1.24.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576", size = 97931, upload-time = "2026-05-19T21:28:58.56Z" },
+ { url = "https://files.pythonhosted.org/packages/98/ec/32ba48acae30fecd60928f5791188b80a9d6ee3840507ffda29fecd37b71/yarl-1.24.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8", size = 111030, upload-time = "2026-05-19T21:29:00.148Z" },
+ { url = "https://files.pythonhosted.org/packages/82/5a/6f4cd081e5f4934d2ae3a8ef4abe3afacc010d26f0035ee91b35cd7d7c37/yarl-1.24.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7", size = 110392, upload-time = "2026-05-19T21:29:02.155Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/da/323a01c349bd5fb01bb6652e314d9bb218cee630a736bdb810ad50e4013f/yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c", size = 105612, upload-time = "2026-05-19T21:29:04.247Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/80/264ab684f181e1a876389374519ff05d10248725535ae2ac4e8ac4e563d6/yarl-1.24.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d", size = 104487, upload-time = "2026-05-19T21:29:06.491Z" },
+ { url = "https://files.pythonhosted.org/packages/41/07/efabe5df87e96d7ad5959760b888344be48cd6884db127b407c6b5503adc/yarl-1.24.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db", size = 102333, upload-time = "2026-05-19T21:29:08.267Z" },
+ { url = "https://files.pythonhosted.org/packages/44/0c/bcf7c42603e1009295f586d8890f2ba032c8b53310e815adf0a202c73d9f/yarl-1.24.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712", size = 99025, upload-time = "2026-05-19T21:29:10.682Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/82/84482ab1a57a0f21a08afe6a7004c61d741f8f2ecc3b05c321577c612164/yarl-1.24.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996", size = 110507, upload-time = "2026-05-19T21:29:12.954Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/8d/a546ba1dfe1b0f290e05fef145cd07614c0f15df1a707195e512d1e39d1d/yarl-1.24.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b", size = 103719, upload-time = "2026-05-19T21:29:14.893Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/b6/267f2a09213138473adfce6b8a6e17791d7fee70bd4d9003218e4dec58b0/yarl-1.24.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c", size = 110438, upload-time = "2026-05-19T21:29:16.485Z" },
+ { url = "https://files.pythonhosted.org/packages/48/2d/1c8d89c7c5f9cad9fb2902445d94e2ab1d7aa35de029afbb8ae95c42d00f/yarl-1.24.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1", size = 105719, upload-time = "2026-05-19T21:29:18.367Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/25/722e3b93bd687009afb2d59a35e13d30ddd8f80571445bb0c4e4ce26ec66/yarl-1.24.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad", size = 92901, upload-time = "2026-05-19T21:29:20.014Z" },
+ { url = "https://files.pythonhosted.org/packages/39/47/4486ccfb674c04854a1ef8aa77868b6a6f765feaf69633409d7ca4f02cb8/yarl-1.24.2-cp312-cp312-win_arm64.whl", hash = "sha256:044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30", size = 87229, upload-time = "2026-05-19T21:29:22.1Z" },
+ { url = "https://files.pythonhosted.org/packages/82/62/fcf0ce677f17e5c471c06311dd25964be38a4c586993632910d2e75278bc/yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536", size = 128978, upload-time = "2026-05-19T21:29:23.83Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/58/8e63299bb71ed61a834121d9d3fe6c9fcf2a6a5d09754ff4f20f2d20baf5/yarl-1.24.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607", size = 91733, upload-time = "2026-05-19T21:29:25.375Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/24/16748d5dab6daec8b0ed81ccec639a1cded0f18dcc62a4f696b4fe366c37/yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1", size = 91113, upload-time = "2026-05-19T21:29:26.928Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/66/b63fff7b71211e866624b21432d5943cbb633eb0c2872d9ee3070648f22c/yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986", size = 103899, upload-time = "2026-05-19T21:29:28.842Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/ac/ba1974b8533909636f7733fe86cf677e3619527c3c2fa913e0ea89c48757/yarl-1.24.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488", size = 97862, upload-time = "2026-05-19T21:29:31.086Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/a5/123ac993b5c2ba6f554a140305620cb8f150fa543711bbc49be3ec0a65a4/yarl-1.24.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b", size = 111060, upload-time = "2026-05-19T21:29:32.657Z" },
+ { url = "https://files.pythonhosted.org/packages/23/37/c472d3af3509688392134a88a825276770a187f1daa4de3f6dc0a327a751/yarl-1.24.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592", size = 110613, upload-time = "2026-05-19T21:29:34.379Z" },
+ { url = "https://files.pythonhosted.org/packages/df/88/09c28dad91e662ccfaa1b78f1c57badde74fc9d0b23e74aef644750ecd73/yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617", size = 107012, upload-time = "2026-05-19T21:29:36.216Z" },
+ { url = "https://files.pythonhosted.org/packages/07/ab/9d4f69d571a94f4d112fa7e2e007200f5a54d319f58c82ac7b7baa61f5c6/yarl-1.24.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92", size = 105887, upload-time = "2026-05-19T21:29:38.746Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/9a/000b2b66c0d772a499fc531d21dab92dfeb73b640a12eed6ba89f49bb2d0/yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a", size = 103620, upload-time = "2026-05-19T21:29:40.368Z" },
+ { url = "https://files.pythonhosted.org/packages/41/7c/7c1050f73450fbdaa3f0c72017059f00ce5e13366692f3dba25275a1083d/yarl-1.24.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44", size = 100599, upload-time = "2026-05-19T21:29:42.66Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/b1/29e5756b3926705f5f6089bd5b9f50a56eaac550da6e260bf713ead44d04/yarl-1.24.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a", size = 110604, upload-time = "2026-05-19T21:29:44.632Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/4b/8415bc96e9b150cde942fbac9a8182985e58f40ce5c54c34ed015407d3ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf", size = 105161, upload-time = "2026-05-19T21:29:46.755Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/d4/cde059abfa229553b7298a2eadde2752e723d50aeedaef86ce59da2718ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056", size = 110619, upload-time = "2026-05-19T21:29:48.972Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/2c/d6a6c9a61549f7b6c7e6dc6937d195bcf069582b47b7200dcd0e7b256acf/yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992", size = 107362, upload-time = "2026-05-19T21:29:51Z" },
+ { url = "https://files.pythonhosted.org/packages/92/dd/3ae5fe417e9d1c353a548553326eb9935e76b6b727161563b424cc296df3/yarl-1.24.2-cp313-cp313-win_amd64.whl", hash = "sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656", size = 92667, upload-time = "2026-05-19T21:29:52.743Z" },
+ { url = "https://files.pythonhosted.org/packages/10/cc/a7beb239f78f27fca1b053c8e8595e4179c02e62249b4687ec218c370c50/yarl-1.24.2-cp313-cp313-win_arm64.whl", hash = "sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461", size = 87069, upload-time = "2026-05-19T21:29:54.442Z" },
+ { url = "https://files.pythonhosted.org/packages/40/0e/e08087695fc12789263821c5dc0f8dc52b5b17efd0887cacf419f8a43ba3/yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2", size = 129670, upload-time = "2026-05-19T21:29:56.631Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/98/ab4b5ed1b1b5cd973c8a3eb994c3a6aefb6ce6d399e21bb5f0316c33815c/yarl-1.24.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630", size = 91916, upload-time = "2026-05-19T21:29:58.645Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8", size = 91625, upload-time = "2026-05-19T21:30:00.412Z" },
+ { url = "https://files.pythonhosted.org/packages/02/a7/45baabfff76829264e623b185cff0c340d7e11bf3e1cd9ea37e7d17934bd/yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14", size = 104574, upload-time = "2026-05-19T21:30:02.544Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/40/3a5ab144d3d650ca37d4f4b57e56169be8af3ca34c448793e064b30baaed/yarl-1.24.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535", size = 97534, upload-time = "2026-05-19T21:30:04.319Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/b5/5658fef3681fb5776b4513b052bec750009f47b3a592251c705d75375798/yarl-1.24.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14", size = 111481, upload-time = "2026-05-19T21:30:05.988Z" },
+ { url = "https://files.pythonhosted.org/packages/4c/06/fdcd7dde037f00866dce123ed4ba23dba94beb56fc4cf561668d27be37f2/yarl-1.24.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3", size = 111529, upload-time = "2026-05-19T21:30:07.738Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/53/d81269aaafccea0d33396c03035de997b743f11e648e6e27a0df99c72980/yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208", size = 107338, upload-time = "2026-05-19T21:30:09.713Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/04/23049463f729bd899df203a7960505a75333edd499cda8aa1d5a82b64df5/yarl-1.24.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50", size = 106147, upload-time = "2026-05-19T21:30:11.365Z" },
+ { url = "https://files.pythonhosted.org/packages/14/18/04a4b5830b43ed5e4c5015b40e9f6241ad91487d71611061b4e111d6ac80/yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd", size = 104272, upload-time = "2026-05-19T21:30:12.978Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/f7/8cffdf319aee7a7c1dbd07b61d91c3e3fda460c7a93b5f93e445f3806c4c/yarl-1.24.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67", size = 99962, upload-time = "2026-05-19T21:30:15.001Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/39/b3cce3b7dbef64ac700ad4cea156a207d01bede0f507587616c364b5468e/yarl-1.24.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1", size = 111063, upload-time = "2026-05-19T21:30:16.683Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/ea/100818505e7ebf165c7242ff17fdf7d9fee79e27234aeca871c1082920d7/yarl-1.24.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1", size = 105438, upload-time = "2026-05-19T21:30:18.769Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/d2/e075a0b32aa6625087de9e653087df0759fed5de4a435fef594181102a77/yarl-1.24.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b", size = 111458, upload-time = "2026-05-19T21:30:21.024Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/5c/ceea7ba98b65c8eb8d947fdc52f9bedfcd43c6a57c9e3c90c17be8f324a3/yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8", size = 107589, upload-time = "2026-05-19T21:30:23.412Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/d9/5582d57e2b2db9b85eb6663a22efdd78e08805f3f5389566e9fcad254d1b/yarl-1.24.2-cp314-cp314-win_amd64.whl", hash = "sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0", size = 94424, upload-time = "2026-05-19T21:30:25.425Z" },
+ { url = "https://files.pythonhosted.org/packages/92/10/7dc07a0e22806a9280f42a57361395506e800c64e22737cd7b0886feab42/yarl-1.24.2-cp314-cp314-win_arm64.whl", hash = "sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57", size = 88690, upload-time = "2026-05-19T21:30:27.623Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/13/d5b8e2c8667db955bcb3de233f18798fefe7edf1d7429c2c9d4f9c401114/yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b", size = 136248, upload-time = "2026-05-19T21:30:29.297Z" },
+ { url = "https://files.pythonhosted.org/packages/de/46/a4a97c05c9c9b8fd266bb2a0df12992c7fbd02391eb9640583411b6dab32/yarl-1.24.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761", size = 95084, upload-time = "2026-05-19T21:30:31.031Z" },
+ { url = "https://files.pythonhosted.org/packages/95/b2/845cf2074a015e6fe0d0808cf1a2d9e868386c4220d657ebd8302b199043/yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8", size = 95272, upload-time = "2026-05-19T21:30:33.062Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/16/e69d4aa244aef45235ddfebc0e04036a6829842bc5a6a795aedc6c998d23/yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed", size = 101497, upload-time = "2026-05-19T21:30:34.842Z" },
+ { url = "https://files.pythonhosted.org/packages/15/94/c07107715d621076863ee88b3ddf183fa5e9d4aba5769623c9979828410a/yarl-1.24.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543", size = 94002, upload-time = "2026-05-19T21:30:37.724Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/35/fc1bbdd895b5e4010b8fdd037f7ed3aa289d3863e08231b30231ca9a0815/yarl-1.24.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0", size = 106524, upload-time = "2026-05-19T21:30:40.196Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/f2/32b66d0a4ba47c296cf86d03e2c67bff58399fe6d6d84d5205c04c66cc6d/yarl-1.24.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024", size = 106165, upload-time = "2026-05-19T21:30:41.888Z" },
+ { url = "https://files.pythonhosted.org/packages/95/47/37cb5ff50c5e825d4d38e81bb04d1b7e96bf960f7ab89f9850b162f3f114/yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf", size = 103010, upload-time = "2026-05-19T21:30:43.985Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/d2/4597912315096f7bb359e46e13bf8b60994fcbb2db29b804c0902ef4eff5/yarl-1.24.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc", size = 101128, upload-time = "2026-05-19T21:30:46.291Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/d5/c8e86e120521e646013d02a8e3b8884392e28494be8f392366e50d208efc/yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb", size = 101382, upload-time = "2026-05-19T21:30:48.085Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/98/70b229236118f89dbeb739b76f10225bbf53b5497725502594c9a01d699a/yarl-1.24.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420", size = 95964, upload-time = "2026-05-19T21:30:49.785Z" },
+ { url = "https://files.pythonhosted.org/packages/87/f8/56c386981e3c8648d279fdef2397ffec577e8320fd5649745e34d54faeb7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f", size = 106204, upload-time = "2026-05-19T21:30:51.862Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/1e/765afe97811ca35933e2a7de70ac57b1997ea2e4ee895719ee7a231fb7e5/yarl-1.24.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa", size = 101510, upload-time = "2026-05-19T21:30:53.62Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/78/393913f4b9039e1edd09ae8a9bbb9d539be909a8abf6d8a2084585bed4b7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe", size = 105584, upload-time = "2026-05-19T21:30:55.962Z" },
+ { url = "https://files.pythonhosted.org/packages/78/87/deb17b7049bbe74ea11a713b86f8f27800cc1c8648b0b797243ebb4830ba/yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd", size = 103410, upload-time = "2026-05-19T21:30:57.962Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/be/f9f7594e23b5b93affff0318e4593c1920331bcaefda326cabcad94296a1/yarl-1.24.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215", size = 102980, upload-time = "2026-05-19T21:30:59.735Z" },
+ { url = "https://files.pythonhosted.org/packages/65/a4/ba80dccd3593ff1f01051a818694d07b58cb8232677ee9a22a5a1f93a9fc/yarl-1.24.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d", size = 91219, upload-time = "2026-05-19T21:31:01.934Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" },
]