From b97354623b2eb5cae1f422ce3a4e79f6723e49ab Mon Sep 17 00:00:00 2001 From: goodnight Date: Sun, 21 Jun 2026 12:00:00 +0100 Subject: [PATCH 1/4] add quantization-faceoff --- Quantization-FaceOff/.env.example | 9 + Quantization-FaceOff/.gitignore | 12 + Quantization-FaceOff/README.md | 131 ++ Quantization-FaceOff/assets/faceoff.png | Bin 0 -> 100190 bytes .../assets/qdrant-baseline.png | Bin 0 -> 30299 bytes Quantization-FaceOff/assets/qdrant-bq.png | Bin 0 -> 31450 bytes .../assets/qdrant-collections.png | Bin 0 -> 47770 bytes Quantization-FaceOff/assets/qdrant-pq.png | Bin 0 -> 31429 bytes Quantization-FaceOff/assets/qdrant-sq.png | Bin 0 -> 31221 bytes Quantization-FaceOff/assets/rescore.png | Bin 0 -> 62857 bytes Quantization-FaceOff/assets/rescore_bq.png | Bin 0 -> 63700 bytes Quantization-FaceOff/assets/rescore_pq.png | Bin 0 -> 62916 bytes Quantization-FaceOff/docker-compose.yml | 12 + Quantization-FaceOff/pyproject.toml | 19 + Quantization-FaceOff/qfo/__init__.py | 0 Quantization-FaceOff/qfo/bench/__init__.py | 0 Quantization-FaceOff/qfo/bench/eval.py | 70 + .../qfo/bench/rescore_sweep.py | 75 + Quantization-FaceOff/qfo/bench/throughput.py | 66 + Quantization-FaceOff/qfo/config.py | 53 + Quantization-FaceOff/qfo/demo.py | 52 + Quantization-FaceOff/qfo/pipeline/__init__.py | 0 Quantization-FaceOff/qfo/pipeline/add_bq.py | 31 + Quantization-FaceOff/qfo/pipeline/ingest.py | 59 + Quantization-FaceOff/qfo/run_all.py | 37 + Quantization-FaceOff/qfo/telemetry.py | 103 + Quantization-FaceOff/qfo/viz/__init__.py | 0 Quantization-FaceOff/qfo/viz/report.py | 77 + Quantization-FaceOff/qfo/viz/rescore_chart.py | 61 + Quantization-FaceOff/uv.lock | 1714 +++++++++++++++++ 30 files changed, 2581 insertions(+) create mode 100644 Quantization-FaceOff/.env.example create mode 100644 Quantization-FaceOff/.gitignore create mode 100644 Quantization-FaceOff/README.md create mode 100644 Quantization-FaceOff/assets/faceoff.png create mode 100644 Quantization-FaceOff/assets/qdrant-baseline.png create mode 100644 Quantization-FaceOff/assets/qdrant-bq.png create mode 100644 Quantization-FaceOff/assets/qdrant-collections.png create mode 100644 Quantization-FaceOff/assets/qdrant-pq.png create mode 100644 Quantization-FaceOff/assets/qdrant-sq.png create mode 100644 Quantization-FaceOff/assets/rescore.png create mode 100644 Quantization-FaceOff/assets/rescore_bq.png create mode 100644 Quantization-FaceOff/assets/rescore_pq.png create mode 100644 Quantization-FaceOff/docker-compose.yml create mode 100644 Quantization-FaceOff/pyproject.toml create mode 100644 Quantization-FaceOff/qfo/__init__.py create mode 100644 Quantization-FaceOff/qfo/bench/__init__.py create mode 100644 Quantization-FaceOff/qfo/bench/eval.py create mode 100644 Quantization-FaceOff/qfo/bench/rescore_sweep.py create mode 100644 Quantization-FaceOff/qfo/bench/throughput.py create mode 100644 Quantization-FaceOff/qfo/config.py create mode 100644 Quantization-FaceOff/qfo/demo.py create mode 100644 Quantization-FaceOff/qfo/pipeline/__init__.py create mode 100644 Quantization-FaceOff/qfo/pipeline/add_bq.py create mode 100644 Quantization-FaceOff/qfo/pipeline/ingest.py create mode 100644 Quantization-FaceOff/qfo/run_all.py create mode 100644 Quantization-FaceOff/qfo/telemetry.py create mode 100644 Quantization-FaceOff/qfo/viz/__init__.py create mode 100644 Quantization-FaceOff/qfo/viz/report.py create mode 100644 Quantization-FaceOff/qfo/viz/rescore_chart.py create mode 100644 Quantization-FaceOff/uv.lock diff --git a/Quantization-FaceOff/.env.example b/Quantization-FaceOff/.env.example new file mode 100644 index 0000000..98a7733 --- /dev/null +++ b/Quantization-FaceOff/.env.example @@ -0,0 +1,9 @@ +# Copy to .env and fill in. (.env is gitignored.) + +# Weights & Biases - required: eval / sweeps / throughput log runs here. +# Get a key at https://wandb.ai/authorize +WANDB_API_KEY=your_wandb_key_here + +# HuggingFace - optional. The dbpedia dataset is public, so this is usually not +# needed; set it only if you hit rate limits or use a gated mirror. +HF_TOKEN= diff --git a/Quantization-FaceOff/.gitignore b/Quantization-FaceOff/.gitignore new file mode 100644 index 0000000..e74feae --- /dev/null +++ b/Quantization-FaceOff/.gitignore @@ -0,0 +1,12 @@ +.env +.venv/ +__pycache__/ +*.pyc +data/ +wandb/ +results/ +.idea/ + +# docs stay local — only README.md ships +*.md +!README.md diff --git a/Quantization-FaceOff/README.md b/Quantization-FaceOff/README.md new file mode 100644 index 0000000..33aef6f --- /dev/null +++ b/Quantization-FaceOff/README.md @@ -0,0 +1,131 @@ +# Qdrant Quantization Face-Off + +How much do you actually pay - in recall and latency - to shrink your vectors 4× or 16× in RAM? + +This benchmarks four native Qdrant configurations head-to-head on **high-dimensional text embeddings**, measuring the real tradeoff: **recall vs. latency vs. memory** - and how rescoring buys recall back. + +- **Baseline** - HNSW, uncompressed `float32` +- **SQ** - Scalar Quantization, `int8` (4× smaller) +- **PQ** - Product Quantization, ×16 compression (16× smaller) +- **BQ** - Binary Quantization, 1 bit/dim (32× smaller) + +Dataset: [`dbpedia-entities-openai-1M`](https://huggingface.co/datasets/KShivendu/dbpedia-entities-openai-1M) - OpenAI `ada-002` embeddings, **1536-d, cosine**, real Wikipedia article titles/text as payload. Qdrant runs in local Docker (not Cloud - network jitter would corrupt latency numbers). All runs logged to Weights & Biases. + +## Results + +![faceoff](assets/faceoff.png) + +99,000 vectors indexed, 1,000 held-out queries, Recall@10 vs. exact-NN ground truth: + +| config | Recall@10 | p50 | p95 | p99 | vectors in RAM | compression | +|---|---|---|---|---|---|---| +| **baseline** f32 | **0.995** | 12.1 ms | 32.3 ms | 56.7 ms | 608 MB | 1× | +| **SQ** int8 | 0.895 | **9.5 ms** | 28.7 ms | 31.5 ms | 152 MB | **4×** | +| **PQ** x16 | 0.845 | 11.3 ms | 26.9 ms | 33.3 ms | **38 MB** | **16×** | +| **BQ** x32 | 0.888 | 12.7 ms | 25.3 ms | 29.3 ms | **19 MB** | **32×** | + +*Recall is out-of-the-box (default search). Memory = RAM-resident quantized-vector size (computed); SQ/PQ/BQ keep the f32 originals on disk for rescoring. p99 is noisy on a single laptop.* + +## Verdict + +- **SQ int8 - the easy default.** 4× less RAM, ~0.90 recall out of the box, median latency as fast as baseline. +- **PQ x16 / BQ x32 - when RAM is the wall.** Raw recall drops (0.845 / 0.672), but rescoring buys it straight back. +- **Baseline** is the recall ceiling (0.995) and the memory floor to beat. + +### Rescoring is the real lever + +Quantized search is fast but approximate. Qdrant can **oversample** candidates on the cheap codes, then **rescore** them against the full-precision originals on disk - one search param. Recall climbs back to baseline: + +| config | RAM | raw recall | + rescore (sweet spot) | +|---|---|---|---| +| PQ x16 | 38 MB | 0.845 | **0.989** @ 2× oversampling | +| BQ x32 | 19 MB | 0.672 | **0.990** @ 8× oversampling | + +**The takeaway: BQ + 8× rescore = baseline-grade recall (0.990) at 32× less RAM.** You don't choose between small and accurate - you get both. (Binary is lossier than PQ, so it needs a wider oversampling net - but it gets there.) + +![rescore sweeps](assets/rescore_bq.png) + +## Throughput + +QPS under 16 concurrent clients, 2,000 queries each (single laptop - CPU-bound, so the spread is modest; real multi-core hardware widens it): + +| config | QPS | mean latency under load | +|---|---|---| +| baseline f32 | 156 | 102 ms | +| SQ int8 | 159 | 100 ms | +| PQ x16 | 140 | 114 ms | +| **BQ x32** | **163** | **98 ms** | + +Smaller vectors (BQ/SQ) scan faster; PQ pays a codebook-distance overhead. + +## What it saves (RAM → $) + +RAM is the cost driver of a vector database. Scaling the resident quantized-vector footprint to **10M vectors at 1536-d**, at an illustrative **$5 / GB-month** of RAM: + +| config | RAM @ 10M | est. $/month | vs baseline | +|---|---|---|---| +| baseline f32 | 61.4 GB | ~$307 | - | +| SQ int8 | 15.4 GB | ~$77 | 4× cheaper | +| PQ x16 | 3.8 GB | ~$19 | 16× cheaper | +| **BQ x32** | **1.9 GB** | **~$10** | **32× cheaper** | + +The f32 originals stay on disk (cheap) and are only touched to rescore. So you size your **RAM** instance to the quantized footprint: **BQ + 8× rescore = ~$10/mo for baseline-grade recall on 10M vectors, vs ~$307/mo uncompressed.** (Numbers illustrative; plug your own $/GB.) + +## Quickstart + +Requires Docker + [uv](https://docs.astral.sh/uv/). Copy `.env.example` to `.env` and add your `WANDB_API_KEY` (optional `HF_TOKEN`). + +```bash +docker compose up -d # local Qdrant v1.18.2, storage persisted to ./data +uv sync # install deps + the qfo package (editable) +uv run python -m qfo.run_all # the whole faceoff in one command +uv run python -m qfo.demo einstein # then try search-by-example +``` + +`run_all` runs these in order (or run any individually with `uv run python -m [args]`): + +| step | does | +|---|---| +| `qfo.data.dbpedia` | download + cache dataset (curl, resumable) | +| `qfo.pipeline.ingest` | build baseline / sq / pq collections (+ payload) | +| `qfo.pipeline.add_bq` | add the bq (binary) collection | +| `qfo.data.ground_truth` | exact-NN ground truth for the query set | +| `qfo.bench.eval` | recall + latency -> `results/` + W&B | +| `qfo.bench.rescore_sweep pq` / `bq` | oversampling/rescore sweeps | +| `qfo.bench.throughput` | QPS under concurrency | +| `qfo.viz.report` | dashboard chart -> `assets/` | +| `qfo.viz.rescore_chart pq` / `bq` | sweep charts | + +Run everything from the project root: the `qfo` package is importable (installed via `uv sync`), and scripts read/write `data/`, `results/`, `assets/` relative to root. + +Collections persist across reboots (bind-mounted volume) - re-run `docker compose up -d` and the data is still there, no re-ingest. + +## Layout + +Code is the `qfo` package; run modules with `python -m qfo.<...>` from the project root. Data, config, and outputs stay in root (`docker-compose.yml`, `data/`, `results/`, `assets/`). + +``` +qfo/ + run_all.py run the entire pipeline in one command + config.py dataset + collection configs (scale/quant knobs) + telemetry.py RAM/latency helpers + W&B wiring (run groups) + data/ + dbpedia.py loader: curl shard download, cache, query holdout + ground_truth.py exact-NN ground truth via brute-force search + pipeline/ + ingest.py create baseline/sq/pq, upload vectors + payload + add_bq.py add one collection (e.g. bq) without touching others + bench/ + eval.py Recall@K + latency percentiles -> results/ + W&B + rescore_sweep.py oversampling/rescore sweep (pq / bq) + throughput.py QPS per config under concurrency + viz/ + report.py the faceoff dashboard chart + rescore_chart.py rescore-sweep chart + demo.py search-by-example (find similar articles) +``` + +## Notes + +- **Scale knob:** `DATASET_N` in `config.py` (default 100k). 1M needs ~25 GB disk (3 collections keep f32 originals) - use a sequential per-collection ingest if disk-bound. +- **Per-config RAM:** the table uses computed sizes. For *measured* numbers, Qdrant's dashboard (`localhost:6333/dashboard`) shows a per-collection Memory Usage breakdown (vectors / quantized / payload) live - no extra tooling needed. diff --git a/Quantization-FaceOff/assets/faceoff.png b/Quantization-FaceOff/assets/faceoff.png new file mode 100644 index 0000000000000000000000000000000000000000..f43320c5b8946f461165a82ab972c0e6a9e0ffb7 GIT binary patch literal 100190 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 bHi#w7rQnRdcWYWjsy%ta!YKFnmAn4~L%OAh literal 0 HcmV?d00001 diff --git a/Quantization-FaceOff/assets/qdrant-bq.png b/Quantization-FaceOff/assets/qdrant-bq.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0e6cbf1c7d371f810868f1cceabfb1045b72e1 GIT binary patch literal 31450 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 literal 0 HcmV?d00001 diff --git a/Quantization-FaceOff/assets/qdrant-collections.png b/Quantization-FaceOff/assets/qdrant-collections.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed476e361a786e137e484fd7ce1607d076e6b41 GIT binary patch literal 47770 zcmeFY_g9lk7e9)kVgcd-1rY&Jx^x5tLQzoZy+{p6lP*1!fQW(!0@8c$Rq4G5(n6B} z0YVQ+=ny&tk{djF?tA}%d)K<_`}~yTnau3jZT9}`Jt69Wrl>6L787z-t$&l;tjwKINb19NxJv z7xFAp{h7|C>oE_Wm&rK4zOK!|`dx*BE9twqhRMnG(*7?~_5ASqc?QdzRK0qWd{c+) z(hle^n*1ly+}bH1pH|QE=AjNLyK=~&l-Sx5cDEaMd2$F~w^ey~*a$ZuprZUbE)fa( z{j>!UvH*X-kSudh{r9Eq?*I9G&Y1uI@BuQ>Q=Heg$Qsde=H42a*PPzh0=ejBSQJ)N zQPfw$)#&ZD$sJG8tXtOT7t&u?r$)nVANeu#Zh)g&td5SA&ZLgzD?Yf$SMa~;vYf4b zUlFi=Q8I+9!@Hihsv;ybceRGh^7XN1{cDSQU%&aDw#PD_IekT3l|}1Cf+c+wQeSvj zhz4=~oMgln``x;_cv12z7u5ThH-^6Dn`Yk7Q4sk(K{kHMWd&_IT}%B~8%PSpe}B1S zE1pri5|#v5U3+`GU@VwaGLZ}RvEW!{@xt#pGXNSJi)&8}GekKo(g8)1zGIImgc*hr z1%jo0H5*b)^1$E2NcNbEv`i#TZ|q$uvR^~Z(2UWQ+tPxVD9^ta3zh+fULGm|l?@(% z^bz+5N*!EeU?Z>CAK7ue-_3A(RR>e&HOTSEG&A@;nW>xq4By2I#5L6|4f(cehJd!P(~_!3ib4J2@$5+;`+Q3o6+SEKn>EN#lS{S&{1Uq$rh* zk=F?#Dom0lzsZ}(A+rsbl_RoXg0k=8%opMemx(isGD=ckWi-St2o!GYERlu;+y9Zm zu=}12&v5cGk^hLN`WcPijk_eous3g96StFU-J2Qx3VPH-W#%2wD&Ug%ZRj(ac)&r z0fr$wH3#W0b}KN|LT`LYwk$H6{ZQz+6-!&OcO&!tDUy8GgOUm`>GlNsdoLtAd4D&v zL?6Ro;?@it-OFz~2=Y2wAjIs@$6byiy`|V%e!E6XN(;xJW-Ijr!4u2t-}PzN~6SPv74KfYpVJ=g-D zY3b^6-K_Y*-F#LajmwGxP($Od#9hAi?0hAgkl;oT<-RR0&!ME5)JHN8Dd8w%4zWiZDg#sa8Q7nT~64NTHqaLTZIRc=O#}q9JTV?X1&-h9r|& zhh9+*#IMdkBGZv<+~mqPCSsiE;O>fxW=6XTvKjhfJba^<@`qGjX(F@kISuFU7f1RS zB2f17Uqapu4fYyJ+kA>-S^3b}k+VOtw`wECQl*fsUIU=EqQyV4f@X@ z%-VYCsAd0`?Q(%D!6h73QyqTk_xXKa0bn~d${G^fTzNA(<(8S+xDxZ#SS5ghF{BLlR#W%MuC5ahi8pR_F0U-nExe&@t#S5Gp~rarqG6D; z@wxdD)ntGjn^AygE@SYwGxctZJJ$;>Du9a9-HTa$$vnT_m+AwzR}=U6T9C8ee(t6Q zdMcGoJ1r~4xT{i9oC9>xtZ37!(#}9cllGfA8aksV4})tHsYn~n-HF9sn@5uCPFJ)y zNpmPQAbNF4hVoj>V_H>fF)Os|hQpAcjaaM_UFh&qf|g^1f58y#z_FG?g`nMo%jc#! zOuKwRC0Se&yS<^y$+WNm&&XP{C~!$UJRDwe&?I~^V+{3}5uVeBdrz9)q18d6Q#A!; z99+NGo`pZ%oa@MO`*qFcalg5TT%N>k47cP4zS(Xitf`h~Mj+8g-}bmHbwG2m#P#F~ zWU4Hi=wo*%`q0T>bw=;yrr0IfU(?hTW=Q75NaT~sD}}QYypPajqG6TGMY{S6CHW20 z{DV5otlvfIU5y(n&%)iib1ItJ5Th6BndSzg&$a20nUdXSEb3GOV;F|KQEbD2BlX+kN+(1J-r%&#R|H2Ue=~w|Z{tg~zT4ImP(}e!hr| zS$NppqXRdhy+e7bg+HXt{f-ZNEV2UgU}$ba zL^-L8*e;sA(m>l;A9@ma_|?i3x5P2r#l~p#lfe=lkqs?{C$j6XybALQsQyr1GCA^u zC%T@#*+&NH!G~2pWY_`=JKD!)2COuyZgz`ymPC&%O|x%u3x%y^oU0-=6#zY7g6JQ4 z2AO(>;0~_z71*q9X4)FM57Q$sF+>|6X_wGv0}|Ls&h1mIjTqjgC_RAI#33H=Bk8tg zyD!oM5baFCF38TnYZOzt)s4H=lR$zc8*b#n-i*!@6=G-5E={Q166;D?GBWJBzaDa;Hp10;@-+*)_^My{Ih&GLEmo%k7yG-7YfP8Ofo@- z)&9;v+E)?1?{R@h?H#j@lGo0pTSeo62$o@!$#0l2dxHjjHlt=3Mck&HI1l}FYk72( z!kT4!18igoG#JRfG+3{cBR3|;VT`8te<7mn6gTmzIy^yHU4^Ce$;!ZPk65AM*nL#) zEHKtHEwU>ziI#pk?|Xc2QrCPP1gEMrAUt?vmo)RPSi*itps?ODG0daJ+RZ+Hx?bn9 z05!~70Vp?7)>X=*Nmm@1`TVw~pHiqjgkNgYuv8E#M)`bj2Nz+yaXKd!xBuGFmJ=p& zl2_hZt8b-}w7>x0*NA>Jxq_OB^9`)fpa!HfJ<;rAT6va zX;q>*<>bzR2(lV){ezeUZAZK4+88I9_VN}yz{UTP)=qGM#gf6WSuk>P`G_E zX7&_iiUvHR;=;_?i;U9nr?2Hi;%|4&G-#QC*|{$`zo0B1gHuN}^~T5*V!tyRc)O=o;JT8THEncAvKapvKMrq(JqvS>`R@+7iEzhR1^B*LWVqW2*1%S(%f zA`Rz#t9sW|A-`W#wKN~~NSV2@Z&gM5?;=agTeN50<;Q2LwG>k=$&=hWhb=~~)vjbI zy>?jX4dEDNd7DklQURv!q%DmM2L+sWzD61)noEI zCTrBmDPFjCRDn>nuidk3s471*7&@}d?bO}%km`|Y#MnNcL$vT=x@)(SOP^-%2l5ay z(W`tF?rAhzjo#(jvm-Qo&_W2OOYK(Gx?+h$JzsdcyXH!`YmGyMYbu{ZToxE+jko;3 z1n7RZPi45e(K>~17;_Nx{wB)nC0gs72At{F&>JDPus_Eie2#ix;398~a$n08TYj-U=%J|TCSBh=3awy6m$+&ck9Ow+M!6D!l}-N;u%td-gKg4g$Utdv@wPI3q{DnikX!i;+h zih8V!Xh)CmwKSoM4vGw>uSsM1%`IAt;+(LVcTI8NI}4|!gYHPW$+z%->Rpj^wN@%H zv|RK{0VjqCqnHMr;GCVfhqJ}4qX)ym@8?WDiL?of^M1ke6UZe5!I1fmB z=S5Cgy&DhFru99ILv~LWBTe0;LdcLc^wEr0Jej@%_Phu#8sS?9YP92*VmT)mZ|OG9 z&*-|&&-illurY?=*1=nm+#~Te>c{pzZ%w+7;q+BD0~iCZS{_$HC4n@(YQ|>WXFY!D zk_NP|@<6DXIE!6F1+`7`(vYZf>$J14jmBS8B6@R4%dUnU(({9JfIAa_nH4^xI*wN9 zXhHlwgaESov;diRPxs^XS9yOE4DB6P1@2TCtG!&}HSFsdS=o5_rN>RabfY z=W$-j+h`|4OmSU-H1_81pexKKajp0Qf0bfv2vO{7mg7Yplj<9xl|Pde4Mb(nQf=s% zL&${vR=;b*Or2FE5V=;~s~yI$mKbgw;e^57RP$guiEq3h$gjz`=-KMK6=8eGUyCAJ z<8{2TC3hYpUscH3Y#kL%(X~uuu9lmDPSawX36OyozeY#C4QJR`voj{mKDL+bY-_N~ zJTBgqZk;J&op`Px0WD42v^A}t7kpJZ9UzO zEqzTI$S<|9OZu|MC!fIcjnDsNPns0=8w|KE3mBamO@si!XAfCg4gf`S!}lxEH9fjx z*zdC}>aX$ttj$=(P=#C``e!oJ_9;uUfk7PkxEcpzoEUZl)Y5K= z_E2^lJaYFGTTAtq_mCWAL!FU7JtGewRCUV6ZP=b9U4M^G1b?a^+Hgi4CM%wu5k2eM z+6c+(3@lpNR)?iW;ocsK;!SuN_#ZeV@u~pVL*Q5CZR6ZkLXt@Eow7|`ZB{%r!Wk+x zZ21};uLYNrng!QrbRM=j`!tq|$okS5B1YoB7DkYz;|GN$&0ZK5vAtj2vaC5=sB;Ec z6=byXy^}T#iRm3uBF3ncvm<4F*LtRLQ<~G0*EV`3T2q+63F%{iK1p(F zSSotBDS6+4P{|-m1?YGd__O`KBlB2da`o}{rxJ2ydaID8?KCsGfHQuw5Q#MKE2ok# zk)?^LF$wjP%>IjuHoLTVCrQJE43A7|Ko?t(l&j-|lN~{RHXpo;0cFmZpg{VXZ}hYF zPT3weXX`l$=HT?%M~7v`G|OsP#4IbKduf`9?}>Db=%udXLMaA3b_|XhgNL)9t+nEl zPfz^`N~XV&DH*eK5I|fA`_0KN6@htXuq$&-rQ4!R@or2tc;Eru#aTywe1-Vr(iL{< z-PGul6W5WwPqq)18`{94GHJ}%`LTNme4Z!KAixY^AbZ@LFIzWaZL9Xm6UnxR;Q?0C(fO3;B zI=s|RTo%ogR|a;5Wih07*jR#=x!z=52WoPvbqM=mADx6|q1iAQ$Y zrKFN?%Ems+Kd!DacWtzvSf216JX@4DpO=(fe9B7yS$W{mmnTd67b<@l#yNwgQC*}* zy?JqiJ#5v+;iaovDdE8egWid6p#u8(Ck5&X%GDGS5p}!E-EbrWlha(*y$&-LMk6y2 z40Gq|pql)R6hD*RRow=RO^u@i$mqQ&XC0xWeg~%t4Hrw0TK&iYwM}W$3Y*QJjT-&VknyWr)-SvU&BJ-L@>Vf!Fi*I$w+uDUHdxIiz7_UdT zeijS^ww{PKuz2~vERz9Vf_Nhiz@0cQF02ZODw=0AuiWy4f5t??rj&s>;^yPY*XP!a zh4$H}?PMujNjD-21|uP`pQI;^o7w~KaHNZCx!#RJXSL0E@+eq5F6qJD&4EVq74+y) zRn8Bpaz3g#k-EhJfkY}m_SW8sN7%c-bavdY70cd3Er+}>={9ep z;%u;OCja8eR!VMs%W1HXyABvZ^!f{Tidq$b9O!xbyusiNAt%{AlJDL3_@#OHxYy?! z9$X$7fI^e`>KtavuZFy%T-`o-z)-&2ei{~b1~iI6Qs7tmF+5$QY%(VE%!C1gSZoHhDeYyz}-8YKDeogazncf8-i@&;9a9JH43h5z1 zS+SzkMn6or%3B?iX2k2rqtM&)70H)gH5h!>R+p{^{1o)o4IQ^?7M)QCwYe^jT1_S$ zWr=GoGWU51r$r`lnmp(ho)-_9ncVaXNlUQm-q?*s4ydqOPIeKKrItuA|33Dup?kK3 zGAp%X>#o8f!DrQ<54!2yb=ImlOU|&68ZEb&nYl1W3LVs6g!<_mY>KnM*vAx(r)4V^ z4QGY5^kNm|>jDn)LN#0WBbD!HFrU3#kG<>JAoot{OzHG#WwT(VoqK3li*56*FAiUY zZH+?)@1A^DwjDw+V-(?%>7n|A>^YY`2e@w zot+np%tGdiPeJj=(|3ldHNp|A(@&C3Bpud!BtGxv8$5I`OD!%06}^pbb#Wg>w~m~x z!dt&;Ih~3BC-#i-yg@bKQGrzy(VaoSmsGx>^CFE@XlL@`FLqRVEvGyV+LQjLFEL-r zB>6#f9$7OwV{hTB1%h|%k``G+Hpm2#K=v=R;-UHzRFB9Pt#*T+ZuJoBIlb#*hSS)& znOzCbqtl|TzS|F>(Xd=905NTxVSbo|8pKt(E*Z(vqYDkl3sY`z!xC;A?0JONW$}CS_s>4vbQM!Hl>Y2bMnv zm<=O(4Y$&xchl+6L-Xsu3J`J0I}`n3sfxjLx{teN$^r=+xouC*O;W}z=Q5gmZKRX* zTRD!67<(9D9MjXl@^#Lex}Hr%*o+9R5|Qc{Hnzaeu;eQ{N`P^_p5c2fWqJ_44?J+= zEmV;WFQhKQw&smooXy2i5pQAk_s9n>;}RSejjm#hj&s!5Br1m3<2zHa|KiCDQ9;zq zAe;2B9iH@gLkhC;Ojq$%&d*L1dIavw?Bx;ThId|+?aRQ6D}_0VcrL`V6QK#3l<}Y+ zY>ZhR7tA4merQ%Coq)=&Xx5wY!^YhG*3+`XTMR25w>P$@oV z%?&WqnD&Lf_H3-#m|(a=cE00t7{LxEDsmbaqf!#br%W&~y*Es^x8r!8Hf<(@d-`7~ zWdPO&x*yI7maV09%D!=tnV$ET8ffJfyfV;CVpp`g8fm)6&Ym;-O}R4iJ~sHJh2@l+ z*rn{+ z^gx{hTBgbczaKgBcwHoOa#<1fUCVDtRCRW+Mn8LB;>^@E%l+t~=!NW-WhpcAXFjUX8^TjS=BI1Y z{%*>)m1Ul;@??{=s3S+n)V=q=m=U+Gk`wd7Rp>s40=26{^xhP?fQ^XALw91jqRn?; zMpK;>t?0CVL$&ypIQC|eeEochEFbL!0UK|aw)qb+tD!Yvnf^6_G`s9byJt$kJ9eNa zsDs(IoyR_Ecl*99fKfJP`wW{d{=4+$_nJJ`^92`9YywtJwKW$3)&%L}rPK7Bb4cNL z!A@r3zj__9X zsYt0neP&8D(x)RDpyio-$gBmrh;|TUb$urzz8uCn`m^Pj1@r=-CspGy%w{w1LOfJw-G@AXFnhI0J5hG8 zMJ0)NiIy}yS@T*O6DgcadIERXoFf+11X(XE&N>LQf?S@!Ul0{Pei|YtHJq=J;!60T z>l&@3Rm&LVsbVQQto9sFMMP=+t2@qc2bOkAbA)ZCUiUN{^78SV)9Ewb)0N7lZ_)X) z9?>^XD$W^3@-d%G=ua8>dS6^v8mA>SEvCfnS?nIYo29AOJD!?8@Uwh&#_8}+2-W1k zWiN5UAalLwwvP8n!vH7(!`lS7iT9Mgo-U&GtRTBf z<4Eu}_mofn>2r@@qZojR1LZZ!HNnUE)W0UvEe-UDp8p={ zO1yGWH0|s)0GD-q{UnRtm&&u_l=uiWMb|EL`lz3r%G;%Q@LSwPn*qM#NU?vZP6FRS z?|>0_r|IEG*PYF^;2iv>5jAC!!dfn#ogGE0 zwXJ73XUJFEGn1K0g+tv8+cdpzOjm1L-t=}+d3>q&IARJFo4WO;!~mls#OXbr5aI>&#nF*HNg4nU}z&B zgS6;5weM!_uu(7nr?rFo)x^995nU(qCe^9Yp@RowvVB+>M~F3_V{iRqnb3Q09F)Ag z%cmPXsU*M~xkv6a7wWjWT?y|- zjBtjKRg)Hp2N(5aM*JN^lKS%Js!o54dT+3*0kdU8nECX zOM8q0@;jqACuCWi%LDXDis?ErE0we;9^_hv{oA2NRO!v)E-A?WThUnU=e7ET{2%Afo(@+~`Rik%N4fPF%a1`9wectOHa2yZj?Js_ zpPuKq7(fe)|5-;qYH}Qd>ZB(`iQv=y@j=Sr1C-o1{+)#6T}zJ#cWXD1rs9A8MRIZ%@%@xB8N3a5J3>Pcq)3%G zZewN)pYQ6R>uP*!)P=xvXYglq2H$rE=+@T|vax*GGKJs|MbB&5F%a+^bpSSXVdN>R zps9R_(UkO)GC1AxhFxnwkh5gZyRQOt!Y)G~ zr9|8uk_vEpmxeX^iWx-QLI}Lfag6*ZT@S4*KR^UvKk~cnxD*z($g;(SMJZ8tkcG$o z64Fx`d;d`r$niuC-un|YXA|7$XTRc9x6r&rKT{%d8co_s5_d2XF=NPn@(qgv(k z6xW^1T`E8{D(I&jDySG1tcCo;NExR;G&Fkn52@TaJ%P7g3xocQ@H>6qn9?e-2MBOJ zP>ETiEt0`c%-017BzP++4x?lb8>DSpFRC7juybs-WP!*2?rTyWH080l2K3iEeDN)Otf7=4UzU=W^v2+UrFja9;!(5)N@*$XXYta>VyDYuZ(w2( zD8y3G!ItaoCa*vCZlaKTP}p7SXbsC<3-oEVVC(B3a_o?VSIsp47G-@)f1*|YV>)T` zdhOg&SuNk<%4w9~_a1&;Wx{tsJR4@B-}4|>yOf;`u4>G-o4P;!)}4!v2>kF{j4%Ws z1-5GT90qFU99q1@lVXH(mU2#T3 z>CT?tR#$VYYEne^>vLFIQp2eKIb-iz`e_3j`IPZEtyh|dm zuQmJuU1=0OjH>$XV*Bw&1HwO~>`;n4tMs7$$iz^1C+R-c%c(f-mkmTMEXodZ0?(}X z&a8BT{z%prd`o@(M1(Dv{XkS{v3=&iQZujA^UbkKVUk2gvHm|ct+!pZl!y(Q-z+IU z_i9@o^;gKf?=jTXvHVEB5C8CX2y2ii$$Xes^2c4ZiTv3j9>C~MeT9AYD4wVTz{#DG z#*}Qr+AC9|rxe^#&=)3r+3W++g|2ZvA)gSNk#^KiU2DhNo^h($Rdfq1g*v{K)KZr| zD?SAilVqwegZnz6#g<3Do)m2%Q0fKpqu<^eX-suh@laCq48QVRGE4}7*t7oC`7 zb@z!%Ug0GfV0{!Pmf!SL(>fV_sg~23dyMdKqn3&p8)>G$iLJM(F+v;a-hcX4p6Yf^ z#QC*`^QY&_#w))FB_Q#PsZZutFME{Ec!z0hhr@PcVMEu=;qE0xmsm^TmO8|B}wmK8;(MWo3vJ1<) zuzLU_U3+S>5h(E^+3>E^OLT#`z^nw#W()g?*>?TtMw8gs1y^F(R1fxJc<&d=QqWd8 zv36Y^R~nQUec2}D{Wr^>wQF$`ong@H+6*#LO(f>xn{n~!Oe z!ZC#qs!6ChN$pI+@4O}Cqu_%Y#iF8kD1~`fo-HT&J=P9r5sC(M-=v!0k9ur9mCR)! z2VC~+ZTltYop+Z8a0E!_aiuB$T4+wyzGEhsQTME+%Jhr&KpNZGw3%6N;L#4PHgtJG zuQOg+_r;KU2Tf0GixlJgUE=1AM$V5hjg2*~W6fg=I`JGiUIy^TJ$gai&(QdurqyZ} z=w2_@;U1dRAjRx9?6rwz?%Zv`42zmdK0JwET&JvbdHE+pD^(@;QAvv|W$lhUW4`zX znB1fj%DcXOGEI!g9aH(DEiy@s`Lv7ni%4YDOo@lG zIk8XGyb|TvN;tF_ARE)`n9oGtz5LnMgi{0d^mr-4KZ@ST;ATSE+s_t9IktuBXZ+l% ziLLXLi9jni;1fo;f6Og4W3&fQl29YO>9%V%6t@tl2_vW5x{Sr}z2e=aDTxx(GIyEW zrV}*enNuPEzz*PD0X@*0eH)CBmUEFn^F%H}sbL?6l7+GJTv3_1H!NxtKO7zCxMxY$ zyV-NC-1J=eL?^hRJ6APkXE8_thmwH4g!hM#b!Q0DN&Cds@@)zjA{nUtOCw8g3?TT2 z++G_hg+Q6CwyF}tV${?>*qorh2^%p$9r`z3izx(^L~6C3>If!oci-@jVmdpzTv&?W z1Q~jk+fNy=tJMIL*X0fB-!5p0u4Lf-50I{@DZblA;sq=lb|>m*Iw}FmutMzf6@}0g z3&WPnqz^akT&8>vUh-u37^k;xh2BrbIk@Wo>r+UEkL|m6eB2hF(w+B{G;M`gyk@2z z%MY|QQDCLl9?5(Z{a0s6+{n&NT?!k?znT_Jxr+h>ZtW%rn#Q=FC`~;Z#U`*_}+%XyHVL0A!I0G z0#va7_pOX*_Ul991b`vEc4|N$ZQjs#6P^E33AeD%lf@IwQqw`i)P(#Ery256--+2n*_TONn_PX)Uc^z((pG!LSEjJu^AO?wq$z?f2YV; zE0};V+e#4=@{FkvO&yVfmA|iK4ztd^fm7p9@HswEBUeqE3;568&%pzSS_AFj&cIb> zLwDWG|L3d!aD}e$?8N`vPs5}C@m_Tvr!j5(e^(oZOoXGN|E6{%8GuR#DEogjhAgLH!7IKxF555X%>n0v>FIgD##u#G* z`50myYQsmm#uU$#N_S%0fLa#&=F;wHG48{dHRLF8ur3gn%k}oXuF{69t<;>L^?G#v z=-!3A{fi_!LW*TAkXGRSsojY8yzr#I%$bjRO@9R0;IpmXaHi3`IISi_M%@m4o>LRV3YUS3^L$=RdDtM{ZWjQJ8dX12!xC!rq^+#{yWR#ecsQNV=1T7p3qBBy`RDMk)+|(yvU2uD?D~+BqZfc%7HcdK=oHsyfDyM3 zl~yW16&&V#6wQ}RuZKT3T%B^xcg6ep!fECpLQo04tFSGFliiSfLY{>6!Hl{Egr>S*e=)v@vn~4-7zH4Ci8%K9P{{ZWml{jMQUi!;g=yqp?wK%Mr!2`W} znM(VcS-$veOHS{+Wd$k`o+G7^ojEZ%h)LZ@NyPg~_ztvdzq=&aGf+`B$!QKcyc`fz z8tpK2JZJXaQp=iGP0M01kGT7JU45gJgz*E3s9Fa#$?OeTX<}mu1>j0q_C2y&Mjvpc z$ETdksK-c&M%u_xr~-j=5I9(2`{>8`iaq=XWM_MKuo-(W+MI?FS#oTd-W8P=1_~9( zmFyz?>`u2z4u5>ZKXoCZS6PrxtOV*shv;A5w9u zfoVT0Hh5d!ps?C%_KJ2G_5p~~h8$LF-z)$(J`REi6jT zq(GOqTL*jZys?rMDBK(@?Tl*ktMTeb(d}oc8)=!Xa$rT#mV~Ktj&5#?B&8JEv+*Uo zit`pxs>?=iD36$0;}FWYFPkctYqcM6LXN70ak&Qv;2)22 z?DH(R)CQmA_m7q*EE~oRc;+1KOv~tazkO8ODI0@)_bk+=+sTY8+T3`+d?yL%$+rcX} z$yn6bX|T>m!L@m}jLMW-*-Zqk^r{a%4ZcJ^p4|!|h$$Ik_CY#Kns2V5fz*Hn#C%w> zBzJ_9G0mOuSstX5>L9%E*pr7J2y>y>Qqq`>$U0@jKy|sLGrL(BDg9bS(yI6LBn6r? zis;=JA6+F7s26w1XBV4%^HeJiHS_S}afutjmq<*9OmE*gEnJ^#REwK4c&G4%?6Vg_pW$6xI&geV(y#G9FV(oaM!W8 z@ET{lI8#fx&@b6A7iv8+ok{_aF?)1(;#9s!{JGbik8ExOunY?BfyKucchy zmDukqM#)ik_0aI}RIvamk?BKFqR=|buA29$@iFVduu{7&wnKE~fv%UHY^jlrorwrL%r~f4vmD}V&Col8 zsLv-pSvAtJAFiqkFZ&L?-gL(gJjYJmYGH9V2?^##yp!U9p3BZ=VmDp{i2NhF2Y+RU zVPRYpO?AUnYvWf#-8y#~4XE)s9MeOxWdPbHRB(qDkn;E);2iP37uY3e8%5Yc*n>YNCwE=c(Y?OYI{1 z+btBrfrfiu*v^qyvqunbrT2KWx(}td8hbG{&wX9rT5p$PjM2p;zEyh8)pgUvYA@sF zki+sP4M#EGqqPu0TEI50)nw3xum7Ow7O`uF+mWATaRjXp>j|r#@ZK&MEgzoE&uVey z448}NH?+`8=Dbgz&w5Mq+6$g@k9ld6kFT!*T)}!~tTGq$yrN7$SrjV~(!xv>+$Ovb zPjAkc=1_08r8GGkQE~Ry=!hAq1Hwy3?LE5;1QO>V8(xcyEs8=XV|4Sk>vj0YXl+6~ zo)JZ-;rNY&1gDtm)+>dP+H^9M8oU!`#EziMk-k*tP`jq%@MYKPP8zBR zZ^Xff;=sOJ8uS^lRqKC?_@t&n+n`$76&Q{Ykwb}?-}0YzCJ-hz_wwQ^W^M>c@g*h@ zTg*!^+Q_HHkjGxV)SHsv)WTj`y&z9sJ@j0340kmJ5&5J#yyzb_6$9osUb|+4Vcr$l zBdoUfL!XsL?~Afy)*c@;%RmBQcIAR z3gxOp)?KuFVOviCyG6JS*yY5>0^!=iXHRw1EaUV~E;nYv$_Bjnl;_b>JumZ;cj=VZ zs55t8Z{cDrum&vncgnpRt`exm$jIvoFQi6dxtmO6h2NnBh823fk@p z>}KYhU(V}mWd|@#@P+O#*uZ6LDpuV4Qwo8^D~r0bU*9A0k}hk3Ds|CO;7@M%)Zb`q z)^_b;M*5!RcpgMrOFQVBt#Ru*?6Tv)^Ys+R>P#F37>06@R~eNn_9zb6Zq)aUqex6b z6Amm7a#TG(Vusj{_py;REp#d-QQm&UjHg^WR2dQJtiNoWb&6i{O}&!t9M&PkBMQZ7 zPT(|R=8(RVpHb|4#0$XYM;k?}y&98S5*Icp;KR|LS-a9(dC~aclDM-`e0GbiNWGLc zDM^XOq0#LpyZ#Emey@2?Cadb2m!waF!MisD$QF;_m!Q78WN4M`mPoJD$2ak48oNQlBzk@>EPHS>$FJ4x&0~sX~|96Q@m>UKIX}p z)6YGl_**W`4XMGKo+ee0>gy*F2p&K%78o{fY=av^+Aa zwaH()u{)of>q3kRaZzVa>c+moPTa57xo{2g#KY`TtUSkh+ ze7=TI&sVp`ueS}APl#RXRgO9sUbjj-We81RENb?+4@@I2T&Y?E^cbD2 zIntvZl7LB7f@p9|vjJ&}{$4jwO>Lzipz@+GUSp02?Hv_%UkI#xNB8mx8^4Gbjh>am z6E*dH)DQA!_)=&W5oZ_r_T0JsM-Sb#mVAQnRAx6(2_IFm51h6RsvH>4lSIwK%p=Jc z{}+4j9o1CVuKi*IMJ0j?(n3`PM5K36L3)wii_!@Y>7k3avl?#&N+yslQ5UG$vPFjx1L**@~u`muZ1 z-Htf!iB@;Tz~@g(gv~jhY)71nsCBtywpeJw3*Y-WPBb(0I6R*>htCG4!uKlf?59rC zL@3snON`Vi7vHK8cY3`!gl<>{hWgX&R*3PSWitiaP+Gj`o6kXSj3SH;gY34~UURH` zdolS_l4b#G)yo&}FoIJ(_x2BSn(5qvAWtzh zmmO#u9x;|R85AB~qC=MhUO_;a`NbqHH&)WFcCP7Ze9gr;bJ1p>Z{ZM{{of?lU+sYWF84P~BNz;t{9l)Met!>8eDdsn^ouD(x67=C82@TdFsQU& z_r2XOL;G)$%+LPIzllj@f&Y4aDsixRp8JJo>-=aIoAIMfO-kXuopu#_bK~gk29Lvz zoMP8}y)8c2Y{?2gd8lUaIA?8%@lTG1fSF)oM}K>jNpc~ZOlE4Xe1=x3B>bi5M-d4o zZ{KEq4&>#}7%~&sLKy5Wr3mpjwaj-31?`^BlZx>m`x4hK_xJ55tuY#);`i`A7rhE1@SD;Ql-$V~ zcw{9TNX%GOqh_~kBlG9z6MX<=!cBJv^7rj9E4v)jz*yR!f8f7pm-00Sc)jCtH^)M8P{Ev2#?ZrVmBW+Wn(SXNzfeSD}-pfymoOIM<_I`rGz3yjTZ9RBb2TK z#6gIubn(76i*Scbb#|pUFlK(;U(J>w9-Y{|iet5B`}ezh+pJ~A{$&oZt0O)xt-M6TUheEh7p!v z7Du}tv-vul=6s?VMBu14e~UcICvNn^h%RpmCD8oSt7eyyoTkKE(8121MVY%!j~tCM zcX!RW6W0jOn_i3R$Cc`^yU=aL6g=!T!125aBLvB0Z^=aZo;pc=DDj?bYb5b3l^Cx1 ze9LzOAj9>nP#dZo9gqFn-Nt3l)6!SUp=4@y>$YwtZ#kmAt%_6n9O=M8#JKJEQ@3a% z+)H-i%+=_qqC8K;G`~-@ldg(UVjt7V>|a_1d(mgA(5whGa||5j&I{6~venA%?l*Fu zRBp^pMR#(06sjZ%JavpG@*3nn(&_MNU~l%E!V$1kcaoW zxx_C%354wKu7Q7S=7zp6RD47ad$-X`KI1|UBk;4j%a6*ieXls#Bx7{)^W1D1$?q%1 zFaj!yWi1u%DMiy6KE))EyRXXbab4>a>zSlAjy`H?z^nby)7-2p-)}d9nR$oI-Q!@j zsf-Pm3H88Qd78X^LOgq(N7Cn6D{Tgoby|BLl9;-ai46B}?jT}@_1NT&4zk3T zfV#1uad6?Y|yt(<>^8*p>M8)UWIaEAH)7rDr9OcW&HQhZnmhJ>yV(zcZHTDD} zqbfB$y>{tqwA&b!eO)`ZxP6U-xO=JGA_s7*i2TNJx%t3qwYp}boK$1W2kT{3S%)i%VcztjRaa6SP9hpZ?EMv0muy?x z`#3>z8F-X4>s1id*!aK!(WADe5lQYGH!~7>r(#oIm*~l%V;%dnu+71#DcrYTb#(P? z`>|n8_Un;v@S*EO!^!VXdh~9P2v=!mjL7=_NBHT41-bIZl+-_ayG?jat1HRB zxT2u#$Y5vwhR`@{AbXRx&?`X0em!EjvLLiXZY`2fR}JhvaC)5HHQoUh%B-GGJaDRT z`Qg~@<_(p?APt^YYFi=mYb*CFF%d4oc-3wdgwpZH0&jcG3hi{1c#=uspdHjQhYY=9E#B66-hMpRU_xyv% za`ayckIEl@B7Ne8e6XOj8jf2`!#Go|Mw-uWDD6zEVCotjyD7C2ma9ROt>2$VL(*4{ zee2lRQ*op2R79aBi@1Sb1LL2?Nn~?1#X9s?xcmcNku{mSlJL-yq>Uq)EGA53uzrg% z+E1MAf-5#tQqC(RXNq;6I=QT6Tgc>A1rlZzI;8i#iwl3Fx!`v-d~-O=I7-cAKHFxC zPw4zueAlUX{b(m?{YcwQh^4UP#+s=2=O>enstr$N1`1nt`{q^p_&+6ZO;4S#-WQ@< zkKt1oJJ8D)D)J_Akq^E9DP}9$G{eVws=`R3WCwqDIL}+W#y%g1vx{n3{=k+mp4U<- z<66qoB55eIALm5Ylyc-5wf)4O=%E8`vJ8OYr_3}T!^4||# z@9&t;b#U6Kb&Lkl_5PxD5fgKq;#3N?B5t#ZX% z;@(CKDYqzPlm$dTd-BE!HgL4DCs`|T#A#|P+RrIn=^KrZ1J1D+lHR(28+k_)p}gA{ zHa7vU{Z@IGr20BI;^W8EW)JKjX7etq1am0G$r5&}m$p-*D}?y)`bWNWP*-Ae*!kVy zLbICUU2$CmFHC2GxqsQ}k~S8*YUAcUO+Hx~JA3Z4ZihLVi{wycqS={+MwzDjFg`5V zeZ}n3k1?Qgl}82yR}66VFg9&f)Ij6B8@bfXToZR!EWzqIAA*@Bzpg5n*}E61-k*Vk zjL61Fy9kBoM4jo@c>;~aRWrUVU=6;dIfZC}V`s25S>fh;L5&^>CQUEq`9N64$wDz2 z3^a9enWQBbOjvDaD#_59Y;(yP{0#hPe|L7M=iH>9=Tz3d294Ol|FKcs;a{#aZFQ|L z%iR`N4tcLq$c+Wz#5=TD}jk`bhU>@nV zpXQmI$x?o#QP%dkE~BFt)g0@->A&d>90>|_RM~TQF8nG@W(wzL89H|&U{`l%)+^eAG|ny%qdKN_jv(`u6s84>s8p#gm5iRn4{bEC-v7Ww_TJv$D3`PE406FmVwx3 z9tLsl$)<{HjyUE+w&L6AsBk;I1yO5*oU#W=z58o7!81S0Rdm@D#y6ue#~mw_e6+&_ z)$Z}cI-^~&2PE!D;wN8_3WmLWtHeezru~=|ccp{#nFkziKwcr~o#eVsQwig8_*;l{ zF$T?fKZfxw|6LU0PvC5x&48bi6<$B|@^P?S4UW%vZm)(V7#90{bJ~|#;QX!cf^VWN zN$7(&tq7F=azU5FxWTtff7+qXFB>37t^nmm=qdrgyO zmau&qL{vZjqMUO_G{#~RtE^~&&N^)A^bSeo<5ShhRS%ldIFuOh6rhF_JX~pxJ3NFO zD%5yN=VI}?mJMN7hI@YUglq5E=`kdFd$pbtb@jBhNV zDRT@qvm&%)8osr{X~DH!XQd_G_D;7y<~@4@Y=5S{BF0-;a7KL!j~G68LePnLx{T<@ zdjFtt^_9iGdiG(Ij}l02{mp0dOp>C?x(c;!C4i{TkV}GxeB@|FP@DOD zh$QGXtQ3Y*hSVJhHBB-X&l*J1Zs{=HV>9cXVRvk4mRp9T1MbAG-+?bgGbBfSAiw8@7g-s_ar^B?njbZ~t1c_~vT$_ux9{h9wL(0dY2`w(~ z?Hc*?zIF4zZ6&_`_VxSkH*2n?FK|A!d-}jm1X}bXJ2)5k@PYoW2oV1W7|;|ImOxPPv`FCCgq3(3j1E?kAEFRJ+)bUvCUxJWE(Qjr7bZs_-e9jRIERW z9cCqd&jpM-llp69>?NmJR9oAlY9R*Z+%Lk2Kn^qHXg5jevD;YLaNL_w|CMC(aUmZX z`BOp!IJ1cA)f_7KW_Ot|GPQ8I?b8e>%?Ola)cP`Jq=VY~!0-Em4!TC~5T}9wnrR#X zy*hJ}O?NmcXg>1hjT}8krPzBA`79(wS4@AoWEeKAKl<2qp@7Wg4PAsTmP`!)Q^aQ8{Grh2o@ISF;j$R#Oh zjZPykss|GPm{zSb$3-gpBRV7Ow^Vd^op9v$S>)tFa zYS5Bh>L9TehbRJP+G&QbhjERmEn1qCK^69Ja}RxhsK!U%@Gc2$lD@E+$D|jKFGMV~ zN;U=YS7sWAl9fSAi(;EMymwOTjr^Btj=xdk{U~(RU-;&YA>|%Kwe+Ss){Q%~Pg{qC zT`%REZ-xC)Q_|T;axpaMuR52yUw2Kp(w`D+H3dF%;s{Atx$1W-!pgzgcpRp4XIgg) zRqCno1@VYdR4R7%?&e;4#N3N$cy+7bS@@RR8{*b0!3s>pY#`agIsYy_!Oi4pj5R#+nUEVb_R#^MrI zscVHK`3Ff2tNnL}ZNjXuG~3S#UnKS8hdSdFy1yvjFcN1eBv!i#Cc}%v$`r_KSl zj5LH+%3V2WY`BEi!oBDbjR$b@v@q7=xz^^gU8!pzMC?;ur0bEQyt}O~h5ok%x zsmZuOT!Oi>AJTIkis`GB=FKC$f*-DPaIcf}l~&44DR)_3YkfY*KQ_DUh*ynGdS7CSYY(dlW%~lSlh3-d#W$Kt!L!x`kV9Ouju8)j+$_&fdTA zXm5~le~w{j%Rm03%hd{kR)0u(eua$v+6%w^vU;?a)tJ4G=rUO8Oj_5oYzG zsv6fCi3rL*f_b0x;~nWJ{={H4-`V*YOZ8dHDa&b+`Yq7y8c%-otBFioefqedS|1J&sxl}tNfW`y@nn9ace|9tm43Ot(9Z`9fQqD*3bQl z{UX;iC$ZrvpH~CC{9OeqrLxEXaK8FY#X|fB>I@p^5yA7vdB`Xu(vYKg#~zlk zwXcSB>`x#pe5Dk0Uzb@Vdyb(M7_cnNrxbn}9IdQ4Cg2}?ElD= z$wIIB6w*7YxNV`QYc_Hh8-q{|htRG!;ifVDvsA%av$lsV+P5l;Z!WuokS0wAKT#6E zl4s3}pqZxiEO@x~kTaZh$S+q4>!;C|X#CJUfX4vcsZz``XOu88vd6}{okZ0YV{B2R zFgGO*E(j|q!EC8$uKdoL%%t8&H!M$@m(OC5=-ehYkAlnxY0F8$J$DU*R3BO33Ooi> zHiZ`yHV<2kw7>QK%#P#(pLrD+%3HK7vqj%<6otKh(H7d}EJF@aHXhpsr^$ESBJ=^` zsDa&pUXc$$MhoxvfxrnzMIwyU)M2)pO%{*>GqGs}ZemuxgnWY4w6>q)CcJu8Jgp2@ zpU{K=XRvPVwa`zRu=r)Z> z27!H6NOPKtZLq>@J;vvNAdRf`iW(QhKKq`c_mArTOm93dK!ZuZ_wGvx_L_Z|A_4m} zF-+UkogmznM5^a@)6~hDL?0M+zFF7ma$V4;HhQebp#jqg6(1Zu-_oQUA8_&Px=z?3 zUFCGPl(!u?SrBn6Szw~wSLES-n5h9Mpt@#f)-`E%h`IHBV@K!_f{E;w1h2%x+zU^F zvM_4go7WBJhkgsFv1I>l<(tM|(Soly30kxq7v-uQ^ebqG`o8hvvOW;+K z{jTgaChh`Ge!Na25piAk%~?0=LsvJ#YymSGWFdLJ*5Ru(+AOY*h<%;S+Xt&FK#PE_ zL{Z5|XBwicp$cUlgV*rPTKlet`<|Z1fwyJ_kge(n;p)u=zuZ^AGp3k)To{s8^PTh0 zM`==R#kOgAy8?M1yMxAbeF|ER3k$&?M(nn>&wTLXHHNdBp7>jT|7DVUH3hn>4USN# z{YvratTS4Mn@0E#u_@YE1-Cx$gKPN$uCnRX)0?@C!*1Mj4K+GTGC*$PG#YwTNdk@m zq~!`QY6E%p+#cg{AV@)A_Lai2UZijS=2%V10pX)0*YNS;%U4#!dc$W9_1{#}4tw_2 zsZ>yV3NlWMMBk!SOgntH?ESXsIF{uEP@oGA_PWX_@1g3`T?o$ah|=E&aKWnjRGvgC z?$J$4+SGKO$X%+`be8CD1A!yRYQVnErwK1pbM(;f#Dp430^0lnR^oJh3{7^k8 z!;NvSBvcYJ*sSo1$7EK?N}@h<@8yo_Tn$TtE_(Ne)(MW*QR;RWTTA+8#=|GbH+*p6TO856a*~Hg|%afk~1QntF;2692;G#<0 zuUq*yCs1|DE&SoLTk+122M}6NnzR~*WX*EvH~wT48f(O6)W4yNDnz_&&KWcMa=7Ss zbDE5qm)gOn14;V%ZnxsKpY*X|lE$hFg_%Xz=%@c|yghoq>(RdlI)1W&R z^CjS~CIs}7=7!igMdiQ${d^ffBY%Hd82-=oMPK|&KP)yiedX?EPvmePF^XL=I>{E* z7G|lnw)+G15_-4TE@k6lwh<8A0bRg8f%^jyP5G5KsG>4HTrd8YN88gV<<;CXuwHV0 zjZ-zt?{4+BU|K{8o~X5TWsXvT=LJhAUX#2r#r_G$!wGc;anYOg1z z5)a?ys$j&zuB8QTH@azi9M&CPQpOZJ@h$b6!TiO^|Kmcw@=wB{?lLN!^*Y!92MmGS z%qXv7`5uNk3U2aVR03f-%bbOpnB4sKU6&bPqTIr>>7sG}UGy(*zVym}i~jKv&v5%% zroOq-dL=CzRp_XHE`g8S+t{4|3Ff`>8S}#Zr>Jk#t4>+D2LEt9*8L`+qg(6#R~giufYI;}eB56hh96TJJ{A{_v3rP%$7jZwbIu>aD44-eUI5?0GNpbxII!^ zV|kO=?dS)N4(2={lZPKLHRzd%`l`OnWz5?(YPgp5u3e9H%7}ABxi$fPsL;ArW7_BU z$DRrurMc3p^JbZxRob(pXlmx!C(x@P4mDJjOb&RzY-uBJcRZfhg1lVu`zgFe-Kqf6&_I7CO}Wa-!4QQN=|#bg!!dd+_LZlf`Aquzv9t zyW%b?D8%ILAKlf6-BSsJ*w_JYjA*F8^s^mrOJ~_<7jdb%xG$-w38R z^z#wt4DVNn@IzRMggitc*A|Z_W_64UWjYrKGV{gpZ5%1kZ_W zIpd?=x(SJB%4lluAAWQhFOJ|N(l^%(*sfn}zw21EouV);qIFE1KQ+P7Z>dRb7(LE( zyCO^UB;|NlBCFP z^3B^F$$ChnL(98g0!<8lWES; zf8099%69m8FxL`6W#5H!rH{|U^D{R6$)*+^Xb4PRF2#ONw~!09dPjKMh%D4AVMoR( z>-#p}j#pymnPEERij5xir2REe*niOeBwQPVR`>`a1{b@ywN?Jao^~h z%c$DmNzA|tEvTTXWn$&HV2|H4Jj{~h=8R6^ei_IjIc#fJxXzU`1A{RgR6Q;1TNT1hXcw`cmQs-SiUX7UB##;-L$a3z^Vp0oh2<{|2=-@R521VKZ$4g|*58Z$a;<3sNlc|IDd4DM*`Us##!1O z=IavgRDnq<8yJc2isGQiUUOV*!iXSf&c56Ff1(`e$EO=b?zSrHR%+Ol#wN9+R$k|h z>b#dd78fGN#CLG4?Juy+N-%_?R!rC88sM{!Rv}OGqA>m#5l^#2;RTUV7Y(QoOKb0E zI143$8}^zE;3di&QfGzo8|M-6%XJ6lUs6Ee2G9XzJ7;>r?ianAdt&bN-b7+;L8u6! zy&2a&m5z6ZXbLwc^(zFF%urNe35lZ!UuqPO8TMp%v1 z0Gb*lc%CC$)#6{BBgt5hvO7_BK4I#-cfKul*aG`Wcoj;`1h#$CQArH802^{3np>oE zyz}w+n;STz%APE8(XxRn!=}mZP;yHSLWs@RJX|G7eZCRDJ2$gk*gox(aSerSK-0i& z^eb5l#fF!|s(`I3=`Ep${VV=Q53>o@X=iEfqq z(4`>BN#S8#E}ZueaZBvu^3$Cn**2fKZmK-$*}lMjwT)s2oKXwD+L;fk@XcsOGsQr%wnU zm{`DzSzV>Ns}Jt;=m$F!(;a{WS$btiD+_Lfe7pjHKV#wE2RY+OOGR_71~Dhc4NNBv zoQ3o+C6Jd{g%e+5UnkYKi*VInK%)CQI=l4rt@`7?G;sJyM(eYgIwW<-M}>r(HosKW7?1eh^VE5ph&yA@t2N3I49DYfGLZgmRD^W^fjxEIu2BoJ- z$_p!cb0pvaG(x>euciiKSLI#5Ep(yy9l1!A;HC@CL-Y(h4w?iE|BWwM&d`MKeWa6K z!-XXOoN&UR0(UOfGwYT02W~q6d9U_q-z&api!L6ztXxBSQ|tL1e`02%GL9n}Uk7Wa zRx7l-DaTX8s=g;H*THG*-jc);0xhN(I2s;3cZpINbfd2}$CoB@W31I$Ry^V_X;p@*%|pgn8BPW%0?hu-rTSnBD*?aPk<5u(4y zlAZ5s(|EJ*5_0*|?gLKPB^Cca2P4@G`-ilIAo976OOu4CSfqBsoj0y2rF`O^u}V;E z*-MPxN%pZini{v9bbBB_r>#}8Y?fTn%AE61L0iA@NqJ5zo6*y?B-}$7mMMHIOm;IV z8U$t=)4QjKeibVESe!XDK6Hrk7-LD*@R&NTAy?P&8mK?$>wxKO`me)Qg;QZhq+K44 znGL41;~EOo*L7{rG0aFN3xQU{1)COv@x5HEpcxQXJ6}N;~W|o&YXfD+Eu{nigbtA-83NxFV-*KR z|Bj}QO5KR>%MV0KXXAtmM-nY80YEw3lc%AIs+x^Tm*4B5_vFSKu5WMR`U31TgcOA8>Q$XwC^mZB(*n&^CvR>k3 z!jV;Xh_$tM#Z2>sO{?VBSt8EQnCngZ1MZFtY zSCGP&cQrfRm|+Qx&7DWeyHl^Ws^pzyUCcU(!6)XvN*{it-Hh7$E->LAHr8B=hO)6(x zX#?HxvJuWr5-8fIuBy@Zk`43Dwv*WT>|j^I2afA$l&LzfrSJ3)>U7-AI+R2=9WdZC2F}Waw$@0!(Gw;?o}@3$V=1-XT?Bs&rFng0 zFE;;)dekw|u3w~8BNjRiH7|1P1t`AE06Ep(01lC56;FIMjUV<2D3Y?+vN6@mxe5_g z6gw%u_axyi3#@EoNGl?a31%5n-TV$ZMm;Bs;P~#WaG{Mi>xd9ALXGm zOsqY%U14!P3rQ~vZkKeORY(58a4vA$aXqERaLjlEwBHp*W%`A&UCsUQ4=tGu;YJPI zcbyc}(3Qi(nuaI?>ZEF9?N8e{UcEg8agb?2s7~}%8I;yCyzu4 z8O%_f>Nrx#;}lut4V}6Dl>Nj6{}c?OHJl3jQN>V7C9&eB_epY$vSsCX5)!wSEAl&liRF$b)V5wHtL5j}Ca7 z<>i}l2)UQyDc8sZYr}(nj{;78%>9HcQ6EgHI+s=A?y9?9d$NDPTKXjo^EfcKe);Q; z6!J~X=gF3WwB6{&fuks#cNqXHDqz-Tp+OSqHt|u3rGS#~&se7sD0zS(SZ^4CW6%=R zps%L2FDr%})_Y22LTbCJsN>PdQu(rG^$!{1_3r28XBLwWFBYlHMI|NC>8LFuWBTKp zWz6nGkBGBIzr1-Bvfi$eFbe>e*L8U zlC>a6AKHdcRr%@*-CucJjb99*u&yZsuQvTGzg#y)A{xRS~*k_w*g z!B$?VY0%y@m&j`l6>#^vU(frjNroM0BE(TnqpQ@8`g8&Jlzij9RGwYI^1`HL*mjJc zjO5m-`U)Q^kq-z9OIR|l@Ci$(Jc_Qj$0DGGOiW;)kcFH7Q}57RYcIEMy>;?c{;_Uu z#J5)K$R{`JdVgoHzkcX$k~kf`tS&BWeqU9-iTKI+b}bI$Z9+4436Hz-9yKaWs|eIk zQt1XO5%FKU-a}wU!)M;zXWTN664%XZ5Xv?0-uu&Yplx`GQz5=MPKnN!?H>gkSV}+# zHp^*>;#I8Y?at?Sso?>X(TELsOYL8@-=bHGoir&lSpaoZ{Ndd{-6o#_1()dqQ97w8 z!Sm&w3lZ1--;21fp{a$e(9wI3Y|3Ywo}?IQ7*;m8Y7%M2OF@S%U;e4bjsZX?aIV!d z=$xOiUGhRYnIR&Om5>$}6_dU=Zj7EHuXb>Z5nj2hg`sU}i;5O-%W_|NQ!10Mh$kAFm7D{{LJP{7XM{xdSGbC~aXvtTnI*50>gnh6J5@9N?o>ZOkq2f(lVI?-H=UJwOD!?C1$a;Ls6?6JeWBZcyS)G=(<=lU?6@4wyHEb;KF9@#mF&Z}fO+Khp08;Yu z0(-}(lhoyDGLtNqo z9H|=@KVOkByOP}u;KB(S(2T-{JmLHXp+nY0o!?(Auc1v(4Xh~yj+dEePdmFVPWw{i z2SCW!rS+-bE7@!j;vXy7d)rt48P9q7KV%-e26UE*BYO(h_DwnXN#G)<4m|>~J0UQc zcP+Ql3at5Wh$qhXRGrbsi(WvI$Skd}$vkm1C~$EmyvCIGze#wU3#K0RBe!~fA!>Y` zRKUHzip8yG>beZU*ca$IQ%c-w$=;^J)|He|Mz~Fj_sT)H^qA_HCSFV*^V`>V&~Vwv zM%;jf1${<#(9?A7cLsKe;935XQtBV9asLjESoqlOBJXnJzv(6J6l9(@;D?sJhFM3( zhe^??znjWTncn96j3`8NUMrYFCufgN@fUC2cJr2>jrz*3e=PXt<}Mg)wzV%a|KDj4 z`>zlYkQlRhgZj(n=M5>rzoHe8L1srpYqRrLRz+lw2-3%lV$mn(tKnJD^iH2|ZvbfM zU2goJcEDMg14ILhMf>7Xf1Bihr^2Q?#5F;!{&kK|g{F}`&S2}4wr>H#rm?apx1u)d zSIlJj`73|L>1t(Sfuh*9jeYJ7=iqv8_`N23k&au}<R;^i z??__@8MBo<%`mDU{h2V~t&owRDRXCPvoCCxH^CM@?y|%i$Q%W6*r1FUtV-+|>2fMK zimRE)>2(r>7FU?u7d8N7BhJo2%gZxF(w+D&&HPg56erX0TWe4=iHMo-=~>ERtq+m~ z3w!?&BUQt7@Ek#%D_-7%e9ScYK{>4{D7^!nR^G!8mo*`evCAGOmf~z1e1G zj;yS%@s;Yo4Tvf_mea(#PG!J*Cmy6Lh>J3GQX%R`n@wX&{}cnXs)vBOx?y^So=ild z#QEJx)C7}d6~8D@^IKD*^Ypl6D^wPr)N6h~ydk{rTH~WdTVY==5iB56+X%n#^Y!84 zUpao=4*?6GBDN(gZSTlj%+o5MMq(;;kpvDqzY?x`iPQ$Z`yiLqm-kBW0%Y-+I~?CA z&NG0l;;)z{2D>&dv7H-Cda6xjw4C#>o@kpUlZslU&$^~d$T#hx5?dv$(U#nj*Y5ic zmxvW861VzG|1SQtEY)g|2{D;(?05i`_nl%n)W{u?4S#YI5aYId)HS&2dyZC9J-~R<(e+ z+6hHI5HaUAz0H8=$GEI4p2pMe*#B@$EY#=Z6A{klE|@vf&) zF_&+0YI>G-A0rME(;?=a@kp~yctfv{u8We+Md@01T=1}qkfYIlswIi<+nN{OLspm1 zR7$&!O>&EL3u=(^{ckp$^3-jLo@aTb)7;!wScuy{afsbYkC5KjEq76vo`pv5@lj~V z?Z4Ph6|3+}-KNC|7u2Ri&nM|L(%PX8zQp&U609?GmC<<>}z=jaF*1Dbpv5 z4o6U%Jlr2w1>9+f2oheqKitmMRb!$`dEp;l$3$nO&px72&v_{OUgnpH&f{0<=@G+~ zdWk~IHCHda=dpU{6UN%=-d;5K2Dz1mRk6{K4p!8+Om}4cF_-aiH7cSag*B5+Dz=NYVENTft+vGm)iYN{IKUBg#vu&Ox98}y|RcG^7UEfGH0uk zPkNRi9{3zfaR}}Uic-Am6Ox8VE)RO5xg;ptr=iAE{TI1y#NSpqXZeA@)U|bqg9o&D zUoS*6XIkB*R&>WFBK?Hzq7OldGTOaPrKOS9#x}m^FL5o%B5pvP)YBJ1)4>j+R?TYL zZlIG#yFU_Z36cto!gN1KF4uz^4g-2&P2FM_DBG;4y^V)#*x%CmZ(&W{yUut(K=0D? zdX0R6pOO~2-oKJ~p~jrY*9x;slyIm0ekt%jHXx8FdCh|n_Tg;t!U_t)#lA?x`JuZ; z3;{FSQ2U!iAPd<+7x(8l@wKVVwJK)xXXqyq-cdeU{lki(ZX?phcJU%uJWb0WlM7&A z>CG-_HYV}4TJPm7lrNEl(@#R4B1<`8u;5N{^ZX~ejVc8z)ajPMTXG7=mkrrWRGG9< zB8!IXWsi+GT{w_g>@d|ZzQXhszR7b>)2feRSU@|{H|uvW)nnP`5%oRzs1a}_5b$~r zK!QIR%Pclfe6j4^xev+STu4=`{tlxQzq{m$#V(diwVcb^pZyS**yNt1q2db6J1+uW z*;_$ZtM9QzozeblR)pCk83dbA-nevNx#1;oAu}a10zSF%B$Cg0jsvC~>X=aL82L2{ zbd7db463W)Hff>xm$7m>)6k%{+jQNd>Kxp=rRj3pJzdwY0yZg1UaQvnJZfdZ!LS-3=VYj_d1uLN(UalSB4t5Xop> zU&+DU;*$mKNS}^yhHpO7rSPHLnQl zC|7UFwzks;{nPSq=4INaM3trFet7#x*|=_bGGm0AM0=PNE( zlGg84Z+}4kDyDX19c7x%5I^1w+s2)Qr_;%nB0o9Jv62E6oi{{0qi=yne-W)vT`vqf z49aEMA->Dl7q(m7VOd(SdK;`IYp4L{^|kRdoi(Uz6&lkJgk3*Cf4EV+zT~rN1Brb& zUZwV<*WAzveih`i2nes;hE6-JlG%E}FCmS2kwia&vbHO@gqe)-ijoxO?P`a-3MF$H z$FE1-*Kv0N)5qtFsdC#T9k5#{%#=9%X-oU=u5UXFKskYLOk(pvLnq=3If4gMSv47_ z7Z4aFB+`+3`e6GGxIV(9;2}~&t~^J|!y7ovz)RLhYZkw9JBn`YNat-TvirWM6}f%H zs*S!(vmz@K?0MXvHD*9&Q98q!JL!u~f687M*Y3d#zcK@nhP8w8MkMhU2!Uh_n}TBfJ8m#}G>` zl673fC8mYc7ON2H&`^j>f8W}|abe2%P5kU!lmwlv>{laJ&3FG|e%oMFRgfzF(m~)l zUu`yT?o$Cif(X~oIeI(hp+VP%Quj;n4To7rwo$E;8pmSu%I7z3fO(JgsY4ddkJ9et zkcmDUBOA^Kge;Kwr=l@)Dq2kBiOt&C`ae66fGh-XAjvE3`fvdbB%;2-_Jo%m&9ieP zzj0nFV`hIRVUp+pd$r?g*fGry6f>6cFC3-w|78;r>?%lZs*G8kkl+~?8OKwxY{v}t zKZ`x8J?CEs59#_YUU8qPKCi|)D|QosHUm;w*kG^{=ZyNAc1yLMpTk`*HLKCgck-&0 z((ffMKRocBWz;1f3@faLf3_>Rvi;jsF2n4!wW8SpNsiX0EVWbaj=A(`fN^zP2J{2e ze!UM{g#G`ibEt5x^`I;fmLZN#7XCfMm;M!FWv_Fv3fqC5{-=QoJx{`=HoW+ax`Q9( z-9QZij^t208LN?!q2n}y-W0LRym!HyQ;YU@e+CeLPOtXcW&l75nd?Ep-2Be-s+-8H z{Vs;iwyq_$YW&x$lFL84QR&4*wIAC9@>Zk2AbZCvQSJl#vQD`BLL(FOh2qVOh7=xI z${f#%4{9MeIM;y7@{zc^z_NzIl3Me5l7pcU6OV1w=69r!v|0=_l9mJC!55%GZ4ilv zFujmGgHkO{2-!6jz)^IVNLs#*d#?hscQ#)XhoM|t^AA3k3s$SkBMqAL04HALoIt?_ z;og=S(%n{OapjM`Jk=KierG&t!3J*CRXvUK0WH5R1nQ1sTu<+bVyQOi8HRv!U zYHsO8eevwQ;E-wJdV4QzAG?`*5P_$)rN*%)p1D^gy&ZSYO!55{3Kuh3x;r@u*6>i2 zcC2H-mFQ83#~Uf*ce;&kjiuA*fAF3ElIe)ZnqE&|E1#lXA3=;1Pt%bkb2h*N8CQYg z!%Xwkai^FA5s$S%12uSUJhZFKBTNnL3yw4?#tF_@Uj#WL7H4dkxg6WU|9Uu3jWGAm zjQVUQ({r&!FYKKs*JUrxT*{G1kPabnmH#G0_Oe#?vM(h!otfRzMfpY4MT939z%$H) zVbIPSB4NGdM40xu=gKf(tLel~O87Lfd$U~G+=)YxtZFi8ZFE|7fWu@D2bd-QulBw( zs>!WeS2qf7MNwg+v_xf#(m|>a5*tNnDqs)@Ac%AjA+%7o;x_ImNDwIz z5D)?cf)I)jAcPtSB#@jJ_x`@`oO93LJH{Pn-1Tdb!Mn!$&ei68o;9DvM{ESnLIe;N zuT(>Ves9U)@u9-A_MC}gGEuVS(QOxvJ%y)VC03$WqGQc}G+7p!`s8u^meS=ikbYr3 zH+tOt!m^B{e8(or3cBuf6~@7mNnyC*YDKf-kmt4XiOK0TH|@(nx$J#GNT^MA4(k$j-G5LO}#>8m-^lFMfBwK}f?|*nv z4bJ*Ey+e)oub}7zndt{eft^vANmiOkpqQs?jqb^6eenmNSH`i44#p7ne^&B}aHkM~ zoQglbCd1bv->-{L=aKtI@IR5?oN+C<+4wswanPYD=)NZI-Ctx(vBInI{NDehA7=b7 zXyH11<|EMFCmxW*f1SK*q;?-Jc{8 z`l0^8{Dz;0q}8$jis*O!2mtIhG5fE%J3s>`&jfC9>0{hDi@`C)71(5<87OA`9%A3 zg)sa611C=!8M&y&AJ6-hH<8*w%|hb8W{j}EY78q;Y+;R`GjODF=Q1_tFHjneWVJ8a zM6i&M+M#mb`0gFIyn%a|?kDs^d*21v&wfBmr5pnZ{gx^XKXNWXNHvL^`&~-#==NUP z1+U)U?1#|**2<&dg90kfy?fyOzI`v=JvaqNWR8B{_dx_sM%_*wS*D9!YVxGTV-qW(0)@xyh{BzO(c;%OGhR%QS zPc!3phXOe{3He1mW_*wR*#_|oDWMf%??^$Kw(D3obNJ~}Ah9kwP&fhq`0nVVQ88ew z?+p@$BZ*=xYX z@s@_iNYC1lr3Ep^#qZeFvHM3iW3FIgD(S~gk)F8(;Ur@-wZyoq*?luzic`}yREK+| zA>C7!gZ`>ecEwU^f=ZD|>r=S3Xwq_9F4bW})6h!9BZHMF9eTu3ph7dt?YVjtheCV0*G{UtxO31gA@T zlI%7;m`}!HM@~}gMt4(J#YB_d*G?|sd#yJ;qD^PKg3c6L)EeLSal}K3VZws7gUQQ( z-Vxw0J-Eu?vqSpZhxzZ^5ZAVPvJ<6gMo)t6Hb))Rnzqi}2vmEwwfTPQcZtLhD;-jJ zR*Yk~m+MN{QMs`bV0cTEN;bULm+??d=pusnRPUb#aPZ40esQ$Oq`kaFqI@|b&u1~a zx~WAmcRFa2=b(ES3@Xjd=2-Yai1x6DHbG+Kb>&NO z>KZF$Vbj@hCvG7Y!+U@j#vQ#iQv8aGLK;a2Y`tl$hqT}8f52K_!}E@n zMTLs<7alC1Tu%ODva)F=qCAKe+d9t(*a^~yyw(=xb-80$^&w2&iVKWCnmA&btIN7z z?4$DNnj*70U^#L~2VFl>?*xZ1(zP8NYCII%IS-8?4ZHU9TZrpbpuota76|y z_>oOmi>J?aeh4-g6N@RGr$T8q{`%i{cZMvr8rE2Ac1(|d{X z#X<*R@1^mjw!N`@iPog>5?-?;hd#!2ZUMjWIDP@>#vf^_lBBCy8@SQ%L3{HnZ>nG@ zqoF#A1y9t`075{z=wkRV_UN}i*J$~p&sYf?m@YA^8|0o}ExlEDgfv%{#|lX4+d<>(6q;Ki4{cZ-Ox zHZ8wnL(M`MNUf!Zi(M~%v#6{AmmCm8Ys_q_LAWqVoOUIi5{IDq*g zTwPH!m~~LZp9lMb8_AbFw8VQz*{0?#FM^-(v7BcYx3QjMa-)LYO;|~<%us6^xWBht zkO$nuQ(L@211d>=fSL zBSC2pg*6YnloItHooTL>lJ=pJ;k=n&fk}_OJlIp2)$9dy+urqxS|w`aY+OrHyM?S45us; z!KW?-8n8+w^AJ`qchJ7Kxabfr`8z(x!JJQE{a&puAzpBG)*L#!YQ+T3dPE1rJcyvBtuEjimTTpaj_wF zoUGJ@P8?RNUE`31%q*exjom9(@1#x}>#-sIE3c1=R+OOz2tnF|&(IgbMFhjL^_)Cj zNp~$2*@#-Mye4anavo3OPD{*4qfKtOd)alnC%>K?%`3;&c$!oTG6vA)GH|?`D>68? zS3CE7Lm6=E<&V}2>~vqYjA$eGj5yGD_o^l9sJ-$wnwdE%6HmkDDl2QnAs#V7BXku~ zYkR=4wj)h%-(G&?ZnbVrFGGnu={s}bn!bO&E#)fI)nz^T%Z z?TX}856n(wEwfQxf>Q7ARD0r>qc=r}mK~_7(3@Fi*i?EslSXQAU}`V7SA4w~)f37# zWS4%R*osJB%9CcZ--C!r&!WO!+%P-Uj#NR3TJ&wLe>1Q{KA*Ht;uSbDHQ)cHW{qf% z^ks#m;PaDfGB1-;f}VXa$LFn`FKgt|gv>KazKVq`7C?s#W0e<(q-b8=V>=*Ag*5#~o8#V+Rx6uRJz%YQ2s~^~rgLmbGn^RoLzuQ=aMW z?+us3Q8udonmEp*V1-7GUj^y&tNIHVwxG-@XW~S;EUrz0j$97Ty<>1^X{*eO#t$k!+q|@kHe7~l2XM69 zS);G)`gFb-kgCE)1Y|N7D^W`ymsRIG0w*&!E$?I%&(~O%@7``)p>^WRjn{$8i(&XC z5~MODv_$cP$45o%W#RF4Bf0vVwP03)M0xeVY=haS1iexZ%8A;cU!ra@+au-q90O<# z1eWRX8-aEUBmWOQ0D&YrrGGlYUDgFHroGO{sm4-EOu8SeGiqwmF?s<(*u#>{I&{iEHNtZH+*5Xz-P<&+jt z0l^fmx>Qrm`O+<-q4IoB>4`(tZ3RVK<(P~w!Hu%w@8lJBAJrJO{g`#bTCLnhB(WM~ zhwd$;J$t!^oo#Q0^Bsp6iPg7gi*$fud9sU+71$0ryfZc)C?UG)hh%`xY;U@FbbVO9 zZIv!!h8(;(s-AWrmjpeMdYC}yvN<)-z zcy%5wxO67nVLcu3z>wBOn|cA&`-QQbM%;eiY~W?r9;eYZ)YNz?ZnshW+5>;N5Ed>F z#V)MNVX)TNqtkRxnifsXzoWEs85sf%3~b;)5|<*;HE+ms@uM@A3DKT1M`9)@Lv z`&-)tw|@Xr0Us<+CGg#`4IRKU+72xPNt+fhI-XLC0S*3RJqouh`%bcJ=K zc@P5csoT#PZw{xCSx3#lY1Xwkb*nS)y;`rypP9RQ_;-a8>lG}st>FC;JyK?EQCqI+0|IZ18kD6PZGz%DxHyi^K>>cx%%~gS-dIax8G+>d_~J3`OySnqaC0pvao64} zt^2Z~9syH!i?9J`M>!W4)t{N@jX(nKgq6Mjxy@uex`40V1k6?1tga@E*Tink5j&|H zF#PtpV-U(5TQ~#!cTd40(5kGn4ZNTGkD|4TF1QIv`C$w zt1sU2BzgX5&Q~k<33u{qA7*HKqBK${8QG7dPeD9viFC*Yo6Y*$;wfc;Rn{vXS5nSn zFI{h*;|FD7Okx-_ePNLML}9|+k+Qhf7vJ%bXnl$9i9Zr*RGpMA zgDH}Z4^!1>*ZC+F_IjKx(BlefqeZkkz%zw$IS49_pGoY?Rr` ziW$>En$G;Xwe;X~clkp)s=R@Y8@5qkdM$<&y`K)5J17uS(6a$5(zs>1wT#i34EMf# zdbkdvqGRSZIs`wQ3UafRqa=7&DkN`+_gjf>(1&MgR|l-C>w97^GwCn8z0C^=2 zF|oT1Q-98WjagZ6Gw{jP;i}pg%YOkvaenDj0I!4{)28{dy8v%&e9n30TglEsj|n&G zBqS+1)CDoKMcF+k#s7QY$9A3w*B;+;=9g2+8@0vEfSEpi{ZYrkT&p7DDW3_>SD$X} zsZXm5#340GR*Wfh_=LRlH-pRqTq$_fMvd{#=xidzE?(dlg-su&R3L9=9z~ioKDv3K zd+^SWA*r0ee{VT!1DDZ`)1m8~WnHFquuyN#RxwK{XUBY3tSqT$6SKI?Y320CjF>Pw zMR_AmK~xD9)!I`_-~h$SA8l@#&M-k!&+kGNWa=_{14Z@mi<*ZFKG!9eSgw|*6|`}v;}qz!6N1izB9`6ydTr4 zN=_NfzVvui?wtu@6m?okY5E$VVE1#;RtQWLdBff62=o}u32dnLI>uEk;#xOM4fSB2 z_nUDLW+w*u_^`+WUIr2rL~{!=t_nV08NBogMiEUPy{qqU+T4;8=zkL&r4zRtej!XZ zbVW%e#Y0o5!Om7trI@6;c>$x+q@H^==Cr1e*m6Tj<@In@0;0UKRHaFrziP<1T6Lp# z)zaNca59#6d8~j!${;uR;Z-w<31aRvjU@6?p;|eoq<^zI?p~>UZF@_%4~={m<%QXS z-W^>UUwH^ux^qmP7X)E!1i9q*YJFBxii|*i=s(q?@2^XM$)3GIC2IPTrxS%_7@GyY z)A60(?3;N$eY@nUR~iAKp=!A@r&I?F*_DJJs(Zntt@yCnjZhx!<=~w;O+?e7l z>R(-p?ZNcuDM zF1i6lwf8_YNL4DWeNAP4Y3L*0LqM>MY@(fYRho;ho}wItx>aGBBy3E(Br04WNu{o^bpk$DTkmg4M26|OfuE} z;hyCOm$M!Pm4x5)45-_&o!274hBiLv;<+Rr}^Fqa52(B9dJ{ z*5uEBtQYP8-Cp@dpytGf4aVQ0llz^2q_hPb9dS)bxC3l29v)FR&xWb_g6+^uGg;(| zL)D7jcCGkX-Wfw%O&bYi05&~+w>`u=xHO_MUN!fuagn+8`dI)7V5;@!q!(^0PhyeE zbknhjDAzJ5NYJakhWwU7nV2kedtELiWnSc6d_Vvy`(s% zf6nfoF-OTu+)P`ZY3sNi6L}tp5#=dGp_{cu3pGu`;7l0_<~DluT7+W)ALrivD%Lbz z2e|?t)Wc`F#I=otcGNHM$c*fsVr!nhQLVNboaHu;S@@FAYnIy_1Z+RYN#jb2?M4^Z z@aiQOUfZSCsSeZ4+8>*t)a`{g*gVA9YxMba6~gFLkJ0vhObGJ9wY}M(@(2(MGyxzoecwHZ z%;#pDJ2YDEFNn-g{*30H3$#&}7SKkpD`HnAzO{F_>cQ5Z;m{LnQodhy*0GhKuWZDF zB3>!T4`Szg+X-clh7PB%KSoBr?Z=ZU_qXp2_`VE@RiABbBD`-kWV7;qZ5^X%nTq#r z-rh40+*ad4yD4bf>}8==VSQmX+AtG6t(N_sRew#A>)s{_>{$uVUV6OEu{Y-xpxh@5 z6N)wP1P;sULp^uWMf(0mI3><;rtj!mMR!-9=Cx~KC!C=$Q9iPNTMeBKAX0)ptkJTm zyxoyIC-?FH=BVJ_iA*y4Fwj2YkB%xF4JE&t8>WCzqi#&sWOhA(cy)kDHVxot&E5I< z{$0dO9gl1Lf}b7fV?-5SCRIx;TVnoVwzIdj{sz7RefyzOY{b>7K)9NXL3ZCXxE;^H z%7?~jZ3ZD3TN)Q~tI;QBA43la@V6$(hH2&($xGk*KLEfrqAo%br0zYU{E!RMb6&Z9 ziH4WxTXkjX7IfjEA`)daKRUym`wBH*%X5vZfz0~-FRHGJY$)A2P5<;-iHaRg|0Uwd zx7*Y%&=SopEui)3baH&jMo)&;2^4tQdG7Y$%J>>!0LxKdTu)g@d0YgLsDwm`zvumP zR0pl4OTLsaRWm&?>@*8)4eI!F^)p zMY*l)7J)YLP0Pb-P2~jLgyHQK+@#-lx|WKO6@baw&uSRr;c@oldy#UmysqGhT>v$A z5kD>$tKG$nkabwyR`_Dm0QYbO4Zn-{8CsG9l(Mbu58d)Du=DAT!O|sli>>{kTRFDW z$-r)E@g2m2x|0wg0Q6R3ApD(5i5csOWK~iRfFXZ1PFHUDz8{j1rDck|iM)mES~7g$ z@YevsFC1=(pU61`_>Yqh5>|39V&r}I5)CA81TR30gA!*=Orv&V-zx3su?pQyNLdT7 z7y3zwjO#f+LF>UQw8Jeiz~ju?Hhq25*77E=&Sf5Z7v;6dMiD?H?vu;wtZSxGJGKC( z`Gm0YpRjh8wv7FMN7@(ik-y4m>O97D{}h4p;hwTIh(aqxx1}fcM(`$ z?k1`}%&VA<*taKEwr`(8sp|}sH2@DktEV+!Q#En+=K75SU77yFBk&X%_31S5U&&0T zEEf_@L)S5J_&GI+3I(^n*}G^D0K(rZ|4{n>mH(?o;DUeE?0{V|BfZ))_f1`s8>QFm GpZy1a2BKR4 literal 0 HcmV?d00001 diff --git a/Quantization-FaceOff/assets/qdrant-pq.png b/Quantization-FaceOff/assets/qdrant-pq.png new file mode 100644 index 0000000000000000000000000000000000000000..897203d53dcaff550671e3d5c55358b88061e66e GIT binary patch literal 31429 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 literal 0 HcmV?d00001 diff --git a/Quantization-FaceOff/assets/qdrant-sq.png b/Quantization-FaceOff/assets/qdrant-sq.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc9dcb32743bd5654150bf693ed339443393fa5 GIT binary patch literal 31221 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ŋ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

KNV$I^ASBq`q;}xuu8;Ib*V7Ov)@*G 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͑^KsA4J<8z;xCw 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 U&70Fw5C}5R)78&qol`;+0LS8HqyPW_ literal 0 HcmV?d00001 diff --git a/Quantization-FaceOff/assets/rescore_bq.png b/Quantization-FaceOff/assets/rescore_bq.png new file mode 100644 index 0000000000000000000000000000000000000000..251f1842e164696c5ae132e0806bf5bf2e5a17df GIT binary patch literal 63700 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 literal 0 HcmV?d00001 diff --git a/Quantization-FaceOff/assets/rescore_pq.png b/Quantization-FaceOff/assets/rescore_pq.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a22c4d950e02b56f5abb968a5b68213e65d942 GIT binary patch literal 62916 zcmc$`WmJ`0)CNj}G=g*qf`F8Chf)gCN_TgIbSa=9CEXH&bax{mo9+f_*mO5{Z8_g} z?~gm~{dLFPW1Ml0o*nPI)?9Nw^Ld{6eo>T{#zH4Whl7K|dLtvD3k!98|{{R6*XO7#&A?v(wFgt+R*l%09hk18fa zs0XjLG&4;0g?krNe(ro@$ndE}MMq!?@T9@E56xs2$3>~QI}Pz@9$uN$gn#$3sQ>#@F9Ql+$is_a z^JS~J#KTKG0v`Lncc6P<+T-H=dnpYW`33&>?f^^S+*yXpW7Hq}KC3jXm`$_)wIsobwjGW;W17uw(5IJe!>km2{E)?_RHylDDx;jvZLMJ%=mZ+|cFT*cTigC+3%@lX@ltDg4S! z9xgRCsL;VQVXbnrK~}JIle_kl_zFT#X{EwS)1>LqtFfl(ppzx>cFmVk3%>W>{ajCJ zXa>JgiR%7*muxD$*zE1es8wBf7csc2NDv;87{ZVR3$GT2_xUklB%ECyl<){h=u2Ro zI6fZeCknZjpB_!>diK-T9=2n!^$h)ZO(z@2>_O@O3G5`)0O-%<<7|Y7aZ09LWnrmzM+*hNd3pe=t z{TL3YH*H!sj_2x}=*B*;7}3-GJ2ni|C;N+ffrNSf@I61-$%Q>s7rf7PpqF6#Af*N! z*2Q`at~NTkZu<)pq!hH$;V~QOz6(Xy`%`6E-Lqj~-=Dq?QXj-2=NqE0g$HM5q{>PS zdU?Dt2&q~0v8tH=M#^2DCT-v8^}E<%rAxWs1Iw-Nbh$~nK?lmMC==6LN}mgZn(EQ% z#&ewp*FX913!HUp-2HHRf;5^us&*Dz^uU%^cD?Bc!qPzrlTQ~ZstNAKrJ!Ij>5Unl zp{sM+aP^=VGZv>t*AV*h<%@E$Hovz|YClUi6jAgFhf;{)&!0camF7zG#X{~!+1C!V z?4LKm6y~#A-j2MCAvvf7((7U0vs;e zs{9VipH6T3c^8>Gzdkv>z8?GD9Y1`#iIvQ27uOj|1U*ZtSwxE@Vo(&bZP?{W_m$7? zOul9kj+maGL|}a_%qF;AF*ju&I#XeNV zu-kfzQF@IA*P@B}cJJhK3|rspv)wEH;Y>-4^!*U$APDZ}z%m2A?m}o%rz@6>5?r8(*Cw>^b2v4NjRs6Ei)1 z*KW6w=)U*O#bMk+ljkh6EXYJI`1trNfv7mutKh_rr|gsSJF2I7?(sv94O?9lub**n zaE!Z@7QQd|P+!tls<+^CZ6n(jfUKf}3XzJSw5br;JN`_hTl%}RGe=X@YN9YMn966$ z@$Tl*S=d&=3Z?O6MD`aY)TU#lCMc z5rj&=%Yk|*0i$8l&E-bA!nsx3Yy=Vce2YVGs$h-DRH*^>{^<9~oPx>z$fvKZSv@b; z;&1OnPEQVV+(bPZP*6pDQ*99Ct1QQRV+OxeW}kD%4|k`eO}@H3T2pCqGXNXNGuiF- z<8SlzUIlCSH6IJ80+n?|;OuGawcPt8n_OVFov+^AUbA44a+TI$wh;Z4PqlPPUbyjk znmN=7>K?M3AEGG2Hwa!H`^nDq=z4G;SnSjV>D#MQ8x+xvfz)FSzm-u1(JBpC7X9Vp z{60^yt=xG_IT@T*Xeh5 z&DMPhFDIY|V*cVG?#Y6#J9!a^v)a|x)0n7y2c+%I?bTyNT9fPL-BiAF7Jf#1b9ELd zd^_<*ddV#6rLF5cZaY&^#ghSSlx!eRE?$wZI1dV+Z<>W)3ZSJVxnI>gpVgP)*y^Vv zwO@~ocE>N=ZtlXN>RQ#>Sr<46H^zn8cpUfha;`biuxw4Mk$CrQd9$2sjdpvG1eBu8 z6}x-3Tr6WiP0(t|Am6UfpSAkmYL*+nfuy=ESm5iw&~2>si6eaRL5}T(c5Ue?hu1`! zi1&=g|8=({{EV(nws=H?4m!sCsMyvaXS=f-Cn6v{8CL9p|Mn(aYE{xW_UMY>yOHUL z;67HW#3JLF(st`l;*Q(gG*8YlS0CiN9}wKnt`~)EmXIb$`1z-iE{4swF3<@LwpoBb zDB-zT(>YAOo^lAObsZ^XNlnkuhZoWswUQTJUO`K2syEtDsm5rX)|cSwXNcL+I7;rP z&C)g4l0|)+M`_pgL~IpMjM3V6rz^UXUK-yGN5BQa&u%h9(E?G9O}4P?0X$KQ@IpXg zBhE`gb!%|jcO_oB*sWQdL${Yp=IN(jG9BP**B_`Y)Tl7s@?p7HKCBPOYUy(6jbSu$ zO3W>hl`bK3vPYcda@|p{p|mn>R1o&|+M17O-p(`}@Zd0GH=fv#@Ti;lZwII$L+auC zKR|-Y^|&W3!E1FZcE2n)fe2yS6R>EGIc|?JHtkI6`Mx_{;1SW=Nq^ymeYt%6Iph_Q zl|62hUW$@hu_s>1`f+KPHR&=jMi}zkSU+&m9^N6af_9y5EMzw<2w7d zY1^mh`dpfTv#eJL1qEGg!F_{*gv&fK&G&k@rYPQJb4WbReLYe2e6rF)1?p|+`el`xwEg|N3OhsDk37FtH2U2o!|Jm|>HjVZ+CMuk(2~56VIK z`bR%l!-TWg?KBkyQ6iq~D>S0M{*BzPdI<{jMrAlii^t$}Wrc?h6q}pKt%#S#R zsi8z{nrw?TcIhdCZUdU}ZKIPpO$s8H5>^<*=>~c}mpQgh8I1~~*B3(b5qFQ#((x0U zN=B|V#a`Mp2HR)gyYSkllG!yXL50M>)4w~p7rnnx86@-lHYp#7f+e)@p^@l71MNbN zy#XZZDtYv&eb3{Kd^S3vO$KM;`ARVnh~QPkBPc zSaVkBCT|w;te0SPloBIihu-$ zPZnbEa?*nlmzSKPdsMzRO83(6b={Pnee|17-4t${ehX82TGiHNy1F1^t6mQ;RNKrJ z-e(b~dE;VyhK5m{5{qerdTMBBIOj8$CU&jI=~N&!S7HFNEYEBhd`aC!hEg6E?M_3} zR64KSYY%-vrJG5#>L2WXL)n`10x2p@Q5qNeOWr8xVKjeiBrX-cJsH(J8NNy33&?Eg z(jNuOD@SCmU>b5gI9sh1d4dkLF&oa~gBuzd7#UTP@CAlKxP!Ac&*Qt3wG9ls&)A?b>S4p}VXtRh z>VBM`Lt6kpFSk?BpM}uGe{HbR^$pwiQ>La!{vg@VbldyMfH01Gea>)F0l|nY_Y1tR ztZWo=Z;tvd;>aKVmKV*&NCxD)qKNfOl~$7jTQ)JQIy37b&oz&+sYK>}S|KgTtb_BA zOYvyvefynH-*pGc@l`m7+D?4pq}zsrXZsxwF4934Pj2unb;n&}#jU=xg8g&IBOL-= z@6-3*sWjga{p-_x@1{L2@9)ktlEeoh^F-b=EYfe_)U`jf*2_o)oR`Q?-q0< z_I%M-57nqkX-n+?X35|L5{Ti$B|`}CDZRnIrx*6Ml?*WjGNdpVK0 zs9kr*r?W{A2>iqSV)=D1CFxk^8{8(v;|@Dee^tB9yQt-#4rvl@wV+({cr1X{kJBoN zEn$E5PDt5l7xl^OVC+}`q;u=BDam{kXKf;OaTykK}_rZ!FVavPRggI8WFNJzkEdz@~2WKa3g z_KfB#C~$MH{mM-%Pa6dANa%ddNo1ZCGjFEG&QACq)>Q^l5KFLX*A97TfFom5+yL;r z`)<`_;l^Q$!z!+5ct5uc<^^7`ID!27n6}+Z4$ClR5+jdq!kFRV*>Z~QJ3wp zKc@QOwAt$$J^(qBG)Djkvp_$K%FWRiHu>}Afm_Ukh}8tMFwJ(aA3S2={Yp>XOW_>D z&ab4aoX00sOQGG#k&*g3L71#Y8DB8-K_A(*wd;9RU+D(g(#@sbgfqX}Fbhl2??wIJ z#UQaiCT#&Sy#J!lb$|U_!dF8tse}re!{#%hf6#qX9|Zt8abws^ zU|$mlnq*6mZH+js_YFhv`r3BM5S@h1(T?;fdAF;GCCv|4W|j1Ns1#KRB*~SmCx{gd zlA{g-mp}G|iLoSxwc>b><%=KSoIaDdrs4^!FhRAaWwThEth6xN0+l7s1y?c7k$Pb&HyF5AV8^OptUH ztx(0)e4GCR7I({ogO7Z73r?B|;ox16*22P=Y5DAs_`+IDr5u!f5C5e|T;Cdprj*GW!yg36&}M?O zrc82Hzp{^8PsDbPucl_c`CXxV3+NZdEMB-aD)hxSfr>A3`LBn;#HQ)x$|Eu8yRTvU zxQEsBG)q|SzXaF6{RR-I0_ z$2Fx9B~{AErS1B;aTSrCd`A6t{fZuSg4--VgO3qC5`hwM0>YeQ^n}veeG&c5*Plqj zZE5-`e{J(^hmF~iZ*}wh%_9y!%S=es08CI0;7&BZPz^px!^jrOQWn*`GoYFx3hy-P z8tymf2-+H>>^p4sxvgK|LGRDR2p~BlSr4QgMftVCzz|Hksvd4rp3e05&x&i6u4aut z?OE3tO%`%y9Up6W%Cf_99tVfJZQUB-{PT65FMEWUm5YP~Yn{#A&Mb0P?RZllm0MMZ zcps`5BN&je_dk-387@LCc|p+I>15*klHHAyy~A}Sq*Cb|VK6FdSAOtcJ6fXBDDQLe z7qvfwed6`3mh&+CB0W0e&vTcp?JEBrLh>!1nw{TK-ea7HlmGQR2~p?YUwqsp)+rl$ z*@36$BVQXGHK{E{<>aA<(N#%j)SKuX`e7{W)z8p6*GIavd#}2pD{jB;J06>?Td-Z& za_X5b(A&W{ht1vqhTs<7fDi^+T-DYHzRK?%VyK8;l5Ok12*%!^!y^;8R^GRLgRgf_ z!nb@Xbh-NdaSyJ22V7^udI0>B07@8{>;DPRzUYq__{_&jTJiY%SV{mj(ZUhzKJ$h~ELZ^EA5Bs+>d+tI6Q^lksj0Gl@-076Iv|OA@Z^=A zW=0MbsIjGz8al%#@H^2XlCP>I1O*h*5Oh`qFTwr%kWplmfx-)?LIP^Ik#L0SK}pM9 zQX3Yap3!As)FjOjo^!5PDVC0?dX~{gNq5StRQkx%dE_gs$Y@9-=F{{Z^Lx)^G zgI{F8{l5^{gVlWk{}ItjxQ74lv^7r|yg7)tBhY(Ugo>-qJ^x34XC63hjnKhJTF`k) z1DLR~-~Z?%raclh67Nt_!~++O7KBCCMG=L9!iRv%!Mg-_l1T73SDsD}|GNk0L!tT) z)Ru2AY3jP*q~SPz=1|u`s%_}9es-Sxf+Ae4W_b^rd|V^z{bsH%X$`9E61tDfvP-?N>! zMviWd2O(p>RMtRS9`*aTL@*REkvdZ0%q zhIeSTfF70xETT?vd`b%QT5s$MCEdTbq0@ji^B+hZNEc-TNHi9kLO=$kLGyDO_YP}Oo|qG(7B zk^uEBUE?338qcc3h5rKpBoD#;rgPn&#j+1^wE6{)R?7T`;_)xv`#as~FXM7;SgmbW zKVApF1tiWYgslZL|2dO62Op2^90NcOQGhLkbl`|G!>Xe6q=Jl0B@Gn3keeLx>_o4uF3#Rwf?eUpeSveA49)m@}dqgk(z0Co@F>@5@$zmNB zGf&H%sWMFlC!jKre)0pD@DJcJUz9YRC802RHQDCLynQ>;{n_G`jNZcv9aRA)ax1~U zD~v>wv=u*|O)m}*)|OK3pi_Jb*lJykbHG7!IIYVi0&1mDr-8?~OB!&`!}U}N{CIK! z^sP}!fOIbS5C|i;`W@w1+L95A6urSuiPaD^F5zv~g0j)V8yv!*?|pxJ?l}66_f3<> zX|{9(C5PvkbxlbqHOKmRwfXR??a2~0fSx0602M%@NhDhDbG^&kA7l;0k?PZ~6tHIJ zrkf6r@$fDmH*WxV#F#4RHnBg#yYTTfCu!v0ee6QDdS?rklrQ=cEk3u|UYAGZj%&Tn zC83NoHnY{SfI8^~u#s8x<{;2{XG)2b%beQx{pC=P~McJ&)t7_bz^gefSDVRg|Wb04fQyO#^wx*M4uY)#J z&F{Yehe@g~Mo6 ztekYu%-XdSb(V=y08LkwrXi%dsH{I6;}S5sT=;o@X)ok9pw3 zE6fJp76W;Tg*Wc6qh1NL=L`Px)zv@Wc_5MK1U(>*PCiHQ3d(;}DYe4H8}_ZXozE9V zk9_Y>E9TetwIdh@!Z|3ECEBB1a)0AQ0%#?|-_9s1nvve& zP%>20L$`yaHV;4j_D_$FfOzN8$oiJyX5aU|Vr%=$5-K*0(AkvHmG>+Vy$<66L#G+| z66{G$zX`w7dgYy7h8X<(hp|QpYNQo4q>uLPCT;ZA2;{^uf=M`^Psl>T!cH#h!9bawrEyaQa+)RJVTLhW3{%lUy>mi z`M8@3MA&;$XnFv$JF_M^Fsb|u`~Ca(CZpTlTsNW zFnKu^CK`iSs(_1Eb1^MiE!t1MjnSjDsy{Lz!>E%h0X7znoN^%E{&lSPL4I{~TomJ=EYPD=&JyfXQCMeDhx z=Dez+AR>2uR|FLstgCn7w^UBFTO4(vXmeIT(pC%%C5gJjizXotNioXa!;nr3mccER{whJ^@Ge!B4(X> z)d+Nwn)Ec6-Trh@J*xoK5?!4Iuj77aA!V?wi|zjK_9ydS_M0lv-7{IoD+WbgfYT5! zxZkJ}YPIOlO>wjmA!^Ah=R}zO96IwFUSVwWBPhiu8St0Vih$*=Y~2C{-Gj1@7Q^Q=mF?PEQTHJ%=Wh90Lj-I)(dLA#r+7I*vLjCdQZ% zNC%^%pym}p2NF4@~2hcmPE?9%obLS~ApD40DV9-vBzmIA5hEQv&XFc(#g))1!V*n#wyn zejWsdfaz(qJ}DVWK*l5cPx#Ftf1Y55WoBkF18TaO6}s5cLI*nLIMDglHSWc}P-6y* zUZq;BJ?(h1sRS(toyebPHa!st$kT<;WkjH}jKqODrU4i@Q=L0dUZKIv0Uld*I+^wd z0A~tdvW5}Ad=+1!Q9-X$b3ODLM+2RRwQ#@Wq__cS;NE&P)V?6>oo#^OM9DN?tEL!$ zMo(&HMXgi&AvdRRC&@+73}^=e-Xa{ zh~STbRiMJOznqX%!p@;@qsFf3b6q&Yl2tR7f^9qlc}Bqm=+&42`iTPw!gAPRjHwF+`Mkt$P%!WMPkVQh~5*m!;;%~PID+B**%rkt5Q zK+wnnXG2r7C}=x45L#Z=*v>QQ`QBE!-nHB55scXmWr*jyD4}*VV=pU+-exaC^3*<; z^#XdM3OhE-8R8TNUs1z|Q8+w(TzgS?Bo6pfRSsV$hGJ!A!}}O3!xyCufWK zBg_?u7$QAZBp9MZp}WX{Z9_%?t%HNZ1VWQ3gGUJTFGh#oYytq+bD$I-9dzJ8_0f=} zl-}2aZsE!xJ#Cf_oyZ*i4!~#gToxohph#!7p-CerE5-2YHG55%Fc=3}?vykhechR@ zQSj~Iw-khK)dTm7J&CmhH4H!D{`GVOgqB6I8NoEq>kI^O^puh1y?OwnCh?I8LI2VL z@=Hz|R@N*EB6)M*4wn5`Cb~F^@rXW!Szt1Vw(Uhmm7i0_{uzjYc#-TiHH9j<;jTs( zu#OB8$1?L|8RX!R7GK}wwuIaoSpxZ?m!0n?36SuIe~#mkQ!uF&r)Zt84Ai6jg!#HY zGr@k5eM(9Zao5w~1UJx7Ughu`z#`jv(l!R)7M2Fec{8NGkoVq*^B~B!oJ=sc12;FUJnWw8fMf~v;4~YE0jSS> zsU6K0jza(d3_8#Tl%a46HT~Cw=;@)TM_;CPmnd?07=QfiWqn@d zFTJ-j3kP}vCsZ$RdK$-3wHFkqh3TblZW9L52Qu${`R>#-oH9fD*D#1mBDcA1D$G(u zf2uR8pTjd=>>Dwuv6d9-Hfh2#HPlG6=7LSfsq5=X`EB{`osb)ya-c?Di9cq{rx z4aWC%iug6(q8JYrkIl1S$Z-sz2)&4c*Y4r%??E)5xZ~?Di*+{?ZHrQSH$j~Vk#pT3 zQwiGdWIpRkb@jac^kULv)b@Omx7LYbu9^fT;cT)Xfm69$ny$AB^4w(hv-vMPJ1y&z z-_sCEyYv>S@51+@KMSKvsyz zh&OE`RYj1;CA!g@)($)oTm8J!mKla1>6Y8CAUBnK>hUe-`M{>fFzI-s27h%`1u6GF zCQXeCfD%Vo?5^MP)L>{4y^ChXQ;M$877UKycTUf(w3`i!*rM`EyO>$I{*sPodc(YN zj^E;RDcBxse;L;L-~GLK|14KE%q_LefG}COK-I0RnR8DYwPts_`RSEMw8V4D*qvw^ z?&I#aKN|V1S-USQ_g)N9es2={C?`qfrQ1w-muH_l|XmvO`Md>SGwcCtz@Nx0w}!!oU-${uqYR4-kkcK zxp52*lTqhs7mpI5`9eFfTWVTZYjq=!Q{3-1oa`F8>AohE{c6o$r!x1_Z8F_a*6-c>r{_Rb*9|5m2ZTc`pqR{G z3$jtE zT!1El*);b|XnH?Jwu$Sv@|5bMKbt}&RNi5o^h2=4XhUn5z2QwTKq8A~Ve~o!HMt$L zzCiK7z%Q_oRUu7?bV@A42ymsq7yKE`7@yc5o))syVvXYD8d$Nm-WuS|-oD54ZnEQx zI10`F9~zB5Gjg_?CYfilan6MsH`Vi+gLh0nkq7oh=TCQRXZC#Ny)pm&L0cGQu$tx6 zLwBxP^*njFd&#&iUN5hOc!+Ek=90WJ3>G;}2mTfc1tHRbLR2Vd%l ze!nTZ85>^`y}^L0JwaG$D!qYrTDx2jm!zb`n~5HVFX25*!%-S^(3afI5b&q3afKdr zWqpnEF?S^!w0BKH90d}lUt%1r=pk!RwUNgClwk*s+Hw4PtY+ejD`(to-+RThwx9-+$8;aetqoUqnAlwkCvvWML<{*|!#0U?-tA>0#m5Y})j%A=iCb@a! zFV#pij6RWAFIiw!E%9?qcmbq~EVtdX^NX($Tn03|Mldv#3YC8ow|1M&p%pSY?BL|N% z-eHgv`ywnVuD{W*cu`L$3d#bb(_4%%6 z)<4|xGm~R3AR7+_W6AZwqM;x*0Q=}$W#wp7C&i1iQ>n~ukdQF&gU3E%MB-yOFplV3AHM2`aK$Y1hfcXB*vGUT*mlP0QOJd_?#FZQd07ozJyeN zZ&>XxS+TBX&;IP)3i33-yTta{Z$#X7XSg-W3_k;px+09@eDb1POxN_a{-a&G=SA1z zp+ThOlAS%{*;eu;YBlCAyE9_{et}>Um_X7)!^7i%I%`>`?DgzF7y4kw{MIdq*4&6)$^5CpQ08xzpZQ#13lI_# zK!ivh!wBnMHOP7vrfTe{5XnV8QIC|&`o#Ys%iX#UDtDLd9eqa?6;O8R?SB5SxIS%g zs3u=SLeTn`L7N&3EV~kq@$sv8P~9hEp=u^4y(Oz9udQt2Y8XakJSH1dGP7z2A6A@8 z^1>65!3zX(7uS=cVp^gIh^%j;75-dE-{Yq^<4v!x7VW75|GTXbP(~Af0!bkWNR(L4 zDqkWZHWtpK$Ajpv=9<)|yKcK36xb@x|T$Eo$|$)j-ZvRsyL{N4K}zGRlRf*Z;QP3zm;nJPLSo;XjD zz{ii-AR#UEz4cki)^Rm#i`tZVfYp#Z+I{zL5&j0!QunF?HguKpJOFV68{#S3-Fqne zya-Y*CGlqe%IyuL{99eb!)@Tr>VjPn1HM?TmEq+I4Q^i+^&U zQY}chH_O1I@3=YiG&Ns2Pw}Y;hOLbJn>afjx$h*i_oW)TS@v}9nZvK6UyxN8{o6nW zFK`MHu{$Mm=1>B*ujErwGGcS~#P0tf=kM2gw9IuWvpydg9#9O`{O(V6&O>!O+ z|9&(CflNAfl?WKTC*V*6$bjd2_^d2u=0+H@dJKa9H0Bw!oW=opZR=-*%rBwNI>^JP z?tm5fQW6mIbQ~PY(cizD{43Q{Z{EsBe}Vq&*>514WiHVw3=fdBGsASzLT=wW4A z!M5HUw}*a>eoXha2N<2#K!;7bDb^Y&0gnH3D&|``*R%zz3PIbF2}xUUOlZm_?0Nrv z7H=B1ssitj;jxX9-U81=$KCXlhhwf+t#xBci$_~Mo1<|*YXq-{;`WmQytC`zf0x=r z0yH498GWkDL21IPhQ)M94ToNj%KmqX|W-DxU*7_DsS>Zk&RAB z$Qykh*@paILOa0qCSWW8 zMh;p`mHzmYNlO&|2X+GfVssZmXlQBH+5~E38!pzLQcQs&171hmpqr-#`trqr0hk#| zp0n@3ddfSc=Y3&!Y1~Pa)Mn6=%u*vXU0I{bgu6d!1Hd+Tp(BGR6%!+Rg2Y#>+r$JM zGVwH$Uu76%02HO-8H`D_&*=L8&O>%#r|!1;zdQf&tbLJ83<>aV<)${EzYu-q zie8`9SYfQ1za-Ut#IiOXhe$H_FdK$`ju{SecrOq`PxE}wcBX|zGQ+oUFSLHjk^D*G zF6i*U1$Gu^4>CZ2MuHKk+xzy<7+{8oG8hWDM0r4otPP)iE=Wiq?w@IO3Wbv{RZyAs z-HU8&F)k!m;4{&Q8vq@G$?tISo)TC)V~)1k(TrEa2dvLTG@A4g9(t4 zaueASp$Yr6pXG*~=r&Ipz_3LIhW)eLXAoZBduC48z6w~nGjY#61nI7e2kv3rBn;F8 zjewr+;Y_80*L8wxEKQw-NJ5lQzKmWj#9oC&LKf7pS1$`D)3V_se*eA?uNFK41TKt} z&IXf+uiZgytiM8>)l=JT#tBJ`!H&_Y9x-ol)!Bj z7sITf445hFibgCO1j@ z&lu_c)EAm-KXtF4rd8%}d)Z?9Uw-0ylmv&$@yv0(FVV8D43k?RMI2sP&P=1)IuUe* zU8LDCeY`KSvRKrh9qD#9S0Pk4&de$c1R%PRi50h zQ?V<9fPRw&raxZ$+~2xw0a}8)^e?j(9DJx<%k2k10XzePeF`r8Gl^hOXt&G~RdGh`78vHUmWQ#P?i5EQobiKyB9S|60?0I;h2E5SsJZ{t(1S7Eu-6SW zupkT(o&izmR~*@>pncs7u;AZ8DD?v6;Te!?M*WcL(}ZpgI!2m2-C)Ck9Z=xbRv<-s z^8&wvGT>s)*X-qYg{=rfIuM6xi#NV6UQS#bZxjY_fRb}^_W1GRRWKcP(3Xal?pg*LV7MRlnAA8Y)f05sifL?dF5D4x z>#4__es(^#^OX0!<;r>A<9};HgI*4YdULT7!2z_?%k6>^F4-)Q_eq!X0Kwhw0URI` zt)J^$UuQ{uGwz9e%3<0^T;!lssQ!{f=wqpAP(mQBsW}!*OD`J#+sD>&lR0|~#$&g{ zgaGBC=}aJwS1FKlBJM_RJf0%rt$AK>>y$!rCsHjbqIp;M?3wPJU4!AWvEoW_w#VPz z#Ae}#>b|N?h@nitkU?!8fXxQ%NTZlh_EiomQY@GlQ#ioH^e5)JQ_FB>qV8zEORtmW zzDaobI4&+X=`0GN?CuZ!zp|Wp&|YSMW@fK=@lNF>0(sAJPZ(S`48yN}eN%pP;E}w> z0^x}ZhR!n%M-|WF{X^M!QN94q!efkjAFcNnNJ`-?wN}#V2{`^uXsiJhulZwNJu?T5 zGG*bhs0EQPE!5_}jb#S_V5x!+cd2y?6j0KWgU_+S6ISb8vDpO^Chip*;L=W_z9RQt zu8RCa%^^LWps(=@3g^x1R06gu(9NA)?dE1@_r&y%nrz4M^FUq@g~UHkK8X{WcJjRa zpHE#se2UL)&LLPr()~WiV@oq2?7}LbP_(+!)V&*>WvyAW=B?_p#edd935m7kkB8tlt}i98xEKP+Ecl}}y+EM}x& z{vtELkGk`^57F7HO+KzPy&M%aXh#Rh>t?8||ppZ~H&T>oc6G zy`o}IGH=OhU!n@DZX*M*x_<|qdc8}NdqaHBhE+>^HVnUK@?-qre0Tl!%bcWlZRf+? z$0WjTE0Ru@kP*y0TLURgK23=6(W6H|2!=Y}LjO#fw9hbd*bP2TUONpPkLe~Aq2|x5 zFl+zt5I9Pve+izT*I6*-vZcp9Jr=EeWNRG7JW>JDE+{S^4JiX5Mg|(>?SdTo@`qSc-GM%K`E&FfS4E z``pyR%xUFj_h$KDIt`NO^ihMx_jRu)TtH9KBV6Sn6aTe{8~X4)3@N~T_PQBN3tj@5 zdleYR98b63@5+!65p5iK5V2}U0!(Ms-vOo~^z3L8V7G@19||O|t$S#MZCu2C67{1m z@kQ|)U%!0!|3($J{rSbE!;6QOGqMj9Lez`BovN{dmcfa$(OPVR)4W&`BzE8lpH zK}6c>?1Pbdx9K8|ASPmfGIlJ2QQjDk){a36Qv7lD|!m=79{?KFuE9;EpSM6uL;1AroHpcg#&<$5kjDv!XBLP z=mVzxCwOPFOJM9-JNVn7oGJ0hVz#=d>N-S_-3$t9-&md*aA)QKnej2O42`s<6a%T5 zuh9n-%p71clV6mn-38P+lG%#XokH6aIlxwPO4zJoCQ1BAr{l*%pex@AK|ScAk1!W`_kmC<*0W zVE%ff-o*;55$1IQd`i~w?;Vxy50sj0v}$tEFW#u#*ZB~J{-!tk-p-Hl)=Txxe>kPb zMoKzL-{P%bW;&QCmml~0q4?t!N%JmHFrgQ?sA&}@ke@~k`kipnXaKS&IRh26H;&~6 znD-8b^{U`06~!dr838AeELznv&d!yiPz7*pfw&BB16!ne3BP&)M{^O(8mLNz#yju) zUFiPi*ur*JmaXX-P!-wMr z(Yz$Si6G}!4kYtyK@$UG$Qp>m_t%T}DZ0MPzrT>efe}lyLP+GJ0A8YUG2Ad21s4PB z(T4rz7ckuS&K@zc-=Nl+MZ6*V#@jlyUm%sKGTPH>k?F;~=2O_iG{DmjWDE^6A^KSV z8ge}BpER}p7Q}o8nEuR1V!VdG(UQxequQdBU}#TlFc3$C0i63$lX$lK(VWL7NTr45 z!3yzLMoJ?(n80Z$}6tG6k*o&y|wPpjj@>tL+_rON;bxe)N zj2eSq&L-P6GuF(zCLi2hG3fNednRx(LOLgJIl<#3kt z={{)mRdmd{!zr$w`Y-?JIm%Pc`HI5Dq?)I%g9?u|M>&##iz^<9q(K2Zs?oV=9&hW< zTHbXP-)TPn4(8@n*m+unMo;h|UFy zK4R5h9oR`%c*2mQu&BNgFQFNH{F^zHN2{Lpp+MbOotov*Z6q*r}8dK(1r|( z^3pd$Y+ErvMXc6sq>YkNCSZ>O#Zf1Gi{StuO07V$jbh!%)vmH=I*wOoY|{o<_Ra+( z;(K{M74J~KkW@c{$3~JH8kk5BdHwIY{$hz^g_*$~n-S=RBxqkc{zNVZ2if=TGWQ*e zWLQ7U?RMJ&I*lWMF!`HUyL8p5NR9y$6ps4=Ora<8+NCv@;rX#^H+j4tNE5aiT_4Aj z;P$=RdVZ^@4u+Q&u$gu;KcEzA!CL(qcokJR6&XyaN?aQ=gN?1GqqdR3)xKD#Xkk0- zI!AhO7&V@SwI3fuw_V%l-MAH5?fJLMTq6S71J{#HB2`Uy%YL^kszlU=w9|@Qt z^=s!20&aH*0PuNLLZD|(%D{k=s=j73_G}Sb7_a(3wO{=y`8skG? zo+X_i93*GPm%s{_aHiROe|K$@f05aRVyT}1vyE!C5wdDe{hUQdc)a=XX#K!|!?bgf zbk45{qxwznsj++WzKSg}FXo<<;X_4s{!7hjdBdVztJuxabJWFk1>`@@T0HuMHoW%8 z@dNOD5OZoo@z3B<37e|;5}aU1&63An5d3I6`JN{1xn19did3ux^wD2RSwW`SOJ_6H zHU&lc{r1TqcMn~QQD7pyVlTmX^3_34=269h+6bM+ov~Ts&GJWn!3#6S4>gs~QW~G3 z67CNf{=B_9f&6ZI2=g}V|AVLR4y5}3{&(H$;@YzJ$g0T92-zCSe3$H%QVK;O%Du98 z$*Pd8GP5%8MaU>2J6)7WWMmh=^U~-0>!1Fq>w3MOJ};H1O+}>N3WuUsY0OfDDVAFg7@ve2x~OaEd8um;&qChK(4u(vC$mXU1-%iewO4^}10w&BSi4tbH*Td;2h}E6dqA=fAkyD;BQ}b57c5 zzoV&$(AWO217!PYR2KhxEe@S(^2Y!;6N6-gv#*^GhKK|B`@LA)_R)v)fud&^UjdU- zVG-z;L(&+P6U#PfWz!FiPYZ3%`(ON2NYw#}b0_hXRIk=H5vu`2gX~TmSrLU#$&a;F zlM+0_eR$`CV3kZ%2dnVL;1A(vhpWyFd9xYDyAjwFEsQk1XXCMImSU+$)gk#?=y(9+ z36%S5X{U!Cxl?kn7MYUX+V2xk%3u50AGxee zHUZ5eGh`v~V$8hUz;$gz-~&LWY~TlF6i_daIA^|p>Ejq6`(r4N(xA!!l3A2$@IurH zcwqX{bU9-?ch0nRCPcOG-Ngg5T~e!&dp+Q_(MW$v9)WBCS2N%7+eYYrof=y`BHx0e zc%X3B1khP&@kq4*J=XyJ`1Xfp4=?Q$e!eLsr#+SBoNI>ny?DzdINC<;)bTv7l}jJ8 z&CL#dJ^IA$?i-hP4+q^2Nvd@I%L6lA0=efyBwNbL1AX<=i(Cnhq1EhOAcXwbhPAH8 z{7**0z7i1;opkM8#IgDFQkL3SB|l3La6T@)%T@GzYI?dd`1DA5DyQYY66aS`RMaET zqji0`zb6gOfoYF`n-M6+o5yRGCmza`FV5y!B#%%l_wKHxTWK6TB+_^EZZ*`B_ul+7 znXEJd_%~aT2wK|>vJ{nIRfJfz(5)6z&lbCER-dnUwdx(||Dlwmd1$3qUM~7B8(AH<&!XqXU+oSK1616_vAyS1w$#RLI(SqTX+iY+z&*?LFIzCo!B>2JGPM zV_fT*#gwNv7Njad-frVFq0bwfJ0xM8{(EC)A7l8~1hw@+5VIx$Ks3Jva^f?Hv=YkU zal^zL$gkMTl8eX+777`^S!0Z-AA`zw&Vn6y&kV$JgZ$Zj{P3aELL%bxnj3%f`fK;x zg!X?Tmx1i9My}-_97T&a`EBl8k}mFv)!n#{EyQ)H$oZ<2GH8 zdI5ah*9MhL4a%Z$Z}#8S@K6Qf1vo`U8(e4)6))r;+jW$%|K z|L)xLP|wSN$T$Hql}EuRztX{D>v#zeHv&S#=Kb67kH2;(K79 zevZE}hpO=)K>C$_um1u=fG{S{M&p$|?4FDfYu8b+(Kk3RO@tv`l$eanxqtNAS6f6D zk5!iCXij8{ZVH#z1$@@zU^(bIae>rt!`%yF&1Oz35_&t^s*I2eIr9nTSIC@6hSCxltSx9n(*J z2_Lk*0jtXD@c!lwm!ARZ7D<+R#(1M6U861uBh=|`N>WVj`dC3JT3QM^_WU7zSAE#} zE!st8^g|v)#m{;!LHxi|AQcSEUzt4h2AStR(PYubJ9f#)3%D$o7ew5aI1%4CX23z+ z|80M*^tE3p4+zkP@TmZLXl*4_M2>;uNKgOwsuY6 zKp2hVF0uxlzzgjtq-M&0I1V{mRtw6~P^9&BGv3mOi@tFIoF2bjsz9fySRK+wZ5|t4 z^&cRF{jvXaHHpWJei_D);8>m8f_8CM+hLXDByt~@Mqvo8y9=aNsp+>qWrw6fwZC^^ z!{_+%(i|H$ruJJOxvcaW{WrBA$zggjCowT9)2WW&<_Gc)I;P?N7uo4{9BQFs4zlu} zyfSN`jykqR8}Uc_N?yS@w8vJntI*fKmVwl`1lj}Qh$~gG*FnqREoiQvvj;MS%R2?` zIHkkZdj!(cxy&I?V67}R;zs#T>~3Z=hR3)urr+SCI>$l%!z*(z^3ABi{xeiXZn|rp z=(8L*>X!|`@I%I&#Zu4sXe<%Y$Y$+?R!&S)(+=d{2a(oaQ7StLn|an0j9r&DmnKKI zT4!DRz{A$SK<`=YK9ZGu2a=zVh?*xmwL6P-N}q8aRxW{==AB6A^7fWz#@uHa96gO$ zS@ZtSPuPKGS_qEGM4<5Id?O{9sm=zWA?`vFvLFZEOLX*t!?t|zlO%}ad;AOB@RV5y zt1Sbz#dHo%{kAqRDpuZZgXp?q6z(pfNQdV(7f5dOtPnK6xCpk}K;8U1b&|4rdYH3Q zAkboANwCkHKA1Q8B>($Rk#+J1ELFu3j+t3%KFn!2HuJPO*tGsxk~@#g9t(H(o`q`= zJaC@hcWA+`G5OpbcP4!Pxe05Yf+KGK^H?Gf1(3oh%U2?;`QHeFzR6ir;gvi%n}4Y5 zcv}=&mWkZiS4e~?VHCh}?kL@A522Ar9|IQtj_cjz%+d!_B?d7Z-k*`g&<*kZ7qdlG zt0hvp3>3GUCt7K~*Ao@8HKK?|Z~?Ze?oSyX8xZyz%3ot&N5_CUV4^FK?w{AZwpz5;}}eIIHJP_W3Dl{#o^9$-rZXuCATyACjx z`8`Bu09Whg-ADUJi9EYilYzcI(j4W0g_M<(v;A@qfdjtBU^E4_Y}Eb*+I$xB4=dQ+ z;aEYeO1l$$S@dutHuLoTLhRUk3jZ=}pVL$6A@vY!s@E4|3#E>TpMD;6-AU>dH<<7& zX!|XSZR^D4@HzX4*4T!Z~44}LZ7Yfbv5u-5+%aOMypFoz41B=%J#eN(M}~i?%vluA9uhc8+Y;Hd+OVMGi+Eq_k8~ z^5#}PQmG*5Oo?NCBdnUk;Nea}?DTN#h{?%)oF5}Wo{fa85>-MQtl%F~s;a5|`+axE zJZzObbF+9QdZ-YSq2+#^B1sj3M^kqqHRSctiUjBr-I5HD1k|FiAS|UX;*hV0=mq(! z1Ckd@9q<3!)o;y2?`8m{!Ei&UC_|D9LRZfW z7Tdl|pWhc~0H4;(>p@lvJhI%KBxH(Da5|ZFr zHHLC`{`JnKpx}-ew?jx=1|*xDh86XuX@6gRt~>^4p#&r>f6}6^&6Cwl(dmJ(I4Qw^ zB|JwLRsD=1M7c1axQ12lvCy%;B7TBB#Z?X)bRcude0HY z>?U|stv}oc_NTAFRP-W*sUcRn7Z*xoK&VxQ)vAy9CBA=ZiwHI=UgmpqjKF&(3Rc8r zMBaZdKmPT#AsLWmRj1p-5*!DG3Qsp&Gf$H!kmKEW@d-Ddo`4RIu;>Ev9KOavv|Jag zn^)$hK+uXK+7k%t@T4~DsEW~md~l`VGAP2YGhEZU&Zu~6i3-B|#vdq4&72WgnaDO| zx+jGk1PN#0r6t1wGP_4}C9}gR1jk-8B$=ahebmCb-N3-06DkK8pe+V61#D_Owezn5 zd)X-jc(U6=Cr^vV0!EfQjenV?&U{P!E_8MC|TwTaJvLR&_Lzu>>29?{6 z-lP!dmDFyGf}Hp(^hj5sY%?y}#R_EntU-p&k_3)S7}UAX~%$r*D9D7 zR5?lTE@f-95ALUH++BPl(I3nUxS$Br+qSmTP_p>EIBjG^zaa<@$uvdv?)ocNPc2v~ zIdGqkvL=P=0h%QN|E!36^9~9=9O03|CVl?`X@ow06VL3TdSl_O;NwCeX-L(`kcHG96ljIuS z37V@0(8kR}gOq4}-=elvF9q2g`5t}QB znubWh z4&CDiw?hBy0pxB64n7AOak!;%EHrjgfw3EPM}Jt^koGFD=lMpC%xj z`+z5tGRq0C{`IiK1Hrjbj87pM5_(Q8Yy6oJ#pP|> z1vq}(Zs;QyRtZ~noom_`cTotTCQ2H&PcPO?#~Kw`Pk*AIHmiY-RTOHz+rFxrLIQ!m zO`kn-w%30w$u-%9@ci3*Kt>0c(e5`I^6juzE3hbdYP#S}FRC02Z$1TK3b7+B|0;hQjkdOjD<8iDJARGcmn&zBfyQvZK*oz;|WYA<9GS(+V7fs>f} zI$MvD+M0C=UNG?2An;8PmZ>67Iq?M-a~m9Xn5I#SG^$lgyTAS0t%1QfwtMG5fJ^n7yC|c?p+1c4Xt_Xmr-YAWc>GS{9+SV3nY+3&m zbd1%%=ZB8=tRV?(?*JbC7~`^m5_|jVt^Jr|xhI-| zwN!O1)kCmPpY+4ACp{;3eN?gG?4MjBxc}9<010}Y|GT~zIiBeu)q2ppG%6;hGFm`m zlvNU(H12+ob@en|`8Y_dzrnh;YuJM<0xOUZzj986JL)3R0Ygy9qusazN#7x+LEfc< z8FJR^ZuhLf_Oybd%*UNz4kefLmw?q6v0iDrddqf2-=DGX>sDarS|URNo?L=ky&932 zv#di37_x7L32g?~?G}`gD?)N{D zzm~4t78-jF_QQ)YXCIa_Scf0y)WGYo&4(yxztjPrFw_rf0BKU|HB>BsAC^E&ejTiZ zr&;MfUh^?~?1b-9<~@_Ccck}W&@oy99O*m;Spqh7qX5k|V<0=_I{Zqvb9qL?x z7%{LO1+`^r2fI^BAgR!Hdm!@gKGV%}uR#LAWf- z9ykS|lc%+QLnR1|<#5>^B!y)=D@Ie>2Q2HKv9Wpj4J21G9v-mM{o{841g@SKbdJ-= z)6Rv^62JO%7BU=Gf_>xEf!n{!kaEqA))SIHn#*C(!jpbLhNUNPp2Nree;0^BK2Q?$ z99D#gq0v^S?a*us{=2|EJOqGQ_37edXMV=LLr7Q{WSm)hIw3)Gy>FpO+`c{^=WBW|0UOCjeH1U#7`T$yAo1nDlM5auvJ zO`rz%^b0gzr0e(TeN1J3X6Z!U;&B84N6Z{ZbLl$T0{ZTXSZ%%56S~#Vdzj^4&MeA5 zzHwb$MxELqkOeIukrz|*V+udVv;IMl=M>qmh1Pug^9a+Tjug6LT0erK1-9!Ypb=J} zpP1)jm?j~ia{0B=a8YvP8PheZ70|&HHOuD z@CZ*rQDSb(bZdGk^eIRlx|sAZ|MB%q>M$_X3qxb$Zi{3yhgAprS-zjB=T*KjztwQVwdcoZhLvP}NSrabh^P%m*vm+a6k;z>bR&y@s82mLFOxZJTdC2w zhnXg{>6Z1g%WYZ@m_N!HKWApnI=>#BC0#SlUBAilSMPU^sUB;ezXEh|)}rZ9)Ox89 z|AMGTu_lj1`wBPaLlCX$B<;pi{v~jeswGX zRbs7xTC)BNcW+;}n`js68HeWsfneciQTXt~h*Zo43fDoBCU$s}A?DKTOnC4ME{|wl zWtmUrgrwxzKjDP*pd;fD0(1&3-t=cBDgdf!z zrxgj9`1ttDE@pQ>AdP*FBSQd^kBUXBmI~bXu#YrX&9|;kIUK2K0;rJZh-~?Pc7EU3 z-z-#(z4|O$)?-Ocy;S-^cC+2LL-J;XSE_0-dMx-AtNI;o{8)3NA-VZp=0X9@;Wpcv zZg$Ka=5Q_X1l0FsEBUy(aoZ2-yZR>7&i0t+PZ0VSQhfH?!bqPdC3~K`tG7_B=$R%!Wiibn1b3V7aEhH?-S&MX+!xs{ zhg@4-kg}40U8m=>!V)U1P(c=i@5y5!#qvmiV%I;9>8_=p)=bguK%rMQW#fHyWA}?V zH~2Jy95hFzLJ>()P?Je> zlzngjt7*yknOAm6+dvoiAs_$a1V$Ar_xCGpnY2x-F?iPUx8QFnc*Y;|=Y9G(xj;kys3)_6#>O`p%ne!1=IPey_TMxvr&WS?1Yz*Y4PHux zMKD?aynx2O?l96?qTS)}^yG+JL$cGp)6NSy;N5m+BWXMG+TYPTYhX%b&+EF_@nyVbG=&++)_20Ww`)7hG>gFeXR@-*D3 z)k59P@{@S&F39%_Yx5jVh^QovATf@9KuKO_oDr1_-C%ym5?!d#q0{WkdGQR_FOk_G z^o}oMS?uwWYxSYae?)!pWlP~KqTZ@@muvXD3B+rB+B)F*aKa2~FSU=sQ7H@Y`{#@& zLOCmz9bH_HK<)mdYd$;fC_(0=n63q_2ev*U;Ua7mydSk zeJ)gZXnU&W=I818pe;3}ss5p)fdC3-uwDJQ&b2qap~AR6=^$!lCo&xL<#U^D=ZI@^HS%qYD$G&Q6u0WkjQV9; z$m}C@5QNcnz*oKP`eddQBaP@?s?>w)rC(%av~Sl-a4)Z;4yeb1GbpF?G?8McqnBvU zmkGGc`jVwwtacJ3_N|KWFv@qakC!a_Lu7O>7L4jP3LonmUzTw=SRJ4|1u^b<=OmhI zSe=W&V>FoeC#Y`TF(c)*`_iB3E#f?9$$#0QVW_ybAFFn(fL>L!{1)z)G3gV#27pu^ zO1yqg_P_T2^(q=8kxYWSkkPy53K7hC&%49a9aY*4Mi`C2i^p5%QH=K5U+M5PcMZHg zR$TQ5HK&JbfF(I3iZhQTq2=j`oP#4R)K-8cR!TCFkrUgvA9q`yYcj!SrlEO1jhoN4Y~*#GAHQMu5b1AT*xv*nQK|{9 zdMB;8ZWR4PxrNq(z#w#_!N)UvsJ056i=*>ZYO^nLHF_Tn6`6=aY(sU>v6z28@#B|c zEsBzx>kP%<^}d`4B)nfhFwy6Gqr6!h!-%K~Yb-j4OZG{=vxCt`0Q-CRw6V0Y<#k<} zC-LoguY|y7bh2&IGy^q<_#)ewI<9E95m?-t6?u)Mz5Xjzl&0a}qE79p6qG&RLUOJT z?T+K07B}?aSeV>WzC7s6E0^1R?{rMv{D>|GhJcNY?4K$luXLXW`bOgoUCH(OMtQYM z80{9ANB85M;2&19mIW({)>!1}NqgYsPru--l*`mpl#~uX;&kH)ce!dQ-)jC(>X%Ue ze{`V1@js`Cl!%`}|9rusxkL&%>Rx|)Nvw5WBII`O}szRCBhRgvOpJP9xQjmA^x8i%>D>}++0rlSof ze7U?eiiE7V?EbmQ#lSb{5yoN8brUq2+Mx$H++KZ{cN0Uw6kBr{gH7*{Bzkl1q;VL8 z(g_^Sdr6+H^Ygsnu1v|xbw70jT_v3@>q9yAz@2^7!_B2CljcYs*Yoq?audy#%(fTk zeeZeNVopapMEKP)sQAVdilsC<&%F0fsdak)2lexe5y><0bKFAN2Un3V%T@`d#+fT} z6Kv^P4D{WB^3}7XD7sHp%Z``2lNB_%ObR)!Cv+z$>`2N-qJ>$JNZ{cdZN~;gNO1Us zXaRwq>9TBmWf+^14HJuzaot;!rRK1*gw7Cm(F^R4kv>U>zi%L6Do%8V=47TbuGW`p zgsp%MPsC!2C40kTA8dZUzUU+eDutdD;%|?EMIzp?!beFhO30FcPT``+ju&SJD2}z^vh}9Nnh-?sXcu>n1^c`oo=k;ZH10e~d_S#5JMmvU8YULiKe>>Dj zQrXN#+RLZZ+g&@zTDR#K&xsNr#42)`XRXG*@st+eq!cZnats}!Be46vq8WE^k63uS zreXWRGIoJD&+&n~+;M5U^k`Pp@*%suM#)JnZB2bDQ@w!A$)3;x8MDhv+7aP-Z&>BX z4B^U>n#?hYVgVH6K0~%vzbIK8jE<9@HX(+O@0O{;RJ1;_p1d@-Q^vN*!H^}mN{#8O zUJ^Il<|Q0Dd9AtPK){lzuXYf+MA|tmGP`hJr1G4x3D4Y3^q7Xr+Umaf^qtpl4%1%M zC5NlyE{Z6in{rL}D1u!@D+QYR0mi)htQ_xlh{hzdKl06|LpUcVhsZJ#{P>b-%s?UW z?^L)Zqt0YwcPh>L_p*j{A5qVV#(N=u10C1jA?wC&YiCry6BT z+u3-~0t(o7DZ36C*Mru?jZ)%gRvq?gdPCQNA?VxD|4fB3jgP1r^JIsk0@IN2 znZ3ip{mbAiHHL>-QD+^~rqfZcRfJQwH%QXV^woJSNYbzr>hc%OSL zdgwqpH6}S)r!Z*EOK{y>!DN%QI>H?{z@vSc+tBvP_(i6-`papp_}hOb+HXa*$B0zU zT$ih*5EgB1oDtcA*`qJ>dIX4cqoy(RhD*YsG}7`%)k7qutW+jr!cX!{%&sR`<{X;r z2`5wGmbsX@w6QcZR~_&1i4<)vy}n#=JG>(8c@S+ih=*uX{ZG1pLx2VMtC69-%_pg)=ul?HF+k4^iI=LWkJM zRnnNpNz$PCI>NQ8w2=*9!?~ItuJah2e4NsKgX4uijiA=nn+ulWOBr>n(9kb4X6w^C zCQT)gh>=aEqA`#>5?QDYZx*|(E#Jt*<{7-=>LfMpZ^}*Cj$piT9L`lh~PoMr= z-C4Iv6oy`$M?(p>o%2Z^w{SmPhyBGJ$Y?f;>O<5D2^-IO4PmD0+I{c$R{*DaA;Y1U zxCNLXW6_5QDYcH76pg!8eq!&;Z!BGMm`lWid z$_nOa_Dt0PP^OgW1tJ_oah>ZxBJ4+}-&Gev^If40-sVA&`}cT&%2N&8Ap$;Y&UyBT zHX9@8D2fcZ)_;BZg=DM&gMV65L=74Per8lGMVde3oqW9~dF7hm5F9U#jTj(eCO|G8|f|@o+ z()YDic2r!MbG!eo1L2gX=lXKjj@qpPExfWXF*Qv&1-W!R;6#kno&SCG{pC=kjXy3$ ze&DyR;vcom9V-;HJbvrLT*bOXx~~psw(_WTl&_EG6#g{u%m!u(IK)Rmv^Nl}M(_*J z{QT*6s0@qB;+om>JduH`{sK*p1^vFV1iqKrM5e`+`>nbL?qw~8z9xrmt(kzyhKTb7 z5>U_loZa08C5%Z7qnNCq;Cnv}O5^sKWy#k<@ypXQ z7yEtRy)$l_a&jfC(K zh)%{|;JO_h`=K0d#(@>xs8d980qEsN%RX8g`Zb{N(E!U%sELj2)+^9VkhMHu(y5q@ z<5HBH;Y{!($RdWmrxU(Fe6tL2QB_!ph5V;m<*48xN8;B0=>opoX@ES)OjVRi_x39Z$Yvj#K zPVX%cl5eVa;Em3U20H`lwSA%uV_<#qPnt~xdfMhDI9%igz5G;>({iN zMBLZ|BQ|$qgGsOKOX9f0JiEI)9?xdtnxhdYHnzy*DGRp@fLD(Z=Hi(9aAw>u*f*b| zInV-MK!8<59lN|4e=07x+qH&aTxOAa=Kx9ErJpz6@r2iu-bme@5;mCPSrQk`+XCau z#9{mQ-{7j@{}bmWpyo_IW*SPteZ1gA7%_R0NdlKPBy z_ceDnof#}u)6(P}h!kgieSu~VG|T9{#?1%ZS~3j#wfs;5kW+tmH-eweL&<`oGHCe3 z8Y;>BT)A#}=2+fkPry4c;mCoV9WO6#IY(-(Ow&h_-AFF zlR7=_`dueWGY0Wl4`?)nu1t19utx!kk$#C+@k*vGZvw{`L=ikgz_VdjQh54-#J_G$ zTjOCAg9HvRzAAeU!aJWOst!KVZ=R=~8W={|S>-gb98LiVc{XMvIRq6x=RqPlcxMu) ziHUp|wWSS+YJLce_#B&n`Z3HYdKxt{g*>G`AnKpG{inT%&>VQH63!@H8yqMUiqlw6 z5r_{3&gV49Gk+gda}XI0ra%*TLJy#kEKg@zk0Q&YKlkb?W>FEmgOUX~k83cGI(3}NN zuijgAvg7G1TWV80+7gB{Es)RJ?U+DBy8pECgl>qp`c|mAcS-+l*V|T%-+Hy z_6s>Ki%xU3NBMeN6ZSSYegE1%$o?DDeV(59(SY?LZ4G_Aevnr9as5%bc%2@m7GTVk ztSQWGqmN*WV%kaPF?zBm4TC7qe?Z!C8nlhx{4N4Qx6qznI&RA9GE;DiN;0OM|EPC4 zej$h=`ZXc)gZgUpSx?G~M>qe5yQzbe>ho-McZ8PqCp$)a1cxI#jC=->4&Yl<)mpdn=*!#ifL^vfGd$8q9Us2_w%eAtXWvN`S z)P0T25lZBqz0SiWv$TS;;DPFkW>i0k(RBdN)S&3N-gEk2OaWz6U5NexlB&}w378Z! zybxtxg3tk!xmJ8y>>Q3pmYgXmf0#L5Hj;IUMl&+rDKnA7#WKY)Gu8;T%0`DVl6~7M z=^hb8Q%)644kZ<^)2K8@yK%uV<5EpVqXXKR;-Vqb5JdC*{xg2E(upLfJvu=8QkW`f z;E9%P_y)>^+WQG^1d0!!p(y5-tYKu6GHXq{6!$l>-C+Jxag3DWS zRs3TQ#Ptd4ahluYZ5q#%$tu}hg>-Y5E};S!;;qP62MkNkI$+WyRX+Pp#~^Tj*W0Kn zr67md-se18x1ae$cq-m>6`-bGE!A(8IqY6YU)!y}KN{Z!5Yo zZ~;&_qJgL-en3?3>~fy&Hp{ti@6r63>6S?-`aW&_vrB%poU9?JX|(dclX|zZ-5mGL zENlLJZoGopc{{hQ2YLp7?zo&NS~zLU$$qzkUJFZEj*9<;cc9L@kn&ooEtdb~MeK~| z-lBXtJ+qBmi=T5XRjfdEf3O0uO8shF1q+U{#*-(HX7keLt>^#eD?sAHV1Eo2y{we` zDM&|YU@%Ba$)n=XwRRo{Q z4f1{p)qfAg{%{_piXCt+joW6~JnO=E!(jx`#eLA+aer}xZ&9l!0>;N(Nj6|3DrOFb zB_sq%@$##A_r4eAg85;cP9~vK*(#P%KhZ{ywKJ*k=v6K01`}B}?!yJDh@LBXUgS!U z+g^$|f$?yG*OfncdKXyfMOc_EA&?%c&g`z0eA+0Y%|gf}!htVzy{=fflj(<+|t<(!sYg3!D1nA|#vwuE}1Y+3(1TLzWN61F*vQd2fQmY~dH z*0a=XXv$Nc!ZM(RVe&YwrytQwHIwMnDA6dn9MZgxR&D82AL4fznrj&S7iHQd{hyl4 zj{`v@mA?L%bK+cooU~%Hp8fkP3&zU#i9A-xrT(!yNj$vk6d%%!VpDIW;7b(_nveO!IoeB@1=pD1?ivOoCM}e4A{)`iv-di1*8Zwj#oRyF{L z#;}SSbTdxVFH#QO5Hx3u-aa^dA%!(KFeZ2;h(}nZCdSGeYMMSGRk}UqPPEQz*BT8N zUduKPqL62Rz%z z;uCZ8KD54gLhOzAW?DtmE|-NAD1D@(+rvqUlr$ZST8GUmLiH!l>`-RLW||v9Z^%FR zgNPEVP}YBb79%A~QC;#k47CO02oz@t6ofa&F!C&={3<3<^CBjM;QtVzzdu`wU2qUX z`Hpc`0g^t2eeQWdn!deu#6wbk@5Ee0L`4xjyn#zjcTIh4rEDDJF=!@c4$ z_v$uLWLHvSw$QP*+1Vj2h^pWNgKk&ObS?jJxX<;>s=M@;=a(9pbrwpgbs#M)O+49} z0+-W>({HyslH`OugTJ$mh^49uG5+2ND2-z{YTx+km)}k)+HMErJX5bJsB`U0o5J6z z29ycSQmedh*xL_Gne4GfG2Y5_2G^z4BT*T(^M}~OH{2XVr6n~Z@a3~#z`!*8ZP$Jz$?2lStll_9W+80tu&O7|P2oZlYAYhC4*3o?glmr@|N`VZy0|JIH z$TsjVoe1viyLayx=PNO1gQmfLI>aV#Tv{y`vZ}})K$?!4u(5%JRhYOjS-fp!pyGu1WbusN|8%d{qKZLFjcO^GTNdNrkSn4+yo~ z9cD`RepOukbUMm_)zp_;#WPb}JM-ls+>fjsV^_xnQ;`$IglJ&%z(^aTN7fx{6HCj$Uh-%h1Wj?G&7LN*D}A+18U8Ch&5LO zsl=)3Km-E%!&&Ab=u@R%ozt5v1fk%lMeAemoMntFM@8=&NJ5yU7gHaKToe&~Ruaq@ z4#`HT;-DP4$l!TUOw8>7>UOv&&I6PbYh!`0J0wjh{?KUWI_^|RBb9=&n0><`>#zpV z3ygwES4$cWsh(ytu6+MZH|)~t%aT*;Q*U!SqduH+sd5+CyZr_<@h%_IKi9qjeBhOo zf!?uRC5YVlG#ZcTAA~fk!;NjoFHo%52!SO?#u1WI86bna2VGK(bP3aAx+m4MTW60l zB>m8}uco~zRD=IE^x@f~R`YzHzb}IAZyxW!ABh3AZ3no9D$RAO?w4H7pe+ZPF8??M zjy@~u=}Wi61=C(rt+f0Um)eBFZH!f$S8Xb;m_GS-Wg|+Y92@{h;!NCa;o`e6udb+z zz$5LZ3QC)U2M?YErJuWg8D5ChZp*L$J?H(%-{ivM9&@%fQ>&o|rl)yKo>$ZwTRV$fnnljt!@KZAL(uj1w> zx7|n{Nf2v0`-=l}(9>lw6`s^7Bt-|L)QC)y-(5tAzab<$&plqAR9fT2=FaE|&`t>>xnAB2qyL>ycyYey zYJ)q7Ayz;awE43!kb^u7T1I64tCb5)0?$rADCh%yhV-;sX0vVrj>K>qL5%!FYa9i? zs=U7H^MV{Iq0RW`9Er@D${SQn14%}nZ)~~7-2no)4Q=^YwMQ~IdEL5Bwtyrr7vzan zzWh=@Ap+^+SkruQ-B%=~j^k0{8%Y1j?$6uXXxh7&e0`)`|3=f_+kW8oRJu!fk*{qv zF$obKBBrn{I55^~X(EMuy^su{_-@l6WR~J1fQoACZR?A>^N|#TnVZqN31WX?k$a%s;dtKrvYX)_nRZ7eJ)#KK7_Sno5h%Cg zW5CK4H`mZrjxYHx)pTEEhrzgKu4Qm7aUoEE-|X`+_dLEpc#LKcrKhpN=v$27g#7c* z*$WO^<|6@oy%a`n%?l34<<3=vjp+w{i;zf6!ZgfJ(O!ah(07APrJGRL9LIh6e!~OwRtST zAb^ZVV><7snl~ua@-_$}OZ_ursTQkYQV`;F9vxo?c-Xt{qZKFjVh04>^ECclw{D;} zS7Sb?rGdkw(E~m_ILD(KO8+r1D)WH6_)>kt-}SL=-q)ZOR@>D%A82LREq5I=ax7)V zF?8;b?~$4BwBKW{dx}8`&m$!N>$0;$R982MmZXrOa4_0gxMzs-2HNMCjmCXs>irR6 zb@5J{E2#M+rJ+aoqwg-I(?D9Nh#%64Hp(s=$lCdC_G#i)WTCYU@5FIay1Gnb-$E-N2LzYq4A2d(7rqPD7 zneDZ0{>7QQ%}_`eqJ52gNNe#_PFkKb2vGHt*@Y1i4(EZp6%_`qUiF@_J=hgWoFhL0euiXx-w#h~ixRrLHbBZU9V(Vi%g54_y6&V^}^e z11zOHx2MK9Q{Er4CbPPnE(I>wm(RpN78^GYV$p}-I-37Gy$z>w-`Fjx>flTof}ShQ zL7`r!(6mD}XKiLWA$xVLGFVDfQa(b6nbJ%pjvS2|(N0MtpeNtk9dI2sz=U{~mO}FF zXx^}?CoYw5CX?k7BZj!7rWeoJoxu$;218ayXpUjQ61s+oeo?n6B-fP6QmA|NVW2;! zX^jpwI~tk)$C8lWD@OI%tdI9AaqVYakrp7~KAw>zcfcKdOr~h*$K^sOgMEx{Z6d)* zS`x8~JZQn4>`g4akyjJfg&eBjOGa_j^tGl(n{6oA`wx~fKtO757b?Wq6vGl+RPp=A zr>?v){yZ-ShZqWi+*#^iclzO&sR%^#&M46KZB~Hr3b%UQ;l7A7$&z|!Z1xELy1oH5 zr4kpPlm7{9v?b@xN2nYe2N^|FO8)@2;T9N;WZK9_H+bId;PU#9i^JUJCz?Abi5RO! zcChxmXw`I!r2?6CuM|ioD|vCQ;f_1X`})U^)Gvi&%NGKZ$;zO_sA(?>s&MzYILc zwKkl*4~vj?D6POF)Vwgd^`fngy8_|ZjOZ5{N%B3f)Yl8T;xu_4nS4QhVXyqNP2 zpY}0m2g1nF*@R3>S4{L%5}9K}8U#H3-3RzKkE#9SibLxgu~6vBQm0A|+lii`nl@Oy zmIH1m|3GIP9i=fM!*X>S{>4e0_NrL;YE5G^rK%k?k4WXd@2f6rD6TH1L=F2}CvI{b z6PU9&$=SkJ2{XK|^tS8bEYsdzSBDU5YNMCph2yWeOBtnB^NgA8($lhR0WoJenN1uo6?EW zCcbLCP*`9Q4k8LdclB)<>3_&dqvKe(*&o^2^+!G$`*=M{`>y^_TA8bgS@b~~Fkq`RmR>w%}* z=TnYu9VFs)l-uYSSnMrYlxD~d#cWoZxpx)?OeJ-CnHC0@P~96?cowzGa?b$! zUe~h#C$fjyv1K;wcn6NSTfX<%)%!BZ9>W`77}O7ZN%0Q*M#Q3AhaSCF+ds z*C}PhJ>iMA65*oe>Aw-b6&&pA+A&3(Zex^(Q=u93SXdd4E3Q?M|kC%k~(Vn>Z5_smwWZO1LvD^4$zUUhm*G z)^OnI{-E^J9-hwqXM$}3zxg`4wJJZI9e3%|$~S)j6yqK10#~+jde0#05xy^h8_!(z z9S+f9dn7wmL26$@A0+z;ef=`{q@*E0ryr5MekNsP)m*NPi1N zY2V%-|22^LfQ5}XKs(T235mdi?}*OYuGE=#>GS5uWm8@vucrZI?A4;lWR{>jSYVAW z)TDVYyXyO)^s5FY73}%!{p~4m&Kj16mN2o29AA>C^x>i{D>!_hK&vAgn7QQq zl(scvz3GyCBrNV^`H$Fq*B^~v)w z2JGH&BMObZ(uOYQ>ZQf@XFbziLc(rF(>aQQ7?3~*2UPj*gzLd+d@1J$%`aRnnZ}%p zE5ozOQ+O1BD`NO6#7o7kl%g3-PEu%dRuFiJGEXnHm+PVG_lc){u&6-uez;|txazp~ zCt*+ck)%dZ-sgn3ggcLth0DW|w0uQ}1ryrB=q5Zjg+#v>6*E6;4WlsIkPIL%gh#gc z_8))YgpB8S-ZQ)DP#ioNDW-by{KlL_ME<$E-X|_NJGmH-m_6L|=n3UZK6)mXE;(m8 zCE-|+lLBuZFC-0VD*#xX*Bv4fUyzDVqa_7s@vI55e6=cfiKuKjSK9bJ*vlRAuLGge ziEfc{xY8d@X8+NUNmEk2bAd2uAdZ?O2Qm3n7e^kU+i&;VLDkp5}M2^b!|n)zj|;GK3V9e-T3o1r9Y)arVFw@Eo=>Y;+L z>6ibHx9^PSx((m{+LBc?gc1!xN-{IDDk4$|(J=a1k)-UEC=n$qgsig4iZUBgvPDKl zDGE_pQF@N6`~QFOynjBASNGsIuJ3i7*Lfc2aUMt08eFd1nwI?hEU?0LcZ%Vg+-Cxk z!UaKlH+}7_hH^=6ZY?U!kc2C5qV?```n)bdjCgSk*s!Hryk(W54XIyFX_ z8=HPDy^(EtxI*O&?9Y`AR=x1+5)iGm@9)~QV{QWrhn9uG#m`8oWa|x$DJ_?6AsP?) z@J0a#wI{j$jzvy*>B{E*LG1_;v%KDeKC>2>RIJ;KM1M49;Bpf*-EZ@q zmnQ=`<2Mc7uk;T2JNJZ})jY2d)}v!i*H;NeGx_u}!v>)s2!>^M15ck5Yj zI_wQ}4(26DU+9n+KZ;&Hk9~wCPzKv^&i%S4KQk|L=dYEfF@0v+4)Pht!D zL9F;2D7$wgEkNbfNG3ZiRK|PWb$qFwX88JN5O)*_eMZ|%xb0CZ8O85c$R6FWQ7b%A ze*IENd0&F$F(+RuWTjPiPOcO8?-l{D^OyHY1Kg<_#wPWmMXCQ;)By8j_2 z2i-qh*}P#-xPV9BoWxhmLb-h@19|3roYb7vRkmc`X%u3oIUI@{x(>D(YKIHlr`@vp>(?mVmz($Fc6AkGWxJhu#v_Q zY9h$|QSBQPo4pSPKHJPEfJu?Jeb4e?q(RDjyUskv3U=jO*cFV2KH12|ht&Bd20ZqG z%ew)EK6E??DCUgOC~2r1LMX<_!f-YmH{5H7y2fpst-{Iv*Q6N=+PE+sQMfR(kNM@L zB|JlQ&gy&@RL0ywg;Lv(PLeUyUth3wb$w80IT^LxFp`S3@w@(?=e2}_{%2cWrm+0 zgVaMT6-_hfYr=^@K#Sq=7xZ4Bz}k6ZbTpB(!)3TJ_dhOz<`5Cojs$nZwn2$^>Kqdt z_wlq~PdiM(x&W0TSZRaH0(%EoO?AL(vP{H?{i~ucYrsI=gUBD>-T)4inftiUkD=x! z#9{3lDB&OMeX8JlwEe|$-Sh9nh?AWSOY~js%>f0_k5bcQK4)hNS*WiCmo71eRbq@x z#{5xOYG{ZyDl>i6=ihe^ziR9%vb{-IQEhV(i!c)L&hItWeiT}_?6(?mP-wjOLco-u zebs7ofj(B!&tJSS;o6e=N4Ow!yVi>pzil{pW3zo<3SKBZb{gtXrlRLDCgQPHi_QM+ z{f(rR3zKm*US@QA`-Lns^QNctc5Z3vXhVHq}NR<(Xntshgbs85=WNc z&uRv)I>Pi|p^LQk@83>TnE{A-c$t-k0X}(+v@WN9o0_@-V_-&F+J@U=-)-HYPIA8L zLZ85XyQZZMIUeob@W9#~ zkyR&u-$`2Sm+5um)MTB=^$`|E>3=Tk3Q#ead8$QGzWs2zzV3vRmbfN)1bm5%QZFb# z#RohB-{s zN6FUU9IH2uTr#oh0Thc5zX%Wgw8~?*@%xr^o&>j1m=}SLOZud%NOTI z*9<@iq;C72OMfEP1k*lY%5ezv+tv`tz5$Fx#^CAh17NCLspmB*q!{`ko%v9Z_BJM` zDJT;?N$`~;iO~a$X*7P;_>Ov@lk1>W!s>O$lKwjcD>M}%i~VQ0Ep+FWLtY|vvIx?v z%4(Ix@3oJXU)W+{mUK&@0QMZn);LN-RUE%>*=P&opqWfR_`B_ zZEYc*&{c8U=j7NzgmvkR4ooTu2D-m#^IaH!G+mwYoxd9#Rz)A1S{Z?bmkBGajAGY+ zOoeZchY&B*vSoACJ}+F|ezx-o6lvvh?~mDi_E0sQ9^;wGQs-@N{i>Pld{;jRTYU~w zy9b&+UJ$I+scXMT)VW8Mp&L8DYBqE%jL?fZ1A!L5#^(BjjW#>-efh67HqJtYuXrwA zw~UW_^h+ZD9)Y;t8Xvcv=T+H-M&6Wk1*Axm1C@I7_=Ge4igu<&D+Cm6}Whgii(Gd0~vMuw#==cYfk~8n`({Y~Wo~o(z0-?+?TEz0b z$~k_c>4t39s7o zy$`>x8RmJ!{Rg@j44;$!%=_A6WWe|{_Pv^Z|>8^Jv)B)<*4pi$|&3UoelxA}&Zmmo8( z(+#`Nvx?CNbieV|CW6nTS)sUmBjBSrvQ&16)F2tmJg}MZnKkB+zNqGI$rxe zgmAR-A;ja>UN^V+a>Bk2YEUcd$gX#B(3SIi;5WBe(Q=WgS zWh%F|o*o$Fy!f%ax?tDDIyS?sJ?jr+Q=LN|tWkac+f;u$mvk9;XQX ztLqpfj_G0>KOVEUIq@K@n>)OKO`zsP4=ZD->B~+78V}$5*y!*vj{V=~@a=Q?`dIst zCpTr}eH0R-XPZk5m(3-^?hTG9OGOHvpQTo?h<#rWWZ9~$7q-WSjb59zAlY(BMw7_E z$^C)blP~uX1q+sS4->U-ABA0$0mFIbhmxXeud?7d>z&@0PH>-T z6X>m}Icaq<*=*^|(q+~M{VX9XVM?8bJYa`4GP&duJ@xccUa@hZ?Cxyq)CeyuN=YP< z{aRnUw(dsb2%XDZ%M#c}+ycscKc7-gB40kVF41<&oUpc9SfnRHeshpmJ1z7ooiilp za_Zl6oEexEW&ZFjZ&Y`6)?I@UjGD>l(p5cbn7wju2gXj{Mn5{r5|dKDo?bD$WW|dG zL)r>H-q;W0XIPl6e1!Z?U1MqPVrnyUR$_HX=46p>Y%nr67~(bRJ?ppR{n)jD5P4dt z*u=k3s3d&)`ZhcI#0q}?+h65m-OqsU9i5dWS`Q(v(gpQ7h1yqq;T*~zi`hAOU!8Te z;;SFa7Rh7@x2OWQ*|d1InCae6>iM>5Q75-t<4e6ivMS7B`CX%>Y)evPiB3xKi6&4p z$%Rf*dWFM}V>Zuzdi5CRPE#{HBlLvMqZV&2lcrc7|E-&OleU=;KYY2it&_=)KRz>; z+i=r)!tCsHrw6qZBREH5p;a_H1^? zPUs7Dzg5gO9sB0({&=gQ_F%;&zr?#!dZZ578oT)5L=CRpEAlf_`AHA!O)0R>&EuAdzAHy_HaU_6Ao3q7L|5yx7agT zA4p!%F%>-O{0nYoQFaQSe|0_bdp+Wve%d_sn%B`2-^8RZ84SEOJdO=0%*H8y!ar}l zHVcc{aW8xcUk>pPSJcF#2yS!sLzH$7{{!t6a2E5%Up+qgxO?~ z7Po&nM7!!2-7H!enk<>oo3froQLF)4DP|%ce?v!>0kaV-y8+yzblsAn8tD9?^6e0&+b3}!?Za44KNfW2qaV!dtCNcrt_7C#LDbzaLf?omx%G`|xYDPJ%#mpd z_iL08)s@^fotEt{-X?ga-H+LFSciq4)iwFtnq@&N%m21WE{Wr3J#*`6*NJAN5z@#GIRl4wWBDz@Z0dMcs2(|fJ3r<6H%cM_YQZhg7EChZ zld~y(TWhNm4+5WlfH9Y_qM|9oDlAVF3Nmd}jvJt^T=y-YyO82UMO?sEwdGFj%nF z7G6$S41{P!HOM;kNf4?8e2?~wvZXwG4PvzSV?n4dv7O4Q3)kO5Y+k?%u)B2%kK*-j zTd~h?bQtCR#?7yY9wVbG#AeQ(e+QTUe9ERXNzSX7u+T_@!y4qxXdb_Z_5QhvyhxE-lEy+OKLNI}7b zXd<~2BL2#O0p1m0l-TA-`_t)!g@Ux)WX00h zwcVf^DUYaW@-~9OkvqMU@(l|=I0NBR+nZg3dgN&JopJXc{ZP3B)ZBdVfhfj}GQ3eJg$T*^5Xq zO7?(u!hAXM*JsG3;|&fu?lE9kXTj<$8ya)Njkn{!AM?E(!f6M)V)aq#O)*w^oAkY8avxxr3Y!`8OuV0o1RYY=j~o@780n zPi}?${tCDlGgO}sY3;)7($LL?1rVa9@)Zi7nTtN}g=#aA&r5naEK0wLSnXoe#T=s1 zBDkzp9mjsh>k11mDtA^aGj~pgcpnm?i!4|wXm9l*3(7Xl)F9lje z3~~hzuRnlE?YFo5n+P0)1Z&Ze0U}df!@1D7rSCaAp3)^*gO-+-G17P*B4Ccm|ENhe zorWnF@UoN_T314TJ0jaRWvNpMeAWZ8O0ny^euO~($e2O!i+{KTNoa{hT8H)O+k~a} zxiK-@=<9bA;#~Y4*Hnl)>%8&ZTpq>y#5aqLS9DdLf-b##tCGmATjTT|QcIg40H z?J`j;lFK*X4<653STlYbb@B-hmpfFr|v=eeFDi+Ymy)!5= zIh^FFkLlK|VtE74XAh9eBrg6S?m6P7cXD8+$y)-WzKIcl3? zSQPO7!O1`jUz#AdzdIY;Wa4_T=5H*sr4#=B;9YHwSE6LWoqg7(-ql_S3l2obzp$+A zsH$ywhFtW|*>%fm;(9cB6^Un}@1NkJzF|13L(tjQZW`!PhkAgNU2wwGRzN;19kTK?3Pc;M>1rt(@rqKt5fFfvmbq}|H* z*pFL|Nzs*uxPO$0%P5AP{JQCLFobKD8IC~eQ&bZJP5VO^9=wGFXOR7N!y*-#$1KTN zBS4pFH$TB^EahL+x`hc*UnhEOg5&=gfVfPJ7%E@)^969$WpXV<^!Y<(f}1W2;@z(* zW>S#0c-`#_)EkKYu_!xSEJUB1LrZyS*h-ks*qlO`I7l|?2;V7W|$EuUgOT64VwtRDz={r zb4t5xAU0~4MY08Q>A}@QAzi%9nt)izY>p4L<0`p8ic(1%gaOHWnMKBOIO`ynW=A z3vIU`7nmF^!TMOIeXfOoUUC9*97EL8jMtvxT6<0Y?#hj%!H zfwTLiIVG^f9|@MUrpaHC)QBJvGh`G52emgwv`jtWj7A6K{h8Q!BhVetwX#Zs4tGch zJr`Eg!t|1v=;1hW}HILV#Br<_*N9 z)0D;=)P=1u^e_4q=s;kcFmy?8QcDXwV=)kBKEX;gRp#Gc;p16BNHP9fXn^CtEh|gw^U2XsTMg2Dz1HBsv$YPlI*nM`z%$jWpv06-cVL_NHs0_v)DvD+;jIDH}Iz^FgWs0I{$V!qFU+Z1HZ z{1T>Y|0d8e!-q6W!?gpYUA^}s$#(}{C@RXRiAVXwhdF<^eN2rbZM);R4j2bH+DVj z@Fef?qC|Gp`S*vrigQN|S9u;kFX@`LSL$H;Y_omVk_dyFzwUU>&VE)EyF~4?>3cJK zt})?NxtM$Tk{#$V>soZJ!C{fQ#R{l?yuEJHl@4rPK`1>G|D-{GV*AbbfWvIbWZ( zzQ51@8VKad;Vi;rd*7!uMMPT?rJrJx^osF@6u!0HpPqo^U-qp@yrBR|lM6WduaOBm z#;yBheU|p|kav!h|FNN{(nF8)i*O~7e3>*m zUi(dZGEsgXhT^GUeI?RI1`$}I=LZ7z#fhftZI(j$QdYx@2~*!;*KSgn!OkZ=bfd#K z^YIAZ(p+UG`nc$Hc@us{d5VhBDWr%IW*3xd-*>#>5M&s=y^NJoJL`-I9epDAy@iR&+Xd zV}pr)syCa9$^@~nNv?Yle~o@ILn*oYX6+JZ?jbA{;Z<0pYu(}So^N*^&+xmybktm+ zy@xZ6$AH6Tgf|MXiiw&=X4Ij)V_orn^R4@@Ly5Mf@)#VcX!WjM*|NOjn9n(e%<{;Z z)CRSktA9Xbt`1$a#L)|1N59teBQkl{OvfYhVLCpwKgh;oq-*J))K2|D6eeevIV?%0 zy*@O>p1}Oa_4HwewTg{gl;6^p+@n4FK#Q=F^rDdhS&$wZqSGK8N zY&mfX*fsOc@`(NYwxh7T+dzDerWdH*r%PxfGQydwSd_BJXISEb>-cB%->*@;@10U5 zn5cmRd2G(|M!H)&CXE8wO;c~gK&ZAST}Z~+keh^R5EJjIU1y@d)v@0`StC%O`=<6w z(cztCtQ6Id{8p{h=lIByjr|8tQq=Dk=jk{ptvxU2khZrR@6D7^zjj@DPa*2 z_obB3^Dh^6BP~zEBun(hrIebGP&M5pQOEGx@$nulFSEcKFyZ1Ctk1c74IWRTC+YmS zQ~kdY0~7FF3auZ|Q`~!5ovHPE3uS(cN`4gIwX65_;V2t78rN+cM-$8U7?}T>OD9y9 z4r6;bXXU8g^jXLKj-nX1&(w>Yc-*r@tQkz7H z5e;g9$L%Y24+1F`O32{Wp3|RzWKsbas*9H zqn>A##Ljbn4NKL{4Dka}5zIaKm7ySVEbGo#;t^S54w z`qs8S-TMw*1+5jH7o-t@=&n;Ne!3YSt%_x|_DGMquK3d>SDj+XpnL1XM<%NGGte#R zbD#GU^?)eR-Sz7zR##|=K0N!N z`@%h}u9q7Fbu0*)X`>;Ca*T_b)$7&WG9lZ%V{3b!Fz2&ItzeUGek)sxd`5&G# zpr=Y#@Ci^?FWH=>)z)Hu(;7sR8*y>A8^zH#|CFw{<@k%zNf##58{q`Pl#K5IS+r&n(vXOV;SJsVf z!(+`|VhdwUYfsu`7Ao1<_Iem9v^q?uj?El4Hn-+6Dw5FhWu}Bya}Q7ha$mlDkv-DU z^}P?}-MBMxj1oLUiE4K5m4VWBkLIDmuSLeoDXQj@*cR%y>0@bvj9`%YeTRqh_=xKH zuZQsHS5L50yvs9Z4KH3SWfzc-7{IHGM%K_(=VOFx3nX<5c7)c)NImiqAT+C!PZ>wM zT8J}{S&78Na_Sh}pIr^FU*Et<5i`yc=vhv2N7dn@T`>Kd8}{uo*Sf9fD!G}}A0d)g ze8?7b?~0VcPbA4PZl*`5l#XJx!MA5*Z)m6WS5_eYYXZSLQxA+~aN;dJ)!95SNwOr& zaLKaGAZ9OGY^12G92>V#^!m7(37-M4HQGHagb8|c^po0(_E)U0S%Qm zXck8n&g^iZuf@q#!XBl+5q)otS*{%|E-NJPz!tZRHl%!#*r*c`f*FD;8tT%HXL}E4 z8SKXEZA5P6AV8_rA-GiU#MV6BNzhN|?m+6qEGLclD=b>J16?GVspf25j3i)ebs1lRet~xqU zYfn2Q=Jp*aTd>0>!`Z)7Wpy>w|q-&`c1^q^8l*WY*=W}vwoaB|}iGdKR;RVlWD*2ttQqQT8lRQ~~ z1?`M7Sn^MGHN|J&qo!ol0JMF$c8PX%HVBd>=u z#j4Zonve8$=A5?nWj(%FU_p8obd+36%wCOr&A8CbsyK($=qUPI(eEWuI-%gDsoH0lqKPqt%4icm2j#cRAeCN-W~-os z+zOH6iO1()q&vw0yMFpa%`Nd+?F3GR8~zX(1pq zw=o1_-=Fav!ls?B}Vi=k^>?%Ko-))S{${e+xPRBpO4#ad6|$i*8n}W z-?EhAUG?WTiO{#+Vh>&O;YU8h?Kw%QC(V313TdvLYu_%9hGpMTjf0eEUXxH_)QwxW zKAC6m@k49=-=o@yeNPETmn~bn_Dqj@+f!^$JC4QHwze)6>gu)V+J+?Mo=xc^&+#Rk ze~B8>asMcCNdK?W5rJ3XExhes8=DM0Q^FR+(C|LQX|ie8SLIT?YdMnP1OQR5u^H&! zOWgeT0gtVfmZt{((x|(r{-qt>ZJU^T2eubDbH7hni?5lY{GJjpFi!q#s$8idx>*>U z7OLT(s5}arHzF|lzUxGvIRw$1DilbXKM=^yNd@gLd8E)Ee_`pC-ajXQbFVYF+W@S_y|@2+A2>2au?BhQ8@ zaH%vRxS#*&ac6A;O(Aq`7NzDRv+XOR9K;VC@16j~@r5=6uJqTuSrAl)nL&P4q%Dz-ap3tvy*g-5G60>}f}O1}T{jhi-^il{lN-0u<~JtFK`U0kMN zx2@^vso}NZ0_m7~l!jiXl0i$4saX}IdI=?d!{*IB zj#P>xN+{_wz4G-lE+fNCWXY~FlNH#HREgZW_2}HD%)41$TJfUB&!;nD2 z25E@kQ;f$aZ>A`%>&sVArRoTdtyR9h{C`R@@s2AX0T6i1INPP$}c^%KyAE>4>%cESQqKl`z^%kDcJHA6x%Ntq>P68ch}SkNn4=)iai3X(tth+2WkP_ zRPY#iOpUBZ%V2i)K0<*sLV?<{J1uY7Ifp44&d~C8>!eV8mlQssdYwSWUD+#-;`)7u z0}-j)2cL&O6?PPLiPt5aE}8X9SC4&uMMv#R#ZO}0*_Pl$kRD8SC(FQ@H94+}zK<}+ z55sD8X9kK=6~Yt0Iv-eaNX)h+HHf%az~;y9uE_L$!Ys~pAfXO{y?y~j6Og!DcS#Ek zz%foW9VK)d$>5U_72A_4vfQ|fsTUiNn{oyK&K3dUUSw@rc_Sg=jVDza!YqweTB4%~ zLNy8B^tCukLwB#M6zucGGc8_wR{u_xxVuBL2v+@t1jx(;a3+aZWPt}qwIGfMG0!4+ z(r5)8GH8!aw~VbYhKD)r>vcfxkI}AkxPE)1L`TK6dHexL0T;-+BiZ@N3PmO-!C2U^ zb?eriQWI)1y)6QSP)S^kg*_xkLI>+d2|iGxu2jX)A2Lh6wdf_YB2Lc09)(N^;z`Jv zI+ei|R84x2ZV%yKf+J&t$eNnX9JKZv@_ zyd-q($EWFh0`V*7iNgp(lug-hHU$tbuZY>%Z9yh1>O4 zAOZ?OeJ7{aeK@h~E3J6R2~clBT`MS|%?$$p-U6owkAnKmbYSPU?1nqI**2iLQG7*$ zx*GjWj#d_X_3G6d0M_;$J-Yg~AZ0KH_lLn_^^m1k`1SM7-#1SNYuPy)vYJiGVL))_ zLR`{5GA3XR8s*BG*Vo&=l%pu_iXNS!*HhI4W>oJ%R~-Z&yLzY}NC=|e^rJ*VS^2$+ zCB>`U&$$&QJwz2W>J>p@Oy;>$D-{fk{&v$CW@oNQ4H{CFPAS5F4EKjP#c_MPp z+J|RD@nvt~nV1kzOWe2&!;{u%kVemsXJHqW3|wx_NHOjH2VA4}P05Yv(EF5=-a5a9 zDvc%faIT_)X7^lOZt9!0G%Xv}Wm8)uyZ}1&&7~=AtzHK_C~83axcBs}X~(wE61!$0 zEhM7jZm|8?y717yaVH(8@{Ty;vf#q~6HQGhY;#SHk`VP-u3Pw~`CC*K7#`-0(~eDyt5l{jVu2kd5*3y!``+?TsNtVbB5KxXf0yyny} zj!Vj>CJa8y?lGf7yqV9RUxcyA^{Qu6I;23C${dW)8dCMof+G2HyuFQ7eK+|4Z z=FCOamQ59kl3})*0P}9!$6xyz``i~k9WDgWr8IO^Gxo;`qoN}s2R5E#$QT^s`iLEq z*$e^YF?BB)k#d?=Bx40<>kb<9gH#)2UC5AA$6bxgj1d{$hGvp=GRes}pDi2xWYgiG zeSz_(?Y56C@qd?Ze7BqN_uj%cu8L7UD{UVfzP)jNQMJQ*zO2??Ks~N4#JF&$3{P8} z7gnWre9QH=O>Z|IG%}Lhp~1kjMzgtatHOo$3uEt2?!JuH!tmFCJRTO*6sMaycidLo zuEihp*%d=H|62LIWo-v5r{C!NbggDG$q#7VzbyCOIwiN9W5BsTIK^cisJ|SuxHWU; z+pXurcW$yhEOt@eWZ7h4GTZy}VC4}>+aE7Cr(2b|_?Q?|zcPnLP3)Cp+wK{3?_b7x z*wpR*0-e6eDvI(KZ4T#PNF1dXND+!y4B1)wa8XL?_4o6m<8EJcZl!gF`o3B@)I3nz zeR^@j@Ij+-H>*=dw)2^%SzRbPP1Uc(-?Nx4Z!w=hjcCV{I-=lbu=-w(?=a&IoJ*d) zFE5`Nz&V`sb=I)u)(GTV(_SZDnlkl$ewVk3Uv)BF7&>UWxSq@DxEgHQ9u~xR?atw^ zdHw2Z!gfpTq=s5t^^-!?{`4$zF3bwyTg{`zO9zGO=opjWqozY7f+q)R4k9r%%i!5i zcF}-O(lY@GH~^{(SWU+{RA!W=Ecb)$jJ!ZS720Fbc7$TwD#&M+ z`uy)-9eI?t;LkqyI7hqhi%Rr(Cs*le$>0QtTFg2X;{X!xaVI|XAXt4c8aJ|=Gl1W3 z;g_ty`x3|7dS)&6#Jh8rv9=dv1BfuK3d3gACAI$szDp$Mq!%cqMcl1%T34Eun|6IO zR5u?1Ww~9Jr>vNe5eDw-P2}SBsG5FPc=)~QdaejU9)x8TZJ`g%vSdE3uWlDm*Z( zq<-X1e!j+LPoX(375nzAld7XNnc+9zJ}gkQkR6U%I&jeT!5E<>qm1quN6N2@@**9> ziw^rKDuM&&(qg!A-QXUb&_#ni|UMSuFiTy5(xh8Q*YHP3!on3zn^7{H-)}>1=HRu6*EE`bs4-i;k zwqak~mRp5Pasv7h8WWu_Bg^P6&D7Aa+K%0%6do%9j5aeyZM8vSd1QV_)F|T`s7|#? z8LRO@q{hUO)pmzJAO4#bG~;sk)eUzQ?LYy?zJ-{byyRk27D6$aC}Y>Y7rkxA1|jc6 z6hJ`K>MyIyu4!-HR7_BoOP3gJ`zw{r&>i4io!M?6w5F)k!1>ui?2U~}&QNt3z<`ce zBzr3gz_UD>2(hEWcdAgN&V%*9PnTW8QEd5=b5Vt&syD7jL1vHxk*bp{h2)+^vbzt5 zXxu^BS|Vi>T|HtuzE4;8Cvz=8KOn6Xit4KrP}rkDF!oDJOGBMZS(g3~f5cZ-14-K} zSFQ}cXWdSAJBlZ9vx8s)l@<7qzXHV%e?__$UG5ytH0O^PWpw-OL&!*(`hxbG_|~p% ze6pOLP#^}M26coS`H~ie!*BErUvukH)Z>1~N8;vDZoEdBkh|;)2#40Ft5(jfhCm#0 z=%0;@4^avcOX){VMx@b?9>k)BBvPbPGJH(boE}Q3bZiuYoe)oBYmjT*c00GJ@WazBZCC?PcDkA{e6qI)@!8=Z#o^^Q#{ zMI{?VpcrLcjYdx0k@!@W=S1F~5dEX2j-S!nH>gkIIwGi!hsWa!am-4wQS?|2@{QE0 z72%4k*VU}{lK3_@KXmMobu!W^4XiwEl(9b&O}XypQGg75^MO~hssmD_=(552l%_Qc z-GjpI`;PAgB*8>>)LkP@f15cK+DEn%CP$7$TRYH1496?*P6qE#-&6GQ%yO>x|DmX$ z>6Gj*R4nQ}N$76GAU8CUUQx+1~qm#5}qGMqaXHk3n6$V5r@_i9{iy+`M`N8B3b~JPS=Ek!gBO_ zI5^RBp2Y(iy1^LjIk}rN^Q;37%6J7k)C`&}1n%9tH}jL2yW<*`_W6CWtID^k%2+bXwxkxf zNP%QFNRu*--BIWOP@+f32i(1T2UAg}2GAFYP_^{*^jA3ER)9HOehlsN%|F!)_vWau zu|LRQU6>TG^RMy)nDj{ip0`XK4#JhLUU&?%oPZa?jNcWpNC9syZxs4q@**C z7U&!+D_NTL z>rXp>Bn(zm@CzpSaJ#YmBw-~yq_;yZVc;@zP*I${tE+2dl@peQNs9~bv=@NGH4t`Q z_%znlMc_GfYjQg#UFmfl!<}{5@ixcWU9n{8S>@5}qttKMtV27dxnMcY7O~%q1ivi~ zV_4H;G)Uz{Ntzu|k8`@deB3?eDkMeT6~+M)WQN)pTStlkB-*^VND1m9Qr81zz(c zH(jh-E)6L5ixN(J)E7a(nJKn7n|(Cy6ri#NE}wLqv|nO}=Nx|t3WfQQ-oCcBHnLs% z-jJ%ASeck3#xja@GRZ?wek-ca!uiigP09GaXqH{s^dcI&|O1yoA`Fm zFoamQkfs8Osi~={W7`SN6UI7KjF~sSopy(kswNQXqH$Fp|6Ik3<&Upvsr2?F#;n#( zX=!QiE=0~eZJvk*pONvy zN9c6l#MrgPR2jTi3Oqi-<+CroV*1-!~CKkD!Sy*>UA=PL#ycNV}p&ouq4fGK!(^CL9byi@PqO^0HGOT*62qaR!5=H`T# zo)OJ#(ndrZdvc)aC&3y0P7KGhb1L&pqp4SqIeQ{`S!hjg4x&r@t^B9H3FKZYn|#NM zJ05Jf=(-9_8G1v4LT-P3;d8He0n^st!}WtMK(th^(m zh8t-OuWPem!Myp+xVSj`v@zre601{;Ot#9|KYKK!wL>$nV#ag{7uPTc9YSl(PCkKk zUX%Wb-fOm>x&&x3?lE}fIr}y1^?!U!`(kGjnvbf@<_X}Sx5ixo{5pH6ujh*Sk>Id-!qMaegQ_uvzwtb|2A zaK?Vv*bIFFFDD9=p<_fxmk&ymkLY>;^PbKhWmG%_ocWyc@h5!~y=6ZGtT#JVOh=ak zi&>8J$y(}BpNF_oH02lCIw2f96B7@n+pPyQuFZeWw7m)cO_QwyWGPvf5_c8EPA$_# z93<|nV_>FDy)V~MBR%g<1y9SNv>6SJ;e}^UN>cNRA9QXQa zMJ6pwuX8CcMBlm4=l*id9ePSV#wVC2VlNroo^&vNdzSywhLL8!U}j0QVQ!9k8Wt)Q zoerMqZ+3}N@t!}nZ8ce;G4g2yA6>h4ZE41g#n`pC6F##_;^$gki2?_GXx*J4vuRUp zfuc-ZN=yPmjue=26^N(RwY8snYuY!RQLyDHBj&Lxzb7^7C0;qjzlPixjc(O(@LS)= z4bW4p`t#7Pu$Nz`|hAIdBM_n|3Z4K#oX5*u_=KGLSInKt?%$S|e!JFY2j zKDfXCd;Xds17!Svlw539Vm&Wy>134m!5-?qbOWVn_mgv(bX<PA0nJ#RnyiOCua@cjvM1kgsm_l5z zZU_AMeA~&!GiRn^4#I52%&5;AH+g|}8e}db;7k2hM?ahaLR zRr*SF^l#F=D4f+supPp*QgISLXYO%$6BLzCK3z)e!#yi!9)nh1cb<6+m&A;$RD-y+ z{OOy`kY_RN2%ceRQQL#!p^j_|qz0?Ywp6DSb(Esj{YyoA!J4*D$D(LVQ|cGwda5_( z-elg3&gU3bA3s;`01d=*xPeNCf0gIMm-ug&NK1@j6m=9eMV?Ksiu6b*ilkRUetXhz zjS1D&KL78pkFg?QB|ifm_O$fNb29?b=0s^RYSceboNe6)+VgsDNkArSHacC%P(_QjjRP{8e2+2<;X@HWSV<5$C)kVhrscbl@(4LW{ z&!}2(t_q*6|6U!xp7y`r@*5>3#sB{LzkhI6CeH~!|JQ5!(-Six*hdBvtdB6^$>^(t za*SD_O&B3i{&Q{zB8L*=5HZsIesLEe3#}s39i%jG8iX!%K_cLGMuK5H>i01tU0zHv z+yV*YwFZ~+21EjfmqLKjm`Dk`K+O?tMRH3ge#PKs;q);FG~I4QMQtF62}TV&=rJfd z7196uvz!a=;yEyVh6YhGxj=;JXtjxIa8shvOE>U>{iZhbp&d6wl$oKaU`R~X+%YX+ z4F*+fs@77IV!IVRt)Fy$c`^-f5{3Xtc#%|Z+`02@e|Dg{^WtxJ;)eXGWzV|lt!)yV zVRnDNU-u;mC*ePJb*NG9Fn1pNd6XfN$T3wJlcdw6%q9H|I3x4|U}6?odn}&?u_KD~ zMYUHwK8c-*#K2T#HdQH}_tOP}u zipkKt@^|gx5f}sZ{J==plgh96v)`p{#j#-h&NY{S$%NCL5O9A{u1#&#)TN&w3fcJM zbkq4-?MxUMqnXJ!y)|_yRCELb6Aw&{kt0Bat(@!1?;9OY%j4vp-MG8-EVZiJa z*JbQ2F=e=DffV(a?hYBauS=1!O*Dgb(TYqz_2Mdlm6Tq^#Kw+H9Dcq+xSFmSlQ5b{ zUpFBY`T?cmy-+K8C#^>Pb6bFh$%8^YoQQvwz_IsMuIQn49GfB|0ZHdblzsmEc^x#2 za(=1wl3l(*QnI0S8srokmV*d`C$cHJAHF{agV+6=#GId`6L>bFRbEpIaXozC}l zuQ!yjzl#kf>tnvqrWYsuqCfkJIJOt-Sw**l^@aqFYjFs(U|?lOU3U|GcQQKe__F>& zS(`*D(1`-qF9%igHlj84;M5DYC*Q!}DESl_8M$(#`RqeyIYNz90x&?lt_WfB@2@6b zEA*R5Nu)yV0Nl1^C9nGbE?(e6)D0^Jt8Hx$JL;q?bb-xBFJ#LKoVT*Jeg#xKXERH0 z*jfR#5Jfm1O!pGyZ6>*?)0BTY3TY7hf2MM@974a9OjZyQ9Cd6E*GWm_1I3+Mw@0&a z&DTMw^$cA&lpm}6vqQu+af&id&z^tTeZ|cO^N)Rr;~+mh*l2Epn+XY&44GadBK2jQ z$;8EvFmh4t&}1|$L5gU7a8iQ^)mppK++V{ka0o9R4VFPj?zoGwd(kZk1B%qTtfwue zo~@UVxHdi_42q@;zWma@JHT4kFZ-3YU7Uht$R1P=CM?cNu=Uc!5V)G z#{)mk$~uSs{lovG@UEtYagQi6_l<}WJt6H&z-~mH*FdGM`zyVD%z=GP9w&E-ni?v( zn;1qo0>~unez#}1jJ3G6S%B`T6LQBvXA2>OA z%b_eGGRrbDLaTBtBL0g{pFJbfKrrkaoY2WNDXb0HOon-plCGE^WuUlo{>A4`T6vPb*39#rdj z3kjXO(2#lG(P{DURM2#`GqNR<+8X5D=am0qf@8*OIF*mF(f-q{CrEfXR+@JvMw?SK zNJ$Sr4F`Ve2~IoXAft`BTIg6P|~INHl)}FL4LbJ*a@Y=`=cdB`SLHGT#w7-i_{0 zkZ)P|jeElr_}F*_7;jA-p4gx>zsr4^$b7&7FR$`U#H}PmIZqV%Lu6oP*tlx`RwlX^ zNodu(lX9i!SJoyXT9!R!D0!Pt0rBXPwF9R;6Ja=sG_dWiF&X3riKST{cCyij6{ zu|WSvDc#8KGJ#ULRjKG7*X=xsx;cq-%Q0EyVD9=vF@F|?5$~MS*ePFNvW(*7zUE!d zp*^xYZEZP5yn3S@`zznmvv~-`M@F8kCq58L$=J$GGrvzKxz`#&%d-i4ZMdgAwLW(Ws`MlV7EUXr*ztD{@1BNCQi%gvId0XSP0F(u5zmwn&+1E(aKUL;{*5N> zo|;FCTZ4akf(!N`4)!aOZN3_~ICcS^ncW5BgO$4s=AB6MLonpDwe=^DFyPBa)zrWI zA#5GV3mt!5=mpT7nBE^R^D6rP6nCXTO=HBK)|iYDii_u z9S?cU{*xz}VJ-;)#PPeb5LmSGfiDcL#^b@GGY#esjHZNSiY&pxI>A^3NIgg05Yu!{ zVTR3~M+P)`5|)6Nv0xxwGf>Ap%&{>?t_wUDRp2pw&>|xs+e`or@&b?p(7CN@mT&er z9Aj~r8Nf-(6V+kQf!>6=*xEbk5@>|dcGUI(Y#fduibYL6Gbf?4$b{{GrdAvvu&Q!G zF;(TNi_qo#0)&!i=f@z#p(v1uS6;arky3|C63Go7f@Mer8H_#;QaI&`*WmCqa*8X{ z#J@S@{T#kogc7UaYknYj1M`4*(?r67g0u60Myf`LOx3ZmAe1%EO@t0EnxCT*$qHLn ztdXUl6!!Hy;(Z`WHyYN`RR$9XJOxl8)>ZuS`2|a$V;7n5EgM;B0f5gbORodADpSHO zcEy7Eq!6BD6~G^+nJw7qfi=C>4cnwV7?ov>Dbs9GD@W?GTkqDCmT%@Dt-1?%9*VM1 z`vyolGVS^$`)}RW=h@iWqTv{2&o{yWp2i)m^BCo0iGT_&O+|^|{g`H`bQ;MYyX!e) z(kD2{SX=F52C5Q9i?$8fBQY9CR=>Xd zEm*5codW>e2Nex@X`s6P2rO3=UShRWXed&f@aKdP$H31jPbok{C1AuwPtKb>qQIq6 zi`egC4S#8A>UxI`8%yA~e!=5@cW}9LBjoFObuU(J^|??gN)8qJj0;bQDzWUtIS&7_-zhpr$krZ24mho5q z>bDhFOiTQ^)h2BpJqO1dQcay5)tRh|^?WhlN;2a1f>%+OoZ{G17(KDm?2Hg2VyL){ zGZ$6NG&omZ;TUssfjxD!;XY7kxONheiRT)??PN2NTs3lumxE0}+6p_J6><^tH84;R=c@dK1+pCM`UuXT_6H zGu*U+@(Yb@iJD@HD)hs4%?<9vx<+5gSMm}y$^btj0lua?aA1?vYqzZv5w|Pn;KC?_ ze*=nR=ib;3%S_~u<(a+g!l1{_4FG}#iA0)Si@yt1j~Ojtk}(`4kL%Y(!-z|aem)>7 z&feY~nXK`|KN4Bq^>tKrcvzDTbhO?xrl9Ud4FTWv=X=A=p{^cGg8S~8{E&D1a_ohs z$f=B`SY?!eEbj>?B>^RePIZd3vN-tTtzbjUYGC+=M?FXif`V}M;^v-?`il`bZ9d1b zqLNRU=0O&Tg#Hz*%SdYUcg`Q~NDk^dcZ!oK38O$)8C@PV&nF)cP=}X5Sic zQ2W4vCR5e3_Cn;ZynE31x;Od4b4S;korLk zti~ZkFy>4bG<~A0)iAFT(A9y^TQyA6-%ki$H_RT^@rk)~mACU_gt+apESxJ;GYYl! zapRXfj9k+M?=}Ic- zHBT>_!dbYXP+?c(W@}z$faI(Rfg@Ti?&ttmwpEH1fNCLL>YBqnvGpQ{MXlWju4KNq z9zbeK^jqh3>g=1.18 required for TurboQuant. +services: + qdrant: + image: qdrant/qdrant:v1.18.2 + container_name: qfo-qdrant + ports: + - "6333:6333" # REST + - "6334:6334" # gRPC + volumes: + - ./data/qdrant_storage:/qdrant/storage + # defaults are fine for a single-node bench; add mem limits only if profiling the container itself. diff --git a/Quantization-FaceOff/pyproject.toml b/Quantization-FaceOff/pyproject.toml new file mode 100644 index 0000000..079ca0b --- /dev/null +++ b/Quantization-FaceOff/pyproject.toml @@ -0,0 +1,19 @@ +[project] +name = "quantization-faceoff" +version = "0.1.0" +requires-python = ">=3.13" +dependencies = [ + "datasets>=5.0.0", + "matplotlib>=3.11.0", + "numpy>=2.5.0", + "python-dotenv>=1.2.2", + "qdrant-client>=1.18.0", + "wandb>=0.28.0", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["qfo"] diff --git a/Quantization-FaceOff/qfo/__init__.py b/Quantization-FaceOff/qfo/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Quantization-FaceOff/qfo/bench/__init__.py b/Quantization-FaceOff/qfo/bench/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Quantization-FaceOff/qfo/bench/eval.py b/Quantization-FaceOff/qfo/bench/eval.py new file mode 100644 index 0000000..003c780 --- /dev/null +++ b/Quantization-FaceOff/qfo/bench/eval.py @@ -0,0 +1,70 @@ +"""Evaluation suite. Query each collection, compute Recall@K vs exact-NN ground truth, +log per-config metrics to W&B, dump results.json + +One pass per collection captures BOTH retrieved ids (recall) and latency (no double query). +""" +import json +import time + +import numpy as np +from qdrant_client import QdrantClient + +from qfo.config import QDRANT_URL, COLLECTIONS, K, results_path +from qfo.data.dbpedia import load_dbpedia +from qfo.data.ground_truth import GT_PATH +from qfo.telemetry import container_rss_mb, pctiles, log_run + + +def search_collect(client, name, queries, k): + """Returns (ids[N,k] int64, latencies_ms[N]). Missing slots = -1.""" + ids = np.full((len(queries), k), -1, dtype=np.int64) + lats = np.empty(len(queries), dtype=np.float64) + for i, q in enumerate(queries): + t = time.perf_counter() + res = client.query_points(collection_name=name, query=q.tolist(), limit=k) + lats[i] = (time.perf_counter() - t) * 1000.0 + got = [p.id for p in res.points] + ids[i, : len(got)] = got + return ids, lats + + +def recall_at_k(retrieved, gt, k): + """mean |retrieved_k ∩ gt_k| / k. gt holds top-GT_DEPTH; compare against gt[:, :k].""" + hits = 0 + for r, g in zip(retrieved, gt): + hits += len(set(r.tolist()) & set(g[:k].tolist())) + return hits / (len(retrieved) * k) + + +def main(n_queries=None): + _base, _payload, queries = load_dbpedia() + with open(GT_PATH) as f: + gt = np.array(json.load(f), dtype=np.int64) + if n_queries: + queries, gt = queries[:n_queries], gt[:n_queries] + + client = QdrantClient(url=QDRANT_URL, timeout=120) + results = {} + for name in COLLECTIONS: + search_collect(client, name, queries[:200], K) # warm cache, discard + ids, lats = search_collect(client, name, queries, K) # measured pass + m = { + "recall_at_k": recall_at_k(ids, gt, K), + "k": K, + "rss_mb": container_rss_mb(), + "n_queries": len(queries), + **pctiles(lats), + } + results[name] = m + log_run(name, m, group="faceoff") + print(name, m) + + with open(results_path("results.json"), "w") as f: + json.dump(results, f, indent=2) + print("eval done -> results/results.json") + + +if __name__ == "__main__": + # money-path check + assert abs(recall_at_k(np.array([[1, 2, 3]]), np.array([[1, 2, 9, 8]]), 3) - 2 / 3) < 1e-9 + main() diff --git a/Quantization-FaceOff/qfo/bench/rescore_sweep.py b/Quantization-FaceOff/qfo/bench/rescore_sweep.py new file mode 100644 index 0000000..7dd42db --- /dev/null +++ b/Quantization-FaceOff/qfo/bench/rescore_sweep.py @@ -0,0 +1,75 @@ +"""Rescoring / oversampling sweep on the PQ collection. + +PQ search on quantized codes is fast but lossy. Qdrant can oversample (pull N x more +candidates with the cheap quantized vectors) then rescore them with the full-precision +originals on disk. This sweep shows PQ recall climbing back toward baseline as we +oversample — the production lever that makes 16x compression usable. + +Read-only on the PQ collection. No drops. +""" +import json +import sys +import time + +import numpy as np +from qdrant_client import QdrantClient, models + +from qfo.config import QDRANT_URL, K, results_path +from qfo.data.dbpedia import load_dbpedia +from qfo.data.ground_truth import GT_PATH +from qfo.bench.eval import recall_at_k +from qfo.telemetry import pctiles, log_run + +COLL = sys.argv[1] if len(sys.argv) > 1 else "pq" + +# (label, rescore, oversampling) +SWEEP = [ + ("no rescore", False, 1.0), + ("rescore 1x", True, 1.0), + ("rescore 2x", True, 2.0), + ("rescore 4x", True, 4.0), + ("rescore 8x", True, 8.0), +] + + +def run_one(client, queries, k, rescore, oversampling): + params = models.SearchParams( + quantization=models.QuantizationSearchParams( + rescore=rescore, oversampling=oversampling + ) + ) + ids = np.full((len(queries), k), -1, dtype=np.int64) + lats = np.empty(len(queries)) + for i, q in enumerate(queries): + t = time.perf_counter() + res = client.query_points(COLL, query=q.tolist(), limit=k, search_params=params) + lats[i] = (time.perf_counter() - t) * 1000.0 + got = [p.id for p in res.points] + ids[i, : len(got)] = got + return ids, lats + + +def main(): + _b, _p, queries = load_dbpedia() + with open(GT_PATH) as f: + gt = np.array(json.load(f), dtype=np.int64) + client = QdrantClient(url=QDRANT_URL, timeout=120) + + rows = [] + for label, rescore, oversampling in SWEEP: + ids, lats = run_one(client, queries, K, rescore, oversampling) + m = {"label": label, "rescore": rescore, "oversampling": oversampling, + "recall_at_k": recall_at_k(ids, gt, K), **pctiles(lats)} + rows.append(m) + print(f"{label:12} recall={m['recall_at_k']:.3f} p50={m['latency_p50_ms']:.1f}ms") + log_run(f"{COLL}-{label.replace(' ', '_')}", m, group=f"rescore-{COLL}") + + out = results_path(f"rescore_sweep_{COLL}.json") + with open(out, "w") as f: + json.dump(rows, f, indent=2) + print(f"rescore sweep done -> {out}") + return rows + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/qfo/bench/throughput.py b/Quantization-FaceOff/qfo/bench/throughput.py new file mode 100644 index 0000000..0f026c2 --- /dev/null +++ b/Quantization-FaceOff/qfo/bench/throughput.py @@ -0,0 +1,66 @@ +"""Throughput (QPS) under concurrency per config — not single-query latency. +Fires N queries across CONCURRENCY worker threads, measures queries/second + mean +latency under load. Read-only on the collections. Logs to W&B group 'throughput'. +""" +import json +import threading +import time +from concurrent.futures import ThreadPoolExecutor + +import numpy as np +from qdrant_client import QdrantClient + +from qfo.config import QDRANT_URL, COLLECTIONS, K, results_path +from qfo.data.dbpedia import load_dbpedia +from qfo.telemetry import log_run + +CONCURRENCY = 16 +N = 2000 + +# one client per worker thread — a shared client's socket isn't thread-safe (WinError 10038) +_local = threading.local() + + +def _client(): + if not hasattr(_local, "c"): + _local.c = QdrantClient(url=QDRANT_URL, timeout=120) + return _local.c + + +def main(): + _b, _p, queries = load_dbpedia() + base = [v.tolist() for v in queries] + qs = [base[i % len(base)] for i in range(N)] # cycle to reach N + + results = {} + for name in COLLECTIONS: + _client().query_points(name, query=qs[0], limit=K) # warm + + def one(vec, _name=name): + t = time.perf_counter() + _client().query_points(_name, query=vec, limit=K) + return (time.perf_counter() - t) * 1000.0 + + t0 = time.perf_counter() + with ThreadPoolExecutor(max_workers=CONCURRENCY) as ex: + lats = list(ex.map(one, qs)) + elapsed = time.perf_counter() - t0 + + m = { + "qps": N / elapsed, + "concurrency": CONCURRENCY, + "n": N, + "mean_latency_ms": float(np.mean(lats)), + "p95_latency_ms": float(np.percentile(lats, 95)), + } + results[name] = m + log_run(f"{name}-qps", m, group="throughput") + print(f"{name:9} {m['qps']:.0f} qps mean {m['mean_latency_ms']:.1f}ms (conc={CONCURRENCY})") + + with open(results_path("throughput.json"), "w") as f: + json.dump(results, f, indent=2) + print("throughput -> results/throughput.json") + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/qfo/config.py b/Quantization-FaceOff/qfo/config.py new file mode 100644 index 0000000..58a2215 --- /dev/null +++ b/Quantization-FaceOff/qfo/config.py @@ -0,0 +1,53 @@ +"""Shared config for the quantization faceoff. +Dataset: dbpedia-entities-openai-1M (OpenAI ada-002, 1536-d, cosine) high-dim text +embeddings with title/text payload, so the quantization tradeoff is dramatic and the +Qdrant UI shows real content. +""" +import os + +from qdrant_client import models + +QDRANT_URL = "http://localhost:6333" + +RESULTS_DIR = "results" # benchmark output JSONs land here + + +def results_path(name): + """Path under the results dir, ensuring the dir exists.""" + os.makedirs(RESULTS_DIR, exist_ok=True) + return os.path.join(RESULTS_DIR, name) + +# dbpedia-openai facts +DIM = 1536 +DISTANCE = models.Distance.COSINE + +# 100k = ~600MB embeddings, fast + tells the full story. Fixed at 100k: 1M needs +# ~25GB disk (3 collections keep f32 originals) which doesn't fit my 15GB budget +DATASET_N = 100_000 +N_QUERY = 1_000 # held out from the tail; NOT inserted into base +K = 10 # Recall@K +GT_DEPTH = 100 # exact-NN depth to store as ground truth +BATCH_SIZE = 500 # upsert batch (kept modest; 1536-d float vectors are large) +DATA_DIR = "data/dbpedia" + +# 3 configs under test. quantization=None => baseline f32. +COLLECTIONS = { + "baseline": None, + "sq": models.ScalarQuantization( + scalar=models.ScalarQuantizationConfig( + type=models.ScalarType.INT8, + always_ram=True, + ) + ), + # PQ; TurboQuant query-side optimizations apply automatically on 1.18+ + "pq": models.ProductQuantization( + product=models.ProductQuantizationConfig( + compression=models.CompressionRatio.X16, + always_ram=True, + ) + ), + # Binary: 1 bit/dim = 32x smaller. Very lossy raw; needs rescore+oversampling + "bq": models.BinaryQuantization( + binary=models.BinaryQuantizationConfig(always_ram=True) + ), +} diff --git a/Quantization-FaceOff/qfo/demo.py b/Quantization-FaceOff/qfo/demo.py new file mode 100644 index 0000000..66fd555 --- /dev/null +++ b/Quantization-FaceOff/qfo/demo.py @@ -0,0 +1,52 @@ +"""Tangible search demo: pick an article, find the most similar ones. + +No embedding model needed (we'd need OpenAI ada-002 to embed fresh text) — instead we +search BY EXAMPLE: take a stored article's vector and find its neighbors. Uses BQ x32 + +8x rescore (the recommended config) so you see 32x-compressed search returning real, +relevant titles. + +Usage: + uv run python search_demo.py # random seed article + uv run python search_demo.py einstein # first article whose title contains 'einstein' +""" +import random +import sys + +from qdrant_client import QdrantClient, models + +from qfo.config import QDRANT_URL, K +from qfo.data.dbpedia import load_dbpedia + +RESCORE = models.SearchParams( + quantization=models.QuantizationSearchParams(rescore=True, oversampling=8.0) +) + + +def main(): + base, payload, _q = load_dbpedia() + client = QdrantClient(url=QDRANT_URL, timeout=60) + + arg = " ".join(sys.argv[1:]).strip() + if arg: + hits = [i for i, p in enumerate(payload) if arg.lower() in p["title"].lower()] + if not hits: + print(f"no article title contains {arg!r}") + return + seed = hits[0] + else: + seed = random.randrange(len(base)) + + print(f"\nQuery article [{seed}]: {payload[seed]['title']}") + print(f" {payload[seed]['text'][:160]}...\n") + + res = client.query_points("bq", query=base[seed].tolist(), limit=K + 1, search_params=RESCORE) + neighbors = [p for p in res.points if p.id != seed][:K] + assert neighbors, "no neighbors returned" + + print(f"Most similar (BQ x32 + rescore 8x), top {len(neighbors)}:") + for p in neighbors: + print(f" {p.score:.3f} {payload[p.id]['title']}") + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/qfo/pipeline/__init__.py b/Quantization-FaceOff/qfo/pipeline/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Quantization-FaceOff/qfo/pipeline/add_bq.py b/Quantization-FaceOff/qfo/pipeline/add_bq.py new file mode 100644 index 0000000..10b90d4 --- /dev/null +++ b/Quantization-FaceOff/qfo/pipeline/add_bq.py @@ -0,0 +1,31 @@ +"""Build a single collection by name without touching the others (no drops to the +existing baseline/sq/pq). Usage: uv run python add_bq.py [name] default: bq + +Logic stays under __main__ + main(): upload_collection(parallel>1) uses process spawn +on Windows, which re-imports this module — unguarded top-level code would re-run it. +""" +import sys + +from qdrant_client import QdrantClient + +from qfo.config import QDRANT_URL, BATCH_SIZE, COLLECTIONS +from qfo.data.dbpedia import load_dbpedia +from qfo.pipeline.ingest import make_collection, wait_green + + +def main(): + name = sys.argv[1] if len(sys.argv) > 1 else "bq" + base, payload, _q = load_dbpedia() + client = QdrantClient(url=QDRANT_URL, timeout=120) + print(f"[{name}] create + upload {len(base)} vectors") + make_collection(client, name, COLLECTIONS[name]) + client.upload_collection( + collection_name=name, vectors=base, payload=payload, + ids=list(range(len(base))), batch_size=BATCH_SIZE, parallel=4, + ) + wait_green(client, name) + print(f"[{name}] green, count={client.count(name).count}") + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/qfo/pipeline/ingest.py b/Quantization-FaceOff/qfo/pipeline/ingest.py new file mode 100644 index 0000000..30ba033 --- /dev/null +++ b/Quantization-FaceOff/qfo/pipeline/ingest.py @@ -0,0 +1,59 @@ +"""Create the 3 collections (baseline / sq / pq) and load the dbpedia embeddings into each. +Waits for optimizer to reach green before exiting (isolation guardrail).""" +import time + +from qdrant_client import QdrantClient, models + +from qfo.config import ( + QDRANT_URL, DIM, DISTANCE, BATCH_SIZE, COLLECTIONS, +) +from qfo.data.dbpedia import load_dbpedia + + +def make_collection(client, name, quant): + if client.collection_exists(name): + client.delete_collection(name) + client.create_collection( + collection_name=name, + vectors_config=models.VectorParams(size=DIM, distance=DISTANCE), + quantization_config=quant, # None => baseline f32 + ) + + +def wait_green(client, name, timeout=3600): + """Block until indexing/optimization finishes. Raises on timeout.""" + deadline = time.time() + timeout + while time.time() < deadline: + info = client.get_collection(name) + if info.status == models.CollectionStatus.GREEN: + return + time.sleep(5) + raise TimeoutError(f"{name} not green after {timeout}s (status={info.status})") + + +def main(): + base, payload, _queries = load_dbpedia() + ids = list(range(len(base))) + client = QdrantClient(url=QDRANT_URL, timeout=120) + + for name, quant in COLLECTIONS.items(): + print(f"[{name}] create + upload {len(base)} vectors") + make_collection(client, name, quant) + client.upload_collection( + collection_name=name, + vectors=base, + payload=payload, # title/text so the UI shows real content + ids=ids, + batch_size=BATCH_SIZE, + parallel=4, + ) + wait_green(client, name) + cnt = client.count(name).count + assert cnt == len(base), f"{name}: {cnt} != {len(base)}" + print(f"[{name}] green, count={cnt}") + + print("ingest done: 3 collections green.") + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/qfo/run_all.py b/Quantization-FaceOff/qfo/run_all.py new file mode 100644 index 0000000..cc397e1 --- /dev/null +++ b/Quantization-FaceOff/qfo/run_all.py @@ -0,0 +1,37 @@ +"""Run the whole faceoff end to end with one command: + + uv run python -m qfo.run_all + +Each step runs as `python -m qfo.` in a fresh process (clean state, mirrors the +manual commands). Stops at the first failure. + +Note: ingest + add_bq rebuild the collections from scratch (drop + re-upload). +""" +import subprocess +import sys + +# (module, args, description) +STEPS = [ + ("qfo.data.dbpedia", [], "build + cache dataset"), + ("qfo.pipeline.ingest", [], "create baseline/sq/pq + upload payload"), + ("qfo.pipeline.add_bq", [], "create bq (binary) collection"), + ("qfo.data.ground_truth", [], "exact-NN ground truth"), + ("qfo.bench.eval", [], "recall + latency -> results/ + W&B"), + ("qfo.bench.rescore_sweep", ["pq"], "PQ oversampling/rescore sweep"), + ("qfo.bench.rescore_sweep", ["bq"], "BQ sweep"), + ("qfo.bench.throughput", [], "QPS under concurrency"), + ("qfo.viz.report", [], "dashboard chart -> assets/"), + ("qfo.viz.rescore_chart", ["pq"], "PQ sweep chart"), + ("qfo.viz.rescore_chart", ["bq"], "BQ sweep chart"), +] + + +def main(): + for i, (mod, args, desc) in enumerate(STEPS, 1): + print(f"\n=== [{i}/{len(STEPS)}] {mod} {' '.join(args)} - {desc} ===", flush=True) + subprocess.run([sys.executable, "-m", mod, *args], check=True) + print("\nfaceoff complete. charts in assets/, metrics in results/ + W&B.") + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/qfo/telemetry.py b/Quantization-FaceOff/qfo/telemetry.py new file mode 100644 index 0000000..514bfd4 --- /dev/null +++ b/Quantization-FaceOff/qfo/telemetry.py @@ -0,0 +1,103 @@ +"""Telemetry primitives + W&B wiring. No custom metric store, log straight to W&B. + +- container RSS via `docker stats` (the RAM we profile; quantized vectors sit here with always_ram). +- per-query latency -> p50/p95/p99. +- cold-start vs warm-cache loops. +One W&B run per config so the project dashboard compares them (table / parallel-coords). +""" +import os +import subprocess +import time + +import numpy as np +import wandb +from dotenv import load_dotenv + +load_dotenv() # WANDB_API_KEY from .env + +CONTAINER = "qfo-qdrant" +PROJECT = "quantization-faceoff" + + +def _to_mb(s): + """'1.23GiB' / '512MiB' / '900B' -> megabytes (binary units).""" + s = s.strip() + for unit, mult in (("GiB", 1024), ("MiB", 1), ("KiB", 1 / 1024), + ("GB", 1000), ("MB", 1), ("kB", 1 / 1000), ("B", 1 / 1e6)): + if s.endswith(unit): + return float(s[: -len(unit)]) * mult + return float(s) # bare number = bytes? treat as MB-less fallback + + +def container_rss_mb(container=CONTAINER): + """Resident memory of the Qdrant container, in MB.""" + out = subprocess.run( + ["docker", "stats", "--no-stream", "--format", "{{.MemUsage}}", container], + capture_output=True, text=True, check=True, + ).stdout + return _to_mb(out.split("/")[0]) # "used / limit" + + +def search_latencies_ms(client, name, queries, k): + """One query at a time (latency, not throughput). Returns ms array.""" + lats = np.empty(len(queries), dtype=np.float64) + for i, q in enumerate(queries): + t = time.perf_counter() + client.query_points(collection_name=name, query=q.tolist(), limit=k) + lats[i] = (time.perf_counter() - t) * 1000.0 + return lats + + +def pctiles(lats): + return {f"latency_p{p}_ms": float(np.percentile(lats, p)) for p in (50, 95, 99)} + + +def profile_config(client, name, queries, k): + """Cold (first pass) + warm (second pass) latency + RAM for one collection.""" + cold = search_latencies_ms(client, name, queries, k) + warm = search_latencies_ms(client, name, queries, k) + rss = container_rss_mb() + return { + "rss_mb": rss, + **{f"cold_{m}": v for m, v in pctiles(cold).items()}, + **{f"warm_{m}": v for m, v in pctiles(warm).items()}, + "n_queries": len(queries), + } + + +def log_run(config_name, metrics, group="dbpedia", extra_config=None): + """One W&B run per quant config. reinit so we can loop configs in one process. + `group` keeps the workspace tidy: group by it in the W&B UI to separate the main + faceoff from the rescore sweeps.""" + run = wandb.init( + project=PROJECT, + name=config_name, + group=group, + config={"quant": config_name, "family": group, **(extra_config or {})}, + reinit=True, + ) + wandb.log(metrics) + wandb.summary.update(metrics) + run.finish() + + +if __name__ == "__main__": + # cheap unit check for the parser (the only non-trivial logic here) + assert abs(_to_mb("1.0GiB") - 1024) < 1e-6 + assert abs(_to_mb("512MiB") - 512) < 1e-6 + assert _to_mb("900B") < 1 + print("_to_mb OK") + + # live smoke: needs collections green + valid WANDB_API_KEY + from qdrant_client import QdrantClient + from qfo.config import QDRANT_URL, COLLECTIONS, K + from qfo.data.dbpedia import load_dbpedia + + _b, _p, queries = load_dbpedia() + queries = queries[:200] # smoke slice + client = QdrantClient(url=QDRANT_URL, timeout=120) + for name in COLLECTIONS: + m = profile_config(client, name, queries, K) + print(name, m) + log_run(name, m) + print("smoke done -> check W&B project:", PROJECT) diff --git a/Quantization-FaceOff/qfo/viz/__init__.py b/Quantization-FaceOff/qfo/viz/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Quantization-FaceOff/qfo/viz/report.py b/Quantization-FaceOff/qfo/viz/report.py new file mode 100644 index 0000000..830f42e --- /dev/null +++ b/Quantization-FaceOff/qfo/viz/report.py @@ -0,0 +1,77 @@ +"""Build the faceoff dashboard (one 2x2 PNG) from results.json + computed memory. + +Memory here is the RAM-resident quantized-vector size (exact math) — the thing +quantization actually shrinks. Measured per-config RAM is in Qdrant's dashboard memory panel. +""" +import json +import os + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +from qfo.config import DATASET_N, N_QUERY, DIM, results_path + +OUT = "assets" +LABEL = {"baseline": "f32", "sq": "SQ int8", "pq": "PQ x16", "bq": "BQ x32"} +COMPRESS = {"baseline": 1, "sq": 4, "pq": 16, "bq": 32} + + +def main(): + os.makedirs(OUT, exist_ok=True) + with open(results_path("results.json")) as f: + R = json.load(f) + + n_base = DATASET_N - N_QUERY + mem_mb = {k: n_base * DIM * 4 / 1e6 / COMPRESS[k] for k in R} # resident vector bytes + names = list(R.keys()) + labels = [LABEL.get(n, n) for n in names] + palette = ["#4C72B0", "#DD8452", "#55A868", "#8172B3"] + colors = [palette[i % len(palette)] for i in range(len(names))] + + fig, ax = plt.subplots(2, 2, figsize=(12, 9)) + fig.suptitle(f"Qdrant Quantization Face-Off — dbpedia 1536-d, {n_base:,} vectors", fontsize=14, weight="bold") + + # recall@10 + ax[0, 0].bar(labels, [R[n]["recall_at_k"] for n in names], color=colors) + ax[0, 0].set_title("Recall@10 (higher = better)") + ax[0, 0].set_ylim(0, 1.05) + for i, n in enumerate(names): + ax[0, 0].text(i, R[n]["recall_at_k"] + 0.01, f"{R[n]['recall_at_k']:.3f}", ha="center") + + # latency percentiles + x = range(len(names)) + w = 0.25 + for j, (p, c) in enumerate([("p50", "#8172B3"), ("p95", "#CCB974"), ("p99", "#C44E52")]): + ax[0, 1].bar([i + (j - 1) * w for i in x], + [R[n][f"latency_{p}_ms"] for n in names], w, label=p, color=c) + ax[0, 1].set_title("Latency (ms, lower = better)") + ax[0, 1].set_xticks(list(x)); ax[0, 1].set_xticklabels(labels); ax[0, 1].legend() + + # memory (resident quantized vectors) + ax[1, 0].bar(labels, [mem_mb[n] for n in names], color=colors) + ax[1, 0].set_title("Vectors in RAM (MB, computed — lower = better)") + ax[1, 0].set_ylim(0, max(mem_mb.values()) * 1.25) # headroom so labels clear the title + for i, n in enumerate(names): + ax[1, 0].text(i, mem_mb[n] + max(mem_mb.values()) * 0.02, + f"{mem_mb[n]:.0f} MB ({COMPRESS[n]}x)", ha="center") + + # tradeoff: recall vs p50 latency, bubble size = memory + for i, n in enumerate(names): + ax[1, 1].scatter(R[n]["latency_p50_ms"], R[n]["recall_at_k"], + s=mem_mb[n] * 2, color=colors[i], alpha=0.7, label=labels[i]) + ax[1, 1].annotate(labels[i], (R[n]["latency_p50_ms"], R[n]["recall_at_k"]), + textcoords="offset points", xytext=(8, 0)) + ax[1, 1].set_title("Tradeoff: recall vs p50 latency (bubble = RAM)") + ax[1, 1].set_xlabel("p50 latency (ms)"); ax[1, 1].set_ylabel("recall@10") + + plt.tight_layout(rect=[0, 0, 1, 0.97]) + path = os.path.join(OUT, "faceoff.png") + plt.savefig(path, dpi=120) + print("wrote", path) + for n in names: + print(f"{LABEL.get(n, n):8} recall={R[n]['recall_at_k']:.3f} p50={R[n]['latency_p50_ms']:.1f}ms ram={mem_mb[n]:.0f}MB ({COMPRESS[n]}x)") + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/qfo/viz/rescore_chart.py b/Quantization-FaceOff/qfo/viz/rescore_chart.py new file mode 100644 index 0000000..3068384 --- /dev/null +++ b/Quantization-FaceOff/qfo/viz/rescore_chart.py @@ -0,0 +1,61 @@ +"""Chart a rescore sweep: quantized recall climbing toward baseline as oversampling +rises, with p50 latency on the second axis. +Usage: python -m qfo.viz.rescore_chart [collection] default: pq +Reads results/rescore_sweep_.json + results/results.json -> assets/rescore_.png +""" +import json +import os +import sys + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +from qfo.config import results_path + +COMPRESS = {"pq": "16x", "bq": "32x", "sq": "4x"} + + +def main(): + coll = sys.argv[1] if len(sys.argv) > 1 else "pq" + + with open(results_path(f"rescore_sweep_{coll}.json")) as f: + rows = json.load(f) + with open(results_path("results.json")) as f: + base_recall = json.load(f)["baseline"]["recall_at_k"] + + os_pts = [r for r in rows if r["rescore"]] + nr = next(r for r in rows if not r["rescore"]) + xs = [r["oversampling"] for r in os_pts] + rec = [r["recall_at_k"] for r in os_pts] + lat = [r["latency_p50_ms"] for r in os_pts] + + fig, ax1 = plt.subplots(figsize=(9, 5.5)) + ax1.set_title(f"{coll.upper()} {COMPRESS.get(coll, '')}: rescoring buys back recall for a few ms", weight="bold") + + ax1.axhline(base_recall, ls="--", color="#4C72B0", label=f"baseline f32 recall ({base_recall:.3f})") + ax1.plot(xs, rec, "-o", color="#55A868", lw=2, label=f"{coll.upper()} recall (rescored)") + ax1.scatter([1], [nr["recall_at_k"]], color="#C44E52", marker="X", s=110, zorder=5, + label=f"{coll.upper()} no rescore ({nr['recall_at_k']:.3f})") + for x, r in zip(xs, rec): + ax1.annotate(f"{r:.3f}", (x, r), textcoords="offset points", xytext=(0, 8), ha="center") + ax1.set_xlabel("oversampling factor"); ax1.set_ylabel("Recall@10") + ax1.set_xticks(xs); ax1.set_ylim(min(nr["recall_at_k"], min(rec)) - 0.03, 1.01) + + ax2 = ax1.twinx() + ax2.plot(xs, lat, "--s", color="#888", alpha=0.8, label="p50 latency") + ax2.set_ylabel("p50 latency (ms)") + + l1, lab1 = ax1.get_legend_handles_labels() + l2, lab2 = ax2.get_legend_handles_labels() + ax1.legend(l1 + l2, lab1 + lab2, loc="center right", fontsize=9) + + plt.tight_layout() + os.makedirs("assets", exist_ok=True) + out = f"assets/rescore_{coll}.png" + plt.savefig(out, dpi=120) + print("wrote", out) + + +if __name__ == "__main__": + main() diff --git a/Quantization-FaceOff/uv.lock b/Quantization-FaceOff/uv.lock new file mode 100644 index 0000000..b8c13a9 --- /dev/null +++ b/Quantization-FaceOff/uv.lock @@ -0,0 +1,1714 @@ +version = 1 +revision = 3 +requires-python = ">=3.13" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.2" +source = { registry = "https://pypi.org/simple" } +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/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]] +name = "aiohttp" +version = "3.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/97/bd137012dd97e1649162b099135a80e1fd59aaa807b2430fc448d1029aff/aiohttp-3.14.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:b3a03285a7f9c7b016324574a6d92a1c895da6b978cb8f1deee3ac72bc6da178", size = 506882, upload-time = "2026-06-07T21:07:15.501Z" }, + { url = "https://files.pythonhosted.org/packages/ef/79/e5cc690e9d922a66887ceeaca53a8ffd5a7b0be3816142b7abc433742d89/aiohttp-3.14.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:2a73f487ab8ef5abbb24b7aa9b73e98eaba9e9e031804ff2416f02eca315ccaf", size = 515270, upload-time = "2026-06-07T21:07:17.53Z" }, + { url = "https://files.pythonhosted.org/packages/fe/22/a73ccbf9dbd6e26dda0b24d5fd5db7da92ee3383a79f47677ffb834c5c5b/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:915fbb7b41b115192259f8c9ae58f3ddc444d2b5579917270211858e606a4afd", size = 485841, upload-time = "2026-06-07T21:07:19.555Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b9/57ed8eaf596321c2ad747bd480fb1700dbd7177c60dfc9e4c187f629662e/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:7fb4bdf95b0561a79f259f9d28fbc109728c5ee7f27aff6391f0ca703a329abe", size = 492088, upload-time = "2026-06-07T21:07:21.581Z" }, + { url = "https://files.pythonhosted.org/packages/78/c0/5ebe5270a7c140d7c6f79dcb018640225f14d406c149e4eec04a7d82fe71/aiohttp-3.14.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1b9748363260121d2927704f5d4fc498150669ca3ae93625986ee89c8f80dcd4", size = 501564, upload-time = "2026-06-07T21:07:23.388Z" }, + { url = "https://files.pythonhosted.org/packages/75/7f/8cdaa24fc7983865e0915153b96a9ac5bcdd3548d64c5a27d17cecccad2d/aiohttp-3.14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:86a6dab78b0e43e2897a3bbe15745aa60dc5423ca437b7b0b164c069bf91b876", size = 751998, upload-time = "2026-06-07T21:07:25.046Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f4/c4227aacfacc5cb0cc2d119b65301d177912a6842cd64e120c47af76064f/aiohttp-3.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4dfd6e47d3c44c2279907607f73a4240b88c69eb8b90da7e2441a8045dfd21da", size = 510918, upload-time = "2026-06-07T21:07:27.28Z" }, + { url = "https://files.pythonhosted.org/packages/ab/01/a2d5f96cd4e74424864d30bc0a7e44d0a12dacdcfa91b5b2d1bd3dca6bf3/aiohttp-3.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:317acd9f8602858dc7d59679812c376c7f0b97bcbbf16e0d6237f54141d8a8a6", size = 508657, upload-time = "2026-06-07T21:07:29.252Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ed/3c0fb5c500fdd8e7ebc10d1889c04384fffa1a9163eac1356088ca9da1b1/aiohttp-3.14.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd869c427324e5cb15195793de951295710db28be7d818247f3097b4ab5d4b96", size = 1757907, upload-time = "2026-06-07T21:07:31.03Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ab/d4c924d9bd5be3050c226612413ce68cb54c70d2c31b661bfc8d9a5b6a70/aiohttp-3.14.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93b032b5ec3255473c143627d21a69ac74ae12f7f33974cb587c564d11b1066f", size = 1737565, upload-time = "2026-06-07T21:07:33.031Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/37326821ff779084020cdc33224d20b19f42f4183a500ff92022a739eda7/aiohttp-3.14.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f234b4deb12f3ad59127e037bc57c40c21e45b45282df7d3a55a0f409f595296", size = 1799018, upload-time = "2026-06-07T21:07:35.003Z" }, + { url = "https://files.pythonhosted.org/packages/b3/4f/6e947ba73e4ce09070761c05ed3a8ceb7c21f5e46798671d8b2aac0e4626/aiohttp-3.14.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9af6779bfb46abf124068327abcdf9ce95c9ef8287a3e8da76ccf2d0f16c28fa", size = 1894416, upload-time = "2026-06-07T21:07:36.956Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6e/dbf1d0625dc711fb2851f4f3c3055c39ed58bae92082d8c627dbe6013736/aiohttp-3.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:faccab372e66bc76d5731525e7f1143c922271725b9d38c9f97edcc66266b451", size = 1783881, upload-time = "2026-06-07T21:07:39.063Z" }, + { url = "https://files.pythonhosted.org/packages/44/c2/5e25098a67268ed369483ae7d1a58bd0a13d03aab860d2a0e4a6eb25b046/aiohttp-3.14.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f380468b09d2a81633ee863b0ec5648d364bd17bb8ecfb8c2f387f7ac1faf42c", size = 1587572, upload-time = "2026-06-07T21:07:41.058Z" }, + { url = "https://files.pythonhosted.org/packages/2a/bd/cf9cee17e140f942a3de73e658a543aa8fbf35a5fc67a9d2538d52d77f0b/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:97e704dcd26271f5bda3fa07c3ce0fb76d6d3f8659f4baa1a24442cc9ba177ca", size = 1722137, upload-time = "2026-06-07T21:07:43.014Z" }, + { url = "https://files.pythonhosted.org/packages/89/6d/5684f8c59045c96f81a18cefbc1fbbd79d25b88f1c622f2a5c5c08fcb632/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:269b76ac5394092b95bc4a098f4fc6c191c083c3bd12775d1e30e663132f6a09", size = 1755953, upload-time = "2026-06-07T21:07:45.933Z" }, + { url = "https://files.pythonhosted.org/packages/a8/40/35caf3170f8359760740a7d9aa0fff2e344bef98e1d1186f5a0f6dec17e6/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0b3e614340c889d575451696374c9d17affd54cd607ca0babed8f8c37b9397", size = 1766479, upload-time = "2026-06-07T21:07:48.047Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a1/b0c61e7a137f0d81de49a82023a6df73c3c16d6fefb0f8e4a93d21639002/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5663ee9257cfa1add7253a7da3035a02f31b6600ec48261585e1800a81533080", size = 1580077, upload-time = "2026-06-07T21:07:50.069Z" }, + { url = "https://files.pythonhosted.org/packages/0b/41/194ea4623693009fcefebef7aef63c141754f153e9cd0d39d3b9e36c175c/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:603a2c834142172ffddc054067f5ec0ca65d57a0aa98a71bc81952573208e345", size = 1791688, upload-time = "2026-06-07T21:07:52.106Z" }, + { url = "https://files.pythonhosted.org/packages/ba/45/4de841f005cfe1fd63e2a2fe011262c515e2a62aa6994b15947e7d717ac9/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb21957bb8aca671c1765e32f58164cf0c50e6bf41c0bbbd16da20732ecaf588", size = 1761094, upload-time = "2026-06-07T21:07:54.113Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ae/dbce10533d3896d544d5053939ed75b7dc31a1b0973d959b1b5ae21028d6/aiohttp-3.14.1-cp313-cp313-win32.whl", hash = "sha256:e509a55f681e6158c20f70f102f9cf61fb20fbc382272bc6d94b7343f2582780", size = 452662, upload-time = "2026-06-07T21:07:56.06Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/0bf1a19362c32f06229da5e7ddfcec91f93474d6307f7a2d3135e9c674dc/aiohttp-3.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:1ac8531b638959718e18c2207fbfe297819875da46a740b29dfa29beba64355a", size = 479748, upload-time = "2026-06-07T21:07:58.319Z" }, + { url = "https://files.pythonhosted.org/packages/22/0a/62e7232dc9484fbec112ceb32efb6a624cc7994ec6e2b019286f17c4e8f2/aiohttp-3.14.1-cp313-cp313-win_arm64.whl", hash = "sha256:250d14af67f6b6a1a4a811049b1afa69d61d617fca6bf33149b3ab1a6dbcf7b8", size = 447723, upload-time = "2026-06-07T21:08:00.154Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a1/5fafa04e1ca91ddb47608699d60649c1c6db3cf41c99e78fc4056f9513db/aiohttp-3.14.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:7c106c26852ca1c2047c6b80384f17100b4e439af276f21ef3d4e2f450ae7e15", size = 508531, upload-time = "2026-06-07T21:08:02.093Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2e/bfa02f699d87ffc86d5959270b28f1cb410add3ccaced8ed2e0b8a5238fc/aiohttp-3.14.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:20205f7f5ade7aaec9f4b500549bbc071b046453aed72f9c06dcab87896a83e8", size = 514718, upload-time = "2026-06-07T21:08:04.476Z" }, + { url = "https://files.pythonhosted.org/packages/85/a5/9594ad6289eebbc97d167c44213d557807f90e59115caad24de21ad2c3b1/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:62a759436b29e677181a9e76bab8b8f689a29cb9c535f45f7c48c9c830d3f8c3", size = 487918, upload-time = "2026-06-07T21:08:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/b4/61/16a32c36c3c49edec122a3dc811f2057df2f94d3b14aa107c8017d981618/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2964cbf553df4d7a57348da44d961d871895fc1ee4e8c322b2a95612c7b17fba", size = 494014, upload-time = "2026-06-07T21:08:08.263Z" }, + { url = "https://files.pythonhosted.org/packages/9b/89/3ebcf96ed99c05bec9c434aaac6963fd3cbab4a786ae739908a144d9ce44/aiohttp-3.14.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:237651caadc3a59badd39319c54642b5299e9cc98a3a194310e55d5bb9f5e397", size = 502398, upload-time = "2026-06-07T21:08:10.244Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3d/b74870a0c2d40c355928cd5b96c7a11fa821b8a40fc41365e64479b151fb/aiohttp-3.14.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:896e12dfdbbab9d8f7e16d2b28c6769a60126fa92095d1ebf9473d02593a2448", size = 758018, upload-time = "2026-06-07T21:08:12.447Z" }, + { url = "https://files.pythonhosted.org/packages/d3/66/f42f5c984d99e49c6cff5f26f590750f2e2f7ef1fcfb99966ab5be1b632e/aiohttp-3.14.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d03f281ed22579314ba00821ce20115a7c0ac430660b4cc05704a3f818b3e004", size = 512462, upload-time = "2026-06-07T21:08:14.624Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a7/248e1aebe0c7810b0271e021a0f2a5eb6e78a051885b3c9df49f42a5802d/aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983", size = 512824, upload-time = "2026-06-07T21:08:16.572Z" }, + { url = "https://files.pythonhosted.org/packages/26/97/2aa0e5ba0727dc3bd5aaebb7ccbc510f7dfb7fb961ec87497cd496635ab1/aiohttp-3.14.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4fe1f1087cbadb280b5e1bb054a4f00d1423c74d6626c5e48400d871d34ecefe", size = 1749898, upload-time = "2026-06-07T21:08:18.635Z" }, + { url = "https://files.pythonhosted.org/packages/00/8d/e97f6c96c891d457c8479d92a514ba194d0412f981d72c70341ee18488ed/aiohttp-3.14.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:367a9314fdc79dab0fac96e216cb41dd73c85bdca85306ce8999118ba7e0f333", size = 1710114, upload-time = "2026-06-07T21:08:20.892Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e6/aa8d7e863048c8fceb5cd6ce74017311cec3ead07847387e12265fb4444e/aiohttp-3.14.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a24f677ebe83749039e7bdf862ff0bbb16818ae4193d4ef96505e269375bcce0", size = 1802541, upload-time = "2026-06-07T21:08:23.044Z" }, + { url = "https://files.pythonhosted.org/packages/83/a8/72193137de57fda4ebfae4563182d082c8856e3b6e9871d0b46f028fb369/aiohttp-3.14.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c83afe0ba876be7e943d2e0ba645809ad441575d2840c895c21ee5de93b9377a", size = 1875776, upload-time = "2026-06-07T21:08:25.288Z" }, + { url = "https://files.pythonhosted.org/packages/a0/18/938441025db6769a3464596b2410af3afde0b21eb2f204c6f766f68af4bd/aiohttp-3.14.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:634e385930fb6d2d479cf3aa66515955863b77a5e3c2b5894ca259a25b308602", size = 1760329, upload-time = "2026-06-07T21:08:27.363Z" }, + { url = "https://files.pythonhosted.org/packages/60/29/bf2496b4065e76e09fe48015aaffe5ce161d8f089b06ac6982070f653076/aiohttp-3.14.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeea07c4397bbc57719c4eed8f9c284874d4f175f9b6d57f7a1546b976d455ca", size = 1587293, upload-time = "2026-06-07T21:08:29.805Z" }, + { url = "https://files.pythonhosted.org/packages/49/a2/2136674d52123b1354bd05dd5753c318db47dc0c927cc70b27bab3755456/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:335c0cc3e3545ce98dcb9cfcb836f40c3411f43fa03dab757597d80c89af8a35", size = 1714756, upload-time = "2026-06-07T21:08:32.094Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b9/e5fd2e6f915503081c0f9b1e8540947037929c70c191da2e4d54b31a21a1/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ae6be797afdef264e8a84864a85b196ca06045586481b3df8a967322fd2fa844", size = 1721052, upload-time = "2026-06-07T21:08:34.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/5a/2833e324a2263e104e31e2e91bc5bbee81bc499afd32203faee048a883f0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:8560b4d712474335d08907db7973f71912d3a9a8f1dee992ec06b5d2fe359496", size = 1766888, upload-time = "2026-06-07T21:08:36.95Z" }, + { url = "https://files.pythonhosted.org/packages/57/fa/dea6511870913162f3b2e8c42a7614eb203a4540b8c2da43e0bfb0548f3c/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7edd08e0a5deb1e8564a2fcd8f4561014a3f05252334671bbf55ddd47db0e5", size = 1581679, upload-time = "2026-06-07T21:08:39.292Z" }, + { url = "https://files.pythonhosted.org/packages/14/bd/3cf0d55e71784b33534e9710a67d382d900598b4787fbce6cc7317f8c42a/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:b6ff7fcee63287ae57b5df3e4f5957ce032122802509246dec1a5bcc55904c95", size = 1782021, upload-time = "2026-06-07T21:08:41.407Z" }, + { url = "https://files.pythonhosted.org/packages/c1/af/14bb5843eccbe234f4dfb78ab73e549d99727247e62ae5d62cbd22eaf5b0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ffbb2f4ec1ceaff7e07d43922954da26b223d188bf30658e561b98e23089444", size = 1742574, upload-time = "2026-06-07T21:08:43.795Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1e/fbeb7af9210a67ac0f9c9bec0f8f4568497924e33137a3d5b48e1cf85f3f/aiohttp-3.14.1-cp314-cp314-win32.whl", hash = "sha256:a9875b46d910cff3ea2f5962f9d266b465459fe634e22556ab9bd6fc1192eea0", size = 457773, upload-time = "2026-06-07T21:08:46.168Z" }, + { url = "https://files.pythonhosted.org/packages/f0/2b/13e8d741a9ec5db7d900c060554cf8352ab85e44e2a4469ebb9d377bda17/aiohttp-3.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:af8b4b81a960eeaf1234971ac3cd0ba5901f3cd42eae42a46b4d089a8b492719", size = 485001, upload-time = "2026-06-07T21:08:48.401Z" }, + { url = "https://files.pythonhosted.org/packages/df/30/491acfa2c4d6c3ff59c49a14fc1b50be3241e25bbb0c84c09e2da4d11395/aiohttp-3.14.1-cp314-cp314-win_arm64.whl", hash = "sha256:cf4491381b1b57425c315a56a439251b1bdac07b2275f19a8c44bc57744532ec", size = 453809, upload-time = "2026-06-07T21:08:50.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/e3/19dbe1a1f4cc6230eb9e314de7fe68053b0992f9302b27d12141a0b5db53/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:819c054312f1af92947e6a55883d1b66feefab11531a7fc45e0fb9b63880b5c2", size = 793320, upload-time = "2026-06-07T21:08:52.775Z" }, + { url = "https://files.pythonhosted.org/packages/7f/20/1b7182219ba1b108430d6e4dc53d25ae02dcfcf5a045b33af4e8c5167527/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10ee9c1753a8f706345b22496c79fbddb5be0599e0823f3738b1534058e25340", size = 529077, upload-time = "2026-06-07T21:08:55Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c8/14ce60ec31a2e5f5274bb17d383a6f7a3aabca31ac04eee05585bbadab16/aiohttp-3.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1601cc37baf5750ccacae618ec2daf020769581695550e3b654a911f859c563d", size = 532476, upload-time = "2026-06-07T21:08:57.176Z" }, + { url = "https://files.pythonhosted.org/packages/7e/02/9ac85e081e53da2e061b02fa7758fe0a12d17b8ce2d1f5e6c7cb76730328/aiohttp-3.14.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d6e0ac9da31c9c04c84e1c0182ad8d6df35965a85cae29cd71d089621b3ae94", size = 1922347, upload-time = "2026-06-07T21:08:59.563Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3e/d3ba07a0ab38b5389e10bec4362d21e10a4f667cba2d79ba30837b3a5059/aiohttp-3.14.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9e8f2d660c350b3d0e259c7a7e3d9b7fc8b41210cbcc3d4a7076ff0a5e5c2fdc", size = 1786465, upload-time = "2026-06-07T21:09:01.909Z" }, + { url = "https://files.pythonhosted.org/packages/0b/cb/e2ee978a00cfb2df829704a69528b18154eba5939f45bc1efa8f33aee4c5/aiohttp-3.14.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4691802dda97be727f79d86818acaad7eb8e9252626a1d6b519fedbb92d5e251", size = 1909423, upload-time = "2026-06-07T21:09:04.357Z" }, + { url = "https://files.pythonhosted.org/packages/73/5d/1430334858b1022b58ae50399a918f0bd6fe8fa7fa183598d657ff61e040/aiohttp-3.14.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c389c482a7e9b9dc3ee2701ac46c4125297a3818875b9c305ddb603c04828fd1", size = 2001906, upload-time = "2026-06-07T21:09:06.722Z" }, + { url = "https://files.pythonhosted.org/packages/66/4e/560c7472d3d198a23aa5c8b19a5115bf6a9b77b7d3e4bb363da320430ad2/aiohttp-3.14.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc0cacab7ba4e56f0f81c82a98c09bed2f39c940107b03a34b168bdf7597edd3", size = 1877095, upload-time = "2026-06-07T21:09:09.011Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f1/4745806578d447db4a784a8591e2dae3afdfc2bcb96f8f81271b13df6543/aiohttp-3.14.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:979ed4717f59b8bb12e3963378fa285d93d367e15bcd66c721311826d3c44a6c", size = 1676222, upload-time = "2026-06-07T21:09:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c9/48255813cca749a229ef0ab476004ec623728ad79a9c0840616f6c076325/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:38e1e7daaea81df51c952e18483f323d878499a1e2bfe564790e0f9701d6f203", size = 1842922, upload-time = "2026-06-07T21:09:14.118Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c0/bbd054e2bee909f529523a5af3891052606af5143c09f5f183ec3b234676/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:4132e72c608fe9fecb8f409113567605915b83e9bdd3ea56538d2f9cd35002f1", size = 1825035, upload-time = "2026-06-07T21:09:16.447Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ae/90395d4376deceb74e09ec26b6adf7d2015a6f8802d6d84446af860fef04/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:eefd9cc9b6d4a2db5f00a26bc3e4f9acf71926a6ec557cd56c9c6f27c290b665", size = 1849512, upload-time = "2026-06-07T21:09:18.742Z" }, + { url = "https://files.pythonhosted.org/packages/93/bd/fb25f3049957553d4ce0ba6ae480aa2f592a6985497fca590837d16c1be0/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b165790117eea512d7f3fb22f1f6dad3d55a7189571993eb015591c1401276d1", size = 1668571, upload-time = "2026-06-07T21:09:21.458Z" }, + { url = "https://files.pythonhosted.org/packages/3f/22/7f73303d64dd567ff3addca90b556690ed1233a47b8f55d242fb90af3681/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ed09c7eb1c391271c2ed0314a51903e72a3acb653d5ccfc264cdf3ef11f8269d", size = 1881159, upload-time = "2026-06-07T21:09:23.813Z" }, + { url = "https://files.pythonhosted.org/packages/44/be/0474c5a8b5640e1e4aa1923430a91f4151be82e511373fe764189b89aef5/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:99abd37084b82f5830c635fddd0b4993b9742a66eb746dacf433c8590e8f9e3c", size = 1841409, upload-time = "2026-06-07T21:09:26.207Z" }, + { url = "https://files.pythonhosted.org/packages/7b/3c/bb4a7cba26956cb3da4553cc2056cf67be5b5ff6e6d8fa4fbdff73bfb7ae/aiohttp-3.14.1-cp314-cp314t-win32.whl", hash = "sha256:47ddf841cdecc810749921d25606dee45857d12d2ad5ddb7b5bd7eab12e4b365", size = 494166, upload-time = "2026-06-07T21:09:28.505Z" }, + { url = "https://files.pythonhosted.org/packages/8a/84/ec80c2c1f66a952555a9f86df6b33af65108a6febfa0471b69013a12f807/aiohttp-3.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e78b522b7a6e27e0b25d19b247b75039ac4c94f99823e3c9e53ae1603a9f7e9", size = 530255, upload-time = "2026-06-07T21:09:30.843Z" }, + { url = "https://files.pythonhosted.org/packages/2a/71/6e22be134a4061ada85a92951b842f2657f17d926b727f3f94c56ae963d6/aiohttp-3.14.1-cp314-cp314t-win_arm64.whl", hash = "sha256:90d53f1609c29ccc2193945ef732428382a28f78d0456ae4d3daf0d48b74f0f6", size = 469640, upload-time = "2026-06-07T21:09:33.028Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/72/5562aabb8dd7181e8e860622a38bea08d17842b99ecd4c91f84ac95251b0/anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e", size = 254831, upload-time = "2026-06-24T20:56:06.017Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/7b/90df4a0a816d98d6ea26f559d87836d494a2cf1fcf063be67df50a7bcc30/anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72", size = 124875, upload-time = "2026-06-24T20:56:04.413Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "certifi" +version = "2026.6.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, + { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "datasets" +version = "5.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"] }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/85/ce4f780c32f7e36d71257f1c27e8ba898ebe379cb54f211f5f2013f2c219/datasets-5.0.0.tar.gz", hash = "sha256:83dbbbdb07a33b82192b8c419deb18739b138ee2ce1a322d55ce6b100954ec1a", size = 631708, upload-time = "2026-06-05T13:18:26.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/66/73034ad30b59f13439b75e620989dacba4c047256e358ba7c2e9ec98ea22/datasets-5.0.0-py3-none-any.whl", hash = "sha256:7dd34927a0fd7046e98aad5cb9430e699c373238a15befa7b9bf22b991a7fee6", size = 555084, upload-time = "2026-06-05T13:18:24.435Z" }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, +] + +[[package]] +name = "filelock" +version = "3.29.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/dc/be6cbe99670cd6e4ad387123647cb08e0c32975e223f82551e914c5568a6/filelock-3.29.4.tar.gz", hash = "sha256:10cdb3656fc44541cdf30652a93fb10ec6b05325620eb316bd26893e4201538a", size = 63028, upload-time = "2026-06-13T16:12:00.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl", hash = "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767", size = 42757, upload-time = "2026-06-13T16:11:59.582Z" }, +] + +[[package]] +name = "fonttools" +version = "4.63.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/8d/d8fec3dcde2963f8c908fb315e5ff2cd0ac34f82394bbbf73a2aa5145ce3/fonttools-4.63.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd", size = 2876062, upload-time = "2026-05-14T12:03:32.554Z" }, + { url = "https://files.pythonhosted.org/packages/ef/71/d935dc54e4ff121bfdd11e08702db63a7e6f25af21d8a3d7b7212df53641/fonttools-4.63.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59", size = 2424594, upload-time = "2026-05-14T12:03:34.86Z" }, + { url = "https://files.pythonhosted.org/packages/8e/40/e76320afa1df918e146155ef239b1719ee266092e96f5423bfd075affba1/fonttools-4.63.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d", size = 5024840, upload-time = "2026-05-14T12:03:36.745Z" }, + { url = "https://files.pythonhosted.org/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68", size = 4975801, upload-time = "2026-05-14T12:03:38.833Z" }, + { url = "https://files.pythonhosted.org/packages/c8/26/2cee03d0aa083ab022da5c07aff9ed3f689da1defb81ad6917c9627896da/fonttools-4.63.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be", size = 4965009, upload-time = "2026-05-14T12:03:41.494Z" }, + { url = "https://files.pythonhosted.org/packages/7e/48/cc4b66d9058c0d0982c833fad10127c4b0e9324606aafa41382295ca4102/fonttools-4.63.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27", size = 5105892, upload-time = "2026-05-14T12:03:43.525Z" }, + { url = "https://files.pythonhosted.org/packages/d8/1f/a98a30a814b9ddef3a2e706025f90b9e0bc94890e6cb15254bc86547d11a/fonttools-4.63.0-cp313-cp313-win32.whl", hash = "sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380", size = 2291313, upload-time = "2026-05-14T12:03:45.594Z" }, + { url = "https://files.pythonhosted.org/packages/92/46/5177b01f3b4abfdd4409f31cca4ab279c9343a26efbe9ec78c97fc612e02/fonttools-4.63.0-cp313-cp313-win_amd64.whl", hash = "sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b", size = 2342299, upload-time = "2026-05-14T12:03:47.414Z" }, + { url = "https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745", size = 2875338, upload-time = "2026-05-14T12:03:50.052Z" }, + { url = "https://files.pythonhosted.org/packages/cd/58/7dfa0c761cb3b2964e2a84c4dc986c926a87de0cb9fb60d5b28ded3f2914/fonttools-4.63.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03", size = 2422661, upload-time = "2026-05-14T12:03:52.154Z" }, + { url = "https://files.pythonhosted.org/packages/dd/87/64cfa18a7a1621d17b7f4502b2b0ed8a135a90c3db51ea590ee99043e76b/fonttools-4.63.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49", size = 5010526, upload-time = "2026-05-14T12:03:54.647Z" }, + { url = "https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b", size = 4923946, upload-time = "2026-05-14T12:03:56.984Z" }, + { url = "https://files.pythonhosted.org/packages/27/60/872e6e233b8c5e8b41413796ff18b7fe479661bd40147e071b450dfad7a1/fonttools-4.63.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6", size = 4962489, upload-time = "2026-05-14T12:03:59.443Z" }, + { url = "https://files.pythonhosted.org/packages/30/c4/83c24f2ec38b90cfda84bf4b1a1f49df80e84a1db4e7ac6e0d41bf23bc39/fonttools-4.63.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4", size = 5071870, upload-time = "2026-05-14T12:04:02.122Z" }, + { url = "https://files.pythonhosted.org/packages/de/40/3ae22b60ff1d41ce0bd044b31238cdc72cef99f28b976f1e128ebd618c9b/fonttools-4.63.0-cp314-cp314-win32.whl", hash = "sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616", size = 2295026, upload-time = "2026-05-14T12:04:04.47Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d4/98078064ccc76b45cb0f6c002452011e93c4bd26f6850344f0951cc1fe89/fonttools-4.63.0-cp314-cp314-win_amd64.whl", hash = "sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5", size = 2347454, upload-time = "2026-05-14T12:04:06.752Z" }, + { url = "https://files.pythonhosted.org/packages/49/4e/652d1580c5f4e39f7d103b0c793e4773129ad633dce4addd0cf4dfebde02/fonttools-4.63.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001", size = 2958152, upload-time = "2026-05-14T12:04:08.706Z" }, + { url = "https://files.pythonhosted.org/packages/0e/55/ad864c9a9b219f552eb46b32cd7906c466e5a578ba0c3abfcc0fe7413eb6/fonttools-4.63.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e", size = 2460809, upload-time = "2026-05-14T12:04:10.783Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2b/0aa8db70f18cf52e49b4ed5ecec68547f981160bf5ded3b5aed6faa0a6f9/fonttools-4.63.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096", size = 5148649, upload-time = "2026-05-14T12:04:12.747Z" }, + { url = "https://files.pythonhosted.org/packages/7f/63/18e4369c25043096f1048e0c9915951adc4f842bd81c6b18155824d6fa99/fonttools-4.63.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f", size = 4932147, upload-time = "2026-05-14T12:04:14.806Z" }, + { url = "https://files.pythonhosted.org/packages/a1/3f/67f3eac2ffd8a98446c5022f8ed3864eac878a5ff7af8df4c8286dba16cc/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40", size = 5027237, upload-time = "2026-05-14T12:04:17.675Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ba/4e6214cb38a7b04779e97bb7636de9a5c7f20af7018d03dee0b64c08510a/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196", size = 5053933, upload-time = "2026-05-14T12:04:20.818Z" }, + { url = "https://files.pythonhosted.org/packages/34/3b/214dcc19ee31d3d38fb5ad2755c11ef0514e5dc300bbaf41c0b69f393799/fonttools-4.63.0-cp314-cp314t-win32.whl", hash = "sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8", size = 2359326, upload-time = "2026-05-14T12:04:24.22Z" }, + { url = "https://files.pythonhosted.org/packages/dd/1e/3ff1a9b523058c2eeb6a9d50f5574e2a738200d0d94107d5bc4105e8da3f/fonttools-4.63.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419", size = 2425829, upload-time = "2026-05-14T12:04:26.829Z" }, + { url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, +] + +[package.optional-dependencies] +http = [ + { name = "aiohttp" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/f6/354ae6491228b5eb40e10d89c4d13c651fe1cf7556e35ebdded50cff57ce/gitpython-3.1.50.tar.gz", hash = "sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc", size = 219798, upload-time = "2026-05-06T04:01:26.571Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl", hash = "sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9", size = 212507, upload-time = "2026-05-06T04:01:23.799Z" }, +] + +[[package]] +name = "grpcio" +version = "1.81.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/42/dcc2e4b600538ef18327c0839d56b7d3c3812337c5d710df5877dbb39b1e/grpcio-1.81.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:b10e1ff4756ed27d5a29d7fc79cfce7ef1ff56ad20025b89bac7cf79e09abbbe", size = 6054466, upload-time = "2026-06-11T12:45:48.43Z" }, + { url = "https://files.pythonhosted.org/packages/7b/4a/a36e03210183a8a7d4c80c3936acee679f4bd77d5861f369db47b2cc5f05/grpcio-1.81.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:819edbdcb42ab8598b494bcf0222684bbb7a3c772bd1b1f0be7e029a6063c28e", size = 12048795, upload-time = "2026-06-11T12:45:54.011Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d5/d68e30b29098f63beab6fe501100fe82674ff142b32c672532da86a99b3a/grpcio-1.81.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c5bf2dc311127d91230cc79b92188c082634a06cf66c5234db49a43b910183b0", size = 6599094, upload-time = "2026-06-11T12:45:57.799Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b3/e837954d279754f638a11cca5dcf6b24a005efb398984cefaf7735945a54/grpcio-1.81.1-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e8ca6a1fcdb2943c9cbc1804a1baf3acb6071d72a471591678ded84218006e14", size = 7307182, upload-time = "2026-06-11T12:46:00.568Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1e/b47957057e729adc6cdf519a47f8be2562b7140e280f1418443eb4022192/grpcio-1.81.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e64dd101d380a115cc5a0c7856788adb535f1a4e21fc543775602f8be95180ae", size = 6810962, upload-time = "2026-06-11T12:46:03.312Z" }, + { url = "https://files.pythonhosted.org/packages/40/26/569868e364e05b19ec8f969da53d230bcd89c962cd198f7c29943155c4d3/grpcio-1.81.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:98a07f9bf591e3a8919797bee1c53f026ba4acd587e5a4404c8e57c9ec36b2a5", size = 7415698, upload-time = "2026-06-11T12:46:06.005Z" }, + { url = "https://files.pythonhosted.org/packages/36/0c/5440a0582cb5653fc42a6e262eeb22700943313f8076f9dc927491b20a59/grpcio-1.81.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c261d74b1a945cf895a9d6eccd1685a8e837531beaab782da4d630a8d12deffb", size = 8407779, upload-time = "2026-06-11T12:46:08.84Z" }, + { url = "https://files.pythonhosted.org/packages/ff/aa/66fe9f39871d766987d869a03ee0842a026f499c7b1e62decb9e78a8088e/grpcio-1.81.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58ad1131c300d3c9b933802b3cc4dc69d380822935ba50b28703156ea826fbf7", size = 7844521, upload-time = "2026-06-11T12:46:12.171Z" }, + { url = "https://files.pythonhosted.org/packages/f0/9e/69bb7194861bcd28fb3193261d4f9c3831b4446993f002cf59068943e7ab/grpcio-1.81.1-cp313-cp313-win32.whl", hash = "sha256:78e29211f26da2fdd0e9c6d2b79f489476140cf7029b6a64808ade7ca4156a42", size = 4182786, upload-time = "2026-06-11T12:46:15.192Z" }, + { url = "https://files.pythonhosted.org/packages/0d/20/3da8bb0d637feccdc3e1e419bb511ce93651ce7d54164f95de22cc0b8b34/grpcio-1.81.1-cp313-cp313-win_amd64.whl", hash = "sha256:edb59506291b647a30884b1d51a599d605f40b20af4a7dc3d33786a47a31de60", size = 4928648, upload-time = "2026-06-11T12:46:17.823Z" }, + { url = "https://files.pythonhosted.org/packages/b6/58/19414622b1bf6981bc9c05a365bd548e71876c89000083b3af489251e9c0/grpcio-1.81.1-cp314-cp314-linux_armv7l.whl", hash = "sha256:506f48f2f9c29b143fca3dad7b0d518c188b6c9648c75a2ae6e2d9f2c13a060b", size = 6055336, upload-time = "2026-06-11T12:46:20.557Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/2ec88adb92b0eba970dd0e0e7dd086341daa3c75eba4f735f9e44bf684b0/grpcio-1.81.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d865db4a6318e1c1bea83292e0ed231090538fc4ca45425b0f0480eb338bbc6e", size = 12056279, upload-time = "2026-06-11T12:46:24.255Z" }, + { url = "https://files.pythonhosted.org/packages/41/36/e8c5f8c6ec71de73733695ebc809e98b178b534ec6d8eaa31a7ebab4ad4c/grpcio-1.81.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e2aa72e3ce1770317ef534f63d397b55e130725f5149bd36077c3b539019db27", size = 6608225, upload-time = "2026-06-11T12:46:27.601Z" }, + { url = "https://files.pythonhosted.org/packages/30/22/96fc577a845ab093326d9ab1adb874bd4936c8cf98ac8ed2f3db13a0a2fb/grpcio-1.81.1-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0490c30c261eded63f3f354979f9dc4502a9fb944cccb60cd9dc85f5a7349854", size = 7306576, upload-time = "2026-06-11T12:46:30.514Z" }, + { url = "https://files.pythonhosted.org/packages/76/7b/61dab5d5969f28d97fb1009cead1df0a5cd987d3315e1b37f18a4449f8bc/grpcio-1.81.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:410482da976329fe5f4067270401b12cf2bd552ff8020f054ecfaddb5475f9d6", size = 6812165, upload-time = "2026-06-11T12:46:33.699Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/6e501929d4f5f96462fd82fd9f0f06e5f9612207582b862868d68757b27d/grpcio-1.81.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3657301562ac3cb8018d30d0d3ebfa39932239f7b5703422057ef14b69949f5", size = 7422962, upload-time = "2026-06-11T12:46:36.511Z" }, + { url = "https://files.pythonhosted.org/packages/2a/7e/f2157589e66daa78ebb3165942d05a08bdea93b9d11c2bc1e172aef89685/grpcio-1.81.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:24c8e57504c8f45b237e40b99262d181071e5099a07053695b75d97bb53053a0", size = 8408176, upload-time = "2026-06-11T12:46:39.803Z" }, + { url = "https://files.pythonhosted.org/packages/da/df/c6717fef716e00d235ffb96123baf6dce76d6004f6233fa767c502861460/grpcio-1.81.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b427c19380991a4eaab2f6144b64b99b412043314c6bf4ab544f97bb31ee4190", size = 7846681, upload-time = "2026-06-11T12:46:43.013Z" }, + { url = "https://files.pythonhosted.org/packages/36/84/3502e9f210a6a5c4438c8aca3f88edd2e04f6a27f3d41b26cf0a0024b096/grpcio-1.81.1-cp314-cp314-win32.whl", hash = "sha256:61233fe8951e5c85dff81c2458b6528624760166946b5b47ea150a589168411f", size = 4264615, upload-time = "2026-06-11T12:46:45.741Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/4af731ff7492c68a96e4c71bfd0f4590acde92b31c6fe4894e6465c10ff6/grpcio-1.81.1-cp314-cp314-win_amd64.whl", hash = "sha256:3768a5ff1b2125e6f552e561b6b2dca0e64982d8949689b4df145cf8b98d7821", size = 5070275, upload-time = "2026-06-11T12:46:48.486Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "h2" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hpack" }, + { name = "hyperframe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/17/afa56379f94ad0fe8defd37d6eb3f89a25404ffc71d4d848893d270325fc/h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1", size = 2152026, upload-time = "2025-08-23T18:12:19.778Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/b2/119f6e6dcbd96f9069ce9a2665e0146588dc9f88f29549711853645e736a/h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd", size = 61779, upload-time = "2025-08-23T18:12:17.779Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/2d/57fd21d84d93efb4bd0b962383790e19dd1bc053501b4264c97903b4e83e/hf_xet-1.5.1.tar.gz", hash = "sha256:51ef4500dab3764b41135ee1381a4b62ce56fc54d4c92b719b59e597d6df5bf6", size = 876636, upload-time = "2026-06-08T23:02:53.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/ee/dd9ba7beae1005e54131b7d45263cc74c8a066d47d354e6d58ae9445a388/hf_xet-1.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:dbf48c0d02cf0b2e568944330c60d9120c272dabe013bd892d48e25bc6797577", size = 4069485, upload-time = "2026-06-08T23:02:13.193Z" }, + { url = "https://files.pythonhosted.org/packages/b6/bc/9cae6cfeb4e03070874e73e5c97c66eb90369d3206b6a2b1ef5f96520888/hf_xet-1.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78e4e5192ad2b674c2e1160b651cb9134db974f8ae1835bdfbfb0166b894a43", size = 3838493, upload-time = "2026-06-08T23:02:15.282Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b4/d5c01e0eb6d9f2ca2dacd84d0d1b71e6cfbb2ef3208c968528e010e9b3d7/hf_xet-1.5.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6f7a04a8ad962422e225bc49fbbac99dc1806764b1f3e54dbd154bffa7593947", size = 4505658, upload-time = "2026-06-08T23:02:17.196Z" }, + { url = "https://files.pythonhosted.org/packages/76/c5/29a7598c0c6383c523dc22186d577f4e04267a626cd95ae60f67c00bfe66/hf_xet-1.5.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:d48199c2bf4f8df0adc55d31d1368b6ec0e4d4f45bc86b08038089c23db0bed8", size = 4292822, upload-time = "2026-06-08T23:02:18.608Z" }, + { url = "https://files.pythonhosted.org/packages/04/9a/dceaf6ca69390126b86ea825fb354b93d01163199070b7bd849225de9468/hf_xet-1.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:97f212a88d14bbf573619a74b7fecb238de77d08fc702e54dec6f78276ca3283", size = 4491255, upload-time = "2026-06-08T23:02:20.124Z" }, + { url = "https://files.pythonhosted.org/packages/48/a7/e5a7afaacf6c1791fdbeeac42951fb81c3d2bc482992b115dedcc86d963e/hf_xet-1.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f61e3665892a6c8c5e765395838b8ddf36185da835253d4bc4509a81e49fb342", size = 4711062, upload-time = "2026-06-08T23:02:21.863Z" }, + { url = "https://files.pythonhosted.org/packages/53/49/2802f8433c9742ce281bddc1e65c02c32268ca3098d66828b05e12e45ee2/hf_xet-1.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f4ad3ebd4c32dd2b27099d69dc7b2df821e30767e46fb6ee6a0713778243b8ff", size = 4017205, upload-time = "2026-06-08T23:02:23.495Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5a/50c71195b9fb883659f596e7252faf4c18c58e753a9013bdbf9bac5d2250/hf_xet-1.5.1-cp313-cp313t-win_arm64.whl", hash = "sha256:8298485c1e36e7e67cbd01eeb1376619b7af43d4f1ec245caae306f890a8a32d", size = 3845426, upload-time = "2026-06-08T23:02:25.124Z" }, + { url = "https://files.pythonhosted.org/packages/05/24/5e0c28f80371c17d49fed004597d9d132cb75c1f6f53db2cb95f459d2312/hf_xet-1.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:3474760d10e3bb6f92ff3f024fcb00c0b3e4001e9b035c7483e49a5dd17aa70f", size = 4069676, upload-time = "2026-06-08T23:02:26.759Z" }, + { url = "https://files.pythonhosted.org/packages/d2/17/261ba565b6a4d960fb478f61fdf919c0be5824645aaf1c319eca660c1611/hf_xet-1.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6762d89b9e3267dfd502b29b2a327b4525f33b17e7b509a78d94e2151a30ce30", size = 3838509, upload-time = "2026-06-08T23:02:28.573Z" }, + { url = "https://files.pythonhosted.org/packages/4e/44/7ffdc2e184b0d41fc0f683ba3936ef669ab63cf242cf36ef50e57d683668/hf_xet-1.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bf67e6ed10260cef62e852789dc91ebb03f382d5bdc4b1dbeb64763ea275e7d6", size = 4505881, upload-time = "2026-06-08T23:02:30.257Z" }, + { url = "https://files.pythonhosted.org/packages/63/b6/788060d5aa4d5e671f1a31bf69624c314eb2d8babab3aa562f9e5d53444e/hf_xet-1.5.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c6b6cd08ca095058780b50b8ce4d6cbf6787bcf27841705d58a9d32246e3e47a", size = 4292995, upload-time = "2026-06-08T23:02:31.993Z" }, + { url = "https://files.pythonhosted.org/packages/22/93/c5540cbd6b55529b7dc42f6734e88cebee21aefbea34128b66229df56c57/hf_xet-1.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e1af0de8ca6f190d4294a28b88023db64a1e2d1d719cab044baf75bec569e7a9", size = 4491570, upload-time = "2026-06-08T23:02:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/03/f3/9d8ceab30f44f36c1679b1b8683054c71a0dadc787dbf07421891742d3ca/hf_xet-1.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4f561cbbb92f80960772059864b7fb07eae879adde1b2e781ec6f86f6ac26c59", size = 4711565, upload-time = "2026-06-08T23:02:35.454Z" }, + { url = "https://files.pythonhosted.org/packages/cd/54/27ed9a5e2cc583b4df82f75a03a4df8dbf55f5a9fa1f47f1fadfb20dbeac/hf_xet-1.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e7dbb40617410f432182d918e37c12303fe6700fd6aa6c5964e30a535a4461d6", size = 4017343, upload-time = "2026-06-08T23:02:37.14Z" }, + { url = "https://files.pythonhosted.org/packages/ae/12/ecb2fc8d45e767580e3a37faa97cb895608b614965567efb4f18cff67e27/hf_xet-1.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6071d5ccb4d8d2cbd5fea5cc798da4f0ba3f44e25369591c4e89a4987050e61d", size = 3845716, upload-time = "2026-06-08T23:02:39.073Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d8/5e54cf37434759d1f4f2ba9b66077ff9d4c4e1f37b6bd7975da5c40d94ab/hf_xet-1.5.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e", size = 4077794, upload-time = "2026-06-08T23:02:40.656Z" }, + { url = "https://files.pythonhosted.org/packages/35/94/4b2ecfbad8f8b04701a23aefb62f540b9137d058b7e1dbef16a32676f0e9/hf_xet-1.5.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e", size = 3845354, upload-time = "2026-06-08T23:02:42.702Z" }, + { url = "https://files.pythonhosted.org/packages/de/cc/f99f4bc7295023d7bd9ebbfd51f75cc530ca262c1227666268b8208f4b77/hf_xet-1.5.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350", size = 4514864, upload-time = "2026-06-08T23:02:44.497Z" }, + { url = "https://files.pythonhosted.org/packages/cd/6e/21f7e5a2381278bd3b7b7a5a4d90038518bb6308a0c1daf5d9f8268bb178/hf_xet-1.5.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4", size = 4303784, upload-time = "2026-06-08T23:02:46.203Z" }, + { url = "https://files.pythonhosted.org/packages/35/0e/f992bb6927ac1cb30ef74e62268f551f338bc32b2191f7c96a44c6f7283e/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6", size = 4500703, upload-time = "2026-06-08T23:02:47.628Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d1/90a498d05447980b977b1669246eeeeae4cfb0ea3e7a286eaba627f91bf9/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf", size = 4719498, upload-time = "2026-06-08T23:02:49.268Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b6/20f99cfe97cc663a711f7b33cc21d4793e51968e9a26125b4afcd77315ba/hf_xet-1.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:f7b3002f95d1c13e24bcb4537baa8f0eb3838957067c91bb4959bc004a6435f5", size = 4026419, upload-time = "2026-06-08T23:02:50.829Z" }, + { url = "https://files.pythonhosted.org/packages/f9/fa/77453694888f03e5a8c8852d1514a0894d8e81c622d39edbaf308ea0dcf4/hf_xet-1.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:93d090b57b211133f6c0dab0205ef5cb6d89162979ba75a74845045cc3063b8e", size = 3855178, upload-time = "2026-06-08T23:02:52.452Z" }, +] + +[[package]] +name = "hpack" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/5b/fcabf6028144a8723726318b07a32c2f3314acdff6265743cf08a344b18e/hpack-4.2.0.tar.gz", hash = "sha256:0895cfa3b5531fc65fe439c05eb65144f123bf7a394fcaa56aa423548d8e45c0", size = 51300, upload-time = "2026-06-23T18:34:46.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/b4/4a9fcfb2aef6ba44d9073ecd301443aa00b3dac95de5619f2a7de7ec8a91/hpack-4.2.0-py3-none-any.whl", hash = "sha256:858ac0b02280fa582b5080d68db0899c62a80375e0e5413a74970c5e518b6986", size = 34246, upload-time = "2026-06-23T18:34:45.472Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[package.optional-dependencies] +http2 = [ + { name = "h2" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "typer" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/77/ce3331f40cb2d021fe9b24c46c41e72faf74493621138e5eddac12bf5e1c/huggingface_hub-1.21.0.tar.gz", hash = "sha256:a44f222cd8f2f7c2eade30b5e7a04cac984a3235fa61ea87a0a5a31db77d561f", size = 861572, upload-time = "2026-06-25T13:09:26.356Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/85/b505a99a133d9f99d21af182af416e9baef70bdeef019983479651e494c2/huggingface_hub-1.21.0-py3-none-any.whl", hash = "sha256:eadaa3678c512c82aea69e8675d90a184861e68de32f1105668628b4dce0e7cd", size = 721078, upload-time = "2026-06-25T13:09:24.402Z" }, +] + +[[package]] +name = "hyperframe" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/69/024d6711d5ba575aa65d5538042e99964104e97fa153a9f10bc369182bc2/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09", size = 123166, upload-time = "2026-03-09T13:13:48.032Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/adbb40df306f587054a348831220812b9b1d787aff714cfbc8556e38fccd/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3", size = 66395, upload-time = "2026-03-09T13:13:49.365Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3a/d0a972b34e1c63e2409413104216cd1caa02c5a37cb668d1687d466c1c45/kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd", size = 64065, upload-time = "2026-03-09T13:13:50.562Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3", size = 1477903, upload-time = "2026-03-09T13:13:52.084Z" }, + { url = "https://files.pythonhosted.org/packages/18/d8/55638d89ffd27799d5cc3d8aa28e12f4ce7a64d67b285114dbedc8ea4136/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96", size = 1278751, upload-time = "2026-03-09T13:13:54.673Z" }, + { url = "https://files.pythonhosted.org/packages/b8/97/b4c8d0d18421ecceba20ad8701358453b88e32414e6f6950b5a4bad54e65/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099", size = 1296793, upload-time = "2026-03-09T13:13:56.287Z" }, + { url = "https://files.pythonhosted.org/packages/c4/10/f862f94b6389d8957448ec9df59450b81bec4abb318805375c401a1e6892/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8", size = 1346041, upload-time = "2026-03-09T13:13:58.269Z" }, + { url = "https://files.pythonhosted.org/packages/a3/6a/f1650af35821eaf09de398ec0bc2aefc8f211f0cda50204c9f1673741ba9/kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87", size = 987292, upload-time = "2026-03-09T13:13:59.871Z" }, + { url = "https://files.pythonhosted.org/packages/de/19/d7fb82984b9238115fe629c915007be608ebd23dc8629703d917dbfaffd4/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23", size = 2227865, upload-time = "2026-03-09T13:14:01.401Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b9/46b7f386589fd222dac9e9de9c956ce5bcefe2ee73b4e79891381dda8654/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859", size = 2324369, upload-time = "2026-03-09T13:14:02.972Z" }, + { url = "https://files.pythonhosted.org/packages/92/8b/95e237cf3d9c642960153c769ddcbe278f182c8affb20cecc1cc983e7cc5/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902", size = 1977989, upload-time = "2026-03-09T13:14:04.503Z" }, + { url = "https://files.pythonhosted.org/packages/1b/95/980c9df53501892784997820136c01f62bc1865e31b82b9560f980c0e649/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167", size = 2491645, upload-time = "2026-03-09T13:14:06.106Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/900647fd0840abebe1561792c6b31e6a7c0e278fc3973d30572a965ca14c/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0", size = 2295237, upload-time = "2026-03-09T13:14:08.891Z" }, + { url = "https://files.pythonhosted.org/packages/be/8a/be60e3bbcf513cc5a50f4a3e88e1dcecebb79c1ad607a7222877becaa101/kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276", size = 73573, upload-time = "2026-03-09T13:14:12.327Z" }, + { url = "https://files.pythonhosted.org/packages/4d/d2/64be2e429eb4fca7f7e1c52a91b12663aeaf25de3895e5cca0f47ef2a8d0/kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c", size = 64998, upload-time = "2026-03-09T13:14:13.469Z" }, + { url = "https://files.pythonhosted.org/packages/b0/69/ce68dd0c85755ae2de490bf015b62f2cea5f6b14ff00a463f9d0774449ff/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1", size = 125700, upload-time = "2026-03-09T13:14:14.636Z" }, + { url = "https://files.pythonhosted.org/packages/74/aa/937aac021cf9d4349990d47eb319309a51355ed1dbdc9c077cdc9224cb11/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e", size = 67537, upload-time = "2026-03-09T13:14:15.808Z" }, + { url = "https://files.pythonhosted.org/packages/ee/20/3a87fbece2c40ad0f6f0aefa93542559159c5f99831d596050e8afae7a9f/kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7", size = 65514, upload-time = "2026-03-09T13:14:18.035Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7f/f943879cda9007c45e1f7dba216d705c3a18d6b35830e488b6c6a4e7cdf0/kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c", size = 1584848, upload-time = "2026-03-09T13:14:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/37/f8/4d4f85cc1870c127c88d950913370dd76138482161cd07eabbc450deff01/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368", size = 1391542, upload-time = "2026-03-09T13:14:21.54Z" }, + { url = "https://files.pythonhosted.org/packages/04/0b/65dd2916c84d252b244bd405303220f729e7c17c9d7d33dca6feeff9ffc4/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489", size = 1404447, upload-time = "2026-03-09T13:14:23.205Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/2606a373247babce9b1d056c03a04b65f3cf5290a8eac5d7bdead0a17e21/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1", size = 1455918, upload-time = "2026-03-09T13:14:24.74Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d1/c6078b5756670658e9192a2ef11e939c92918833d2745f85cd14a6004bdf/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3", size = 1072856, upload-time = "2026-03-09T13:14:26.597Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c8/7def6ddf16eb2b3741d8b172bdaa9af882b03c78e9b0772975408801fa63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18", size = 2333580, upload-time = "2026-03-09T13:14:28.237Z" }, + { url = "https://files.pythonhosted.org/packages/9e/87/2ac1fce0eb1e616fcd3c35caa23e665e9b1948bb984f4764790924594128/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021", size = 2423018, upload-time = "2026-03-09T13:14:30.018Z" }, + { url = "https://files.pythonhosted.org/packages/67/13/c6700ccc6cc218716bfcda4935e4b2997039869b4ad8a94f364c5a3b8e63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310", size = 2062804, upload-time = "2026-03-09T13:14:32.888Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bd/877056304626943ff0f1f44c08f584300c199b887cb3176cd7e34f1515f1/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3", size = 2597482, upload-time = "2026-03-09T13:14:34.971Z" }, + { url = "https://files.pythonhosted.org/packages/75/19/c60626c47bf0f8ac5dcf72c6c98e266d714f2fbbfd50cf6dab5ede3aaa50/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2", size = 2394328, upload-time = "2026-03-09T13:14:36.816Z" }, + { url = "https://files.pythonhosted.org/packages/47/84/6a6d5e5bb8273756c27b7d810d47f7ef2f1f9b9fd23c9ee9a3f8c75c9cef/kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53", size = 68410, upload-time = "2026-03-09T13:14:38.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/060f45052f2a01ad5762c8fdecd6d7a752b43400dc29ff75cd47225a40fd/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615", size = 123231, upload-time = "2026-03-09T13:14:41.323Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/78da680eadd06ff35edef6ef68a1ad273bad3e2a0936c9a885103230aece/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02", size = 66489, upload-time = "2026-03-09T13:14:42.534Z" }, + { url = "https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e", size = 64063, upload-time = "2026-03-09T13:14:44.759Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac", size = 1475913, upload-time = "2026-03-09T13:14:46.247Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f0/f768ae564a710135630672981231320bc403cf9152b5596ec5289de0f106/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05", size = 1282782, upload-time = "2026-03-09T13:14:48.458Z" }, + { url = "https://files.pythonhosted.org/packages/e2/9f/1de7aad00697325f05238a5f2eafbd487fb637cc27a558b5367a5f37fb7f/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd", size = 1300815, upload-time = "2026-03-09T13:14:50.721Z" }, + { url = "https://files.pythonhosted.org/packages/5a/c2/297f25141d2e468e0ce7f7a7b92e0cf8918143a0cbd3422c1ad627e85a06/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a", size = 1347925, upload-time = "2026-03-09T13:14:52.304Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d3/f4c73a02eb41520c47610207b21afa8cdd18fdbf64ffd94674ae21c4812d/kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554", size = 991322, upload-time = "2026-03-09T13:14:54.637Z" }, + { url = "https://files.pythonhosted.org/packages/7b/46/d3f2efef7732fcda98d22bf4ad5d3d71d545167a852ca710a494f4c15343/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581", size = 2232857, upload-time = "2026-03-09T13:14:56.471Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ec/2d9756bf2b6d26ae4349b8d3662fb3993f16d80c1f971c179ce862b9dbae/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303", size = 2329376, upload-time = "2026-03-09T13:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/8f/9f/876a0a0f2260f1bde92e002b3019a5fabc35e0939c7d945e0fa66185eb20/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9", size = 1982549, upload-time = "2026-03-09T13:14:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/ba3624dfac23a64d54ac4179832860cb537c1b0af06024936e82ca4154a0/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79", size = 2494680, upload-time = "2026-03-09T13:15:01.364Z" }, + { url = "https://files.pythonhosted.org/packages/39/b7/97716b190ab98911b20d10bf92eca469121ec483b8ce0edd314f51bc85af/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796", size = 2297905, upload-time = "2026-03-09T13:15:03.925Z" }, + { url = "https://files.pythonhosted.org/packages/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e", size = 75086, upload-time = "2026-03-09T13:15:07.775Z" }, + { url = "https://files.pythonhosted.org/packages/70/15/9b90f7df0e31a003c71649cf66ef61c3c1b862f48c81007fa2383c8bd8d7/kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df", size = 66577, upload-time = "2026-03-09T13:15:09.139Z" }, + { url = "https://files.pythonhosted.org/packages/17/01/7dc8c5443ff42b38e72731643ed7cf1ed9bf01691ae5cdca98501999ed83/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e", size = 125794, upload-time = "2026-03-09T13:15:10.525Z" }, + { url = "https://files.pythonhosted.org/packages/46/8a/b4ebe46ebaac6a303417fab10c2e165c557ddaff558f9699d302b256bc53/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4", size = 67646, upload-time = "2026-03-09T13:15:12.016Z" }, + { url = "https://files.pythonhosted.org/packages/60/35/10a844afc5f19d6f567359bf4789e26661755a2f36200d5d1ed8ad0126e5/kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028", size = 65511, upload-time = "2026-03-09T13:15:13.311Z" }, + { url = "https://files.pythonhosted.org/packages/f8/8a/685b297052dd041dcebce8e8787b58923b6e78acc6115a0dc9189011c44b/kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657", size = 1584858, upload-time = "2026-03-09T13:15:15.103Z" }, + { url = "https://files.pythonhosted.org/packages/9e/80/04865e3d4638ac5bddec28908916df4a3075b8c6cc101786a96803188b96/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920", size = 1392539, upload-time = "2026-03-09T13:15:16.661Z" }, + { url = "https://files.pythonhosted.org/packages/ba/01/77a19cacc0893fa13fafa46d1bba06fb4dc2360b3292baf4b56d8e067b24/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9", size = 1405310, upload-time = "2026-03-09T13:15:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/53/39/bcaf5d0cca50e604cfa9b4e3ae1d64b50ca1ae5b754122396084599ef903/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d", size = 1456244, upload-time = "2026-03-09T13:15:20.444Z" }, + { url = "https://files.pythonhosted.org/packages/d0/7a/72c187abc6975f6978c3e39b7cf67aeb8b3c0a8f9790aa7fd412855e9e1f/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65", size = 1073154, upload-time = "2026-03-09T13:15:22.039Z" }, + { url = "https://files.pythonhosted.org/packages/c7/ca/cf5b25783ebbd59143b4371ed0c8428a278abe68d6d0104b01865b1bbd0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa", size = 2334377, upload-time = "2026-03-09T13:15:23.741Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e5/b1f492adc516796e88751282276745340e2a72dcd0d36cf7173e0daf3210/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0", size = 2425288, upload-time = "2026-03-09T13:15:25.789Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e5/9b21fbe91a61b8f409d74a26498706e97a48008bfcd1864373d32a6ba31c/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9", size = 2063158, upload-time = "2026-03-09T13:15:27.63Z" }, + { url = "https://files.pythonhosted.org/packages/b1/02/83f47986138310f95ea95531f851b2a62227c11cbc3e690ae1374fe49f0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f", size = 2597260, upload-time = "2026-03-09T13:15:29.421Z" }, + { url = "https://files.pythonhosted.org/packages/07/18/43a5f24608d8c313dd189cf838c8e68d75b115567c6279de7796197cfb6a/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646", size = 2394403, upload-time = "2026-03-09T13:15:31.517Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b5/98222136d839b8afabcaa943b09bd05888c2d36355b7e448550211d1fca4/kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681", size = 79687, upload-time = "2026-03-09T13:15:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/99/a2/ca7dc962848040befed12732dff6acae7fb3c4f6fc4272b3f6c9a30b8713/kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57", size = 70032, upload-time = "2026-03-09T13:15:34.411Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +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/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]] +name = "matplotlib" +version = "3.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/41/aa47f156b061d14c98b906f76c428507397708ec63ff94f410ae1752b426/matplotlib-3.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce3b839b34ae1f430b4616893a2945a2999debaa7e94e7e29a2a8bbf286f7b5", size = 9450532, upload-time = "2026-06-12T02:28:06.769Z" }, + { url = "https://files.pythonhosted.org/packages/8c/4f/5a9eb0375e81413953febf8af7b012a6b6357f53438a15c4f5ad86c6bbb5/matplotlib-3.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:373db8f91214e8ccaf35ac833cc1dd59dd961e148bbd55dd027141591dde1313", size = 9279760, upload-time = "2026-06-12T02:28:09.152Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c0/1117d53077e3ac3152503a84e9cf7a5c239576805ee71276e80c2aaa7471/matplotlib-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be152b7570324dc8d01574cc9474dd2d803237acf528bcbb5b211fa347461a09", size = 10031623, upload-time = "2026-06-12T02:28:11.26Z" }, + { url = "https://files.pythonhosted.org/packages/92/7e/e937138daffad65b71bf831a377809dcbc830fb4f31a31e067dc1faa2575/matplotlib-3.11.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:126f256df600652d7e4b394cf3164ff75210a00038f287c95a012a6f58d0e83f", size = 10839372, upload-time = "2026-06-12T02:28:14.102Z" }, + { url = "https://files.pythonhosted.org/packages/1d/c2/438ecc197ffb8023b6b9922915542f2172f5fd45b76703b0b4fc47322243/matplotlib-3.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:03acfeddf87b0dddb11b081ef7740ad445a3ca8bcb6b8e3011b08f2cf802b75c", size = 10924099, upload-time = "2026-06-12T02:28:16.383Z" }, + { url = "https://files.pythonhosted.org/packages/40/2e/395883da416f378b3ed2c9f3e843ac477eae1ce731b671b79adaa6f0bacd/matplotlib-3.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:ab3722f04f3ff34c23b5012c5873d2894174e06c3822fcdac3610965a5ac7d06", size = 9329727, upload-time = "2026-06-12T02:28:18.581Z" }, + { url = "https://files.pythonhosted.org/packages/61/82/2c388956abf8bf392dfb5b8917c502f1082df6a941b781ab8c8e5ba2474b/matplotlib-3.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c945824670fb8915b4ac879e5e61f3c58e0913022f70a0de4c082b17372f8771", size = 9003506, upload-time = "2026-06-12T02:28:20.474Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c1/34454baa44da7975ada82e9aea37105ec47059514dc967d3be14426ba8dc/matplotlib-3.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3489c3dc487669b4a980bc3068f87856de7a1564248d3f6c629efb2a58b03f24", size = 9499838, upload-time = "2026-06-12T02:28:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c3/98fe79a398cf232219f090163a7fa7e6766e9f2e0ad26df54d6f8934d8ee/matplotlib-3.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6a98f5476ce784a50ce09998f4ae1e6a9f25043cef8a480c98949902eda74620", size = 9332298, upload-time = "2026-06-12T02:28:24.796Z" }, + { url = "https://files.pythonhosted.org/packages/95/e4/b4b7c33151e74e5c802f3cde1ba807ebfc38401e329b44e215a5888dd76d/matplotlib-3.11.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:565af866fd63e4bd3f987d580afe27c44c2552a3b3305f4ecbb85133601ea6f3", size = 10045491, upload-time = "2026-06-12T02:28:27.141Z" }, + { url = "https://files.pythonhosted.org/packages/71/28/394548efd68354110c1a1be11fe6b6e559e06d1a23da35908a0e316c55a9/matplotlib-3.11.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e6b3e64dea5062c570f04358e2711859f3531b459f29516274fbad889079e4f3", size = 10857059, upload-time = "2026-06-12T02:28:29.222Z" }, + { url = "https://files.pythonhosted.org/packages/c8/44/e7922e6e2a4d63bdfbc9dc4a53e3850ab438d46cf42e6779bb15ec92c948/matplotlib-3.11.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:942b37c5db1899610bd1543ce8e13e4ecff9a4633e7f63bb6aa9205d2644ebd1", size = 10939576, upload-time = "2026-06-12T02:28:31.66Z" }, + { url = "https://files.pythonhosted.org/packages/3d/be/b1ca96003a441d619b727fee21d671fdff7a5ce2f1bb797b2521aa2f679a/matplotlib-3.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:c08e649a6313e1291e713623b97a38e5bb4aa580b2a100a94a3309bc6b9c8eb3", size = 9379519, upload-time = "2026-06-12T02:28:33.888Z" }, + { url = "https://files.pythonhosted.org/packages/e3/72/4bf3b91821c34596dd6a7bdac5836d94f744144c8208939ef49d8ec43f7e/matplotlib-3.11.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2746cd2c113742ff6ce37a864c5ac5fd7aa644568f445e66166e457ac78e40e0", size = 9055456, upload-time = "2026-06-12T02:28:35.878Z" }, + { url = "https://files.pythonhosted.org/packages/57/52/a94102ac99eb78e2fe9b826674f9ef9ee23327110ea6ab4776c1b4eb6209/matplotlib-3.11.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3338e3e3de128cf50d0d2fb92a122815daf9c755bd882a474343c05f8fd7ec79", size = 9452137, upload-time = "2026-06-12T02:28:37.93Z" }, + { url = "https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:25c2e5455efd8d99f41fb79871a31feb7d301569642e332ec58d72cfe9282bc3", size = 9281514, upload-time = "2026-06-12T02:28:40.028Z" }, + { url = "https://files.pythonhosted.org/packages/b7/2d/4e1240ea82ee197dfb3851e71f71c87eeeb975f1753b56a0588e4e80739a/matplotlib-3.11.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9695457a467ff86d23f35037a43deb6f1134dd6d3e2ac8ce1e2087cff09ffb9", size = 10843005, upload-time = "2026-06-12T02:28:42.39Z" }, + { url = "https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19c16c61dea63b3582918503e6b294193961261d9daa806d4ae2151f1ad05430", size = 11127459, upload-time = "2026-06-12T02:28:44.483Z" }, + { url = "https://files.pythonhosted.org/packages/6f/41/795c405aa7560443a3b01309424cde4a1113b85c90b8a63417444a749617/matplotlib-3.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2d72ea8b7924f3cb955e61518d21e43b3df1e6c8a793b480a0c1214f185d30ba", size = 10925160, upload-time = "2026-06-12T02:28:46.564Z" }, + { url = "https://files.pythonhosted.org/packages/1a/f7/3a9e6389a7cfaeff76c56e40c2dabcb13110e21e82f837228c834ebe748c/matplotlib-3.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:1c02da0a629dfa9debf52725ea06866b74c1fb70a895bae05e4493d34074f9f2", size = 9485186, upload-time = "2026-06-12T02:28:49.344Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c0/396478ee7cf2091d182db8b4a8695f6a37f1ddb978989cf9dbb84cd5c123/matplotlib-3.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:aa55d73b3117d4b07f959cd9eb6f69b375d8df3414139c479388e551aa5d999d", size = 9160349, upload-time = "2026-06-12T02:28:51.382Z" }, + { url = "https://files.pythonhosted.org/packages/c5/6f/1c3bd51bb2b34eaacdcf3c3d859dbb357f952fc8020c617dc118ad7c9e38/matplotlib-3.11.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a9d8c6e7cd2f0ddf11d8d92e520dd1d9d2abb0cf6ac8831e338666c81e905847", size = 9500921, upload-time = "2026-06-12T02:28:53.443Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/4d861d0121840cb1a3fd4a10deb211efd6fccd481ed23e553f31f4f4da4a/matplotlib-3.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:be050fcf32f729eda99f7f75a80bf67612ce16ab9ac1c23a387dcaede95cb70e", size = 9332190, upload-time = "2026-06-12T02:28:55.623Z" }, + { url = "https://files.pythonhosted.org/packages/4b/cb/22f6bc35711a0b5639a784e74e653e77c86210bd4304449dd399a482f74e/matplotlib-3.11.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfabef0230d0697aa0d717385194dd41162e00207a68bf4abf94c2bf4c27dca0", size = 10854181, upload-time = "2026-06-12T02:28:57.856Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7e/9a9eaca731a2939589da520f0ebe8fd8753d0f51fca98c7d20af6dbe261a/matplotlib-3.11.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1644db30e759199443493ac5e5caec24fdb775a8f6123021f85ba47c4133c3cb", size = 11137715, upload-time = "2026-06-12T02:29:00.555Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f9/9b030b6088354acb0296871bb624b25befc1c42509d3c6cd17420c83a5b8/matplotlib-3.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:15b0d160079cb10699a0e98b5989c70677b2df7cacdc62af67c30f2facec46d9", size = 10939427, upload-time = "2026-06-12T02:29:02.527Z" }, + { url = "https://files.pythonhosted.org/packages/59/94/6b273eaee4ee250863567d100865da61a5c1527fa67f527b7ed22e0dd29c/matplotlib-3.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:446307e6b04b57b1f1239e228a1ec2af0d589a1008cebc3dfa3f5441d095cfb6", size = 9535809, upload-time = "2026-06-12T02:29:04.994Z" }, + { url = "https://files.pythonhosted.org/packages/60/95/1d36bddf2b7e2692c1540e78a6e5bc88bc1496b137e3e35a611f91b65ac3/matplotlib-3.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:652fb5696271d4c50f196d22a5ff4f8e4444c74f847423570d7dc0aa2bbd0159", size = 9209226, upload-time = "2026-06-12T02:29:07.033Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, + { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, + { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, + { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "multiprocess" +version = "0.70.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/f2/e783ac7f2aeeed14e9e12801f22529cc7e6b7ab80928d6dcce4e9f00922d/multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897", size = 2079989, upload-time = "2026-01-19T06:47:39.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/45/8004d1e6b9185c1a444d6b55ac5682acf9d98035e54386d967366035a03a/multiprocess-0.70.19-py310-none-any.whl", hash = "sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87", size = 134948, upload-time = "2026-01-19T06:47:32.325Z" }, + { url = "https://files.pythonhosted.org/packages/86/c2/dec9722dc3474c164a0b6bcd9a7ed7da542c98af8cabce05374abab35edd/multiprocess-0.70.19-py311-none-any.whl", hash = "sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c", size = 144457, upload-time = "2026-01-19T06:47:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/71/70/38998b950a97ea279e6bd657575d22d1a2047256caf707d9a10fbce4f065/multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28", size = 150281, upload-time = "2026-01-19T06:47:35.037Z" }, + { url = "https://files.pythonhosted.org/packages/7f/74/d2c27e03cb84251dfe7249b8e82923643c6d48fa4883b9476b025e7dc7eb/multiprocess-0.70.19-py313-none-any.whl", hash = "sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952", size = 156414, upload-time = "2026-01-19T06:47:35.915Z" }, + { url = "https://files.pythonhosted.org/packages/a0/61/af9115673a5870fd885247e2f1b68c4f1197737da315b520a91c757a861a/multiprocess-0.70.19-py314-none-any.whl", hash = "sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f", size = 160318, upload-time = "2026-01-19T06:47:37.497Z" }, + { url = "https://files.pythonhosted.org/packages/7e/82/69e539c4c2027f1e1697e09aaa2449243085a0edf81ae2c6341e84d769b6/multiprocess-0.70.19-py39-none-any.whl", hash = "sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5", size = 133477, upload-time = "2026-01-19T06:47:38.619Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/05/3d27272d30698dc0ecb7fdfaa41ad70303b444f81722bb99bce1d818638a/numpy-2.5.0.tar.gz", hash = "sha256:5a129578019311b6e56bdd714250f19b518f7dceeeb8d1af5490f4942d3f891c", size = 20652461, upload-time = "2026-06-21T20:57:51.95Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/33/07675aaad7f26ea013d5e884d9a0d784b79c6bd7566c333f5a52fa3c610b/numpy-2.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:520e6b8be0a4b65840ac8090d4f51cef4bed66e2b0894d5a520f099adc24a9b2", size = 16784890, upload-time = "2026-06-21T20:56:40.799Z" }, + { url = "https://files.pythonhosted.org/packages/85/4b/953118a730ee3b35e28645e0eb4cf9beec5bdbb954e1ac2f5fcefba6bbc3/numpy-2.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:146b81cdd3967fdb6beca8ba25f00c58741d8f3cbd797f55af0fbe0bfec3469c", size = 11754584, upload-time = "2026-06-21T20:56:43.094Z" }, + { url = "https://files.pythonhosted.org/packages/44/9b/56dd530c367c74ae17411027cea4135ca57e1e0583bf5594cee18bd83217/numpy-2.5.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:126b88d95e8ff9b00c9e717aa540469f21d6180162f84c0caec51b16215d49cd", size = 5313904, upload-time = "2026-06-21T20:56:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b0/bcd672edad27ecca7da1f7bb0ce72cd1706a4f2d79ae94990afc97c13e1c/numpy-2.5.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d4313cef1594c5ce46c31b6e54e918338f63f16ee9322304e8c9114d6d81c8bd", size = 6648504, upload-time = "2026-06-21T20:56:47.567Z" }, + { url = "https://files.pythonhosted.org/packages/80/9e/15cdfcbd30a1544a46c9e487a00df331c4672450216538705a9e51fa6710/numpy-2.5.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:750fb097caf26fa878746d9d119f6f9da12dedcbff1eea966c3e3447647c4a9e", size = 15150086, upload-time = "2026-06-21T20:56:49.352Z" }, + { url = "https://files.pythonhosted.org/packages/32/4e/8d7656ccaab3e81e97258b8a9bc5f0c8502513a92fb4ceb0a2cbfebc17bf/numpy-2.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3893adc2dc7c0412ba76777db55a049215d99c9aa3113003be8f49f4f1290ab9", size = 16647250, upload-time = "2026-06-21T20:56:51.542Z" }, + { url = "https://files.pythonhosted.org/packages/3c/81/97060281b602ed07f21b12f4ec409eac1f75a2f91fbc829ed8b2becf3ad4/numpy-2.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:835e454dd99b238cdc5a3f63bce2371296f5ebc53ca1e0f8e6ddbb6d92a29aab", size = 16512864, upload-time = "2026-06-21T20:56:55.401Z" }, + { url = "https://files.pythonhosted.org/packages/33/ab/4496208146911f8d8ddb54f68a972aafa6c8d44babcb2ea03b0e5cc87c9d/numpy-2.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f9836778081a0a3c02a6a21493f3e9f5b311f8d2541934f31f05583dc999ea4", size = 18408407, upload-time = "2026-06-21T20:56:57.75Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9f/a4df67c181e4ee8b467aa3332dc2db10fd5c515136831302f3ca48bc0a01/numpy-2.5.0-cp313-cp313-win32.whl", hash = "sha256:0b525be4744b60bb0557ac872d53ef07d085b5f39622bc579c98d3809d05b988", size = 6054431, upload-time = "2026-06-21T20:57:00.016Z" }, + { url = "https://files.pythonhosted.org/packages/30/53/491e1c47c55b62ccc6a63c1c5b8635c73fc2258dddeb9bda27cae4a0ae96/numpy-2.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:44353e2878930039db472b99dc353d749826e4010bd4d2a7f835e94a97a5c748", size = 12414420, upload-time = "2026-06-21T20:57:01.815Z" }, + { url = "https://files.pythonhosted.org/packages/eb/4a/25c2906f541e9d9f4c5769764db732e6627be91a13f4724fa10634d77db4/numpy-2.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:48f54b00711f83a5f796b70c518e8c2b3c5848dda03a54911f23eb68519b9b60", size = 10339533, upload-time = "2026-06-21T20:57:03.961Z" }, + { url = "https://files.pythonhosted.org/packages/86/ad/abc44aaceaf7b17ee1edde2bbb4458da591bc79574cffff50c4bb35f00d1/numpy-2.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f27582c55ba4c750b7c58c8faf021d2cd9324a662b466229db8a417b41368af9", size = 16783807, upload-time = "2026-06-21T20:57:06.253Z" }, + { url = "https://files.pythonhosted.org/packages/5d/39/b72e168daf9c00fb20c9fc996d00437ccecdef3102387775d29d7a62576d/numpy-2.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:28e7137057d551e4a83c4ae414e3451f50568409db7569aacc7f9811ee06a446", size = 11765215, upload-time = "2026-06-21T20:57:08.547Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a0/8400a9c0e3625182347593f5e1f57da9a617a534794805c8df5518154ddc/numpy-2.5.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e1da54b53e75cd9fcfc23efcc7edab2c6aecf97b6037566d8a0fe804af8ec57c", size = 5324493, upload-time = "2026-06-21T20:57:11.012Z" }, + { url = "https://files.pythonhosted.org/packages/f6/8c/0d104deaa0401c93395a629ec902891618a2eff76d19229139cb5a887bfc/numpy-2.5.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:694d8f74e156f7fd01179f1aa8faa2f648ab6ae0f70b6c3fe57a03249aea2303", size = 6645211, upload-time = "2026-06-21T20:57:12.919Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d9/4a4a628c812750363786afc3d33492709a5cd64b215469c16b0f6c7bb811/numpy-2.5.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1a7569a7b53c77716f036bb28cb1c91f166a26ec7d9502cd1e4bdfe502fdec22", size = 15166004, upload-time = "2026-06-21T20:57:14.717Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5e/2a902317d7fc4aa93236e80c932662dadfc459b323d758329e01775125e1/numpy-2.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39a0433bd4086ebd462960cf375e19195bb07b53dc1d87dd5fcf47ad78576f03", size = 16650797, upload-time = "2026-06-21T20:57:16.906Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a0/a0090e6329f4ca5992c07847bb579c5259a19953dc57255bb08793142ffb/numpy-2.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:929f0c79ac38bcbd7154fe631dc907abfeddbcc5027a896bd1f7767323271e7a", size = 16524647, upload-time = "2026-06-21T20:57:19.165Z" }, + { url = "https://files.pythonhosted.org/packages/5e/7d/6caf27734c42b65837e7461ed0dbbd6b6fc835060c9714ec59d673bb383a/numpy-2.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cc4f247a47bbf070bfd70be53ccdcf47b800af563535e7bbe172322197c30e21", size = 18411841, upload-time = "2026-06-21T20:57:21.638Z" }, + { url = "https://files.pythonhosted.org/packages/13/dc/26edadbd812536769a82c2e9e002234e33feb5da43061d47a044f6d309b7/numpy-2.5.0-cp314-cp314-win32.whl", hash = "sha256:5dc71423499fab3f46f7a7201155ade1669ea101f2f429d332df9e72f8161731", size = 6106361, upload-time = "2026-06-21T20:57:23.844Z" }, + { url = "https://files.pythonhosted.org/packages/f2/9e/4dd1459282229a72d92dece2ae9138e5cac94a72263a7ceb48f37434c925/numpy-2.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:ebb81d9d5443e0309d6c54894c3fbed74ad7da0714352a67b6d773cd189eae73", size = 12551749, upload-time = "2026-06-21T20:57:25.945Z" }, + { url = "https://files.pythonhosted.org/packages/05/a7/6bc6384c080b86c7f6c85c5bc5b540b24f4f679cd144791d99574e90d462/numpy-2.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:3b94d0d0deceebfad3e67ae5c0e5eb87371e8f7a0581cd04a779928c2450cf1e", size = 10617072, upload-time = "2026-06-21T20:57:28.175Z" }, + { url = "https://files.pythonhosted.org/packages/86/6b/4a2b71d66ada5608ae02b63f150dfad520f6940721cb7f029ad270befc0e/numpy-2.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:22f3d43e362d650bc39db1f17851302874a148ca95ba6981c1dfb5fa6862f35b", size = 11881067, upload-time = "2026-06-21T20:57:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b2/d365eb40a20efb49d67e9feb90494ed8511282ee1f5fa16006675c65397d/numpy-2.5.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:243563efb4cd7528a264567e9fd206c87826457322521d06206a00bfa316c927", size = 5440290, upload-time = "2026-06-21T20:57:32.193Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5e/e9c03188de5f9b767e46a8fe988bcfd3efad066a4a3fda8b9cb11a93f895/numpy-2.5.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:84881d825ca75249b189bbee875fcfe3238aa5c479e6100893cda566e8e86826", size = 6748371, upload-time = "2026-06-21T20:57:33.933Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1d/68c186a38a5027bae2c4ddd5ea681fdaf8b4d30fb7301def6d8ad270390f/numpy-2.5.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cda12aa4779d42b8771180aba759c96f527d43446d8f380ab59e2b35e8489efd", size = 15214643, upload-time = "2026-06-21T20:57:35.677Z" }, + { url = "https://files.pythonhosted.org/packages/8c/67/73f67b7c7e20635baae9c4c3ead4ae7326a005900297a6110971abd62eb5/numpy-2.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c0121101093d2bd74981b10f8837d78e794a8ff57834eb27179f49e1ba11ac6", size = 16690128, upload-time = "2026-06-21T20:57:38.159Z" }, + { url = "https://files.pythonhosted.org/packages/eb/05/d4c1fb0c46d02a27d6b2b8b319a78c90937acec8631c1641874670b31e6f/numpy-2.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d371c92cfa09da00022f501ab67fafaea813d752eb30ac44336d45b1e5b0268a", size = 16577902, upload-time = "2026-06-21T20:57:40.447Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1d/771c797d50fa26e4888989cccf1d50ee51f530d4e455ad2692dcb64fa711/numpy-2.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9990713e9c38154c6861e7547f1e3fc7a87e75ff09bab24ef1cc81d81c2835e9", size = 18452814, upload-time = "2026-06-21T20:57:42.875Z" }, + { url = "https://files.pythonhosted.org/packages/e8/46/52fc0d2a68d7643f0f149eeea5a5d8ea2a3507056ac8afa83c9212606e8b/numpy-2.5.0-cp314-cp314t-win32.whl", hash = "sha256:edadfbd4794b1086c0d822f81863e8a68fc129d132fd0bb9e31e955d7fbbbdb7", size = 6253168, upload-time = "2026-06-21T20:57:45.101Z" }, + { url = "https://files.pythonhosted.org/packages/2a/be/6c8d1118b5f13b2881dc095d5b345de19c6638b8959c17409b6eff84c8aa/numpy-2.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f7e5fa4382967ae6548bd2f174219afb908e294b0d5f625af01166edd5f7d9aa", size = 12736286, upload-time = "2026-06-21T20:57:46.935Z" }, + { url = "https://files.pythonhosted.org/packages/fd/6a/d3a169aaf8536cf228d56a09e04bcb713a2fe4410d4e2105b9419b5a9c89/numpy-2.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:016623417bb330d719d579daf2d6b9a01ddc52e41a9ed61a47f39fde46dcd865", size = 10686451, upload-time = "2026-06-21T20:57:49.313Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pandas" +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/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/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]] +name = "pillow" +version = "12.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/01/53d10cf0dbad820a8db274d259a37ba50b88b24768ddccec07355382d5ad/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c", size = 4100837, upload-time = "2026-04-01T14:43:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/0f/98/f3a6657ecb698c937f6c76ee564882945f29b79bad496abcba0e84659ec5/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2", size = 4176528, upload-time = "2026-04-01T14:43:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/69/bc/8986948f05e3ea490b8442ea1c1d4d990b24a7e43d8a51b2c7d8b1dced36/pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c", size = 3640401, upload-time = "2026-04-01T14:43:45.87Z" }, + { url = "https://files.pythonhosted.org/packages/34/46/6c717baadcd62bc8ed51d238d521ab651eaa74838291bda1f86fe1f864c9/pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795", size = 5308094, upload-time = "2026-04-01T14:43:48.438Z" }, + { url = "https://files.pythonhosted.org/packages/71/43/905a14a8b17fdb1ccb58d282454490662d2cb89a6bfec26af6d3520da5ec/pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f", size = 4695402, upload-time = "2026-04-01T14:43:51.292Z" }, + { url = "https://files.pythonhosted.org/packages/73/dd/42107efcb777b16fa0393317eac58f5b5cf30e8392e266e76e51cff28c3d/pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed", size = 6280005, upload-time = "2026-04-01T14:43:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/a8/68/b93e09e5e8549019e61acf49f65b1a8530765a7f812c77a7461bca7e4494/pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9", size = 8090669, upload-time = "2026-04-01T14:43:57.335Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/3ccb54ce8ec4ddd1accd2d89004308b7b0b21c4ac3d20fa70af4760a4330/pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed", size = 6395194, upload-time = "2026-04-01T14:43:59.864Z" }, + { url = "https://files.pythonhosted.org/packages/67/ee/21d4e8536afd1a328f01b359b4d3997b291ffd35a237c877b331c1c3b71c/pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3", size = 7082423, upload-time = "2026-04-01T14:44:02.74Z" }, + { url = "https://files.pythonhosted.org/packages/78/5f/e9f86ab0146464e8c133fe85df987ed9e77e08b29d8d35f9f9f4d6f917ba/pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9", size = 6505667, upload-time = "2026-04-01T14:44:05.381Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1e/409007f56a2fdce61584fd3acbc2bbc259857d555196cedcadc68c015c82/pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795", size = 7208580, upload-time = "2026-04-01T14:44:08.39Z" }, + { url = "https://files.pythonhosted.org/packages/23/c4/7349421080b12fb35414607b8871e9534546c128a11965fd4a7002ccfbee/pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e", size = 6375896, upload-time = "2026-04-01T14:44:11.197Z" }, + { url = "https://files.pythonhosted.org/packages/3f/82/8a3739a5e470b3c6cbb1d21d315800d8e16bff503d1f16b03a4ec3212786/pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b", size = 7081266, upload-time = "2026-04-01T14:44:13.947Z" }, + { url = "https://files.pythonhosted.org/packages/c3/25/f968f618a062574294592f668218f8af564830ccebdd1fa6200f598e65c5/pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06", size = 2463508, upload-time = "2026-04-01T14:44:16.312Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a4/b342930964e3cb4dce5038ae34b0eab4653334995336cd486c5a8c25a00c/pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b", size = 5309927, upload-time = "2026-04-01T14:44:18.89Z" }, + { url = "https://files.pythonhosted.org/packages/9f/de/23198e0a65a9cf06123f5435a5d95cea62a635697f8f03d134d3f3a96151/pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f", size = 4698624, upload-time = "2026-04-01T14:44:21.115Z" }, + { url = "https://files.pythonhosted.org/packages/01/a6/1265e977f17d93ea37aa28aa81bad4fa597933879fac2520d24e021c8da3/pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612", size = 6321252, upload-time = "2026-04-01T14:44:23.663Z" }, + { url = "https://files.pythonhosted.org/packages/3c/83/5982eb4a285967baa70340320be9f88e57665a387e3a53a7f0db8231a0cd/pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c", size = 8126550, upload-time = "2026-04-01T14:44:26.772Z" }, + { url = "https://files.pythonhosted.org/packages/4e/48/6ffc514adce69f6050d0753b1a18fd920fce8cac87620d5a31231b04bfc5/pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea", size = 6433114, upload-time = "2026-04-01T14:44:29.615Z" }, + { url = "https://files.pythonhosted.org/packages/36/a3/f9a77144231fb8d40ee27107b4463e205fa4677e2ca2548e14da5cf18dce/pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4", size = 7115667, upload-time = "2026-04-01T14:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fc/ac4ee3041e7d5a565e1c4fd72a113f03b6394cc72ab7089d27608f8aaccb/pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4", size = 6538966, upload-time = "2026-04-01T14:44:35.252Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a8/27fb307055087f3668f6d0a8ccb636e7431d56ed0750e07a60547b1e083e/pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea", size = 7238241, upload-time = "2026-04-01T14:44:37.875Z" }, + { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592, upload-time = "2026-04-01T14:44:40.336Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542, upload-time = "2026-04-01T14:44:43.251Z" }, + { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765, upload-time = "2026-04-01T14:44:45.996Z" }, + { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, + { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, + { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, + { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, + { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, + { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, + { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, + { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, + { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, + { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, + { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, +] + +[[package]] +name = "portalocker" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywin32", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/77/65b857a69ed876e1951e88aaba60f5ce6120c33703f7cb61a3c894b8c1b6/portalocker-3.2.0.tar.gz", hash = "sha256:1f3002956a54a8c3730586c5c77bf18fae4149e07eaf1c29fc3faf4d5a3f89ac", size = 95644, upload-time = "2025-06-14T13:20:40.03Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/a6/38c8e2f318bf67d338f4d629e93b0b4b9af331f455f0390ea8ce4a099b26/portalocker-3.2.0-py3-none-any.whl", hash = "sha256:3cdc5f565312224bc570c49337bd21428bba0ef363bbcf58b9ef4a9f11779968", size = 22424, upload-time = "2025-06-14T13:20:38.083Z" }, +] + +[[package]] +name = "propcache" +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/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]] +name = "protobuf" +version = "7.35.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/01/9ef0afd7999eb9badb3a768b4aedd78c86d4c65cfaf1958ab276199e76b4/protobuf-7.35.1.tar.gz", hash = "sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a", size = 458717, upload-time = "2026-06-11T21:55:40.257Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/03/8aeeb7458d22546bf64b5250ca1daeb5ff757d900e8e4a7476c6f0db843e/protobuf-7.35.1-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6", size = 433226, upload-time = "2026-06-11T21:55:31.719Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/dfb89eb0e652a1ff073c39a59fb5e3a83cfe9b57a2c83fa6d78270101767/protobuf-7.35.1-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799", size = 328847, upload-time = "2026-06-11T21:55:34.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/58/dc12f2cd484951524af6e3382c785869b9b3fb5e52ee95ae23add53ee8f9/protobuf-7.35.1-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4", size = 344030, upload-time = "2026-06-11T21:55:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/e4/be/5b3cfe508bfab6761414ff944e3366eb13be4fd71efcd69450f89ba39f43/protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4", size = 327130, upload-time = "2026-06-11T21:55:35.921Z" }, + { url = "https://files.pythonhosted.org/packages/d8/bc/6d6c7ba8709c85f8f2c390b2b118d6fb08a783676a572271851bf45a7d22/protobuf-7.35.1-cp310-abi3-win32.whl", hash = "sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30", size = 428945, upload-time = "2026-06-11T21:55:37.034Z" }, + { url = "https://files.pythonhosted.org/packages/0a/19/8d0cb6f20a1ef7b18f1c8986ad5783f22f84cce39c6ce9a6e645ea55192e/protobuf-7.35.1-cp310-abi3-win_amd64.whl", hash = "sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87", size = 439996, upload-time = "2026-06-11T21:55:38.123Z" }, + { url = "https://files.pythonhosted.org/packages/19/c7/5f7c636ec43e0c545e28d1f1db71990108306f7bdcb89f069ba97e428e7f/protobuf-7.35.1-py3-none-any.whl", hash = "sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9", size = 171659, upload-time = "2026-06-11T21:55:39.155Z" }, +] + +[[package]] +name = "pyarrow" +version = "24.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/13/13e1069b351bdc3881266e11147ffccf687505dbb0ea74036237f5d454a5/pyarrow-24.0.0.tar.gz", hash = "sha256:85fe721a14dd823aca09127acbb06c3ca723efbd436c004f16bca601b04dcc83", size = 1180261, upload-time = "2026-04-21T10:51:25.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/d3/a1abf004482026ddc17f4503db227787fa3cfe41ec5091ff20e4fea55e57/pyarrow-24.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:02b001b3ed4723caa44f6cd1af2d5c86aa2cf9971dacc2ffa55b21237713dfba", size = 34976759, upload-time = "2026-04-21T10:48:07.258Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4a/34f0a36d28a2dd32225301b79daad44e243dc1a2bb77d43b60749be255c4/pyarrow-24.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:04920d6a71aabd08a0417709efce97d45ea8e6fb733d9ca9ecffb13c67839f68", size = 36658471, upload-time = "2026-04-21T10:48:13.347Z" }, + { url = "https://files.pythonhosted.org/packages/1f/78/543b94712ae8bb1a6023bcc1acf1a740fbff8286747c289cd9468fced2a5/pyarrow-24.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a964266397740257f16f7bb2e4f08a0c81454004beab8ff59dd531b73610e9f2", size = 45675981, upload-time = "2026-04-21T10:48:20.201Z" }, + { url = "https://files.pythonhosted.org/packages/84/9f/8fb7c222b100d314137fa40ec050de56cd8c6d957d1cfff685ce72f15b17/pyarrow-24.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6f066b179d68c413374294bc1735f68475457c933258df594443bb9d88ddc2a0", size = 48859172, upload-time = "2026-04-21T10:48:27.541Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d3/1ea72538e6c8b3b475ed78d1049a2c518e655761ea50fe1171fc855fcab7/pyarrow-24.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1183baeb14c5f587b1ec52831e665718ce632caab84b7cd6b85fd44f96114495", size = 49385733, upload-time = "2026-04-21T10:48:34.7Z" }, + { url = "https://files.pythonhosted.org/packages/c3/be/c3d8b06a1ba35f2260f8e1f771abbee7d5e345c0937aab90675706b1690a/pyarrow-24.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:806f24b4085453c197a5078218d1ee08783ebbba271badd153d1ae22a3ee804f", size = 51934335, upload-time = "2026-04-21T10:48:42.099Z" }, + { url = "https://files.pythonhosted.org/packages/9c/62/89e07a1e7329d2cde3e3c6994ba0839a24977a2beda8be6005ea3d860b99/pyarrow-24.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e4505fc6583f7b05ab854934896bcac8253b04ac1171a77dfb73efef92076d91", size = 27271748, upload-time = "2026-04-21T10:49:42.532Z" }, + { url = "https://files.pythonhosted.org/packages/17/1a/cff3a59f80b5b1658549d46611b67163f65e0664431c076ad728bf9d5af4/pyarrow-24.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:1a4e45017efbf115032e4475ee876d525e0e36c742214fbe405332480ecd6275", size = 35238554, upload-time = "2026-04-21T10:48:48.526Z" }, + { url = "https://files.pythonhosted.org/packages/a8/99/cce0f42a327bfef2c420fb6078a3eb834826e5d6697bf3009fe11d2ad051/pyarrow-24.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:7986f1fa71cee060ad00758bcc79d3a93bab8559bf978fab9e53472a2e25a17b", size = 36782301, upload-time = "2026-04-21T10:48:55.181Z" }, + { url = "https://files.pythonhosted.org/packages/2a/66/8e560d5ff6793ca29aca213c53eec0dd482dd46cb93b2819e5aab52e4252/pyarrow-24.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:d3e0b61e8efb24ed38898e5cdc5fffa9124be480008d401a1f8071500494ae42", size = 45721929, upload-time = "2026-04-21T10:49:03.676Z" }, + { url = "https://files.pythonhosted.org/packages/27/0c/a26e25505d030716e078d9f16eb74973cbf0b33b672884e9f9da1c83b871/pyarrow-24.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:55a3bc1e3df3b5567b7d27ef551b2283f0c68a5e86f1cd56abc569da4f31335b", size = 48825365, upload-time = "2026-04-21T10:49:11.714Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/771f9ecb0c65e73fe9dccdd1717901b9594f08c4515d000c7c62df573811/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:641f795b361874ac9da5294f8f443dfdbee355cf2bd9e3b8d97aaac2306b9b37", size = 49451819, upload-time = "2026-04-21T10:49:21.474Z" }, + { url = "https://files.pythonhosted.org/packages/48/da/61ae89a88732f5a785646f3ec6125dbb640fa98a540eb2b9889caa561403/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8adc8e6ce5fccf5dc707046ae4914fd537def529709cc0d285d37a7f9cd442ca", size = 51909252, upload-time = "2026-04-21T10:49:31.164Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1a/8dd5cafab7b66573fa91c03d06d213356ad4edd71813aa75e08ce2b3a844/pyarrow-24.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:9b18371ad2f44044b81a8d23bc2d8a9b6a6226dca775e8e16cfee640473d6c5d", size = 27388127, upload-time = "2026-04-21T10:49:37.334Z" }, + { url = "https://files.pythonhosted.org/packages/ad/80/d022a34ff05d2cbedd8ccf841fc1f532ecfa9eb5ed1711b56d0e0ea71fc9/pyarrow-24.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:1cc9057f0319e26333b357e17f3c2c022f1a83739b48a88b25bfd5fa2dc18838", size = 35007997, upload-time = "2026-04-21T10:49:48.796Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ff/f01485fda6f4e5d441afb8dd5e7681e4db18826c1e271852f5d3957d6a80/pyarrow-24.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:e6f1278ee4785b6db21229374a1c9e54ec7c549de5d1efc9630b6207de7e170b", size = 36678720, upload-time = "2026-04-21T10:49:55.858Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c2/2d2d5fea814237923f71b36495211f20b43a1576f9a4d6da7e751a64ec6f/pyarrow-24.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:adbbedc55506cbdabb830890444fb856bfb0060c46c6f8026c6c2f2cf86ae795", size = 45741852, upload-time = "2026-04-21T10:50:04.624Z" }, + { url = "https://files.pythonhosted.org/packages/8e/3a/28ba9c1c1ebdbb5f1b94dfebb46f207e52e6a554b7fe4132540fde29a3a0/pyarrow-24.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:ae8a1145af31d903fa9bb166824d7abe9b4681a000b0159c9fb99c11bc11ad26", size = 48889852, upload-time = "2026-04-21T10:50:12.293Z" }, + { url = "https://files.pythonhosted.org/packages/df/51/4a389acfd31dca009f8fb82d7f510bb4130f2b3a8e18cf00194d0687d8ac/pyarrow-24.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d7027eba1df3b2069e2e8d80f644fa0918b68c46432af3d088ddd390d063ecde", size = 49445207, upload-time = "2026-04-21T10:50:20.677Z" }, + { url = "https://files.pythonhosted.org/packages/19/4b/0bab2b23d2ae901b1b9a03c0efd4b2d070256f8ce3fc43f6e58c167b2081/pyarrow-24.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e56a1ffe9bf7b727432b89104cc0849c21582949dd7bdcb34f17b2001a351a76", size = 51954117, upload-time = "2026-04-21T10:50:29.14Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/f4e9145da0417b3d2c12035a8492b35ff4a3dbc653e614fcfb51d9dedb38/pyarrow-24.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:38be1808cdd068605b787e6ca9119b27eb275a0234e50212c3492331680c3b1e", size = 28001155, upload-time = "2026-04-21T10:51:22.337Z" }, + { url = "https://files.pythonhosted.org/packages/79/4f/46a49a63f43526da895b1a45bbb51d5baf8e4d77159f8528fc3e5490007f/pyarrow-24.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:418e48ce50a45a6a6c73c454677203a9c75c966cb1e92ca3370959185f197a05", size = 35250387, upload-time = "2026-04-21T10:50:35.552Z" }, + { url = "https://files.pythonhosted.org/packages/a0/da/d5e0cd5ef00796922404806d5f00325cdadc3441ce2c13fe7115f2df9a64/pyarrow-24.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:2f16197705a230a78270cdd4ea8a1d57e86b2fdcbc34a1f6aebc72e65c986f9a", size = 36797102, upload-time = "2026-04-21T10:50:42.417Z" }, + { url = "https://files.pythonhosted.org/packages/34/c7/5904145b0a593a05236c882933d439b5720f0a145381179063722fbfc123/pyarrow-24.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:fb24ac194bfc5e86839d7dcd52092ee31e5fe6733fe11f5e3b06ef0812b20072", size = 45745118, upload-time = "2026-04-21T10:50:49.324Z" }, + { url = "https://files.pythonhosted.org/packages/13/d3/cca42fe166d1c6e4d5b80e530b7949104d10e17508a90ae202dac205ce2a/pyarrow-24.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:9700ebd9a51f5895ce75ff4ac4b3c47a7d4b42bc618be8e713e5d56bacf5f931", size = 48844765, upload-time = "2026-04-21T10:50:55.579Z" }, + { url = "https://files.pythonhosted.org/packages/b0/49/942c3b79878ba928324d1e17c274ed84581db8c0a749b24bcf4cbdf15bd3/pyarrow-24.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d8ddd2768da81d3ee08cfea9b597f4abb4e8e1dc8ae7e204b608d23a0d3ab699", size = 49471890, upload-time = "2026-04-21T10:51:02.439Z" }, + { url = "https://files.pythonhosted.org/packages/76/97/ff71431000a75d84135a1ace5ca4ba11726a231a8007bbb320a4c54075d5/pyarrow-24.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:61a3d7eaa97a14768b542f3d284dc6400dd2470d9f080708b13cd46b6ae18136", size = 51932250, upload-time = "2026-04-21T10:51:10.576Z" }, + { url = "https://files.pythonhosted.org/packages/51/be/6f79d55816d5c22557cf27533543d5d70dfe692adfbee4b99f2760674f38/pyarrow-24.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:c91d00057f23b8d353039520dc3a6c09d8608164c692e9f59a175a42b2ae0c19", size = 28131282, upload-time = "2026-04-21T10:51:16.815Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +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/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-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +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/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" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "pywin32" +version = "312" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/41/12fbfd7f36ed2146d8bc9de96c2741296bf0d490b98508496cff322e274c/pywin32-312-cp313-cp313-win32.whl", hash = "sha256:7a27df850933d16a8eabfbaeb73d52b273e2da667f80d70b01a89d1f6828d02c", size = 6370184, upload-time = "2026-06-04T07:49:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/36a78e3403099d31d9746d13fdcde5accc43c1155f375a34d15983a479a7/pywin32-312-cp313-cp313-win_amd64.whl", hash = "sha256:c53e878d15a1c44788082bfe712a905433473aa38f86375b7cf8b45e3acbaaf9", size = 6914298, upload-time = "2026-06-04T07:49:38.876Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/c1697194092b76de9ed47ca124323f02c57ffc8a45c06f88a3d5acaf01eb/pywin32-312-cp313-cp313-win_arm64.whl", hash = "sha256:59aba5d5940842075343a5ddc6b11f1cdf0d1567fe745290359dfbcc7c2eb831", size = 6727640, upload-time = "2026-06-04T07:49:41.083Z" }, + { url = "https://files.pythonhosted.org/packages/fc/2b/1f3cded5822fd49c02f40544cbb5f58c7cfd6b1694869fd476cb6170ee97/pywin32-312-cp314-cp314-win32.whl", hash = "sha256:a77a90fbb6881238d2ca9c6fd797b25817f3768fe78d214a90137ff055a75f5b", size = 6468928, upload-time = "2026-06-04T07:49:43.188Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl", hash = "sha256:a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e", size = 7024157, upload-time = "2026-06-04T07:49:45.34Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/73f6d6800b4f27655abd9e9f6aaeaefcddb2b946e4674efa2bab184a7f7b/pywin32-312-cp314-cp314-win_arm64.whl", hash = "sha256:9fce94568364e0155e6dfb781ac5d95903be8baf28670632beab1b523f300daa", size = 6839598, upload-time = "2026-06-04T07:49:47.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/61/caa39686032d2ebdd04ff0ab5cbe163126c0066d98e00c9018646e42393b/pywin32-312-cp315-cp315-win32.whl", hash = "sha256:5c1fbe4a937a73ae9297384a3da38518cbc694c68ad8a809b2e19acd350f03ed", size = 6471159, upload-time = "2026-06-04T07:49:50.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cd/7e1de64a4a6f69c04214169657ccab0d93a670ea50e35eb8f489d7378249/pywin32-312-cp315-cp315-win_amd64.whl", hash = "sha256:c2f03a0f73f804a13c2735b99392b0cd426bb4f2c4d0178e5ac966a0f21618d5", size = 7025293, upload-time = "2026-06-04T07:49:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/4532e9388e65fa16b46776ef47ad631a64eda1631884488af707666350ed/pywin32-312-cp315-cp315-win_arm64.whl", hash = "sha256:a8597d28f267b39074aef51fa593530082b39cbe5a074226096857b1fed2dfb9", size = 6840337, upload-time = "2026-06-04T07:49:57.531Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "qdrant-client" +version = "1.18.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "grpcio" }, + { name = "httpx", extra = ["http2"] }, + { name = "numpy" }, + { name = "portalocker" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/45/5b1bdd15a3c7730eefb9c113600829e20d689b82b5a23f9e07d107094004/qdrant_client-1.18.0.tar.gz", hash = "sha256:52e8ece1a7d40519801bf0b70713bfa0f6b7ae28c7275bbe0b0286fbed7f6db4", size = 352580, upload-time = "2026-05-11T14:12:38.702Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/10/c437bd2ac41ef30d3019063e6ce537dc111e9214473b337ee88f7fa6359a/qdrant_client-1.18.0-py3-none-any.whl", hash = "sha256:093aa8cf8a420ee3ad2a68b007e1378d7992b2600e0b53c193fc172674f659cd", size = 398126, upload-time = "2026-05-11T14:12:36.998Z" }, +] + +[[package]] +name = "quantization-faceoff" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "datasets" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "python-dotenv" }, + { name = "qdrant-client" }, + { name = "wandb" }, +] + +[package.metadata] +requires-dist = [ + { name = "datasets", specifier = ">=5.0.0" }, + { name = "matplotlib", specifier = ">=3.11.0" }, + { name = "numpy", specifier = ">=2.5.0" }, + { name = "python-dotenv", specifier = ">=1.2.2" }, + { name = "qdrant-client", specifier = ">=1.18.0" }, + { name = "wandb", specifier = ">=0.28.0" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +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/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]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "sentry-sdk" +version = "2.63.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/c8/b3c970a5b186722d276cd40a05b3254e03bccc0208560aff20f612e018e8/sentry_sdk-2.63.0.tar.gz", hash = "sha256:2a1502bf864769275dbc8c2c9fc7a0f7f5e18358180b615d262d13a31ffba216", size = 912449, upload-time = "2026-06-16T12:45:57.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/57/cb205f7d93373120f666b9c5736dc0815524d96a9b278e7a728f018dc22a/sentry_sdk-2.63.0-py3-none-any.whl", hash = "sha256:3a9b5ddd403f79eb73bd670f75f04485819db53d28f76ced7bc09041cb0dfd6a", size = 495950, upload-time = "2026-06-16T12:45:55.819Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "smmap" +version = "5.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506, upload-time = "2026-03-09T03:43:26.1Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z" }, +] + +[[package]] +name = "tqdm" +version = "4.68.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/d7/0535a28b1f5f24f6612fb3ff1e89fb1a8d160fee0f976e0aa6803862134b/tqdm-4.68.3.tar.gz", hash = "sha256:00dfa48452b6b6cfae3dd9885636c23d3422d1ec97c66d96818cbd5e0821d482", size = 170596, upload-time = "2026-06-17T07:36:52.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/8e/bb97bb0c71802080bfc8952937d174e49cfc50de5c951dd47b2496f0dcdb/tqdm-4.68.3-py3-none-any.whl", hash = "sha256:39832cc2def2789a6f29df83f172db7416cea70052c0907a57801c5f2fdccb03", size = 78337, upload-time = "2026-06-17T07:36:50.132Z" }, +] + +[[package]] +name = "typer" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/51/9aed62104cea109b820bbd6c14245af756112017d309da813ef107d42e7e/typer-0.25.1.tar.gz", hash = "sha256:9616eb8853a09ffeabab1698952f33c6f29ffdbceb4eaeecf571880e8d7664cc", size = 122276, upload-time = "2026-04-30T19:32:16.964Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/f9/2b3ff4e56e5fa7debfaf9eb135d0da96f3e9a1d5b27222223c7296336e5f/typer-0.25.1-py3-none-any.whl", hash = "sha256:75caa44ed46a03fb2dab8808753ffacdbfea88495e74c85a28c5eefcf5f39c89", size = 58409, upload-time = "2026-04-30T19:32:18.271Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +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/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 = "wandb" +version = "0.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "gitpython" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sentry-sdk" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a7/683bfbd6cbade3012bc90d3e9c4cfc72dd62566195bf4c30321946d64b77/wandb-0.28.0.tar.gz", hash = "sha256:b20e5af0fe80e2e2a466b0466a1d60cedcc578dce0f036eca04f4a0adcad95b6", size = 40558332, upload-time = "2026-06-23T00:38:50.115Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/47/1723605f76c5d6446b6d0db65b83eda1599721bc8c1e65bd76cc1682b1a7/wandb-0.28.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:c3dab1205a5aca4abbad1eca08902cdba86add0edfa83d8d61b4429d0e79fa87", size = 24335272, upload-time = "2026-06-23T00:38:26.002Z" }, + { url = "https://files.pythonhosted.org/packages/81/ff/42b539bc75bc48fc86981dccde89327ba9b71504b805b9ba42cba7c26de9/wandb-0.28.0-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:ae255da18726ee8e731ef82cbc85035b901a28ae14cf91604c361b44b8d44ce0", size = 25557959, upload-time = "2026-06-23T00:38:28.993Z" }, + { url = "https://files.pythonhosted.org/packages/15/55/c3db03d04aeab3726066a418b2ef6a1f8119774ee510f4fbe992f52b7472/wandb-0.28.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:6dbcba12ab168aa37561f2f32dcdef8713495fc25fa7d30fdc9bfb37989694dd", size = 24878557, upload-time = "2026-06-23T00:38:31.417Z" }, + { url = "https://files.pythonhosted.org/packages/d8/5d/1385ce3c219cb5bd30d4027687e3f8d25969c7dfd09adad1cbd5080e1a72/wandb-0.28.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:325b2d0bd88be6eda5db10542499bad3710927f2569c81a84dc5eeaffc76825c", size = 26764727, upload-time = "2026-06-23T00:38:33.775Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/23b6c17a6d3d5422b007707961c4496b2f6f892624d2910c9f7742fcc202/wandb-0.28.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:8954bc1c62ae43914dce2bebfd1d9957f72350f8fbb78e5cdfe2ca9b6be8a7b8", size = 25051656, upload-time = "2026-06-23T00:38:36.281Z" }, + { url = "https://files.pythonhosted.org/packages/89/67/9be00fb2db2281063af24a148636d2dd363d337317642ab5d8e93572c794/wandb-0.28.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9fec6c908554c2dad33110c1312bc3028cc2e430f0679f16b84f82c8ea801e3b", size = 27074113, upload-time = "2026-06-23T00:38:38.737Z" }, + { url = "https://files.pythonhosted.org/packages/59/b1/f7a96c09cab0c5131b1e6466659b093b401e1653cbe6bb77b462fc1c361d/wandb-0.28.0-py3-none-win32.whl", hash = "sha256:8834ef3a7c8c43b701654162783caa7ad37af48a0ff06fc35d0d65a411f76ccd", size = 24525206, upload-time = "2026-06-23T00:38:42.041Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c4/c7bed5e981679c74e9fbb22c03ff31c42e95f266199d03d8d325f4d0e6df/wandb-0.28.0-py3-none-win_amd64.whl", hash = "sha256:ac1f82292e2da4f98297b78c3a46726b3a6c5734ecb75fc39b8db2c8a4989159", size = 24525214, upload-time = "2026-06-23T00:38:44.549Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/b5ce9696c8cb955521a7941fbc443e78b2f504894c6ae1a2d0b1de6e12ae/wandb-0.28.0-py3-none-win_arm64.whl", hash = "sha256:c5b0faf1b84cf79ebabed77538c1940a4c6053e815f767a4004e877a1354bed1", size = 22378208, upload-time = "2026-06-23T00:38:47.148Z" }, +] + +[[package]] +name = "xxhash" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/ed/07e560876a4458987511461187b285071f53cde49dd5b25cd8c51091522b/xxhash-3.8.0.tar.gz", hash = "sha256:d72b2204f37840b0f16f34192c09b994b97bd25823d723d47a1eddfacf06eb43", size = 86107, upload-time = "2026-06-27T08:17:28.798Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/1f/96f43c5c7c7c4d44721f8d2e5d74698c667a30283c4b10a7e50a56804ee3/xxhash-3.8.0-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:36434c1d1b0a4729df1fa26ab11bffed1ba52666c0beb605c98a995b470cd143", size = 38508, upload-time = "2026-06-27T08:13:46.152Z" }, + { url = "https://files.pythonhosted.org/packages/1c/d9/7d5d6af4876c6481f2e0acb2dda64dd5209574bf7ba1ad4f6af7a1f8d473/xxhash-3.8.0-cp313-cp313-android_21_x86_64.whl", hash = "sha256:a5e6497cefcb2d67f1745c66df9718a99112583af6cc2b70da0312a2eb939f1e", size = 36542, upload-time = "2026-06-27T08:13:47.497Z" }, + { url = "https://files.pythonhosted.org/packages/32/ff/66fed439d78c5a09a1491a85af29bf8923b516530116731a9ac6b14dee2b/xxhash-3.8.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:5b00b82f1be708da9404fefd658cf5cf3be5ee3be2aae4bfe3b874255badd342", size = 31102, upload-time = "2026-06-27T08:13:48.721Z" }, + { url = "https://files.pythonhosted.org/packages/56/b8/9fae0399281095f8aca1f32b21947b3c3c75ad6021b255c5c6e4b11d3866/xxhash-3.8.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:38b0cb0ab7f283413b7cace2bf710d7cf8f702ea82cbc683908691d52028a89b", size = 32096, upload-time = "2026-06-27T08:13:50.138Z" }, + { url = "https://files.pythonhosted.org/packages/61/a4/e53d162c74a8a2950dc063969914387b0680da4c7c20ad17744ec03a3b0a/xxhash-3.8.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:084312171a9798dea85e924b2674f5e1a44933050a1ea1cb1c6b1364e004c66c", size = 34585, upload-time = "2026-06-27T08:13:51.572Z" }, + { url = "https://files.pythonhosted.org/packages/69/f5/e12397e3f2c4917b6572e103a3277cd27cc56330e304bba61d195d7e5224/xxhash-3.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6a1a9e845bd3bbc57d9356819e0d198fe23282e0576b398a6282a0f8fdc75aef", size = 34622, upload-time = "2026-06-27T08:13:52.818Z" }, + { url = "https://files.pythonhosted.org/packages/70/80/c053dc51af5c942229689a0e9cb66fdc999bbd840f645e761f5ab73cbb17/xxhash-3.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9ffbde09743ebaf8957b8426948fbe85eab5e5de0d29eec407fcff5a2812a3cc", size = 32320, upload-time = "2026-06-27T08:13:54.04Z" }, + { url = "https://files.pythonhosted.org/packages/f8/a3/294171b67dfe770e1293edcf2a3f7e41302cdb8aefb258585312191b3ffe/xxhash-3.8.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a6dee3952c2b6e82e7f1dbc5dbc6167f9c84126851def7926e32827c2816169c", size = 220532, upload-time = "2026-06-27T08:13:55.448Z" }, + { url = "https://files.pythonhosted.org/packages/80/c3/d141bfdeca785c8c680abf867d4b52a5e64a55d90df242c3141a3e58c4b2/xxhash-3.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf8ff8e12416c9fa05b43c7509b9332d6ffc4090413c4e7a1dee8599763b6d59", size = 241215, upload-time = "2026-06-27T08:13:57.047Z" }, + { url = "https://files.pythonhosted.org/packages/09/5a/aeaf35143a6f3d44db73298e861405bdd9c9dacaedfc369cb43d9fd65282/xxhash-3.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cebbb322df4d97d8ef2704f49ed2f6f21f6702fafa0dc0c2a6ae70e904205689", size = 264615, upload-time = "2026-06-27T08:13:58.912Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3e/f8ca782bb34f99693faab70a7989bcc84f62ffe93c9a4cca464a33507a4b/xxhash-3.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9a8d08707b4100ebce598fc59fadf04b42d79b855818d6994f8f0fffd1df8edb", size = 242682, upload-time = "2026-06-27T08:14:00.483Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fa/ddbee4ff1542c2e88e72269a5a6bd18c3f26a80c2514e0918f5d1f3e9ec5/xxhash-3.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cf5427602dda15d8ce3c6d870d29bf07d43975f59c9d6d3f7f6f93a901b28b12", size = 473551, upload-time = "2026-06-27T08:14:02.17Z" }, + { url = "https://files.pythonhosted.org/packages/25/f5/a680d48dddab37ab2fd9189ca03f775e29e3627122e30790816d7eb365af/xxhash-3.8.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97d7bd715ea5050b6c9638b52c62adf3055b648ef6eee6892a4cd9697b530191", size = 220485, upload-time = "2026-06-27T08:14:03.765Z" }, + { url = "https://files.pythonhosted.org/packages/22/b1/7ac129b74981c07f1ff9c649f204465e86f83f9f29b2ebdc70d91514c365/xxhash-3.8.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cd25bbbab37d898f6e5a90905ce6ae2c1f8bd6668c07cef406fb3e8c8c570dd", size = 310307, upload-time = "2026-06-27T08:14:05.366Z" }, + { url = "https://files.pythonhosted.org/packages/67/e6/43e673411249dd63f6cd974523a1b32fad75cf5453e363bc8f44af215fb9/xxhash-3.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3e30e5c057f483c3c53a11b53eba091a737cb19dfead36c8b23bf5beb4a169cd", size = 238164, upload-time = "2026-06-27T08:14:07.149Z" }, + { url = "https://files.pythonhosted.org/packages/e5/95/87f8baf41f63130f3637104b7a610f82b20106332fc6e289c8dbf7955d0e/xxhash-3.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:07dd44d992ebd456752bc25b1c42cd172d94bd8cb24049300449ad0716081c3a", size = 269062, upload-time = "2026-06-27T08:14:08.834Z" }, + { url = "https://files.pythonhosted.org/packages/38/c9/3369b497cd1f926b930c52fd2400606f177790d887b49f9e86bddcc24562/xxhash-3.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3118600a3102d4707dc1c485dbc3acbbbf37819069ad3e7854e77b923745d76b", size = 225007, upload-time = "2026-06-27T08:14:10.689Z" }, + { url = "https://files.pythonhosted.org/packages/34/c8/03dceb86a8128858ac105bd6e282d62b3db6fd421a79bd8a9f6b8cdc47a7/xxhash-3.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7ed37b0c95d8fb3fbaad5e13cc0a9727eb8739d1d54b2adef28108c250cada3a", size = 240815, upload-time = "2026-06-27T08:14:12.195Z" }, + { url = "https://files.pythonhosted.org/packages/47/a5/ebd43eeb1af1dd8f0201943688b20958e99d3f6eb36481fb8c37b55ef139/xxhash-3.8.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:bb043da412e478e7b1db3407051124b85b133803794d3809ad6d92870b304fc7", size = 300632, upload-time = "2026-06-27T08:14:13.916Z" }, + { url = "https://files.pythonhosted.org/packages/df/24/c873e41a3c00dacc385c8ff08c007723f6a528922c1cea7fd9684e86dae7/xxhash-3.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:196fc132683d9311a0bdce8388ee52bfa07fdc1987cc428a27956e47ccd7b50d", size = 443293, upload-time = "2026-06-27T08:14:15.446Z" }, + { url = "https://files.pythonhosted.org/packages/4f/1b/c671272fe28f70574e3c574d58465f26460154bcc68876121872afa1c14d/xxhash-3.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfb5411af3b77c75e99db100aa15c5ba623c85d72c565e4d7a0ed1a986ff766e", size = 217327, upload-time = "2026-06-27T08:14:17.28Z" }, + { url = "https://files.pythonhosted.org/packages/57/43/b45a52f795812cb769b6ac159e69b605d18b1c067749e63dcac159e90064/xxhash-3.8.0-cp313-cp313-win32.whl", hash = "sha256:6d1d6179e26830c6690fac63f76d372f69714b977e12ca9c42188a60f51c59f5", size = 31898, upload-time = "2026-06-27T08:14:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/a1/42/2bd70e4eec25dc5990652979d708d4d7c999793d7d5af5d0e48ab4374dc1/xxhash-3.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:7c92427a56a12f4d5c7bb26dbb9e9a4658c313ecb6c2f1dca349902e3822df07", size = 32680, upload-time = "2026-06-27T08:14:20.277Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/2fe61edb6144183cf094035a8c5354c65a073127acf6379655ed1e705b70/xxhash-3.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:9fc8453642c1c6d38b4fbac8901c2452ce1fa88b27f003bfee6703cbfae9bd63", size = 29157, upload-time = "2026-06-27T08:14:21.674Z" }, + { url = "https://files.pythonhosted.org/packages/b9/b8/81d17a993b9a4750ba426ce966421681bb4b8e82a460cd346756491b8cc2/xxhash-3.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:efcacb644a915f010dc477447b045e5dcde1afaa40d16b2f0f8e7cd99c9e1635", size = 34897, upload-time = "2026-06-27T08:14:23.044Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3b/f5a368e3273440b3ea58fbd3f0b08c19f552b25ca59f43f5732ca96d2126/xxhash-3.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d1e0dbc510cff94c5efbcc2b82c28b41519fad09b5b1f9f3d99c63e3940e49a0", size = 32630, upload-time = "2026-06-27T08:14:24.603Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ab/f424359c91c55f564fbbe4e454a126eb522471109f67376f20ad19c5e663/xxhash-3.8.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ff19d016a41c90d1f519005887191896b6da1274e1d5d48b347e17eb798ffc5a", size = 225874, upload-time = "2026-06-27T08:14:25.992Z" }, + { url = "https://files.pythonhosted.org/packages/ac/c2/434579ef9235123b6c9bfa89c5614e0001e988613b91557b24aa326d9faa/xxhash-3.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aafc3eab99c50508852e34307e9565933bf128cad084cac7d2471b7ab1743de0", size = 249705, upload-time = "2026-06-27T08:14:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6c/3c0c917331ca3c71f826cedce2127f230624e2b49b992472dd5e9e72101c/xxhash-3.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5e521368ed79ae6c4d31e1e417726643c49d7d6e286f4fdabf9a8330ed8a8ff7", size = 274716, upload-time = "2026-06-27T08:14:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f3/a8bb98d3307c67e88be9642dff52854c3de3f488f95989b60ff69c8dcc42/xxhash-3.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6a0127688d116ec0c225e7e1f744e3f206de2b8822ffeb31a9ab5cc6384f92c5", size = 252019, upload-time = "2026-06-27T08:14:31.247Z" }, + { url = "https://files.pythonhosted.org/packages/f7/73/fab69a2e5b6353dde643209fe9b6adf4fbd64c888e531deffc476bfb2635/xxhash-3.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:22c0b17da2f9fea0f8836538512249871b359141616bad44c58d238b5f011f40", size = 482024, upload-time = "2026-06-27T08:14:32.973Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5b/ba34099b5278097ec9c68c0b740719813553bfd11ca17e7353de6d2a41e3/xxhash-3.8.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3d49465646b1a5e3b1729c5f636e05676a2fb52e203e3b22a5411c416c4c5302", size = 226655, upload-time = "2026-06-27T08:14:34.608Z" }, + { url = "https://files.pythonhosted.org/packages/76/0c/90aba4708a37fe752b324a7cbf10058eaa33e892cdd62751ff17a5137b93/xxhash-3.8.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c2853dea1e30ed00ca87dd87d76da5da063d302b823b3fb80ccd18421de0f251", size = 319583, upload-time = "2026-06-27T08:14:36.419Z" }, + { url = "https://files.pythonhosted.org/packages/38/46/42e349e2d3017b2688f4cb301742c37c438e77963e3fef711edce2fc5c65/xxhash-3.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:82f0102a2a3760287b7cd7f9e0a30edd4c3b18762ed1a242208d43c8e2bcf30b", size = 246000, upload-time = "2026-06-27T08:14:38.104Z" }, + { url = "https://files.pythonhosted.org/packages/ee/15/741b947ae3c768e82018c46846f8616f6aa9b5042649f318a1a6897defe3/xxhash-3.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:b8414a66a7524596d841cad5dc1adab6ce76848db5ab2b83db911fbdab1417af", size = 275455, upload-time = "2026-06-27T08:14:39.841Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b4/a9db84c9458fc8f53eaf0051377d1e9eecd9f330fb1225640027417a309d/xxhash-3.8.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0dbaa73df10414ea1e41b98691a9d8241d4c47ad8d02c726587a3cda05278e53", size = 231209, upload-time = "2026-06-27T08:14:41.543Z" }, + { url = "https://files.pythonhosted.org/packages/20/92/60a868cd34851746d0b0d95dced0f42867c7c00606f6e5dba85b70b232ce/xxhash-3.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:43fc9aaba10ab4267c90793601f60d35c3c9caa1544eceb483618a71ad9ce7da", size = 250416, upload-time = "2026-06-27T08:14:43.193Z" }, + { url = "https://files.pythonhosted.org/packages/7a/6a/168ca46a4679c32aae9246caa1fddf35981d6304487e45e992b3d4530324/xxhash-3.8.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ec5eb3d28fbb9802c6d2526f772133a06c91d6f03756fcc67c834b642ffdd51d", size = 309764, upload-time = "2026-06-27T08:14:44.79Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/13646b348c07679c818791ab2d35415db5cb20f3bc77daaa255909a401b4/xxhash-3.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:2b77c301b644cd9b4d0749a3291081ec2048a6bef7fe0487c993bbba3efb9ce0", size = 448650, upload-time = "2026-06-27T08:14:46.562Z" }, + { url = "https://files.pythonhosted.org/packages/59/9a/3d244b2acf6bbd86a363817ee09084b4684e8e11840663e19869e9e0d952/xxhash-3.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d7ece11a132325353890a144c30119073617a1299c593ca29b96c315b07e1edd", size = 223572, upload-time = "2026-06-27T08:14:48.294Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c7/143410d026a6e0d86dc69037ec2a3b8db810a54e7f443b340ac17612be2e/xxhash-3.8.0-cp313-cp313t-win32.whl", hash = "sha256:b21db84df7b9d54d9e4195a964243c1b32d745c6fbc0cfcfffee1d4bd297196a", size = 32301, upload-time = "2026-06-27T08:14:49.687Z" }, + { url = "https://files.pythonhosted.org/packages/6c/db/2240b0638161637b2f310231748a7a6a06c79fb43a3adb34c96f359762bf/xxhash-3.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:0643b7d9f598f6da6f1f6b899f4358250d0fb853242e2d712cbde27bf5a99d29", size = 33221, upload-time = "2026-06-27T08:14:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d8/52038e4fa5baf4f00654a225516168d02908edfec7ca104fbefc58af394f/xxhash-3.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:4bbacf2e938526969f8ab3334d4ac3da14ea059e1dfd1339a92f9091467e750f", size = 29294, upload-time = "2026-06-27T08:14:52.778Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ef/a09907aa28bdcdf6810d5c26656b154c60c0f06bb8db8442a1192d9c227a/xxhash-3.8.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:557e2a7cc0b6a634cf9c8e5c975d96b7da796fdeb1824569d760cf0f25b6f33f", size = 38365, upload-time = "2026-06-27T08:14:54.166Z" }, + { url = "https://files.pythonhosted.org/packages/d2/4d/d991ff77bc489c2231025e64e570502156d573c7bff69c917589cc307089/xxhash-3.8.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:dad744d1613cbfddb844dad93adbffbd51c3e9f53ceea9568f7c3b94bedc19a4", size = 36477, upload-time = "2026-06-27T08:14:55.427Z" }, + { url = "https://files.pythonhosted.org/packages/cc/0e/553eab001f1e274da73da074968cdc8be8cacfb318937ab9871b8e1909cb/xxhash-3.8.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:953f29b22c04b123cf3cd2e08bccde3a73184aeda5a1038e0054cb3355644120", size = 31116, upload-time = "2026-06-27T08:14:56.897Z" }, + { url = "https://files.pythonhosted.org/packages/55/d5/d0f4dbe7b4d9ce0125f16e45ec0be5e04f6a172edb4e2fa551c4f2eb5d7a/xxhash-3.8.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:aa699e0253ceffecf41cae858d0a11f2439d6874a0890b556387bffe11dc1c08", size = 32112, upload-time = "2026-06-27T08:14:58.126Z" }, + { url = "https://files.pythonhosted.org/packages/2e/2f/b332c7bede6a676343f2c9c8dea233c8c82753eaeda6f7a2c321d8c58ca3/xxhash-3.8.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:e232c82466babc13e956d53aa84d0149660ed6886bc195248bb4d03bf2eca301", size = 34618, upload-time = "2026-06-27T08:14:59.458Z" }, + { url = "https://files.pythonhosted.org/packages/b3/5b/2bf3c9e61c7cf8f53bce937af45e22b72bb1f224d5afb20352beba0d628d/xxhash-3.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7f75fd1c6a5028f345cd4a8c52f4774d2e5b7809fa58111c60a5502b528914a4", size = 34739, upload-time = "2026-06-27T08:15:00.863Z" }, + { url = "https://files.pythonhosted.org/packages/64/b6/e88521f5736c181b89bfb7ab756f0ca658a8a1ecece7277b75e167717614/xxhash-3.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b49d7e09b211a1ad658dbe2dbf6561eb92f2e6926bd1101e2d023178371f2d6f", size = 32332, upload-time = "2026-06-27T08:15:02.383Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a2/fba440739fa5f86d2c28738c202e88d3dd063290c8bbb20e183c5334456a/xxhash-3.8.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ceb702bc8e56b7f1f1413d42aa294045b9a0e4c9888e07edc5cd153e8c4c948f", size = 220479, upload-time = "2026-06-27T08:15:03.785Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1c/4a1639efec16416695d6c7bc6b224d3f607e0b8cbe2409fa81081a849d1c/xxhash-3.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f3c96e06bdb122e8cc84f5c7088579f3102b828efd62e9dc964a9d17c7b89e", size = 241409, upload-time = "2026-06-27T08:15:05.439Z" }, + { url = "https://files.pythonhosted.org/packages/92/d1/8ce471f8d6752384f972fd5f6363f2e8d8b867a89fbd724c6dbd91d2bb98/xxhash-3.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:415a8d06ac9bea36b1e06b603a347e0f62401042a97d7bfccec8ae2da12ad784", size = 264433, upload-time = "2026-06-27T08:15:07.027Z" }, + { url = "https://files.pythonhosted.org/packages/95/77/400a281683fd39c54e2ac497fa67bdf886baaadb8c0ba58f7e1ea1d7692e/xxhash-3.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7f5ccdd2deb5dce31201cc0eec94388cce97e681429073db50903fab0a0a8a0d", size = 242835, upload-time = "2026-06-27T08:15:08.703Z" }, + { url = "https://files.pythonhosted.org/packages/aa/a6/edda651cfa0ba8e921791e93468fae655b63894d89730fcbfe46704f0d0a/xxhash-3.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1a6cf81bc699d3a5ebfcf2fdb2a7bd2e096708d7de193f6f322944a02ba00953", size = 473800, upload-time = "2026-06-27T08:15:10.503Z" }, + { url = "https://files.pythonhosted.org/packages/dd/da/50f764ec6a93d3961fce294567e41bfca0e66d168deed354a3dc90ebeba6/xxhash-3.8.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4d12a04d7ffc0359f0eadc4535a53cab113044c8d2f262c7e9a56950a5ed50e", size = 220677, upload-time = "2026-06-27T08:15:12.622Z" }, + { url = "https://files.pythonhosted.org/packages/bb/49/9fe4ed5aac6f38629cc83b34f84748b83ad8295a578ec6a49d8bf896cafb/xxhash-3.8.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d209373fcb66138c652cf843385ee60866e50158a7869bbbf8b322d9a822b765", size = 310385, upload-time = "2026-06-27T08:15:14.384Z" }, + { url = "https://files.pythonhosted.org/packages/83/f5/1147e03c0553ed22bbae9ce47503c37ee0c5f95592aae10f339c25f61de9/xxhash-3.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b88a3fe28277811e599efa6e1c96abce8a77d60dd79c94da7a9b5c377c172b7b", size = 238330, upload-time = "2026-06-27T08:15:16.201Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d8/92daf66c1966c84da5c97a06ced1480208d3a3bd465cb0630565ec00d1b9/xxhash-3.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5d5a888a5ef997cb35f1aad346eb861cd87ecfe24f5e25d5aa4c9fd1bd3950c2", size = 268667, upload-time = "2026-06-27T08:15:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/bd/c0/080c1a92972667e183c04b03f33c877f8ec61cfa3570e61731077286648d/xxhash-3.8.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:de2836e0329c01555957a603dcd113c337c577081153d691c12a51c5be3282b0", size = 224934, upload-time = "2026-06-27T08:15:19.972Z" }, + { url = "https://files.pythonhosted.org/packages/d9/d5/cbc4e5b2bee10c94cba05b5bb2b8033e7ef44ae742583fdafcd9188e33ed/xxhash-3.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:4bc74eedb0dd5827b3be748bacf9fdb50004037a3e16c7ddb5defae2682cef71", size = 240870, upload-time = "2026-06-27T08:15:22.04Z" }, + { url = "https://files.pythonhosted.org/packages/76/f7/09679b00e192b741b65c230440c4f7e6df3251a9ad427a518ddf262ec71a/xxhash-3.8.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:c571b03d59e339b010dc84f15a6f1cff80212f3a3116c2a71e2303c95065b1f6", size = 300683, upload-time = "2026-06-27T08:15:23.647Z" }, + { url = "https://files.pythonhosted.org/packages/5f/1b/f43ec36e8c6a20c77be0bcca23f0b133ed8a0312681500d1676eebd71924/xxhash-3.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:87626acdd6e2d762c588a4ffe94258c5ef34fb6049a4a3b25019bdb7f9267a9b", size = 443407, upload-time = "2026-06-27T08:15:25.504Z" }, + { url = "https://files.pythonhosted.org/packages/45/2e/a3e3a779c5e4789daf975e05cc1c7f11bae724a03855120029d4592c8e63/xxhash-3.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:076d8a4fb290af952826922aa42a46bfc64caa31662ce4e2925a445d0e6ce57f", size = 217559, upload-time = "2026-06-27T08:15:27.234Z" }, + { url = "https://files.pythonhosted.org/packages/44/da/1c1e078ac290afff304a541a2a60965beb369ad65b4f30ec93ea1e0b7210/xxhash-3.8.0-cp314-cp314-win32.whl", hash = "sha256:52f8c7c9833d947e60df830671f6eca810d7c667051243985a561c79f1a3d545", size = 32602, upload-time = "2026-06-27T08:15:28.809Z" }, + { url = "https://files.pythonhosted.org/packages/d7/7a/d455cb83d5e3c94046234294fb5dbbe5da600d1bbdf76b9527756920cce9/xxhash-3.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:4fbfcb7dd307e23189a71050f6e27746926590330f37d5fd2ffcb8ea78de1f42", size = 33393, upload-time = "2026-06-27T08:15:30.166Z" }, + { url = "https://files.pythonhosted.org/packages/89/8f/1b14471f617bc96edbb9566099a162d918a981381c398114726cc600b76c/xxhash-3.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:ecef1e65b4715c7326002073763fe94cc44c756a0698508abb915ab3d6be6e3d", size = 30007, upload-time = "2026-06-27T08:15:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/11/8d/51ad2f9f784121c8057ef1ba36362f58d4595cbcad16322941f5b73eb53d/xxhash-3.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:02ed856a765cb6e006168595d9455ac8c3c4d60cc04cd47a158a1ac677d68f0f", size = 34957, upload-time = "2026-06-27T08:15:33.292Z" }, + { url = "https://files.pythonhosted.org/packages/1b/14/175c573ae4fac48bf21a82e5b9ceec75d64c520c51ca08de3105de539438/xxhash-3.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:eec30461a7b457611098ba7ab09363e36c8b2645b4687fb6f3d405bb646e3410", size = 32635, upload-time = "2026-06-27T08:15:34.766Z" }, + { url = "https://files.pythonhosted.org/packages/96/08/f83efabd350a50c31c851b88891e318a6f07bdbf40a43d0f7bb6cedade7f/xxhash-3.8.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b471744912d1ce5dd6d3975b7525e77518359ebf3aa1bd7d501e199f5ae488ea", size = 225969, upload-time = "2026-06-27T08:15:36.35Z" }, + { url = "https://files.pythonhosted.org/packages/7c/78/2b6d12da9cf572c84d93b88ecbf9bf6539a7c5219bde128b214396b97c8b/xxhash-3.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3748d71202bf3f279e77cb8b273b6d0f29d1bcaefb6ce6cb03b95f358863ba37", size = 249851, upload-time = "2026-06-27T08:15:38.087Z" }, + { url = "https://files.pythonhosted.org/packages/d0/0a/755eeb1882634983b24e6375a95ed233228dc48f0ef12655388bf3c7eeaf/xxhash-3.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3b3bf59ea94b2a23b0f992769804ab9401d5cdcd9df0062fe2cd78a491ae8851", size = 274842, upload-time = "2026-06-27T08:15:39.808Z" }, + { url = "https://files.pythonhosted.org/packages/77/f2/09b1231cad17c314e51664c4a004c919108ec59aba10f9a28fa061e7b8be/xxhash-3.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:40f061aa5379eba249e9367b179515571e632be6d1b6f55ac139e6fe3d08463c", size = 252218, upload-time = "2026-06-27T08:15:42.105Z" }, + { url = "https://files.pythonhosted.org/packages/b2/24/de756d55547953494eb6775aea92e258035647b3ecb8547618cd549001e1/xxhash-3.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:680d70896a61fc920cc717a0a8fe8a9fb5858c563184666e31874caa54a16d9e", size = 482135, upload-time = "2026-06-27T08:15:44.476Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/b8147633e32f98ef2b4bb0dfca82f0f63e2b02ff179f20664af64c4216a7/xxhash-3.8.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14973fbdee136588e57447401b521f466a42faca41eecdf35123c73103512ca8", size = 226776, upload-time = "2026-06-27T08:15:46.597Z" }, + { url = "https://files.pythonhosted.org/packages/29/37/ba051d8f0380d3cf845b23ba058a17d32025846463eb6bf885887fc8effe/xxhash-3.8.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:96c6bca2486cdc58b125966817a92a6abe6ef1fab86b2f8798a7e93488782540", size = 319738, upload-time = "2026-06-27T08:15:48.394Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/36e0a27dd27ffa3f7b521650cbcd52a00fb86b71343ffadb642374e8263c/xxhash-3.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0b1109ae238e932d8482f9cb568b56a405cc73bc7a36b837844087f1298dd218", size = 246136, upload-time = "2026-06-27T08:15:50.981Z" }, + { url = "https://files.pythonhosted.org/packages/fe/73/2663dbf4c09386a9dcc8a94d7a14b4609ed4bad8180ced5b848e60a9b660/xxhash-3.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1da5db0863400eade7c5a31969754d1392189f26b4105f6631da2c6c7ea3bccc", size = 275568, upload-time = "2026-06-27T08:15:52.735Z" }, + { url = "https://files.pythonhosted.org/packages/d6/58/f3ce1bc3bb3971191f6521273ddae98d3c610bcefbbed5327c3b3627c12f/xxhash-3.8.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c61b5a0f21ace5e886f177cce43826d85a7c84e35a9e17cb6d1b4ac0b7a7d833", size = 231314, upload-time = "2026-06-27T08:15:54.73Z" }, + { url = "https://files.pythonhosted.org/packages/4d/51/835706a36cdc00e5b638fba9b22218b3d40d23a7677c923feca8a3f55b98/xxhash-3.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1db4f27835a450c7e729bc9330c6e702113711cea1f873d646e3a31fe96a9732", size = 250521, upload-time = "2026-06-27T08:15:56.853Z" }, + { url = "https://files.pythonhosted.org/packages/c1/47/b0b62caa3caee58ab9de8969f66aef1c3729886f3ff60e173fda3f2762be/xxhash-3.8.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4788a470f946df34383abc6cd345088c13f897a5ee580c4cdd12b1d32ad218ef", size = 309926, upload-time = "2026-06-27T08:15:58.704Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/60e6d18a0e131c7af622374af9deede15d3c47d8e5e7221933481b57b319/xxhash-3.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3b6dfa83096cb1e54d082acebaf67f0c42667c56dc48ba536a76cac08d46391e", size = 448812, upload-time = "2026-06-27T08:16:00.619Z" }, + { url = "https://files.pythonhosted.org/packages/12/9f/c9627daa052be39a932d0e17c6bf6a9041d2cde3afacbded9196acf70261/xxhash-3.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:57ec0ba5299a9a7df376063c139f5826ff0c89b438703939af3d252c31ca96a4", size = 223639, upload-time = "2026-06-27T08:16:02.784Z" }, + { url = "https://files.pythonhosted.org/packages/a9/38/92916e008a84c1f1a9aef82e4363cdc478a722ff69e59c6afbf93d3d1fda/xxhash-3.8.0-cp314-cp314t-win32.whl", hash = "sha256:d9a61f23b999baeb84102aba767b1b3e94958eab94e6c11b08927e7dc4200795", size = 33078, upload-time = "2026-06-27T08:16:04.639Z" }, + { url = "https://files.pythonhosted.org/packages/31/7c/e413bc75121d9628bf023b2ed251411ca3a447cf00cd9aa3438ab17f6c67/xxhash-3.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:61069b260fff84116235bb93845f319284dc6b42527c215af59264f4c2ee3468", size = 33953, upload-time = "2026-06-27T08:16:06.347Z" }, + { url = "https://files.pythonhosted.org/packages/f6/eb/21a96e218375bd8b6ecd6d07cf60c8ff1a046e93cdedc3cf7bc3309edf7b/xxhash-3.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:73cecd431b4f572d38fcf1a7fe85b30eb987778ef9e7a70bc9ffcf2d64810e6f", size = 30164, upload-time = "2026-06-27T08:16:08.009Z" }, +] + +[[package]] +name = "yarl" +version = "1.24.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +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/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" }, +] From 0ce16b4d6af599ed71256e44ef11a332ddf557fe Mon Sep 17 00:00:00 2001 From: goodnight Date: Sun, 21 Jun 2026 12:05:00 +0100 Subject: [PATCH 2/4] link quantization-faceoff in readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d13a4a0..344adb5 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ New to Qdrant? Here's how to get started: 3. **Multimodal Search?** Check out [Gemini Embeddings](Gemini-embeddings/) - **✅ Ready!** 4. **Efficient Embeddings?** Learn about [Matryoshka MRL](Matryoshka-MRL/) - **✅ Ready!** 5. **Vector Compression?** Read about [Google TurboQuant](TurboQuant/) - **✅ Ready!** +6. **Quantization tradeoffs?** Compare them in the [Quantization Face-Off](Quantization-FaceOff/) - **✅ Ready!**


@@ -62,7 +63,6 @@ New to Qdrant? Here's how to get started: - **[TurboQuant](TurboQuant/)** - High-recall vector quantization and memory-efficient search ### 🚧 **Coming Soon** -- **[Quantization](quantization/)** - Vector quantization techniques (in development) - **[RAG Applications](RAG/)** - LangChain & LlamaIndex tutorials (in development) - **[Agent Workflows](Agents/)** - LangGraph implementations (in development) - **[Image Recommendations](img_recom/)** - Computer vision search systems (planned) @@ -75,6 +75,7 @@ New to Qdrant? Here's how to get started: | Status | Project | Description | Key Features | | --- | --- | --- | --- | +| ✅ | **[Quantization Face-Off](Quantization-FaceOff/)** | Head-to-head benchmark of Qdrant quantization (f32 / SQ / PQ / BQ) on 1M-scale text embeddings | Recall vs latency vs RAM, rescoring sweeps, cost analysis, W&B telemetry | | ✅ | **[Chonkie Integration](chonkie/)** | Text chunking with seamless Qdrant integration | Multiple chunking strategies, performance comparison | | 🚧 | **Image Recommendations** | Image similarity search systems (in development) | Computer vision, embeddings, similarity search | | 🚧 | **Agent Workflows** | AI agent implementations (planned) | LangGraph, agentic RAG, vector memory | From 6e76c179bb011e058361d36ea59aa09de927ff7e Mon Sep 17 00:00:00 2001 From: goodnight Date: Sun, 21 Jun 2026 12:10:00 +0100 Subject: [PATCH 3/4] fix ruff lint --- Quantization-FaceOff/qfo/telemetry.py | 1 - Quantization-FaceOff/qfo/viz/report.py | 7 +++++-- Quantization-FaceOff/qfo/viz/rescore_chart.py | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Quantization-FaceOff/qfo/telemetry.py b/Quantization-FaceOff/qfo/telemetry.py index 514bfd4..9c46cbd 100644 --- a/Quantization-FaceOff/qfo/telemetry.py +++ b/Quantization-FaceOff/qfo/telemetry.py @@ -5,7 +5,6 @@ - cold-start vs warm-cache loops. One W&B run per config so the project dashboard compares them (table / parallel-coords). """ -import os import subprocess import time diff --git a/Quantization-FaceOff/qfo/viz/report.py b/Quantization-FaceOff/qfo/viz/report.py index 830f42e..cfb6dde 100644 --- a/Quantization-FaceOff/qfo/viz/report.py +++ b/Quantization-FaceOff/qfo/viz/report.py @@ -46,7 +46,9 @@ def main(): ax[0, 1].bar([i + (j - 1) * w for i in x], [R[n][f"latency_{p}_ms"] for n in names], w, label=p, color=c) ax[0, 1].set_title("Latency (ms, lower = better)") - ax[0, 1].set_xticks(list(x)); ax[0, 1].set_xticklabels(labels); ax[0, 1].legend() + ax[0, 1].set_xticks(list(x)) + ax[0, 1].set_xticklabels(labels) + ax[0, 1].legend() # memory (resident quantized vectors) ax[1, 0].bar(labels, [mem_mb[n] for n in names], color=colors) @@ -63,7 +65,8 @@ def main(): ax[1, 1].annotate(labels[i], (R[n]["latency_p50_ms"], R[n]["recall_at_k"]), textcoords="offset points", xytext=(8, 0)) ax[1, 1].set_title("Tradeoff: recall vs p50 latency (bubble = RAM)") - ax[1, 1].set_xlabel("p50 latency (ms)"); ax[1, 1].set_ylabel("recall@10") + ax[1, 1].set_xlabel("p50 latency (ms)") + ax[1, 1].set_ylabel("recall@10") plt.tight_layout(rect=[0, 0, 1, 0.97]) path = os.path.join(OUT, "faceoff.png") diff --git a/Quantization-FaceOff/qfo/viz/rescore_chart.py b/Quantization-FaceOff/qfo/viz/rescore_chart.py index 3068384..e131f48 100644 --- a/Quantization-FaceOff/qfo/viz/rescore_chart.py +++ b/Quantization-FaceOff/qfo/viz/rescore_chart.py @@ -39,8 +39,10 @@ def main(): label=f"{coll.upper()} no rescore ({nr['recall_at_k']:.3f})") for x, r in zip(xs, rec): ax1.annotate(f"{r:.3f}", (x, r), textcoords="offset points", xytext=(0, 8), ha="center") - ax1.set_xlabel("oversampling factor"); ax1.set_ylabel("Recall@10") - ax1.set_xticks(xs); ax1.set_ylim(min(nr["recall_at_k"], min(rec)) - 0.03, 1.01) + ax1.set_xlabel("oversampling factor") + ax1.set_ylabel("Recall@10") + ax1.set_xticks(xs) + ax1.set_ylim(min(nr["recall_at_k"], min(rec)) - 0.03, 1.01) ax2 = ax1.twinx() ax2.plot(xs, lat, "--s", color="#888", alpha=0.8, label="p50 latency") From 0236441a38ee515a8754132528932aab28f14123 Mon Sep 17 00:00:00 2001 From: goodnight Date: Sun, 21 Jun 2026 12:15:00 +0100 Subject: [PATCH 4/4] format with black --- Quantization-FaceOff/qfo/bench/eval.py | 8 ++- .../qfo/bench/rescore_sweep.py | 14 ++++- Quantization-FaceOff/qfo/bench/throughput.py | 5 +- Quantization-FaceOff/qfo/config.py | 10 +-- Quantization-FaceOff/qfo/demo.py | 5 +- Quantization-FaceOff/qfo/pipeline/add_bq.py | 9 ++- Quantization-FaceOff/qfo/pipeline/ingest.py | 9 ++- Quantization-FaceOff/qfo/run_all.py | 5 +- Quantization-FaceOff/qfo/telemetry.py | 16 ++++- Quantization-FaceOff/qfo/viz/report.py | 63 ++++++++++++++----- Quantization-FaceOff/qfo/viz/rescore_chart.py | 33 ++++++++-- 11 files changed, 138 insertions(+), 39 deletions(-) diff --git a/Quantization-FaceOff/qfo/bench/eval.py b/Quantization-FaceOff/qfo/bench/eval.py index 003c780..5f5c17a 100644 --- a/Quantization-FaceOff/qfo/bench/eval.py +++ b/Quantization-FaceOff/qfo/bench/eval.py @@ -3,6 +3,7 @@ One pass per collection captures BOTH retrieved ids (recall) and latency (no double query). """ + import json import time @@ -46,7 +47,7 @@ def main(n_queries=None): client = QdrantClient(url=QDRANT_URL, timeout=120) results = {} for name in COLLECTIONS: - search_collect(client, name, queries[:200], K) # warm cache, discard + search_collect(client, name, queries[:200], K) # warm cache, discard ids, lats = search_collect(client, name, queries, K) # measured pass m = { "recall_at_k": recall_at_k(ids, gt, K), @@ -66,5 +67,8 @@ def main(n_queries=None): if __name__ == "__main__": # money-path check - assert abs(recall_at_k(np.array([[1, 2, 3]]), np.array([[1, 2, 9, 8]]), 3) - 2 / 3) < 1e-9 + assert ( + abs(recall_at_k(np.array([[1, 2, 3]]), np.array([[1, 2, 9, 8]]), 3) - 2 / 3) + < 1e-9 + ) main() diff --git a/Quantization-FaceOff/qfo/bench/rescore_sweep.py b/Quantization-FaceOff/qfo/bench/rescore_sweep.py index 7dd42db..8607661 100644 --- a/Quantization-FaceOff/qfo/bench/rescore_sweep.py +++ b/Quantization-FaceOff/qfo/bench/rescore_sweep.py @@ -7,6 +7,7 @@ Read-only on the PQ collection. No drops. """ + import json import sys import time @@ -58,10 +59,17 @@ def main(): rows = [] for label, rescore, oversampling in SWEEP: ids, lats = run_one(client, queries, K, rescore, oversampling) - m = {"label": label, "rescore": rescore, "oversampling": oversampling, - "recall_at_k": recall_at_k(ids, gt, K), **pctiles(lats)} + m = { + "label": label, + "rescore": rescore, + "oversampling": oversampling, + "recall_at_k": recall_at_k(ids, gt, K), + **pctiles(lats), + } rows.append(m) - print(f"{label:12} recall={m['recall_at_k']:.3f} p50={m['latency_p50_ms']:.1f}ms") + print( + f"{label:12} recall={m['recall_at_k']:.3f} p50={m['latency_p50_ms']:.1f}ms" + ) log_run(f"{COLL}-{label.replace(' ', '_')}", m, group=f"rescore-{COLL}") out = results_path(f"rescore_sweep_{COLL}.json") diff --git a/Quantization-FaceOff/qfo/bench/throughput.py b/Quantization-FaceOff/qfo/bench/throughput.py index 0f026c2..03345e4 100644 --- a/Quantization-FaceOff/qfo/bench/throughput.py +++ b/Quantization-FaceOff/qfo/bench/throughput.py @@ -2,6 +2,7 @@ Fires N queries across CONCURRENCY worker threads, measures queries/second + mean latency under load. Read-only on the collections. Logs to W&B group 'throughput'. """ + import json import threading import time @@ -55,7 +56,9 @@ def one(vec, _name=name): } results[name] = m log_run(f"{name}-qps", m, group="throughput") - print(f"{name:9} {m['qps']:.0f} qps mean {m['mean_latency_ms']:.1f}ms (conc={CONCURRENCY})") + print( + f"{name:9} {m['qps']:.0f} qps mean {m['mean_latency_ms']:.1f}ms (conc={CONCURRENCY})" + ) with open(results_path("throughput.json"), "w") as f: json.dump(results, f, indent=2) diff --git a/Quantization-FaceOff/qfo/config.py b/Quantization-FaceOff/qfo/config.py index 58a2215..979ea08 100644 --- a/Quantization-FaceOff/qfo/config.py +++ b/Quantization-FaceOff/qfo/config.py @@ -3,6 +3,7 @@ embeddings with title/text payload, so the quantization tradeoff is dramatic and the Qdrant UI shows real content. """ + import os from qdrant_client import models @@ -17,6 +18,7 @@ def results_path(name): os.makedirs(RESULTS_DIR, exist_ok=True) return os.path.join(RESULTS_DIR, name) + # dbpedia-openai facts DIM = 1536 DISTANCE = models.Distance.COSINE @@ -24,10 +26,10 @@ def results_path(name): # 100k = ~600MB embeddings, fast + tells the full story. Fixed at 100k: 1M needs # ~25GB disk (3 collections keep f32 originals) which doesn't fit my 15GB budget DATASET_N = 100_000 -N_QUERY = 1_000 # held out from the tail; NOT inserted into base -K = 10 # Recall@K -GT_DEPTH = 100 # exact-NN depth to store as ground truth -BATCH_SIZE = 500 # upsert batch (kept modest; 1536-d float vectors are large) +N_QUERY = 1_000 # held out from the tail; NOT inserted into base +K = 10 # Recall@K +GT_DEPTH = 100 # exact-NN depth to store as ground truth +BATCH_SIZE = 500 # upsert batch (kept modest; 1536-d float vectors are large) DATA_DIR = "data/dbpedia" # 3 configs under test. quantization=None => baseline f32. diff --git a/Quantization-FaceOff/qfo/demo.py b/Quantization-FaceOff/qfo/demo.py index 66fd555..d77c19e 100644 --- a/Quantization-FaceOff/qfo/demo.py +++ b/Quantization-FaceOff/qfo/demo.py @@ -9,6 +9,7 @@ uv run python search_demo.py # random seed article uv run python search_demo.py einstein # first article whose title contains 'einstein' """ + import random import sys @@ -39,7 +40,9 @@ def main(): print(f"\nQuery article [{seed}]: {payload[seed]['title']}") print(f" {payload[seed]['text'][:160]}...\n") - res = client.query_points("bq", query=base[seed].tolist(), limit=K + 1, search_params=RESCORE) + res = client.query_points( + "bq", query=base[seed].tolist(), limit=K + 1, search_params=RESCORE + ) neighbors = [p for p in res.points if p.id != seed][:K] assert neighbors, "no neighbors returned" diff --git a/Quantization-FaceOff/qfo/pipeline/add_bq.py b/Quantization-FaceOff/qfo/pipeline/add_bq.py index 10b90d4..bbfd380 100644 --- a/Quantization-FaceOff/qfo/pipeline/add_bq.py +++ b/Quantization-FaceOff/qfo/pipeline/add_bq.py @@ -4,6 +4,7 @@ Logic stays under __main__ + main(): upload_collection(parallel>1) uses process spawn on Windows, which re-imports this module — unguarded top-level code would re-run it. """ + import sys from qdrant_client import QdrantClient @@ -20,8 +21,12 @@ def main(): print(f"[{name}] create + upload {len(base)} vectors") make_collection(client, name, COLLECTIONS[name]) client.upload_collection( - collection_name=name, vectors=base, payload=payload, - ids=list(range(len(base))), batch_size=BATCH_SIZE, parallel=4, + collection_name=name, + vectors=base, + payload=payload, + ids=list(range(len(base))), + batch_size=BATCH_SIZE, + parallel=4, ) wait_green(client, name) print(f"[{name}] green, count={client.count(name).count}") diff --git a/Quantization-FaceOff/qfo/pipeline/ingest.py b/Quantization-FaceOff/qfo/pipeline/ingest.py index 30ba033..46efb5c 100644 --- a/Quantization-FaceOff/qfo/pipeline/ingest.py +++ b/Quantization-FaceOff/qfo/pipeline/ingest.py @@ -1,11 +1,16 @@ """Create the 3 collections (baseline / sq / pq) and load the dbpedia embeddings into each. Waits for optimizer to reach green before exiting (isolation guardrail).""" + import time from qdrant_client import QdrantClient, models from qfo.config import ( - QDRANT_URL, DIM, DISTANCE, BATCH_SIZE, COLLECTIONS, + QDRANT_URL, + DIM, + DISTANCE, + BATCH_SIZE, + COLLECTIONS, ) from qfo.data.dbpedia import load_dbpedia @@ -42,7 +47,7 @@ def main(): client.upload_collection( collection_name=name, vectors=base, - payload=payload, # title/text so the UI shows real content + payload=payload, # title/text so the UI shows real content ids=ids, batch_size=BATCH_SIZE, parallel=4, diff --git a/Quantization-FaceOff/qfo/run_all.py b/Quantization-FaceOff/qfo/run_all.py index cc397e1..4df29ec 100644 --- a/Quantization-FaceOff/qfo/run_all.py +++ b/Quantization-FaceOff/qfo/run_all.py @@ -7,6 +7,7 @@ Note: ingest + add_bq rebuild the collections from scratch (drop + re-upload). """ + import subprocess import sys @@ -28,7 +29,9 @@ def main(): for i, (mod, args, desc) in enumerate(STEPS, 1): - print(f"\n=== [{i}/{len(STEPS)}] {mod} {' '.join(args)} - {desc} ===", flush=True) + print( + f"\n=== [{i}/{len(STEPS)}] {mod} {' '.join(args)} - {desc} ===", flush=True + ) subprocess.run([sys.executable, "-m", mod, *args], check=True) print("\nfaceoff complete. charts in assets/, metrics in results/ + W&B.") diff --git a/Quantization-FaceOff/qfo/telemetry.py b/Quantization-FaceOff/qfo/telemetry.py index 9c46cbd..3302e21 100644 --- a/Quantization-FaceOff/qfo/telemetry.py +++ b/Quantization-FaceOff/qfo/telemetry.py @@ -5,6 +5,7 @@ - cold-start vs warm-cache loops. One W&B run per config so the project dashboard compares them (table / parallel-coords). """ + import subprocess import time @@ -21,8 +22,15 @@ def _to_mb(s): """'1.23GiB' / '512MiB' / '900B' -> megabytes (binary units).""" s = s.strip() - for unit, mult in (("GiB", 1024), ("MiB", 1), ("KiB", 1 / 1024), - ("GB", 1000), ("MB", 1), ("kB", 1 / 1000), ("B", 1 / 1e6)): + for unit, mult in ( + ("GiB", 1024), + ("MiB", 1), + ("KiB", 1 / 1024), + ("GB", 1000), + ("MB", 1), + ("kB", 1 / 1000), + ("B", 1 / 1e6), + ): if s.endswith(unit): return float(s[: -len(unit)]) * mult return float(s) # bare number = bytes? treat as MB-less fallback @@ -32,7 +40,9 @@ def container_rss_mb(container=CONTAINER): """Resident memory of the Qdrant container, in MB.""" out = subprocess.run( ["docker", "stats", "--no-stream", "--format", "{{.MemUsage}}", container], - capture_output=True, text=True, check=True, + capture_output=True, + text=True, + check=True, ).stdout return _to_mb(out.split("/")[0]) # "used / limit" diff --git a/Quantization-FaceOff/qfo/viz/report.py b/Quantization-FaceOff/qfo/viz/report.py index cfb6dde..bc92139 100644 --- a/Quantization-FaceOff/qfo/viz/report.py +++ b/Quantization-FaceOff/qfo/viz/report.py @@ -3,10 +3,12 @@ Memory here is the RAM-resident quantized-vector size (exact math) — the thing quantization actually shrinks. Measured per-config RAM is in Qdrant's dashboard memory panel. """ + import json import os import matplotlib + matplotlib.use("Agg") import matplotlib.pyplot as plt @@ -23,28 +25,43 @@ def main(): R = json.load(f) n_base = DATASET_N - N_QUERY - mem_mb = {k: n_base * DIM * 4 / 1e6 / COMPRESS[k] for k in R} # resident vector bytes + mem_mb = { + k: n_base * DIM * 4 / 1e6 / COMPRESS[k] for k in R + } # resident vector bytes names = list(R.keys()) labels = [LABEL.get(n, n) for n in names] palette = ["#4C72B0", "#DD8452", "#55A868", "#8172B3"] colors = [palette[i % len(palette)] for i in range(len(names))] fig, ax = plt.subplots(2, 2, figsize=(12, 9)) - fig.suptitle(f"Qdrant Quantization Face-Off — dbpedia 1536-d, {n_base:,} vectors", fontsize=14, weight="bold") + fig.suptitle( + f"Qdrant Quantization Face-Off — dbpedia 1536-d, {n_base:,} vectors", + fontsize=14, + weight="bold", + ) # recall@10 ax[0, 0].bar(labels, [R[n]["recall_at_k"] for n in names], color=colors) ax[0, 0].set_title("Recall@10 (higher = better)") ax[0, 0].set_ylim(0, 1.05) for i, n in enumerate(names): - ax[0, 0].text(i, R[n]["recall_at_k"] + 0.01, f"{R[n]['recall_at_k']:.3f}", ha="center") + ax[0, 0].text( + i, R[n]["recall_at_k"] + 0.01, f"{R[n]['recall_at_k']:.3f}", ha="center" + ) # latency percentiles x = range(len(names)) w = 0.25 - for j, (p, c) in enumerate([("p50", "#8172B3"), ("p95", "#CCB974"), ("p99", "#C44E52")]): - ax[0, 1].bar([i + (j - 1) * w for i in x], - [R[n][f"latency_{p}_ms"] for n in names], w, label=p, color=c) + for j, (p, c) in enumerate( + [("p50", "#8172B3"), ("p95", "#CCB974"), ("p99", "#C44E52")] + ): + ax[0, 1].bar( + [i + (j - 1) * w for i in x], + [R[n][f"latency_{p}_ms"] for n in names], + w, + label=p, + color=c, + ) ax[0, 1].set_title("Latency (ms, lower = better)") ax[0, 1].set_xticks(list(x)) ax[0, 1].set_xticklabels(labels) @@ -53,17 +70,33 @@ def main(): # memory (resident quantized vectors) ax[1, 0].bar(labels, [mem_mb[n] for n in names], color=colors) ax[1, 0].set_title("Vectors in RAM (MB, computed — lower = better)") - ax[1, 0].set_ylim(0, max(mem_mb.values()) * 1.25) # headroom so labels clear the title + ax[1, 0].set_ylim( + 0, max(mem_mb.values()) * 1.25 + ) # headroom so labels clear the title for i, n in enumerate(names): - ax[1, 0].text(i, mem_mb[n] + max(mem_mb.values()) * 0.02, - f"{mem_mb[n]:.0f} MB ({COMPRESS[n]}x)", ha="center") + ax[1, 0].text( + i, + mem_mb[n] + max(mem_mb.values()) * 0.02, + f"{mem_mb[n]:.0f} MB ({COMPRESS[n]}x)", + ha="center", + ) # tradeoff: recall vs p50 latency, bubble size = memory for i, n in enumerate(names): - ax[1, 1].scatter(R[n]["latency_p50_ms"], R[n]["recall_at_k"], - s=mem_mb[n] * 2, color=colors[i], alpha=0.7, label=labels[i]) - ax[1, 1].annotate(labels[i], (R[n]["latency_p50_ms"], R[n]["recall_at_k"]), - textcoords="offset points", xytext=(8, 0)) + ax[1, 1].scatter( + R[n]["latency_p50_ms"], + R[n]["recall_at_k"], + s=mem_mb[n] * 2, + color=colors[i], + alpha=0.7, + label=labels[i], + ) + ax[1, 1].annotate( + labels[i], + (R[n]["latency_p50_ms"], R[n]["recall_at_k"]), + textcoords="offset points", + xytext=(8, 0), + ) ax[1, 1].set_title("Tradeoff: recall vs p50 latency (bubble = RAM)") ax[1, 1].set_xlabel("p50 latency (ms)") ax[1, 1].set_ylabel("recall@10") @@ -73,7 +106,9 @@ def main(): plt.savefig(path, dpi=120) print("wrote", path) for n in names: - print(f"{LABEL.get(n, n):8} recall={R[n]['recall_at_k']:.3f} p50={R[n]['latency_p50_ms']:.1f}ms ram={mem_mb[n]:.0f}MB ({COMPRESS[n]}x)") + print( + f"{LABEL.get(n, n):8} recall={R[n]['recall_at_k']:.3f} p50={R[n]['latency_p50_ms']:.1f}ms ram={mem_mb[n]:.0f}MB ({COMPRESS[n]}x)" + ) if __name__ == "__main__": diff --git a/Quantization-FaceOff/qfo/viz/rescore_chart.py b/Quantization-FaceOff/qfo/viz/rescore_chart.py index e131f48..144138d 100644 --- a/Quantization-FaceOff/qfo/viz/rescore_chart.py +++ b/Quantization-FaceOff/qfo/viz/rescore_chart.py @@ -3,11 +3,13 @@ Usage: python -m qfo.viz.rescore_chart [collection] default: pq Reads results/rescore_sweep_.json + results/results.json -> assets/rescore_.png """ + import json import os import sys import matplotlib + matplotlib.use("Agg") import matplotlib.pyplot as plt @@ -31,14 +33,33 @@ def main(): lat = [r["latency_p50_ms"] for r in os_pts] fig, ax1 = plt.subplots(figsize=(9, 5.5)) - ax1.set_title(f"{coll.upper()} {COMPRESS.get(coll, '')}: rescoring buys back recall for a few ms", weight="bold") + ax1.set_title( + f"{coll.upper()} {COMPRESS.get(coll, '')}: rescoring buys back recall for a few ms", + weight="bold", + ) - ax1.axhline(base_recall, ls="--", color="#4C72B0", label=f"baseline f32 recall ({base_recall:.3f})") - ax1.plot(xs, rec, "-o", color="#55A868", lw=2, label=f"{coll.upper()} recall (rescored)") - ax1.scatter([1], [nr["recall_at_k"]], color="#C44E52", marker="X", s=110, zorder=5, - label=f"{coll.upper()} no rescore ({nr['recall_at_k']:.3f})") + ax1.axhline( + base_recall, + ls="--", + color="#4C72B0", + label=f"baseline f32 recall ({base_recall:.3f})", + ) + ax1.plot( + xs, rec, "-o", color="#55A868", lw=2, label=f"{coll.upper()} recall (rescored)" + ) + ax1.scatter( + [1], + [nr["recall_at_k"]], + color="#C44E52", + marker="X", + s=110, + zorder=5, + label=f"{coll.upper()} no rescore ({nr['recall_at_k']:.3f})", + ) for x, r in zip(xs, rec): - ax1.annotate(f"{r:.3f}", (x, r), textcoords="offset points", xytext=(0, 8), ha="center") + ax1.annotate( + f"{r:.3f}", (x, r), textcoords="offset points", xytext=(0, 8), ha="center" + ) ax1.set_xlabel("oversampling factor") ax1.set_ylabel("Recall@10") ax1.set_xticks(xs)