diff --git a/packages/media/cpp/CMakeLists.txt b/packages/media/cpp/CMakeLists.txt index e053ece5..f3a52211 100644 --- a/packages/media/cpp/CMakeLists.txt +++ b/packages/media/cpp/CMakeLists.txt @@ -60,6 +60,36 @@ FetchContent_Declare( FetchContent_MakeAvailable(cli11 asio nlohmann_json cpp_httplib) +# PicoSHA2 — header-only SHA256 for cache keys. +FetchContent_Declare( + picosha2 + GIT_REPOSITORY https://github.com/okdshin/PicoSHA2.git + GIT_TAG master + GIT_SHALLOW TRUE +) +FetchContent_GetProperties(picosha2) +if(NOT picosha2_POPULATED) + FetchContent_Populate(picosha2) +endif() + +# p-ranav/glob — same as packages/kbot/cpp (glob / rglob for **). +FetchContent_Declare( + pranav_glob + GIT_REPOSITORY https://github.com/p-ranav/glob.git + GIT_TAG master + GIT_SHALLOW TRUE +) +FetchContent_GetProperties(pranav_glob) +if(NOT pranav_glob_POPULATED) + FetchContent_Populate(pranav_glob) +endif() +add_library(pranav_glob STATIC ${pranav_glob_SOURCE_DIR}/source/glob.cpp) +target_include_directories(pranav_glob PUBLIC ${pranav_glob_SOURCE_DIR}/include) +target_compile_features(pranav_glob PUBLIC cxx_std_17) +if(MSVC) + target_compile_options(pranav_glob PRIVATE /permissive-) +endif() + # laserpants/dotenv-cpp — load .env (same pattern as packages/kbot/cpp). FetchContent_Declare( laserpants_dotenv @@ -79,6 +109,8 @@ find_package(Vips REQUIRED) add_executable(media-img src/main.cpp + src/core/cache.cpp + src/core/glob_paths.cpp src/core/resize.cpp src/http/serve.cpp src/ipc/ipc_serve.cpp @@ -87,6 +119,7 @@ add_executable(media-img target_include_directories(media-img PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${asio_SOURCE_DIR}/asio/include + ${picosha2_SOURCE_DIR} ) target_compile_definitions(media-img PRIVATE @@ -107,6 +140,7 @@ target_link_libraries(media-img PRIVATE nlohmann_json::nlohmann_json httplib::httplib laserpants::dotenv + pranav_glob Vips::vips ) diff --git a/packages/media/cpp/README.md b/packages/media/cpp/README.md index 6dedd13e..2c5c5253 100644 --- a/packages/media/cpp/README.md +++ b/packages/media/cpp/README.md @@ -11,7 +11,7 @@ CMake-based **`media-img`** binary: **CLI**, **HTTP REST** (`serve`), and **line | CMake | ≥ 3.20 | | C++ compiler | C++17 | | **libvips** | **Required** — pkg-config (Unix) or `third_party/vips-dev-*` / `VIPS_ROOT` (Windows) | -| Git | For `FetchContent` (CLI11, Asio, httplib, json, dotenv) | +| Git | For `FetchContent` (CLI11, Asio, httplib, json, dotenv, [p-ranav/glob](https://github.com/p-ranav/glob), [PicoSHA2](https://github.com/okdshin/PicoSHA2) for cache keys) | | Node.js | Optional — `npm run test:media` (Node 18+) | ### Installing libvips @@ -79,9 +79,104 @@ Sharp wraps libvips: **decode → process → encode**. We do the same with `vip | `flip` / `flop` | `flip` / `flop` | | | Letterbox | `background` | `#rrggbb` for `contain` | -**REST** `POST /v1/resize` accepts the same keys as columns in the table (plus `input`, `output` paths). +**REST** `POST /v1/resize` and **IPC** use the same JSON keys as the table, plus the fields in the **“Batch paths & cache”** section below. -**IPC** sends one JSON object per line with the same keys. +--- + +## Batch paths & cache: globs, variables, caching + +Use this when **one** `resize` invocation (CLI, or a single REST/IPC request) should match **many** inputs or build **per-file** output paths. See also [docs/Examples.md](../docs/Examples.md) (TypeScript / Sharp reference). + +### Summary + +| Topic | What it does | +|-------|----------------| +| **Input glob** | `*` / `?` / `**` in `input` expand to a list of files ([p-ranav/glob](https://github.com/p-ranav/glob)). | +| **Destination variables** | `output` may contain `${SRC_DIR}`, `${SRC_NAME}`, `${SRC_FILE_EXT}` (or `&{…}`) — expanded **per matched input**. | +| **expand_glob** | JSON `false`: treat `input` / `output` as literal paths (no glob expansion). Templates still apply if `output` contains `${SRC_` / `&{SRC_`. | +| **Output cache** | SHA-256 key from input path + size + mtime + options; default dir `/cache/images/`. | + +**Not supported in C++:** Bash **extglob** (e.g. `*.+(jpg)`). Use `*.jpg`, `**/*.jpg`, or separate runs. **Bare** `{SRC_NAME}` without `$` / `&` is not a placeholder — use `${SRC_NAME}` or `&{SRC_NAME}`. + +### Input globs + +- **Syntax:** `*`, `?`, and `**` for recursion. Paths are resolved from the current working directory unless absolute. +- **Multiple files → directory output:** `output` must be an **existing** directory, **or** a **new** directory given with a **trailing** `/` or `\` (parent dirs are created). +- **Single file** from a literal path or a glob that matches one file: `output` can be a full file path, or a directory (trailing sep) to keep the original filename. + +**CLI:** use positional `input`/`output` or `--src` / `--dst` together. + +```bash +./dist/media-img resize './photos/**/*.jpg' ./out/ +./dist/media-img resize --src './shots/*.png' --dst ./thumbs/ +``` + +**JSON:** same strings in `"input"` and `"output"`. When `expand_glob` is true (default), glob expansion runs when the pattern contains `*`, `?`, or `**`. + +### Destination variables (`${SRC_*}` / `&{SRC_*}`) + +Placeholders are expanded **after** inputs are resolved (glob or single file). Each output path is built from the **absolute** input file for that row. + +| Placeholder | Meaning | +|-------------|---------| +| **SRC_DIR** | Parent directory of the current input (generic path, `/` separators). | +| **SRC_NAME** | Filename **stem** without extension (`photo` for `photo.JPG`). | +| **SRC_FILE_EXT** | Extension **with** leading dot (e.g. `.jpg`), or empty if none. | + +Use cases: write beside each source (`${SRC_DIR}/out/${SRC_NAME}.webp`), suffix stems (`${SRC_NAME}_thumb.jpg`), or change extension via `format` / path. + +```bash +./dist/media-img resize --src ./photo.jpg --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800 +./dist/media-img resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}.webp' --max-width 1920 +``` + +**REST / IPC** — same strings in JSON (escape quotes in shell as needed): + +```bash +curl -s -X POST http://127.0.0.1:8080/v1/resize \ + -H 'Content-Type: application/json' \ + -d '{"input":"/data/in.png","output":"/out/${SRC_NAME}_thumb.webp","max_width":256}' +``` + +**Responses:** `{"ok":true}` for a single output; if more than one file is produced, `{"ok":true,"count":N,"outputs":["..."]}`. + +### JSON reference (batch + cache) + +| Field | Type | Default | Purpose | +|-------|------|---------|---------| +| `input` | string | required | Source path or glob. | +| `output` | string | required | File path, directory, or template with `${SRC_*}` / `&{SRC_*}`. | +| `expand_glob` | bool | `true` | If `false`, no glob expansion; paths are literal. | +| `cache` | bool | `true` (or server default from `serve` / `ipc` flags) | Enable/disable cache for this request. | +| `cache_dir` | string | empty → `/cache/images` (or server `--cache-dir`) | Root directory for cached blobs. | + +All **resize** options (`max_width`, `fit`, …) participate in the same JSON body. + +### Output cache + +- **Default:** caching is **on**; root dir **`cache/images`** under the process **current working directory** (override with `--cache-dir` or JSON `cache_dir`). +- **Key:** **SHA-256** (PicoSHA2) over canonical input path, file size, modification time, and a stable encoding of **all** resize options — change any of these and you get a miss. +- **Storage:** `/XX/` (two-letter shard). +- **Hit:** copy cached bytes to `output`; **libvips is not initialized** for that job. +- **Miss:** run resize, then **best-effort** store into cache (failure to store does not fail the request). + +**CLI (`resize`):** `--no-cache`, `--cache-dir `. + +**`serve` / `ipc`:** same flags set **defaults** for requests that omit `cache` / `cache_dir`. Per-request JSON can still set `"cache": true` or `"cache_dir": "/path"` to override. + +**Batch + cache:** glob batches run **sequentially** (one file after another); each file may hit or miss the cache independently. + +### `serve` example with cache and glob + +```bash +./dist/media-img serve --host 127.0.0.1 -p 8080 --cache-dir /var/cache/media-img +``` + +```bash +curl -s -X POST http://127.0.0.1:8080/v1/resize \ + -H 'Content-Type: application/json' \ + -d '{"input":"/data/in/*.jpg","output":"/data/out/","max_width":400,"cache":true,"cache_dir":"/var/cache/media-img"}' +``` ## Concurrency @@ -174,14 +269,18 @@ curl -s -X POST http://127.0.0.1:8080/v1/resize \ -d '{"input":"/path/in.png","output":"/path/out.webp","max_width":400,"quality":80}' ``` +Optional: `"cache":false`, `"expand_glob":false`, `"cache_dir":"..."` — see **Batch paths & cache** above. + ### `ipc` — one JSON line per connection (TCP; Unix socket on Linux/macOS) ```bash -./dist/media-img ipc --host 127.0.0.1 -p 9333 +./dist/media-img ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images # elsewhere: send a single line, read one line back, e.g. -# {"input":"/tmp/a.jpg","output":"/tmp/b.webp","max_width":320,"format":"webp"} +# {"input":"/tmp/a.jpg","output":"/tmp/b.webp","max_width":320,"format":"webp","cache":true} ``` +Same JSON fields as REST (`input`, `output`, globs, `expand_glob`, `cache`, `cache_dir`, resize options). + ### `kbot` — forward to another binary (optional) Requires **`KBOT_EXE`** pointing at the kbot executable; remaining args are passed through. @@ -199,6 +298,8 @@ npm run test:media Requires a built `dist/media-img` **linked against libvips** and fixture PNGs (`npm run generate:assets` if missing). +The suite covers **REST**, **IPC (TCP)**, optional **Unix socket** on non-Windows, **destination templates** (`npm run test:media:templates`), and **recursive glob + `${SRC_DIR}` / `${SRC_NAME}`** (`npm run test:media:glob` — outputs under `tests/assets/glob-in/**/out/`, gitignored, for manual inspection). + ## License See [LICENSE](LICENSE) in this directory when present. diff --git a/packages/media/cpp/ROLLOUT.md b/packages/media/cpp/ROLLOUT.md deleted file mode 100644 index ee56f62e..00000000 --- a/packages/media/cpp/ROLLOUT.md +++ /dev/null @@ -1,50 +0,0 @@ -# Media image service (C++) — rollout plan - -## Goals - -- **CLI**: resize files on disk (batch-friendly, scripts). -- **REST**: HTTP server for resize jobs (Node or other clients). -- **IPC**: async socket server — **Unix domain socket** on Linux/macOS; **TCP loopback** on Windows (Asio does not ship portable UDS on Windows; optional **named pipe** phase later). - -## Dependencies (CMake / FetchContent) - -| Component | Choice | Notes | -|-----------|--------|--------| -| CLI | [CLI11](https://github.com/CLIUtils/CLI11) | Same pattern as `kbot/cpp`. | -| Async I/O | [Asio](https://think-async.com/Asio/) (standalone) | UDS + accept loop; no Boost linkage. | -| HTTP | [cpp-httplib](https://github.com/yhirose/cpp-httplib) | Header-only REST; good for a dedicated worker. | -| JSON | [nlohmann/json](https://github.com/nlohmann/json) | Request/response bodies. | -| Images (v1) | [stb](https://github.com/nothings/stb) | No system install; PNG/JPEG in-tree. | -| Images (later) | **libvips** | Optional `find_package` / vcpkg when you need parity with Sharp speed/quality. | - -## Phases - -### Phase 0 — Scaffold (this PR) - -- CMake presets `dev` / `release`, output `dist/media-img(.exe)`. -- `npm run build:release` green on Windows MSVC. - -### Phase 1 — Core + CLI - -- `resize` command: input path, output path, max width/height, format (png/jpeg). -- Single-threaded; deterministic errors to stderr. - -### Phase 2 — REST - -- `serve --bind --port`: `GET /health`, `POST /v1/resize` (JSON with paths or raw body + query params — v1 uses file paths for simplicity). - -### Phase 3 — IPC - -- `ipc --listen `: line-delimited or length-prefixed JSON requests (documented in `docs/ipc-protocol.md` stub). -- Linux: Unix socket. Windows: TCP `127.0.0.1:` (or named pipe in a follow-up). - -### Phase 4 — Production hardening - -- Optional libvips backend behind `MEDIA_USE_VIPS`. -- Worker pool, request limits, metrics. -- CI: Linux + Windows matrix. - -## npm scripts - -- `npm run build:release` — configure + build Release. -- `npm run run` — `dist/media-img --help`. diff --git a/packages/media/cpp/cache/images/00/005790ced6597aef81d01d2addbad574b3b545a7d82e104715c952a40ed22c99 b/packages/media/cpp/cache/images/00/005790ced6597aef81d01d2addbad574b3b545a7d82e104715c952a40ed22c99 new file mode 100644 index 00000000..db14bafe Binary files /dev/null and b/packages/media/cpp/cache/images/00/005790ced6597aef81d01d2addbad574b3b545a7d82e104715c952a40ed22c99 differ diff --git a/packages/media/cpp/cache/images/00/0087635e962c75857a3b1f450655bf6c07e7911e71d90196ea8b1add284a1cf8 b/packages/media/cpp/cache/images/00/0087635e962c75857a3b1f450655bf6c07e7911e71d90196ea8b1add284a1cf8 new file mode 100644 index 00000000..be3c0bf3 Binary files /dev/null and b/packages/media/cpp/cache/images/00/0087635e962c75857a3b1f450655bf6c07e7911e71d90196ea8b1add284a1cf8 differ diff --git a/packages/media/cpp/cache/images/01/01759d578fd3575efb0df8c6e6f643a580c2e5e63bbfaa97489b1c6ea76e98bb b/packages/media/cpp/cache/images/01/01759d578fd3575efb0df8c6e6f643a580c2e5e63bbfaa97489b1c6ea76e98bb new file mode 100644 index 00000000..32cbadda Binary files /dev/null and b/packages/media/cpp/cache/images/01/01759d578fd3575efb0df8c6e6f643a580c2e5e63bbfaa97489b1c6ea76e98bb differ diff --git a/packages/media/cpp/cache/images/01/01f40f430d0ff8b0c16d522f573209b6b5f7f97106188d9c14f57f6f60bbcd70 b/packages/media/cpp/cache/images/01/01f40f430d0ff8b0c16d522f573209b6b5f7f97106188d9c14f57f6f60bbcd70 new file mode 100644 index 00000000..480f0979 Binary files /dev/null and b/packages/media/cpp/cache/images/01/01f40f430d0ff8b0c16d522f573209b6b5f7f97106188d9c14f57f6f60bbcd70 differ diff --git a/packages/media/cpp/cache/images/02/0258a6361b9f0b789b8eb050921afb07dad08c48e95afb134f00df299eda94ef b/packages/media/cpp/cache/images/02/0258a6361b9f0b789b8eb050921afb07dad08c48e95afb134f00df299eda94ef new file mode 100644 index 00000000..fbb85ed8 Binary files /dev/null and b/packages/media/cpp/cache/images/02/0258a6361b9f0b789b8eb050921afb07dad08c48e95afb134f00df299eda94ef differ diff --git a/packages/media/cpp/cache/images/04/04e1395ca2a8c84708d173f658ad2c2d236a3d6b730fd8c94ffcfb81f30e708b b/packages/media/cpp/cache/images/04/04e1395ca2a8c84708d173f658ad2c2d236a3d6b730fd8c94ffcfb81f30e708b new file mode 100644 index 00000000..06351f8a Binary files /dev/null and b/packages/media/cpp/cache/images/04/04e1395ca2a8c84708d173f658ad2c2d236a3d6b730fd8c94ffcfb81f30e708b differ diff --git a/packages/media/cpp/cache/images/05/050c2cf80708c6a3876ed86bac40ec554d9d3f71d30567b6b769b78425b1ad2f b/packages/media/cpp/cache/images/05/050c2cf80708c6a3876ed86bac40ec554d9d3f71d30567b6b769b78425b1ad2f new file mode 100644 index 00000000..8322ebc2 Binary files /dev/null and b/packages/media/cpp/cache/images/05/050c2cf80708c6a3876ed86bac40ec554d9d3f71d30567b6b769b78425b1ad2f differ diff --git a/packages/media/cpp/cache/images/07/07459a43ef692c109a29bd0e58d9120a249132fbf826c9027c7dbaebc418e3a7 b/packages/media/cpp/cache/images/07/07459a43ef692c109a29bd0e58d9120a249132fbf826c9027c7dbaebc418e3a7 new file mode 100644 index 00000000..cb580c89 Binary files /dev/null and b/packages/media/cpp/cache/images/07/07459a43ef692c109a29bd0e58d9120a249132fbf826c9027c7dbaebc418e3a7 differ diff --git a/packages/media/cpp/cache/images/07/0753cb440c0d371c8d2fd3869cd5a51d976295433ef6028d2ce9c8cd8b8390f1 b/packages/media/cpp/cache/images/07/0753cb440c0d371c8d2fd3869cd5a51d976295433ef6028d2ce9c8cd8b8390f1 new file mode 100644 index 00000000..7496a665 Binary files /dev/null and b/packages/media/cpp/cache/images/07/0753cb440c0d371c8d2fd3869cd5a51d976295433ef6028d2ce9c8cd8b8390f1 differ diff --git a/packages/media/cpp/cache/images/07/07b8cfbcd822edbe2e721549d319a9bcaabd6c98829a13832dfa95f69225e930 b/packages/media/cpp/cache/images/07/07b8cfbcd822edbe2e721549d319a9bcaabd6c98829a13832dfa95f69225e930 new file mode 100644 index 00000000..216de721 Binary files /dev/null and b/packages/media/cpp/cache/images/07/07b8cfbcd822edbe2e721549d319a9bcaabd6c98829a13832dfa95f69225e930 differ diff --git a/packages/media/cpp/cache/images/0a/0a81c9fad0398b1e13b4524ad6450c9884a9b25b193bf5e450ecaea3d9e71115 b/packages/media/cpp/cache/images/0a/0a81c9fad0398b1e13b4524ad6450c9884a9b25b193bf5e450ecaea3d9e71115 new file mode 100644 index 00000000..f5129e14 Binary files /dev/null and b/packages/media/cpp/cache/images/0a/0a81c9fad0398b1e13b4524ad6450c9884a9b25b193bf5e450ecaea3d9e71115 differ diff --git a/packages/media/cpp/cache/images/0a/0aed912bc0ccff6841644b0a8d9e94893682511644f1ed297396f44090af4f84 b/packages/media/cpp/cache/images/0a/0aed912bc0ccff6841644b0a8d9e94893682511644f1ed297396f44090af4f84 new file mode 100644 index 00000000..3b8ab409 Binary files /dev/null and b/packages/media/cpp/cache/images/0a/0aed912bc0ccff6841644b0a8d9e94893682511644f1ed297396f44090af4f84 differ diff --git a/packages/media/cpp/cache/images/0c/0c461c12da982822607459f30cdc3c76c19758d8a95801c70d0b8a240af92e31 b/packages/media/cpp/cache/images/0c/0c461c12da982822607459f30cdc3c76c19758d8a95801c70d0b8a240af92e31 new file mode 100644 index 00000000..28787004 Binary files /dev/null and b/packages/media/cpp/cache/images/0c/0c461c12da982822607459f30cdc3c76c19758d8a95801c70d0b8a240af92e31 differ diff --git a/packages/media/cpp/cache/images/0d/0d188d061c354aea1e02c6fc6134f5c35222636cda511f19bf4862d909776934 b/packages/media/cpp/cache/images/0d/0d188d061c354aea1e02c6fc6134f5c35222636cda511f19bf4862d909776934 new file mode 100644 index 00000000..165714f0 Binary files /dev/null and b/packages/media/cpp/cache/images/0d/0d188d061c354aea1e02c6fc6134f5c35222636cda511f19bf4862d909776934 differ diff --git a/packages/media/cpp/cache/images/0d/0dfb3249ad37196dcef3be680940509221814ba22e08942a00f4e14a37a5639c b/packages/media/cpp/cache/images/0d/0dfb3249ad37196dcef3be680940509221814ba22e08942a00f4e14a37a5639c new file mode 100644 index 00000000..6e13baa1 Binary files /dev/null and b/packages/media/cpp/cache/images/0d/0dfb3249ad37196dcef3be680940509221814ba22e08942a00f4e14a37a5639c differ diff --git a/packages/media/cpp/cache/images/0e/0e013d2fd19b2ab21ecbe4c497924952b941f1cf4264f49a9d21a28aae363340 b/packages/media/cpp/cache/images/0e/0e013d2fd19b2ab21ecbe4c497924952b941f1cf4264f49a9d21a28aae363340 new file mode 100644 index 00000000..6905078d Binary files /dev/null and b/packages/media/cpp/cache/images/0e/0e013d2fd19b2ab21ecbe4c497924952b941f1cf4264f49a9d21a28aae363340 differ diff --git a/packages/media/cpp/cache/images/0f/0f8bddc1f12252d78b7fe2671dca4733595d12208c08a0c1b369cd8b877d1180 b/packages/media/cpp/cache/images/0f/0f8bddc1f12252d78b7fe2671dca4733595d12208c08a0c1b369cd8b877d1180 new file mode 100644 index 00000000..36e302d4 Binary files /dev/null and b/packages/media/cpp/cache/images/0f/0f8bddc1f12252d78b7fe2671dca4733595d12208c08a0c1b369cd8b877d1180 differ diff --git a/packages/media/cpp/cache/images/10/10bef2088a3683216c40ac68c626d84a6a0ecf27e0bed15de125681d084c7605 b/packages/media/cpp/cache/images/10/10bef2088a3683216c40ac68c626d84a6a0ecf27e0bed15de125681d084c7605 new file mode 100644 index 00000000..52f5316b Binary files /dev/null and b/packages/media/cpp/cache/images/10/10bef2088a3683216c40ac68c626d84a6a0ecf27e0bed15de125681d084c7605 differ diff --git a/packages/media/cpp/cache/images/12/12c703785e24aa598af7e08f8c151f647834b14cdea6b743c80cd29f2b08309e b/packages/media/cpp/cache/images/12/12c703785e24aa598af7e08f8c151f647834b14cdea6b743c80cd29f2b08309e new file mode 100644 index 00000000..4b3ca4b1 Binary files /dev/null and b/packages/media/cpp/cache/images/12/12c703785e24aa598af7e08f8c151f647834b14cdea6b743c80cd29f2b08309e differ diff --git a/packages/media/cpp/cache/images/12/12d8c1dada66775311b4fb6b730fde7cba91c6a0a9e3e8980686b2c98e3e2111 b/packages/media/cpp/cache/images/12/12d8c1dada66775311b4fb6b730fde7cba91c6a0a9e3e8980686b2c98e3e2111 new file mode 100644 index 00000000..73e8c705 Binary files /dev/null and b/packages/media/cpp/cache/images/12/12d8c1dada66775311b4fb6b730fde7cba91c6a0a9e3e8980686b2c98e3e2111 differ diff --git a/packages/media/cpp/cache/images/12/12fab9e8d620afc4a45c613de013b7cb8391229222e8ab5193d8144e3fb73109 b/packages/media/cpp/cache/images/12/12fab9e8d620afc4a45c613de013b7cb8391229222e8ab5193d8144e3fb73109 new file mode 100644 index 00000000..bf7a4c03 Binary files /dev/null and b/packages/media/cpp/cache/images/12/12fab9e8d620afc4a45c613de013b7cb8391229222e8ab5193d8144e3fb73109 differ diff --git a/packages/media/cpp/cache/images/13/13ea0681e7cecd842f5436d4c92fce2a983b71b59f6af5d517fd5b03e9d7a4fd b/packages/media/cpp/cache/images/13/13ea0681e7cecd842f5436d4c92fce2a983b71b59f6af5d517fd5b03e9d7a4fd new file mode 100644 index 00000000..d24f6b0e Binary files /dev/null and b/packages/media/cpp/cache/images/13/13ea0681e7cecd842f5436d4c92fce2a983b71b59f6af5d517fd5b03e9d7a4fd differ diff --git a/packages/media/cpp/cache/images/14/140dd182742694f46e1879f99fddd45594dfa6a7d846a617668cce18939cef3a b/packages/media/cpp/cache/images/14/140dd182742694f46e1879f99fddd45594dfa6a7d846a617668cce18939cef3a new file mode 100644 index 00000000..8a7eafa9 Binary files /dev/null and b/packages/media/cpp/cache/images/14/140dd182742694f46e1879f99fddd45594dfa6a7d846a617668cce18939cef3a differ diff --git a/packages/media/cpp/cache/images/14/144f25dab17dff1f7a94a0ce0b74b1c3787c6a480113da9848f7d0697aa4ac3f b/packages/media/cpp/cache/images/14/144f25dab17dff1f7a94a0ce0b74b1c3787c6a480113da9848f7d0697aa4ac3f new file mode 100644 index 00000000..3e586fc2 Binary files /dev/null and b/packages/media/cpp/cache/images/14/144f25dab17dff1f7a94a0ce0b74b1c3787c6a480113da9848f7d0697aa4ac3f differ diff --git a/packages/media/cpp/cache/images/15/1510c3d5fd494f802f49ab63840872b855148dc393900f3e5824146932709ec3 b/packages/media/cpp/cache/images/15/1510c3d5fd494f802f49ab63840872b855148dc393900f3e5824146932709ec3 new file mode 100644 index 00000000..56414d94 Binary files /dev/null and b/packages/media/cpp/cache/images/15/1510c3d5fd494f802f49ab63840872b855148dc393900f3e5824146932709ec3 differ diff --git a/packages/media/cpp/cache/images/15/15268845b87528318c43659af8f56e8459b13101be3a1087a65f235dfa9902c1 b/packages/media/cpp/cache/images/15/15268845b87528318c43659af8f56e8459b13101be3a1087a65f235dfa9902c1 new file mode 100644 index 00000000..9c0807bd Binary files /dev/null and b/packages/media/cpp/cache/images/15/15268845b87528318c43659af8f56e8459b13101be3a1087a65f235dfa9902c1 differ diff --git a/packages/media/cpp/cache/images/15/1572a5eb3227e6b184e1f3d33766a79808296f548aa79b3f0679bfd13e254ebf b/packages/media/cpp/cache/images/15/1572a5eb3227e6b184e1f3d33766a79808296f548aa79b3f0679bfd13e254ebf new file mode 100644 index 00000000..273fcabf Binary files /dev/null and b/packages/media/cpp/cache/images/15/1572a5eb3227e6b184e1f3d33766a79808296f548aa79b3f0679bfd13e254ebf differ diff --git a/packages/media/cpp/cache/images/15/15f73115f4bf7abe19d8d1b5957e65ad4c8fee904c7f9547c9db33c5c287cf0f b/packages/media/cpp/cache/images/15/15f73115f4bf7abe19d8d1b5957e65ad4c8fee904c7f9547c9db33c5c287cf0f new file mode 100644 index 00000000..1a968c27 Binary files /dev/null and b/packages/media/cpp/cache/images/15/15f73115f4bf7abe19d8d1b5957e65ad4c8fee904c7f9547c9db33c5c287cf0f differ diff --git a/packages/media/cpp/cache/images/15/15f79154ff845554279e4e0cb3fd085f84077df7caf5af753202e0b7a9cf5446 b/packages/media/cpp/cache/images/15/15f79154ff845554279e4e0cb3fd085f84077df7caf5af753202e0b7a9cf5446 new file mode 100644 index 00000000..59d892b1 Binary files /dev/null and b/packages/media/cpp/cache/images/15/15f79154ff845554279e4e0cb3fd085f84077df7caf5af753202e0b7a9cf5446 differ diff --git a/packages/media/cpp/cache/images/18/181924777df58295b68a5f94baed60edd23c841f1c887c7e25407bd385fd1406 b/packages/media/cpp/cache/images/18/181924777df58295b68a5f94baed60edd23c841f1c887c7e25407bd385fd1406 new file mode 100644 index 00000000..a9c7f042 Binary files /dev/null and b/packages/media/cpp/cache/images/18/181924777df58295b68a5f94baed60edd23c841f1c887c7e25407bd385fd1406 differ diff --git a/packages/media/cpp/cache/images/18/189881b68eb28347a7685a531a7a590429e3681d725e4dce68daff775f4fb6c2 b/packages/media/cpp/cache/images/18/189881b68eb28347a7685a531a7a590429e3681d725e4dce68daff775f4fb6c2 new file mode 100644 index 00000000..13fbd20c Binary files /dev/null and b/packages/media/cpp/cache/images/18/189881b68eb28347a7685a531a7a590429e3681d725e4dce68daff775f4fb6c2 differ diff --git a/packages/media/cpp/cache/images/18/18b2b80786b801e68b0a746383066489254ee9fff8687b76f7584b324ea767ba b/packages/media/cpp/cache/images/18/18b2b80786b801e68b0a746383066489254ee9fff8687b76f7584b324ea767ba new file mode 100644 index 00000000..2e542834 Binary files /dev/null and b/packages/media/cpp/cache/images/18/18b2b80786b801e68b0a746383066489254ee9fff8687b76f7584b324ea767ba differ diff --git a/packages/media/cpp/cache/images/19/19cb568d994f22bea84c5c7297e960ef614adb59a8ad2bc8cabf7cadbe8a96dd b/packages/media/cpp/cache/images/19/19cb568d994f22bea84c5c7297e960ef614adb59a8ad2bc8cabf7cadbe8a96dd new file mode 100644 index 00000000..4d3b775e Binary files /dev/null and b/packages/media/cpp/cache/images/19/19cb568d994f22bea84c5c7297e960ef614adb59a8ad2bc8cabf7cadbe8a96dd differ diff --git a/packages/media/cpp/cache/images/1a/1af9dfda72578c678e5df5bbb8eefb6c71b6e84bf4387cc8b4b2111ee03e5578 b/packages/media/cpp/cache/images/1a/1af9dfda72578c678e5df5bbb8eefb6c71b6e84bf4387cc8b4b2111ee03e5578 new file mode 100644 index 00000000..d40600ec Binary files /dev/null and b/packages/media/cpp/cache/images/1a/1af9dfda72578c678e5df5bbb8eefb6c71b6e84bf4387cc8b4b2111ee03e5578 differ diff --git a/packages/media/cpp/cache/images/1b/1b543faca1e2c10b1daf8b5506735c5ef26a5362d02dcbd0735ecdb6d1d05c3d b/packages/media/cpp/cache/images/1b/1b543faca1e2c10b1daf8b5506735c5ef26a5362d02dcbd0735ecdb6d1d05c3d new file mode 100644 index 00000000..37ad3267 Binary files /dev/null and b/packages/media/cpp/cache/images/1b/1b543faca1e2c10b1daf8b5506735c5ef26a5362d02dcbd0735ecdb6d1d05c3d differ diff --git a/packages/media/cpp/cache/images/1c/1cf5ccaa4761739cc9afb229b180eb360623188b96a69844da08a66144bb65da b/packages/media/cpp/cache/images/1c/1cf5ccaa4761739cc9afb229b180eb360623188b96a69844da08a66144bb65da new file mode 100644 index 00000000..f40bb761 Binary files /dev/null and b/packages/media/cpp/cache/images/1c/1cf5ccaa4761739cc9afb229b180eb360623188b96a69844da08a66144bb65da differ diff --git a/packages/media/cpp/cache/images/1d/1deb9e593ca7b849ee769b83a32b12cae1d554e283808f81b84bb5aadddf842b b/packages/media/cpp/cache/images/1d/1deb9e593ca7b849ee769b83a32b12cae1d554e283808f81b84bb5aadddf842b new file mode 100644 index 00000000..b71713f5 Binary files /dev/null and b/packages/media/cpp/cache/images/1d/1deb9e593ca7b849ee769b83a32b12cae1d554e283808f81b84bb5aadddf842b differ diff --git a/packages/media/cpp/cache/images/1e/1eb201f9ce6eeff0c78fc3fb545a70e50bd8b6d475766cf2051726bea7c017c1 b/packages/media/cpp/cache/images/1e/1eb201f9ce6eeff0c78fc3fb545a70e50bd8b6d475766cf2051726bea7c017c1 new file mode 100644 index 00000000..5ee276b9 Binary files /dev/null and b/packages/media/cpp/cache/images/1e/1eb201f9ce6eeff0c78fc3fb545a70e50bd8b6d475766cf2051726bea7c017c1 differ diff --git a/packages/media/cpp/cache/images/1e/1eeaff6ad98b68e2d59caf9ae69d0e3e881de45d82dacad7a4032293bfa01b8d b/packages/media/cpp/cache/images/1e/1eeaff6ad98b68e2d59caf9ae69d0e3e881de45d82dacad7a4032293bfa01b8d new file mode 100644 index 00000000..153fa0ea Binary files /dev/null and b/packages/media/cpp/cache/images/1e/1eeaff6ad98b68e2d59caf9ae69d0e3e881de45d82dacad7a4032293bfa01b8d differ diff --git a/packages/media/cpp/cache/images/20/20c018bc27398d85dc3782ab9b2447a4f2ede4698220b7a09ef48d01e5fb5583 b/packages/media/cpp/cache/images/20/20c018bc27398d85dc3782ab9b2447a4f2ede4698220b7a09ef48d01e5fb5583 new file mode 100644 index 00000000..857b36f4 Binary files /dev/null and b/packages/media/cpp/cache/images/20/20c018bc27398d85dc3782ab9b2447a4f2ede4698220b7a09ef48d01e5fb5583 differ diff --git a/packages/media/cpp/cache/images/21/217a8d0d2f72e354956c8b55541c0c6720a5af2b7c872437521a726e1ad25ead b/packages/media/cpp/cache/images/21/217a8d0d2f72e354956c8b55541c0c6720a5af2b7c872437521a726e1ad25ead new file mode 100644 index 00000000..0244b1d2 Binary files /dev/null and b/packages/media/cpp/cache/images/21/217a8d0d2f72e354956c8b55541c0c6720a5af2b7c872437521a726e1ad25ead differ diff --git a/packages/media/cpp/cache/images/21/21ca9f94bb37acd37381e23491ae8dce9f27704bbf67bc0f93098b495dce2c4b b/packages/media/cpp/cache/images/21/21ca9f94bb37acd37381e23491ae8dce9f27704bbf67bc0f93098b495dce2c4b new file mode 100644 index 00000000..9129b689 Binary files /dev/null and b/packages/media/cpp/cache/images/21/21ca9f94bb37acd37381e23491ae8dce9f27704bbf67bc0f93098b495dce2c4b differ diff --git a/packages/media/cpp/cache/images/22/22b435dcd5a6bf20c40e61ee033bcfd2ca269b341b9250000f4b0cd8fb8de64d b/packages/media/cpp/cache/images/22/22b435dcd5a6bf20c40e61ee033bcfd2ca269b341b9250000f4b0cd8fb8de64d new file mode 100644 index 00000000..5edfa9b5 Binary files /dev/null and b/packages/media/cpp/cache/images/22/22b435dcd5a6bf20c40e61ee033bcfd2ca269b341b9250000f4b0cd8fb8de64d differ diff --git a/packages/media/cpp/cache/images/23/2300b581bec307711b85cb2bd9e93b7412e2dbb35228bb323a01e295aa7f02bf b/packages/media/cpp/cache/images/23/2300b581bec307711b85cb2bd9e93b7412e2dbb35228bb323a01e295aa7f02bf new file mode 100644 index 00000000..3ad94728 Binary files /dev/null and b/packages/media/cpp/cache/images/23/2300b581bec307711b85cb2bd9e93b7412e2dbb35228bb323a01e295aa7f02bf differ diff --git a/packages/media/cpp/cache/images/24/24c99cfb50da4bcbbc52fdd2be27cea7ec91c5b6ccb9d349176385db1acdf72c b/packages/media/cpp/cache/images/24/24c99cfb50da4bcbbc52fdd2be27cea7ec91c5b6ccb9d349176385db1acdf72c new file mode 100644 index 00000000..70d4ddb1 Binary files /dev/null and b/packages/media/cpp/cache/images/24/24c99cfb50da4bcbbc52fdd2be27cea7ec91c5b6ccb9d349176385db1acdf72c differ diff --git a/packages/media/cpp/cache/images/25/25a9da917141a9e316b9705e2b80922bd689243200a12b4b8a8604567623dfa3 b/packages/media/cpp/cache/images/25/25a9da917141a9e316b9705e2b80922bd689243200a12b4b8a8604567623dfa3 new file mode 100644 index 00000000..e910d360 Binary files /dev/null and b/packages/media/cpp/cache/images/25/25a9da917141a9e316b9705e2b80922bd689243200a12b4b8a8604567623dfa3 differ diff --git a/packages/media/cpp/cache/images/25/25d0fd5579af67038ec0d48cc87fa018b39be147c10a38b2910d1fe4270abaf0 b/packages/media/cpp/cache/images/25/25d0fd5579af67038ec0d48cc87fa018b39be147c10a38b2910d1fe4270abaf0 new file mode 100644 index 00000000..86560e58 Binary files /dev/null and b/packages/media/cpp/cache/images/25/25d0fd5579af67038ec0d48cc87fa018b39be147c10a38b2910d1fe4270abaf0 differ diff --git a/packages/media/cpp/cache/images/26/26e4f6d0d168ebe125223a6a96c7b55c149137c80db69a8c4fff30b5da803703 b/packages/media/cpp/cache/images/26/26e4f6d0d168ebe125223a6a96c7b55c149137c80db69a8c4fff30b5da803703 new file mode 100644 index 00000000..4b9624f6 Binary files /dev/null and b/packages/media/cpp/cache/images/26/26e4f6d0d168ebe125223a6a96c7b55c149137c80db69a8c4fff30b5da803703 differ diff --git a/packages/media/cpp/cache/images/27/270491d587cb05c26c7c712e75d63cb03de54d54a185c720ed44dd9776078a54 b/packages/media/cpp/cache/images/27/270491d587cb05c26c7c712e75d63cb03de54d54a185c720ed44dd9776078a54 new file mode 100644 index 00000000..680a080f Binary files /dev/null and b/packages/media/cpp/cache/images/27/270491d587cb05c26c7c712e75d63cb03de54d54a185c720ed44dd9776078a54 differ diff --git a/packages/media/cpp/cache/images/27/2740a6f92116f6457637d0aed6a9f1ff4777070d9cf75aa4bd038f97f5051333 b/packages/media/cpp/cache/images/27/2740a6f92116f6457637d0aed6a9f1ff4777070d9cf75aa4bd038f97f5051333 new file mode 100644 index 00000000..bf1fe1bc Binary files /dev/null and b/packages/media/cpp/cache/images/27/2740a6f92116f6457637d0aed6a9f1ff4777070d9cf75aa4bd038f97f5051333 differ diff --git a/packages/media/cpp/cache/images/27/278a3ef76fa6a8cf305f06f665fde6645e0a4a00339972313712d0441e785e55 b/packages/media/cpp/cache/images/27/278a3ef76fa6a8cf305f06f665fde6645e0a4a00339972313712d0441e785e55 new file mode 100644 index 00000000..13ad08a6 Binary files /dev/null and b/packages/media/cpp/cache/images/27/278a3ef76fa6a8cf305f06f665fde6645e0a4a00339972313712d0441e785e55 differ diff --git a/packages/media/cpp/cache/images/28/2844edf5cff39406ea66e4a22d12a4b5848d970b5720ac0bf0268f1fb4b87171 b/packages/media/cpp/cache/images/28/2844edf5cff39406ea66e4a22d12a4b5848d970b5720ac0bf0268f1fb4b87171 new file mode 100644 index 00000000..6e2fe71b Binary files /dev/null and b/packages/media/cpp/cache/images/28/2844edf5cff39406ea66e4a22d12a4b5848d970b5720ac0bf0268f1fb4b87171 differ diff --git a/packages/media/cpp/cache/images/28/28aebbf93681f636f2c2b395359dd4b116a36cf504563ea706920b74d4835340 b/packages/media/cpp/cache/images/28/28aebbf93681f636f2c2b395359dd4b116a36cf504563ea706920b74d4835340 new file mode 100644 index 00000000..6525ffe3 Binary files /dev/null and b/packages/media/cpp/cache/images/28/28aebbf93681f636f2c2b395359dd4b116a36cf504563ea706920b74d4835340 differ diff --git a/packages/media/cpp/cache/images/28/28d001026135db40073f77c50c9b55f0ed6c06de45e1f4259d6c4a1a9d055bef b/packages/media/cpp/cache/images/28/28d001026135db40073f77c50c9b55f0ed6c06de45e1f4259d6c4a1a9d055bef new file mode 100644 index 00000000..9f643141 Binary files /dev/null and b/packages/media/cpp/cache/images/28/28d001026135db40073f77c50c9b55f0ed6c06de45e1f4259d6c4a1a9d055bef differ diff --git a/packages/media/cpp/cache/images/28/28e59f343d6210812d12de74ae2d64008e8733964b7beb6a0e59e5f25682fc12 b/packages/media/cpp/cache/images/28/28e59f343d6210812d12de74ae2d64008e8733964b7beb6a0e59e5f25682fc12 new file mode 100644 index 00000000..29c9d8f4 Binary files /dev/null and b/packages/media/cpp/cache/images/28/28e59f343d6210812d12de74ae2d64008e8733964b7beb6a0e59e5f25682fc12 differ diff --git a/packages/media/cpp/cache/images/2a/2a429330af11b919a1a938457e33e55e322ea7f8ad25a44dbb21bdba7dcd723e b/packages/media/cpp/cache/images/2a/2a429330af11b919a1a938457e33e55e322ea7f8ad25a44dbb21bdba7dcd723e new file mode 100644 index 00000000..c8fb29c6 Binary files /dev/null and b/packages/media/cpp/cache/images/2a/2a429330af11b919a1a938457e33e55e322ea7f8ad25a44dbb21bdba7dcd723e differ diff --git a/packages/media/cpp/cache/images/2a/2a85da5ebc8901da3bf3aec3ce333b01d1f0e665848302467488dc019a556194 b/packages/media/cpp/cache/images/2a/2a85da5ebc8901da3bf3aec3ce333b01d1f0e665848302467488dc019a556194 new file mode 100644 index 00000000..f7c07a3a Binary files /dev/null and b/packages/media/cpp/cache/images/2a/2a85da5ebc8901da3bf3aec3ce333b01d1f0e665848302467488dc019a556194 differ diff --git a/packages/media/cpp/cache/images/2b/2b21853c26392b359e589d2e0144654f22e5a30bb92650b2b5d1bb02ca25724f b/packages/media/cpp/cache/images/2b/2b21853c26392b359e589d2e0144654f22e5a30bb92650b2b5d1bb02ca25724f new file mode 100644 index 00000000..42c88081 Binary files /dev/null and b/packages/media/cpp/cache/images/2b/2b21853c26392b359e589d2e0144654f22e5a30bb92650b2b5d1bb02ca25724f differ diff --git a/packages/media/cpp/cache/images/2c/2c0eb596ab02e59edef4708e7864bf554f7f797edac1309c4af0bc0eb33a60c8 b/packages/media/cpp/cache/images/2c/2c0eb596ab02e59edef4708e7864bf554f7f797edac1309c4af0bc0eb33a60c8 new file mode 100644 index 00000000..501a79bf Binary files /dev/null and b/packages/media/cpp/cache/images/2c/2c0eb596ab02e59edef4708e7864bf554f7f797edac1309c4af0bc0eb33a60c8 differ diff --git a/packages/media/cpp/cache/images/2c/2c4b576fc6bbb9ed212637ac20b7a4f6f3f3c3db19605817c957528a62ddd24a b/packages/media/cpp/cache/images/2c/2c4b576fc6bbb9ed212637ac20b7a4f6f3f3c3db19605817c957528a62ddd24a new file mode 100644 index 00000000..6574cf80 Binary files /dev/null and b/packages/media/cpp/cache/images/2c/2c4b576fc6bbb9ed212637ac20b7a4f6f3f3c3db19605817c957528a62ddd24a differ diff --git a/packages/media/cpp/cache/images/2c/2c7b0f692da91b670afbacf2783a1426c14e634c67b9d77f7decb98b5e3f1034 b/packages/media/cpp/cache/images/2c/2c7b0f692da91b670afbacf2783a1426c14e634c67b9d77f7decb98b5e3f1034 new file mode 100644 index 00000000..75e8a02c Binary files /dev/null and b/packages/media/cpp/cache/images/2c/2c7b0f692da91b670afbacf2783a1426c14e634c67b9d77f7decb98b5e3f1034 differ diff --git a/packages/media/cpp/cache/images/2c/2ca69f182724d48eb1a22b4e842ab49d0f120166c53eb67fdbcd4c7ed2b7d22f b/packages/media/cpp/cache/images/2c/2ca69f182724d48eb1a22b4e842ab49d0f120166c53eb67fdbcd4c7ed2b7d22f new file mode 100644 index 00000000..c511ca7f Binary files /dev/null and b/packages/media/cpp/cache/images/2c/2ca69f182724d48eb1a22b4e842ab49d0f120166c53eb67fdbcd4c7ed2b7d22f differ diff --git a/packages/media/cpp/cache/images/2d/2d582e51bed0a7dcef69daedbbf34a455ba7b813917e1af7e1cfca7ea14b2969 b/packages/media/cpp/cache/images/2d/2d582e51bed0a7dcef69daedbbf34a455ba7b813917e1af7e1cfca7ea14b2969 new file mode 100644 index 00000000..bea17fb5 Binary files /dev/null and b/packages/media/cpp/cache/images/2d/2d582e51bed0a7dcef69daedbbf34a455ba7b813917e1af7e1cfca7ea14b2969 differ diff --git a/packages/media/cpp/cache/images/2d/2d7bf40c7687e047c026acb7dc8d2ee4e7280382efe2567e91fdf3a129aef585 b/packages/media/cpp/cache/images/2d/2d7bf40c7687e047c026acb7dc8d2ee4e7280382efe2567e91fdf3a129aef585 new file mode 100644 index 00000000..1f5f409d Binary files /dev/null and b/packages/media/cpp/cache/images/2d/2d7bf40c7687e047c026acb7dc8d2ee4e7280382efe2567e91fdf3a129aef585 differ diff --git a/packages/media/cpp/cache/images/2d/2d984b0f351a8f1d54d9f592810d176803429df2a2884ada4aeea40051edecac b/packages/media/cpp/cache/images/2d/2d984b0f351a8f1d54d9f592810d176803429df2a2884ada4aeea40051edecac new file mode 100644 index 00000000..dabb1bd4 Binary files /dev/null and b/packages/media/cpp/cache/images/2d/2d984b0f351a8f1d54d9f592810d176803429df2a2884ada4aeea40051edecac differ diff --git a/packages/media/cpp/cache/images/2d/2d9ee71c3de50a72c82bead8d1e03b94071caad7fc4c780ec12b4fa5d869b731 b/packages/media/cpp/cache/images/2d/2d9ee71c3de50a72c82bead8d1e03b94071caad7fc4c780ec12b4fa5d869b731 new file mode 100644 index 00000000..f496a958 Binary files /dev/null and b/packages/media/cpp/cache/images/2d/2d9ee71c3de50a72c82bead8d1e03b94071caad7fc4c780ec12b4fa5d869b731 differ diff --git a/packages/media/cpp/cache/images/31/3141182647d8eb30d8e77c30c2c27e725a0a95ad95c5eec8380c07e4276634c0 b/packages/media/cpp/cache/images/31/3141182647d8eb30d8e77c30c2c27e725a0a95ad95c5eec8380c07e4276634c0 new file mode 100644 index 00000000..5071238b Binary files /dev/null and b/packages/media/cpp/cache/images/31/3141182647d8eb30d8e77c30c2c27e725a0a95ad95c5eec8380c07e4276634c0 differ diff --git a/packages/media/cpp/cache/images/31/319d3dae2bffcf7ba1e635a9adf8d5753f0624f68c12001a59eda56d01b1b6ef b/packages/media/cpp/cache/images/31/319d3dae2bffcf7ba1e635a9adf8d5753f0624f68c12001a59eda56d01b1b6ef new file mode 100644 index 00000000..dd429737 Binary files /dev/null and b/packages/media/cpp/cache/images/31/319d3dae2bffcf7ba1e635a9adf8d5753f0624f68c12001a59eda56d01b1b6ef differ diff --git a/packages/media/cpp/cache/images/33/3360f2201479c42ba54f35d04e727a900b24d61a70629ebe72c72f8e8c66ff14 b/packages/media/cpp/cache/images/33/3360f2201479c42ba54f35d04e727a900b24d61a70629ebe72c72f8e8c66ff14 new file mode 100644 index 00000000..da5180e8 Binary files /dev/null and b/packages/media/cpp/cache/images/33/3360f2201479c42ba54f35d04e727a900b24d61a70629ebe72c72f8e8c66ff14 differ diff --git a/packages/media/cpp/cache/images/34/341774500a932936588430d31665c7c7b5818f97e2bc78f7fe9c0400f597f5c1 b/packages/media/cpp/cache/images/34/341774500a932936588430d31665c7c7b5818f97e2bc78f7fe9c0400f597f5c1 new file mode 100644 index 00000000..1b83abd4 Binary files /dev/null and b/packages/media/cpp/cache/images/34/341774500a932936588430d31665c7c7b5818f97e2bc78f7fe9c0400f597f5c1 differ diff --git a/packages/media/cpp/cache/images/34/344dd3d2fba317426a9d2ddea41e336475663ae9a65337c9627e0c2ff3a1ffc2 b/packages/media/cpp/cache/images/34/344dd3d2fba317426a9d2ddea41e336475663ae9a65337c9627e0c2ff3a1ffc2 new file mode 100644 index 00000000..4eddacfa Binary files /dev/null and b/packages/media/cpp/cache/images/34/344dd3d2fba317426a9d2ddea41e336475663ae9a65337c9627e0c2ff3a1ffc2 differ diff --git a/packages/media/cpp/cache/images/34/34a36e6850c8adc6cf04865cd9e2eb006851e6187685f97d30b6d9190760c66d b/packages/media/cpp/cache/images/34/34a36e6850c8adc6cf04865cd9e2eb006851e6187685f97d30b6d9190760c66d new file mode 100644 index 00000000..c9a22173 Binary files /dev/null and b/packages/media/cpp/cache/images/34/34a36e6850c8adc6cf04865cd9e2eb006851e6187685f97d30b6d9190760c66d differ diff --git a/packages/media/cpp/cache/images/35/35100bf1e725168293126c49c52c0fb4311f1ff68d96973acaec7c6ce72dcb5b b/packages/media/cpp/cache/images/35/35100bf1e725168293126c49c52c0fb4311f1ff68d96973acaec7c6ce72dcb5b new file mode 100644 index 00000000..9479eae5 Binary files /dev/null and b/packages/media/cpp/cache/images/35/35100bf1e725168293126c49c52c0fb4311f1ff68d96973acaec7c6ce72dcb5b differ diff --git a/packages/media/cpp/cache/images/35/353897cbd4578a02a2381a4d66d9367d7af61f1662792a611264db55cd3c3e55 b/packages/media/cpp/cache/images/35/353897cbd4578a02a2381a4d66d9367d7af61f1662792a611264db55cd3c3e55 new file mode 100644 index 00000000..1687c6e3 Binary files /dev/null and b/packages/media/cpp/cache/images/35/353897cbd4578a02a2381a4d66d9367d7af61f1662792a611264db55cd3c3e55 differ diff --git a/packages/media/cpp/cache/images/35/35b010d0d8dc6419b575d76454d9cf94bde6c736ee86d56788588ad10cba1937 b/packages/media/cpp/cache/images/35/35b010d0d8dc6419b575d76454d9cf94bde6c736ee86d56788588ad10cba1937 new file mode 100644 index 00000000..b53e2f7e Binary files /dev/null and b/packages/media/cpp/cache/images/35/35b010d0d8dc6419b575d76454d9cf94bde6c736ee86d56788588ad10cba1937 differ diff --git a/packages/media/cpp/cache/images/35/35fc45f1b991c71400754b1726ea119493ca931abd04527f47ff04fc1a29afb7 b/packages/media/cpp/cache/images/35/35fc45f1b991c71400754b1726ea119493ca931abd04527f47ff04fc1a29afb7 new file mode 100644 index 00000000..a8f23f44 Binary files /dev/null and b/packages/media/cpp/cache/images/35/35fc45f1b991c71400754b1726ea119493ca931abd04527f47ff04fc1a29afb7 differ diff --git a/packages/media/cpp/cache/images/36/362c5b7dc39cb792f9593399fd75e048f0d0d70c04cc5019f01eb8f5a0f01c48 b/packages/media/cpp/cache/images/36/362c5b7dc39cb792f9593399fd75e048f0d0d70c04cc5019f01eb8f5a0f01c48 new file mode 100644 index 00000000..09d55acb Binary files /dev/null and b/packages/media/cpp/cache/images/36/362c5b7dc39cb792f9593399fd75e048f0d0d70c04cc5019f01eb8f5a0f01c48 differ diff --git a/packages/media/cpp/cache/images/36/36549d8454f2adecc88cd0e9822a84e22714477224068a05f375626da0fd99bf b/packages/media/cpp/cache/images/36/36549d8454f2adecc88cd0e9822a84e22714477224068a05f375626da0fd99bf new file mode 100644 index 00000000..cfffc99d Binary files /dev/null and b/packages/media/cpp/cache/images/36/36549d8454f2adecc88cd0e9822a84e22714477224068a05f375626da0fd99bf differ diff --git a/packages/media/cpp/cache/images/36/36efdd2106a35737073009c44aeb42f4c4af2699086a6007ab9d900c408f605e b/packages/media/cpp/cache/images/36/36efdd2106a35737073009c44aeb42f4c4af2699086a6007ab9d900c408f605e new file mode 100644 index 00000000..59d188a4 Binary files /dev/null and b/packages/media/cpp/cache/images/36/36efdd2106a35737073009c44aeb42f4c4af2699086a6007ab9d900c408f605e differ diff --git a/packages/media/cpp/cache/images/37/3712e9f4c60f209a5f3db6e8cb43e4cea21faa8b1b863bfa75578490c7f2ec52 b/packages/media/cpp/cache/images/37/3712e9f4c60f209a5f3db6e8cb43e4cea21faa8b1b863bfa75578490c7f2ec52 new file mode 100644 index 00000000..3cef8834 Binary files /dev/null and b/packages/media/cpp/cache/images/37/3712e9f4c60f209a5f3db6e8cb43e4cea21faa8b1b863bfa75578490c7f2ec52 differ diff --git a/packages/media/cpp/cache/images/37/37153ed044e44f962f0b05bdaad334a033b88d74342f5eee0bd41e47cf2a6e8c b/packages/media/cpp/cache/images/37/37153ed044e44f962f0b05bdaad334a033b88d74342f5eee0bd41e47cf2a6e8c new file mode 100644 index 00000000..9f30b6cf Binary files /dev/null and b/packages/media/cpp/cache/images/37/37153ed044e44f962f0b05bdaad334a033b88d74342f5eee0bd41e47cf2a6e8c differ diff --git a/packages/media/cpp/cache/images/37/37fe78745dbe37b44877c9e672e3602311fdfa9e372cc1b637f271fdbea69618 b/packages/media/cpp/cache/images/37/37fe78745dbe37b44877c9e672e3602311fdfa9e372cc1b637f271fdbea69618 new file mode 100644 index 00000000..23063a32 Binary files /dev/null and b/packages/media/cpp/cache/images/37/37fe78745dbe37b44877c9e672e3602311fdfa9e372cc1b637f271fdbea69618 differ diff --git a/packages/media/cpp/cache/images/38/38756f350c35cda53874389e1b24b549abd133f9c860ee3869007aaa92a38b2c b/packages/media/cpp/cache/images/38/38756f350c35cda53874389e1b24b549abd133f9c860ee3869007aaa92a38b2c new file mode 100644 index 00000000..d8a25147 Binary files /dev/null and b/packages/media/cpp/cache/images/38/38756f350c35cda53874389e1b24b549abd133f9c860ee3869007aaa92a38b2c differ diff --git a/packages/media/cpp/cache/images/39/39150543d901a0e9298488a227be7228680e3ccea678e57aa798ad3055af7193 b/packages/media/cpp/cache/images/39/39150543d901a0e9298488a227be7228680e3ccea678e57aa798ad3055af7193 new file mode 100644 index 00000000..47b9ad12 Binary files /dev/null and b/packages/media/cpp/cache/images/39/39150543d901a0e9298488a227be7228680e3ccea678e57aa798ad3055af7193 differ diff --git a/packages/media/cpp/cache/images/3b/3b2fd504841a78c438ca13f1e2643a4d30d41537ab5cb30f4453ebe30b230634 b/packages/media/cpp/cache/images/3b/3b2fd504841a78c438ca13f1e2643a4d30d41537ab5cb30f4453ebe30b230634 new file mode 100644 index 00000000..78f79f50 Binary files /dev/null and b/packages/media/cpp/cache/images/3b/3b2fd504841a78c438ca13f1e2643a4d30d41537ab5cb30f4453ebe30b230634 differ diff --git a/packages/media/cpp/cache/images/3c/3cfde0b83ef6a71fae80ba00144974fb1eca111472c12ae7bfa26e4cf51f206c b/packages/media/cpp/cache/images/3c/3cfde0b83ef6a71fae80ba00144974fb1eca111472c12ae7bfa26e4cf51f206c new file mode 100644 index 00000000..c1844c29 Binary files /dev/null and b/packages/media/cpp/cache/images/3c/3cfde0b83ef6a71fae80ba00144974fb1eca111472c12ae7bfa26e4cf51f206c differ diff --git a/packages/media/cpp/cache/images/3f/3f0d38c39e5883b3c3fb5088076df430a90c862bcc8965308ac52b7750bb8320 b/packages/media/cpp/cache/images/3f/3f0d38c39e5883b3c3fb5088076df430a90c862bcc8965308ac52b7750bb8320 new file mode 100644 index 00000000..f32659e6 Binary files /dev/null and b/packages/media/cpp/cache/images/3f/3f0d38c39e5883b3c3fb5088076df430a90c862bcc8965308ac52b7750bb8320 differ diff --git a/packages/media/cpp/cache/images/3f/3f137a9287939275dbd59ecc0a82276e94674fb0816de42a2e47870b568cf0bc b/packages/media/cpp/cache/images/3f/3f137a9287939275dbd59ecc0a82276e94674fb0816de42a2e47870b568cf0bc new file mode 100644 index 00000000..12fb7a89 Binary files /dev/null and b/packages/media/cpp/cache/images/3f/3f137a9287939275dbd59ecc0a82276e94674fb0816de42a2e47870b568cf0bc differ diff --git a/packages/media/cpp/cache/images/3f/3f2953ef26d07989838c69c1818e5c41d94866f3aee5a89278e35fa1e269817b b/packages/media/cpp/cache/images/3f/3f2953ef26d07989838c69c1818e5c41d94866f3aee5a89278e35fa1e269817b new file mode 100644 index 00000000..52497d99 Binary files /dev/null and b/packages/media/cpp/cache/images/3f/3f2953ef26d07989838c69c1818e5c41d94866f3aee5a89278e35fa1e269817b differ diff --git a/packages/media/cpp/cache/images/41/4175244b907c6c8c83d8f87592337a79beaa3009d5e0d9d5c111763305d95dc7 b/packages/media/cpp/cache/images/41/4175244b907c6c8c83d8f87592337a79beaa3009d5e0d9d5c111763305d95dc7 new file mode 100644 index 00000000..b68cb16b Binary files /dev/null and b/packages/media/cpp/cache/images/41/4175244b907c6c8c83d8f87592337a79beaa3009d5e0d9d5c111763305d95dc7 differ diff --git a/packages/media/cpp/cache/images/41/41f054bcb6dc7d0a26a4f7fefc37c4dbaaf452cb86a185b92504a9bc30913856 b/packages/media/cpp/cache/images/41/41f054bcb6dc7d0a26a4f7fefc37c4dbaaf452cb86a185b92504a9bc30913856 new file mode 100644 index 00000000..5e3c4971 Binary files /dev/null and b/packages/media/cpp/cache/images/41/41f054bcb6dc7d0a26a4f7fefc37c4dbaaf452cb86a185b92504a9bc30913856 differ diff --git a/packages/media/cpp/cache/images/43/437779e2708fc1c616e08039de950752c000dad327f197ed07083606c108691a b/packages/media/cpp/cache/images/43/437779e2708fc1c616e08039de950752c000dad327f197ed07083606c108691a new file mode 100644 index 00000000..f16239fe Binary files /dev/null and b/packages/media/cpp/cache/images/43/437779e2708fc1c616e08039de950752c000dad327f197ed07083606c108691a differ diff --git a/packages/media/cpp/cache/images/43/438defe7599d44c6e6f855984751c2047ad2c3121c14d84b602a0ccd87855ee8 b/packages/media/cpp/cache/images/43/438defe7599d44c6e6f855984751c2047ad2c3121c14d84b602a0ccd87855ee8 new file mode 100644 index 00000000..6b3574b0 Binary files /dev/null and b/packages/media/cpp/cache/images/43/438defe7599d44c6e6f855984751c2047ad2c3121c14d84b602a0ccd87855ee8 differ diff --git a/packages/media/cpp/cache/images/44/445b017201086df8ecacefee00da806949c6e3f0eed69bc8bfd4f25b991a8ef7 b/packages/media/cpp/cache/images/44/445b017201086df8ecacefee00da806949c6e3f0eed69bc8bfd4f25b991a8ef7 new file mode 100644 index 00000000..ba8bac12 Binary files /dev/null and b/packages/media/cpp/cache/images/44/445b017201086df8ecacefee00da806949c6e3f0eed69bc8bfd4f25b991a8ef7 differ diff --git a/packages/media/cpp/cache/images/45/45fa4d31416d719833ecc372f3cb37168b8faff895a8f84c49ea2aaede694cd2 b/packages/media/cpp/cache/images/45/45fa4d31416d719833ecc372f3cb37168b8faff895a8f84c49ea2aaede694cd2 new file mode 100644 index 00000000..16b85d52 Binary files /dev/null and b/packages/media/cpp/cache/images/45/45fa4d31416d719833ecc372f3cb37168b8faff895a8f84c49ea2aaede694cd2 differ diff --git a/packages/media/cpp/cache/images/46/46bb950a35cbd7029c5fd455cd980aca7d80295c1f8c0e6df393c2a42ae34118 b/packages/media/cpp/cache/images/46/46bb950a35cbd7029c5fd455cd980aca7d80295c1f8c0e6df393c2a42ae34118 new file mode 100644 index 00000000..350e28bd Binary files /dev/null and b/packages/media/cpp/cache/images/46/46bb950a35cbd7029c5fd455cd980aca7d80295c1f8c0e6df393c2a42ae34118 differ diff --git a/packages/media/cpp/cache/images/47/471a65a608dd5b04467f9633ccc61466757d46d13fca2e0daff0c56a55c0e3e6 b/packages/media/cpp/cache/images/47/471a65a608dd5b04467f9633ccc61466757d46d13fca2e0daff0c56a55c0e3e6 new file mode 100644 index 00000000..7b3fe081 Binary files /dev/null and b/packages/media/cpp/cache/images/47/471a65a608dd5b04467f9633ccc61466757d46d13fca2e0daff0c56a55c0e3e6 differ diff --git a/packages/media/cpp/cache/images/48/488f7c2bac269b4b3d446c1af2a6f12375fd7eb4676bf3a10f47d8be1cad73dd b/packages/media/cpp/cache/images/48/488f7c2bac269b4b3d446c1af2a6f12375fd7eb4676bf3a10f47d8be1cad73dd new file mode 100644 index 00000000..c555b9cc Binary files /dev/null and b/packages/media/cpp/cache/images/48/488f7c2bac269b4b3d446c1af2a6f12375fd7eb4676bf3a10f47d8be1cad73dd differ diff --git a/packages/media/cpp/cache/images/48/489725d9674a49003fca615d6e58a237791f30abba2d9d8ce69f7e9fff34a34f b/packages/media/cpp/cache/images/48/489725d9674a49003fca615d6e58a237791f30abba2d9d8ce69f7e9fff34a34f new file mode 100644 index 00000000..a44569dd Binary files /dev/null and b/packages/media/cpp/cache/images/48/489725d9674a49003fca615d6e58a237791f30abba2d9d8ce69f7e9fff34a34f differ diff --git a/packages/media/cpp/cache/images/49/493c904afdfa57e5c68202d13157efe52edd6a6af26e2df054b58a2ca441b84a b/packages/media/cpp/cache/images/49/493c904afdfa57e5c68202d13157efe52edd6a6af26e2df054b58a2ca441b84a new file mode 100644 index 00000000..193fb0a5 Binary files /dev/null and b/packages/media/cpp/cache/images/49/493c904afdfa57e5c68202d13157efe52edd6a6af26e2df054b58a2ca441b84a differ diff --git a/packages/media/cpp/cache/images/49/494a250b3b31b74ec6f69339d842b6c624b886c79098683b833e4532b8fb5fb2 b/packages/media/cpp/cache/images/49/494a250b3b31b74ec6f69339d842b6c624b886c79098683b833e4532b8fb5fb2 new file mode 100644 index 00000000..b2052d41 Binary files /dev/null and b/packages/media/cpp/cache/images/49/494a250b3b31b74ec6f69339d842b6c624b886c79098683b833e4532b8fb5fb2 differ diff --git a/packages/media/cpp/cache/images/4a/4acac4d0431bd59fb616341a9a3633da4b464bbc5bdc087ff6a2d560e0ab3c72 b/packages/media/cpp/cache/images/4a/4acac4d0431bd59fb616341a9a3633da4b464bbc5bdc087ff6a2d560e0ab3c72 new file mode 100644 index 00000000..a8241233 Binary files /dev/null and b/packages/media/cpp/cache/images/4a/4acac4d0431bd59fb616341a9a3633da4b464bbc5bdc087ff6a2d560e0ab3c72 differ diff --git a/packages/media/cpp/cache/images/4a/4ae59934132c4b8a38087c3842732582dc506d8c81530e0ceb5325d753fe7a56 b/packages/media/cpp/cache/images/4a/4ae59934132c4b8a38087c3842732582dc506d8c81530e0ceb5325d753fe7a56 new file mode 100644 index 00000000..e59a5e66 Binary files /dev/null and b/packages/media/cpp/cache/images/4a/4ae59934132c4b8a38087c3842732582dc506d8c81530e0ceb5325d753fe7a56 differ diff --git a/packages/media/cpp/cache/images/4c/4ce7e87d4b20ecda21b3ba7078fdd1c71758d420a4233e35bdb5d346f301653c b/packages/media/cpp/cache/images/4c/4ce7e87d4b20ecda21b3ba7078fdd1c71758d420a4233e35bdb5d346f301653c new file mode 100644 index 00000000..b735aba5 Binary files /dev/null and b/packages/media/cpp/cache/images/4c/4ce7e87d4b20ecda21b3ba7078fdd1c71758d420a4233e35bdb5d346f301653c differ diff --git a/packages/media/cpp/cache/images/4e/4e7c429acd87cef3c5235c959a08dc1f4454ec1b6b1d34d8a072ee74b54abaa4 b/packages/media/cpp/cache/images/4e/4e7c429acd87cef3c5235c959a08dc1f4454ec1b6b1d34d8a072ee74b54abaa4 new file mode 100644 index 00000000..15906a49 Binary files /dev/null and b/packages/media/cpp/cache/images/4e/4e7c429acd87cef3c5235c959a08dc1f4454ec1b6b1d34d8a072ee74b54abaa4 differ diff --git a/packages/media/cpp/cache/images/50/5007e3ee2d8bc7b0fb11b8af47fc84fca816468c495cef401b8bca0a2fe2e6af b/packages/media/cpp/cache/images/50/5007e3ee2d8bc7b0fb11b8af47fc84fca816468c495cef401b8bca0a2fe2e6af new file mode 100644 index 00000000..a21ad9eb Binary files /dev/null and b/packages/media/cpp/cache/images/50/5007e3ee2d8bc7b0fb11b8af47fc84fca816468c495cef401b8bca0a2fe2e6af differ diff --git a/packages/media/cpp/cache/images/52/52b9a85c3933722fb0a96814922e270557760a39904977a409d453d096db39c4 b/packages/media/cpp/cache/images/52/52b9a85c3933722fb0a96814922e270557760a39904977a409d453d096db39c4 new file mode 100644 index 00000000..73f1b0de Binary files /dev/null and b/packages/media/cpp/cache/images/52/52b9a85c3933722fb0a96814922e270557760a39904977a409d453d096db39c4 differ diff --git a/packages/media/cpp/cache/images/53/53e3da225b6b4df7a697f911b82c0f890e6f2623e1de7f260bceca970974a098 b/packages/media/cpp/cache/images/53/53e3da225b6b4df7a697f911b82c0f890e6f2623e1de7f260bceca970974a098 new file mode 100644 index 00000000..e7968684 Binary files /dev/null and b/packages/media/cpp/cache/images/53/53e3da225b6b4df7a697f911b82c0f890e6f2623e1de7f260bceca970974a098 differ diff --git a/packages/media/cpp/cache/images/54/5464821c65c72e5e9ee96e45a2df5acae2fc738e7bb0f8aeddf2c605e4b0d917 b/packages/media/cpp/cache/images/54/5464821c65c72e5e9ee96e45a2df5acae2fc738e7bb0f8aeddf2c605e4b0d917 new file mode 100644 index 00000000..e20a8e09 Binary files /dev/null and b/packages/media/cpp/cache/images/54/5464821c65c72e5e9ee96e45a2df5acae2fc738e7bb0f8aeddf2c605e4b0d917 differ diff --git a/packages/media/cpp/cache/images/54/5498d6b85b16ec6a6d8e13a23b0e5646acc9e8419ddb786251de23b6c9896762 b/packages/media/cpp/cache/images/54/5498d6b85b16ec6a6d8e13a23b0e5646acc9e8419ddb786251de23b6c9896762 new file mode 100644 index 00000000..879fe8c1 Binary files /dev/null and b/packages/media/cpp/cache/images/54/5498d6b85b16ec6a6d8e13a23b0e5646acc9e8419ddb786251de23b6c9896762 differ diff --git a/packages/media/cpp/cache/images/54/54e4574b4ab29d4c3ea6f8c51319af1cfaa79a3dafa47fc3cb8d13867e9aa308 b/packages/media/cpp/cache/images/54/54e4574b4ab29d4c3ea6f8c51319af1cfaa79a3dafa47fc3cb8d13867e9aa308 new file mode 100644 index 00000000..a0fb7728 Binary files /dev/null and b/packages/media/cpp/cache/images/54/54e4574b4ab29d4c3ea6f8c51319af1cfaa79a3dafa47fc3cb8d13867e9aa308 differ diff --git a/packages/media/cpp/cache/images/55/555fda378e867bbc87125fdbb308572c158223d0f4a06cf811d50bc7b36cb192 b/packages/media/cpp/cache/images/55/555fda378e867bbc87125fdbb308572c158223d0f4a06cf811d50bc7b36cb192 new file mode 100644 index 00000000..9825a9c6 Binary files /dev/null and b/packages/media/cpp/cache/images/55/555fda378e867bbc87125fdbb308572c158223d0f4a06cf811d50bc7b36cb192 differ diff --git a/packages/media/cpp/cache/images/57/57c7426ca92feec18575179d8c096753b0b715075747500fd42912e3f59cf00c b/packages/media/cpp/cache/images/57/57c7426ca92feec18575179d8c096753b0b715075747500fd42912e3f59cf00c new file mode 100644 index 00000000..680d5fd4 Binary files /dev/null and b/packages/media/cpp/cache/images/57/57c7426ca92feec18575179d8c096753b0b715075747500fd42912e3f59cf00c differ diff --git a/packages/media/cpp/cache/images/58/589c84161f99d0651de4836d2417003bf11a410739099cdc6c353096dada54cc b/packages/media/cpp/cache/images/58/589c84161f99d0651de4836d2417003bf11a410739099cdc6c353096dada54cc new file mode 100644 index 00000000..0e7ac9dd Binary files /dev/null and b/packages/media/cpp/cache/images/58/589c84161f99d0651de4836d2417003bf11a410739099cdc6c353096dada54cc differ diff --git a/packages/media/cpp/cache/images/5a/5ae6e96b6c7eadb8133b7f788a60f0cd611b155ce05caa59666011d344fb469f b/packages/media/cpp/cache/images/5a/5ae6e96b6c7eadb8133b7f788a60f0cd611b155ce05caa59666011d344fb469f new file mode 100644 index 00000000..056fad6d Binary files /dev/null and b/packages/media/cpp/cache/images/5a/5ae6e96b6c7eadb8133b7f788a60f0cd611b155ce05caa59666011d344fb469f differ diff --git a/packages/media/cpp/cache/images/5c/5cffe50888056436c7f4c0c6c2597ef654bf3581d2a10664cecd10d490978acf b/packages/media/cpp/cache/images/5c/5cffe50888056436c7f4c0c6c2597ef654bf3581d2a10664cecd10d490978acf new file mode 100644 index 00000000..0b439b59 Binary files /dev/null and b/packages/media/cpp/cache/images/5c/5cffe50888056436c7f4c0c6c2597ef654bf3581d2a10664cecd10d490978acf differ diff --git a/packages/media/cpp/cache/images/5d/5d358685bb040744e139fa18f8ee0d104d771d6e3fdccade0f86cc35bde7a41e b/packages/media/cpp/cache/images/5d/5d358685bb040744e139fa18f8ee0d104d771d6e3fdccade0f86cc35bde7a41e new file mode 100644 index 00000000..ad40bfbe Binary files /dev/null and b/packages/media/cpp/cache/images/5d/5d358685bb040744e139fa18f8ee0d104d771d6e3fdccade0f86cc35bde7a41e differ diff --git a/packages/media/cpp/cache/images/5e/5e971016d8cfe7f9efc06e2e7265e5a089605057f86fdb6b71145bb047a144f4 b/packages/media/cpp/cache/images/5e/5e971016d8cfe7f9efc06e2e7265e5a089605057f86fdb6b71145bb047a144f4 new file mode 100644 index 00000000..255e5a68 Binary files /dev/null and b/packages/media/cpp/cache/images/5e/5e971016d8cfe7f9efc06e2e7265e5a089605057f86fdb6b71145bb047a144f4 differ diff --git a/packages/media/cpp/cache/images/5f/5fcb0581343c506fac42565ab9aecb72895c0fcc4b9ba5f2ee840f3729b3dc07 b/packages/media/cpp/cache/images/5f/5fcb0581343c506fac42565ab9aecb72895c0fcc4b9ba5f2ee840f3729b3dc07 new file mode 100644 index 00000000..680a080f Binary files /dev/null and b/packages/media/cpp/cache/images/5f/5fcb0581343c506fac42565ab9aecb72895c0fcc4b9ba5f2ee840f3729b3dc07 differ diff --git a/packages/media/cpp/cache/images/5f/5fe56856f7edecf6ce6b1bb58e068bb1c1924ff1d5f89cf011c196720de26b7d b/packages/media/cpp/cache/images/5f/5fe56856f7edecf6ce6b1bb58e068bb1c1924ff1d5f89cf011c196720de26b7d new file mode 100644 index 00000000..f80deda6 Binary files /dev/null and b/packages/media/cpp/cache/images/5f/5fe56856f7edecf6ce6b1bb58e068bb1c1924ff1d5f89cf011c196720de26b7d differ diff --git a/packages/media/cpp/cache/images/5f/5ff52e5ade108abd3a14d6858519c579ace5fe8d73d1e0acb9433f9c1fce88f5 b/packages/media/cpp/cache/images/5f/5ff52e5ade108abd3a14d6858519c579ace5fe8d73d1e0acb9433f9c1fce88f5 new file mode 100644 index 00000000..2d042e6a Binary files /dev/null and b/packages/media/cpp/cache/images/5f/5ff52e5ade108abd3a14d6858519c579ace5fe8d73d1e0acb9433f9c1fce88f5 differ diff --git a/packages/media/cpp/cache/images/61/61684494d73a758918eb0f88bd32537f648f2133c3e75f5974dd0b44ae6e62ad b/packages/media/cpp/cache/images/61/61684494d73a758918eb0f88bd32537f648f2133c3e75f5974dd0b44ae6e62ad new file mode 100644 index 00000000..9074f885 Binary files /dev/null and b/packages/media/cpp/cache/images/61/61684494d73a758918eb0f88bd32537f648f2133c3e75f5974dd0b44ae6e62ad differ diff --git a/packages/media/cpp/cache/images/61/618acdbd1e1f26f2700506c71453e5674f299885dba374bc4e2a0b8e8a866178 b/packages/media/cpp/cache/images/61/618acdbd1e1f26f2700506c71453e5674f299885dba374bc4e2a0b8e8a866178 new file mode 100644 index 00000000..d9e8763c Binary files /dev/null and b/packages/media/cpp/cache/images/61/618acdbd1e1f26f2700506c71453e5674f299885dba374bc4e2a0b8e8a866178 differ diff --git a/packages/media/cpp/cache/images/62/62a2bb61446e85402d00a414eab58e297f471a3d19cf3f7b4a9ea2754f8884c2 b/packages/media/cpp/cache/images/62/62a2bb61446e85402d00a414eab58e297f471a3d19cf3f7b4a9ea2754f8884c2 new file mode 100644 index 00000000..56942fd9 Binary files /dev/null and b/packages/media/cpp/cache/images/62/62a2bb61446e85402d00a414eab58e297f471a3d19cf3f7b4a9ea2754f8884c2 differ diff --git a/packages/media/cpp/cache/images/64/64232d2095d05a5d0cdd14a9faa6dc4474e31b48d2584db5cee975106b231139 b/packages/media/cpp/cache/images/64/64232d2095d05a5d0cdd14a9faa6dc4474e31b48d2584db5cee975106b231139 new file mode 100644 index 00000000..c9ce9268 Binary files /dev/null and b/packages/media/cpp/cache/images/64/64232d2095d05a5d0cdd14a9faa6dc4474e31b48d2584db5cee975106b231139 differ diff --git a/packages/media/cpp/cache/images/64/644209b27ed14944f32bd0aff8d19a99dc2d9bc843275436c801d0196c03e55c b/packages/media/cpp/cache/images/64/644209b27ed14944f32bd0aff8d19a99dc2d9bc843275436c801d0196c03e55c new file mode 100644 index 00000000..7673848e Binary files /dev/null and b/packages/media/cpp/cache/images/64/644209b27ed14944f32bd0aff8d19a99dc2d9bc843275436c801d0196c03e55c differ diff --git a/packages/media/cpp/cache/images/64/645ba61b0b1692a81d04812d146c854196ccc5017ab5b066318939ceff6c5298 b/packages/media/cpp/cache/images/64/645ba61b0b1692a81d04812d146c854196ccc5017ab5b066318939ceff6c5298 new file mode 100644 index 00000000..56293f60 Binary files /dev/null and b/packages/media/cpp/cache/images/64/645ba61b0b1692a81d04812d146c854196ccc5017ab5b066318939ceff6c5298 differ diff --git a/packages/media/cpp/cache/images/65/654c9ca44f236650778f2276e24420790aa850bc875447ebacf7208642af4b4d b/packages/media/cpp/cache/images/65/654c9ca44f236650778f2276e24420790aa850bc875447ebacf7208642af4b4d new file mode 100644 index 00000000..675a184c Binary files /dev/null and b/packages/media/cpp/cache/images/65/654c9ca44f236650778f2276e24420790aa850bc875447ebacf7208642af4b4d differ diff --git a/packages/media/cpp/cache/images/65/65845816e38f616496af8b97bfd379560cf047ca2421e01b805986c9b93ddd71 b/packages/media/cpp/cache/images/65/65845816e38f616496af8b97bfd379560cf047ca2421e01b805986c9b93ddd71 new file mode 100644 index 00000000..0f9e6403 Binary files /dev/null and b/packages/media/cpp/cache/images/65/65845816e38f616496af8b97bfd379560cf047ca2421e01b805986c9b93ddd71 differ diff --git a/packages/media/cpp/cache/images/66/66e3be10293f75adeac14a68d5ee3e3830696cdccab887ce3bbe20b23af8934c b/packages/media/cpp/cache/images/66/66e3be10293f75adeac14a68d5ee3e3830696cdccab887ce3bbe20b23af8934c new file mode 100644 index 00000000..b71894c2 Binary files /dev/null and b/packages/media/cpp/cache/images/66/66e3be10293f75adeac14a68d5ee3e3830696cdccab887ce3bbe20b23af8934c differ diff --git a/packages/media/cpp/cache/images/67/6705811f069b5eb42a3100baf6597c6659ce8dd905df61e78afd907eaeaaa118 b/packages/media/cpp/cache/images/67/6705811f069b5eb42a3100baf6597c6659ce8dd905df61e78afd907eaeaaa118 new file mode 100644 index 00000000..9173f312 Binary files /dev/null and b/packages/media/cpp/cache/images/67/6705811f069b5eb42a3100baf6597c6659ce8dd905df61e78afd907eaeaaa118 differ diff --git a/packages/media/cpp/cache/images/67/67702dd9af19659b1c90b5576d12e136efad4865e73d6aaa7d3ab99f25bc06ec b/packages/media/cpp/cache/images/67/67702dd9af19659b1c90b5576d12e136efad4865e73d6aaa7d3ab99f25bc06ec new file mode 100644 index 00000000..5d15b77e Binary files /dev/null and b/packages/media/cpp/cache/images/67/67702dd9af19659b1c90b5576d12e136efad4865e73d6aaa7d3ab99f25bc06ec differ diff --git a/packages/media/cpp/cache/images/67/6772e82e6a340623a27e1bf8bc7906a97ef3a74d9ad363037bdfe931e7ce9b46 b/packages/media/cpp/cache/images/67/6772e82e6a340623a27e1bf8bc7906a97ef3a74d9ad363037bdfe931e7ce9b46 new file mode 100644 index 00000000..f7158a5f Binary files /dev/null and b/packages/media/cpp/cache/images/67/6772e82e6a340623a27e1bf8bc7906a97ef3a74d9ad363037bdfe931e7ce9b46 differ diff --git a/packages/media/cpp/cache/images/68/68156ecb4d434e598f0c2f267f7a37c054a34889eb30f051c7e7706f825cc198 b/packages/media/cpp/cache/images/68/68156ecb4d434e598f0c2f267f7a37c054a34889eb30f051c7e7706f825cc198 new file mode 100644 index 00000000..da5594f6 Binary files /dev/null and b/packages/media/cpp/cache/images/68/68156ecb4d434e598f0c2f267f7a37c054a34889eb30f051c7e7706f825cc198 differ diff --git a/packages/media/cpp/cache/images/6a/6aaccd59de946744224598ac5177597977046dc2d53a6d00403edbded0970d4b b/packages/media/cpp/cache/images/6a/6aaccd59de946744224598ac5177597977046dc2d53a6d00403edbded0970d4b new file mode 100644 index 00000000..fc53f449 Binary files /dev/null and b/packages/media/cpp/cache/images/6a/6aaccd59de946744224598ac5177597977046dc2d53a6d00403edbded0970d4b differ diff --git a/packages/media/cpp/cache/images/6c/6c837fcef535a40c58718c22e2493601587a19326bd3637957cb77cf7b075a6b b/packages/media/cpp/cache/images/6c/6c837fcef535a40c58718c22e2493601587a19326bd3637957cb77cf7b075a6b new file mode 100644 index 00000000..721632de Binary files /dev/null and b/packages/media/cpp/cache/images/6c/6c837fcef535a40c58718c22e2493601587a19326bd3637957cb77cf7b075a6b differ diff --git a/packages/media/cpp/cache/images/6c/6ca9582586d90270065a6cba20b4acb41802e9b9ef44bb39907bf00e0e55e2e5 b/packages/media/cpp/cache/images/6c/6ca9582586d90270065a6cba20b4acb41802e9b9ef44bb39907bf00e0e55e2e5 new file mode 100644 index 00000000..67d56516 Binary files /dev/null and b/packages/media/cpp/cache/images/6c/6ca9582586d90270065a6cba20b4acb41802e9b9ef44bb39907bf00e0e55e2e5 differ diff --git a/packages/media/cpp/cache/images/6c/6cf93a5b308010abc438e94dcbb45eac21c1af0e29db09cc6d03e52926a584c7 b/packages/media/cpp/cache/images/6c/6cf93a5b308010abc438e94dcbb45eac21c1af0e29db09cc6d03e52926a584c7 new file mode 100644 index 00000000..9365d413 Binary files /dev/null and b/packages/media/cpp/cache/images/6c/6cf93a5b308010abc438e94dcbb45eac21c1af0e29db09cc6d03e52926a584c7 differ diff --git a/packages/media/cpp/cache/images/6d/6d1c874550f4d69c6d3e11219caa80a582ed8b3c4300ab0e602638d755651e55 b/packages/media/cpp/cache/images/6d/6d1c874550f4d69c6d3e11219caa80a582ed8b3c4300ab0e602638d755651e55 new file mode 100644 index 00000000..7ff6c0b9 Binary files /dev/null and b/packages/media/cpp/cache/images/6d/6d1c874550f4d69c6d3e11219caa80a582ed8b3c4300ab0e602638d755651e55 differ diff --git a/packages/media/cpp/cache/images/6e/6e4f406cffb077d9f01cb2039e218743d737aa8c6c12234ff46dd7df185dfdc5 b/packages/media/cpp/cache/images/6e/6e4f406cffb077d9f01cb2039e218743d737aa8c6c12234ff46dd7df185dfdc5 new file mode 100644 index 00000000..c5db398d Binary files /dev/null and b/packages/media/cpp/cache/images/6e/6e4f406cffb077d9f01cb2039e218743d737aa8c6c12234ff46dd7df185dfdc5 differ diff --git a/packages/media/cpp/cache/images/6e/6e976aaf1758ec100c3753a8ccad499641ae3b2446304551324159be221edd35 b/packages/media/cpp/cache/images/6e/6e976aaf1758ec100c3753a8ccad499641ae3b2446304551324159be221edd35 new file mode 100644 index 00000000..c36ccab3 Binary files /dev/null and b/packages/media/cpp/cache/images/6e/6e976aaf1758ec100c3753a8ccad499641ae3b2446304551324159be221edd35 differ diff --git a/packages/media/cpp/cache/images/6e/6eb751d1dfbcd23f11f1a16a4ba353cf5c27c7a4840ee9464378da6e0c8fbdb7 b/packages/media/cpp/cache/images/6e/6eb751d1dfbcd23f11f1a16a4ba353cf5c27c7a4840ee9464378da6e0c8fbdb7 new file mode 100644 index 00000000..2f4f3a00 Binary files /dev/null and b/packages/media/cpp/cache/images/6e/6eb751d1dfbcd23f11f1a16a4ba353cf5c27c7a4840ee9464378da6e0c8fbdb7 differ diff --git a/packages/media/cpp/cache/images/6e/6ec28344e8e4a3385437b9ffdd419c10bfc000fdd7a6e7ec88e23fbfde6395e4 b/packages/media/cpp/cache/images/6e/6ec28344e8e4a3385437b9ffdd419c10bfc000fdd7a6e7ec88e23fbfde6395e4 new file mode 100644 index 00000000..20ed30a9 Binary files /dev/null and b/packages/media/cpp/cache/images/6e/6ec28344e8e4a3385437b9ffdd419c10bfc000fdd7a6e7ec88e23fbfde6395e4 differ diff --git a/packages/media/cpp/cache/images/6f/6f5f731784825565d3b619b35bb4ed4a689093d59ad6d26ca72b3687a82efe01 b/packages/media/cpp/cache/images/6f/6f5f731784825565d3b619b35bb4ed4a689093d59ad6d26ca72b3687a82efe01 new file mode 100644 index 00000000..7c3129a1 Binary files /dev/null and b/packages/media/cpp/cache/images/6f/6f5f731784825565d3b619b35bb4ed4a689093d59ad6d26ca72b3687a82efe01 differ diff --git a/packages/media/cpp/cache/images/6f/6fba814a895f748626566c7b9be244ceb3e134198a947d259287446656fca8c6 b/packages/media/cpp/cache/images/6f/6fba814a895f748626566c7b9be244ceb3e134198a947d259287446656fca8c6 new file mode 100644 index 00000000..cf512071 Binary files /dev/null and b/packages/media/cpp/cache/images/6f/6fba814a895f748626566c7b9be244ceb3e134198a947d259287446656fca8c6 differ diff --git a/packages/media/cpp/cache/images/71/71f6ee9c3858c27eed3fe5af166f5f0fcbe44f24fa5c7fe768b060fa142ead12 b/packages/media/cpp/cache/images/71/71f6ee9c3858c27eed3fe5af166f5f0fcbe44f24fa5c7fe768b060fa142ead12 new file mode 100644 index 00000000..84686ea7 Binary files /dev/null and b/packages/media/cpp/cache/images/71/71f6ee9c3858c27eed3fe5af166f5f0fcbe44f24fa5c7fe768b060fa142ead12 differ diff --git a/packages/media/cpp/cache/images/72/723557af8e2e041cc52d4141d238885188af82e72fd91c417ca01497a993af13 b/packages/media/cpp/cache/images/72/723557af8e2e041cc52d4141d238885188af82e72fd91c417ca01497a993af13 new file mode 100644 index 00000000..442c665c Binary files /dev/null and b/packages/media/cpp/cache/images/72/723557af8e2e041cc52d4141d238885188af82e72fd91c417ca01497a993af13 differ diff --git a/packages/media/cpp/cache/images/73/7384478a9cb235c4b980a942bf43b3f0c1f27d1fb2dffbdb25e144dea959bfe7 b/packages/media/cpp/cache/images/73/7384478a9cb235c4b980a942bf43b3f0c1f27d1fb2dffbdb25e144dea959bfe7 new file mode 100644 index 00000000..089db3d0 Binary files /dev/null and b/packages/media/cpp/cache/images/73/7384478a9cb235c4b980a942bf43b3f0c1f27d1fb2dffbdb25e144dea959bfe7 differ diff --git a/packages/media/cpp/cache/images/76/7630a17aa7d155aa38ac6b198a26836cd98e9793dedbe15af16f1fda66124897 b/packages/media/cpp/cache/images/76/7630a17aa7d155aa38ac6b198a26836cd98e9793dedbe15af16f1fda66124897 new file mode 100644 index 00000000..afb02cca Binary files /dev/null and b/packages/media/cpp/cache/images/76/7630a17aa7d155aa38ac6b198a26836cd98e9793dedbe15af16f1fda66124897 differ diff --git a/packages/media/cpp/cache/images/76/76eeefc0ef6c4aadefc6811f89d7f6eb5feeb4108db0abe6d352ceb94919b676 b/packages/media/cpp/cache/images/76/76eeefc0ef6c4aadefc6811f89d7f6eb5feeb4108db0abe6d352ceb94919b676 new file mode 100644 index 00000000..76a87e64 Binary files /dev/null and b/packages/media/cpp/cache/images/76/76eeefc0ef6c4aadefc6811f89d7f6eb5feeb4108db0abe6d352ceb94919b676 differ diff --git a/packages/media/cpp/cache/images/77/77b63ee4797fafc28d11561e9babe7562855320068b8f1753f8a9ce669114bd4 b/packages/media/cpp/cache/images/77/77b63ee4797fafc28d11561e9babe7562855320068b8f1753f8a9ce669114bd4 new file mode 100644 index 00000000..ef6a82e7 Binary files /dev/null and b/packages/media/cpp/cache/images/77/77b63ee4797fafc28d11561e9babe7562855320068b8f1753f8a9ce669114bd4 differ diff --git a/packages/media/cpp/cache/images/77/77e4424fa26698282e1f66f4ab0b23be31ba3bae89bb0bd82a5aaa7fca34234e b/packages/media/cpp/cache/images/77/77e4424fa26698282e1f66f4ab0b23be31ba3bae89bb0bd82a5aaa7fca34234e new file mode 100644 index 00000000..051b9ef4 Binary files /dev/null and b/packages/media/cpp/cache/images/77/77e4424fa26698282e1f66f4ab0b23be31ba3bae89bb0bd82a5aaa7fca34234e differ diff --git a/packages/media/cpp/cache/images/77/77e881bc0b67a5e0eacb54a3b06ff4f404adc7f7e2ee76b11e99a5a69084a6e4 b/packages/media/cpp/cache/images/77/77e881bc0b67a5e0eacb54a3b06ff4f404adc7f7e2ee76b11e99a5a69084a6e4 new file mode 100644 index 00000000..0b897f0e Binary files /dev/null and b/packages/media/cpp/cache/images/77/77e881bc0b67a5e0eacb54a3b06ff4f404adc7f7e2ee76b11e99a5a69084a6e4 differ diff --git a/packages/media/cpp/cache/images/78/780ef7a02f96a3c840ef53ec1fad4b201c4c6c3dc673635684c30ffa73e42144 b/packages/media/cpp/cache/images/78/780ef7a02f96a3c840ef53ec1fad4b201c4c6c3dc673635684c30ffa73e42144 new file mode 100644 index 00000000..24368d67 Binary files /dev/null and b/packages/media/cpp/cache/images/78/780ef7a02f96a3c840ef53ec1fad4b201c4c6c3dc673635684c30ffa73e42144 differ diff --git a/packages/media/cpp/cache/images/78/783125c2733dc9f1831a921483fd7db4a7f9d378a3fb4d2afa8284d95d946d92 b/packages/media/cpp/cache/images/78/783125c2733dc9f1831a921483fd7db4a7f9d378a3fb4d2afa8284d95d946d92 new file mode 100644 index 00000000..c9540412 Binary files /dev/null and b/packages/media/cpp/cache/images/78/783125c2733dc9f1831a921483fd7db4a7f9d378a3fb4d2afa8284d95d946d92 differ diff --git a/packages/media/cpp/cache/images/78/7887e7b0e835231baca53bac96526f5be94c47ddf8d63b4f28b2837c617899ae b/packages/media/cpp/cache/images/78/7887e7b0e835231baca53bac96526f5be94c47ddf8d63b4f28b2837c617899ae new file mode 100644 index 00000000..cb700efb Binary files /dev/null and b/packages/media/cpp/cache/images/78/7887e7b0e835231baca53bac96526f5be94c47ddf8d63b4f28b2837c617899ae differ diff --git a/packages/media/cpp/cache/images/78/78c95518ee5f40315c2fe15d9df99fc18cdb65b561e835961e36608e2023801a b/packages/media/cpp/cache/images/78/78c95518ee5f40315c2fe15d9df99fc18cdb65b561e835961e36608e2023801a new file mode 100644 index 00000000..ab4284eb Binary files /dev/null and b/packages/media/cpp/cache/images/78/78c95518ee5f40315c2fe15d9df99fc18cdb65b561e835961e36608e2023801a differ diff --git a/packages/media/cpp/cache/images/78/78dbdff2049dc87289371fad32a9256d305e9f9bc89052e4700ef9924810d45b b/packages/media/cpp/cache/images/78/78dbdff2049dc87289371fad32a9256d305e9f9bc89052e4700ef9924810d45b new file mode 100644 index 00000000..6b3574b0 Binary files /dev/null and b/packages/media/cpp/cache/images/78/78dbdff2049dc87289371fad32a9256d305e9f9bc89052e4700ef9924810d45b differ diff --git a/packages/media/cpp/cache/images/7a/7af61cef548b8a7e449f2ccb67b08c7e3f8e13a823b43671629412a124ae234b b/packages/media/cpp/cache/images/7a/7af61cef548b8a7e449f2ccb67b08c7e3f8e13a823b43671629412a124ae234b new file mode 100644 index 00000000..3a05a48d Binary files /dev/null and b/packages/media/cpp/cache/images/7a/7af61cef548b8a7e449f2ccb67b08c7e3f8e13a823b43671629412a124ae234b differ diff --git a/packages/media/cpp/cache/images/7a/7af6a4fb1c9b43f45392e8b9479ef1f7f9befad56c2be9a4bc0c0b786749b926 b/packages/media/cpp/cache/images/7a/7af6a4fb1c9b43f45392e8b9479ef1f7f9befad56c2be9a4bc0c0b786749b926 new file mode 100644 index 00000000..45af3e72 Binary files /dev/null and b/packages/media/cpp/cache/images/7a/7af6a4fb1c9b43f45392e8b9479ef1f7f9befad56c2be9a4bc0c0b786749b926 differ diff --git a/packages/media/cpp/cache/images/7b/7b8d66d90b4505a3251434778d0a48b82610a9bfb08da4dd05cc149d5e727f67 b/packages/media/cpp/cache/images/7b/7b8d66d90b4505a3251434778d0a48b82610a9bfb08da4dd05cc149d5e727f67 new file mode 100644 index 00000000..c4042593 Binary files /dev/null and b/packages/media/cpp/cache/images/7b/7b8d66d90b4505a3251434778d0a48b82610a9bfb08da4dd05cc149d5e727f67 differ diff --git a/packages/media/cpp/cache/images/7c/7c71574173c0af38a390bcdd6756f0b690ca3f723d884806254b074cafd04bb2 b/packages/media/cpp/cache/images/7c/7c71574173c0af38a390bcdd6756f0b690ca3f723d884806254b074cafd04bb2 new file mode 100644 index 00000000..01620867 Binary files /dev/null and b/packages/media/cpp/cache/images/7c/7c71574173c0af38a390bcdd6756f0b690ca3f723d884806254b074cafd04bb2 differ diff --git a/packages/media/cpp/cache/images/7c/7cb8e2bb8c731e7c3d35d02ef00acb62869ffd8c43dfe2bb0fe7457b14c87926 b/packages/media/cpp/cache/images/7c/7cb8e2bb8c731e7c3d35d02ef00acb62869ffd8c43dfe2bb0fe7457b14c87926 new file mode 100644 index 00000000..3fff93f8 Binary files /dev/null and b/packages/media/cpp/cache/images/7c/7cb8e2bb8c731e7c3d35d02ef00acb62869ffd8c43dfe2bb0fe7457b14c87926 differ diff --git a/packages/media/cpp/cache/images/80/80a04940e0cab11d8e566932a4b899531882ab3fb099e434e854cf3d46ec7a80 b/packages/media/cpp/cache/images/80/80a04940e0cab11d8e566932a4b899531882ab3fb099e434e854cf3d46ec7a80 new file mode 100644 index 00000000..7e7afea2 Binary files /dev/null and b/packages/media/cpp/cache/images/80/80a04940e0cab11d8e566932a4b899531882ab3fb099e434e854cf3d46ec7a80 differ diff --git a/packages/media/cpp/cache/images/81/817af1d2656b1fc8dcc0dce21f0b624eccef897c2f7468cb345c2aaf03428bb9 b/packages/media/cpp/cache/images/81/817af1d2656b1fc8dcc0dce21f0b624eccef897c2f7468cb345c2aaf03428bb9 new file mode 100644 index 00000000..6a06bd90 Binary files /dev/null and b/packages/media/cpp/cache/images/81/817af1d2656b1fc8dcc0dce21f0b624eccef897c2f7468cb345c2aaf03428bb9 differ diff --git a/packages/media/cpp/cache/images/81/818802e0d4885fec16a466de4f1a96e9a44732eed7915d09fc09f6d08e3bf8c0 b/packages/media/cpp/cache/images/81/818802e0d4885fec16a466de4f1a96e9a44732eed7915d09fc09f6d08e3bf8c0 new file mode 100644 index 00000000..053a50f5 Binary files /dev/null and b/packages/media/cpp/cache/images/81/818802e0d4885fec16a466de4f1a96e9a44732eed7915d09fc09f6d08e3bf8c0 differ diff --git a/packages/media/cpp/cache/images/81/81f418862e31b9a1348fa36d882bd1adf8f782b432efe2b2c92f6525f2d73400 b/packages/media/cpp/cache/images/81/81f418862e31b9a1348fa36d882bd1adf8f782b432efe2b2c92f6525f2d73400 new file mode 100644 index 00000000..fd5a6530 Binary files /dev/null and b/packages/media/cpp/cache/images/81/81f418862e31b9a1348fa36d882bd1adf8f782b432efe2b2c92f6525f2d73400 differ diff --git a/packages/media/cpp/cache/images/84/843485dc38d59a502aa5da34e0544bdac5feacfab0f05f09faeeecdb280b2ede b/packages/media/cpp/cache/images/84/843485dc38d59a502aa5da34e0544bdac5feacfab0f05f09faeeecdb280b2ede new file mode 100644 index 00000000..c448524e Binary files /dev/null and b/packages/media/cpp/cache/images/84/843485dc38d59a502aa5da34e0544bdac5feacfab0f05f09faeeecdb280b2ede differ diff --git a/packages/media/cpp/cache/images/84/843aaf8101776dd90f6c4b44e0fedad0f1100500b633fbdeb94e57e03d3f3483 b/packages/media/cpp/cache/images/84/843aaf8101776dd90f6c4b44e0fedad0f1100500b633fbdeb94e57e03d3f3483 new file mode 100644 index 00000000..b33dd681 Binary files /dev/null and b/packages/media/cpp/cache/images/84/843aaf8101776dd90f6c4b44e0fedad0f1100500b633fbdeb94e57e03d3f3483 differ diff --git a/packages/media/cpp/cache/images/84/845a84275214ff090d77fd2b43ca318146a935726a6e3c02f5516cc93806f8e0 b/packages/media/cpp/cache/images/84/845a84275214ff090d77fd2b43ca318146a935726a6e3c02f5516cc93806f8e0 new file mode 100644 index 00000000..c5b7d318 Binary files /dev/null and b/packages/media/cpp/cache/images/84/845a84275214ff090d77fd2b43ca318146a935726a6e3c02f5516cc93806f8e0 differ diff --git a/packages/media/cpp/cache/images/84/84fcedd770759c516ba9bf75a554fbc9ee1cf2ed04569a7799e3b55e23d65770 b/packages/media/cpp/cache/images/84/84fcedd770759c516ba9bf75a554fbc9ee1cf2ed04569a7799e3b55e23d65770 new file mode 100644 index 00000000..222335a3 Binary files /dev/null and b/packages/media/cpp/cache/images/84/84fcedd770759c516ba9bf75a554fbc9ee1cf2ed04569a7799e3b55e23d65770 differ diff --git a/packages/media/cpp/cache/images/85/857564783e599f5ade269440a486890886b2d954cf9f1b0559bbeab110627b8d b/packages/media/cpp/cache/images/85/857564783e599f5ade269440a486890886b2d954cf9f1b0559bbeab110627b8d new file mode 100644 index 00000000..b3e4de2e Binary files /dev/null and b/packages/media/cpp/cache/images/85/857564783e599f5ade269440a486890886b2d954cf9f1b0559bbeab110627b8d differ diff --git a/packages/media/cpp/cache/images/86/86440c28cebb6a0a755fdd6c0cd1219b1d9b4eeb029e563abd95c0473c41412e b/packages/media/cpp/cache/images/86/86440c28cebb6a0a755fdd6c0cd1219b1d9b4eeb029e563abd95c0473c41412e new file mode 100644 index 00000000..cbf152ca Binary files /dev/null and b/packages/media/cpp/cache/images/86/86440c28cebb6a0a755fdd6c0cd1219b1d9b4eeb029e563abd95c0473c41412e differ diff --git a/packages/media/cpp/cache/images/87/87b742ac4ff1e818a8dccb72ea656043701463af8ce3855c2109c613ae6c845e b/packages/media/cpp/cache/images/87/87b742ac4ff1e818a8dccb72ea656043701463af8ce3855c2109c613ae6c845e new file mode 100644 index 00000000..7e96d48b Binary files /dev/null and b/packages/media/cpp/cache/images/87/87b742ac4ff1e818a8dccb72ea656043701463af8ce3855c2109c613ae6c845e differ diff --git a/packages/media/cpp/cache/images/87/87b939398d1a5776618926561629cf1349c4fce00aef46c4e1411487cff4c8c3 b/packages/media/cpp/cache/images/87/87b939398d1a5776618926561629cf1349c4fce00aef46c4e1411487cff4c8c3 new file mode 100644 index 00000000..569b3983 Binary files /dev/null and b/packages/media/cpp/cache/images/87/87b939398d1a5776618926561629cf1349c4fce00aef46c4e1411487cff4c8c3 differ diff --git a/packages/media/cpp/cache/images/89/89216fcd47d0cade4084f152a64efdc8aede8c7e4cfe62c112bca1fac6a9c06f b/packages/media/cpp/cache/images/89/89216fcd47d0cade4084f152a64efdc8aede8c7e4cfe62c112bca1fac6a9c06f new file mode 100644 index 00000000..ccef9e68 Binary files /dev/null and b/packages/media/cpp/cache/images/89/89216fcd47d0cade4084f152a64efdc8aede8c7e4cfe62c112bca1fac6a9c06f differ diff --git a/packages/media/cpp/cache/images/89/893f0326c98bedb7aa690c20a0642a1b54d94f9774524e80b27f3164be4a6b5a b/packages/media/cpp/cache/images/89/893f0326c98bedb7aa690c20a0642a1b54d94f9774524e80b27f3164be4a6b5a new file mode 100644 index 00000000..56202dcf Binary files /dev/null and b/packages/media/cpp/cache/images/89/893f0326c98bedb7aa690c20a0642a1b54d94f9774524e80b27f3164be4a6b5a differ diff --git a/packages/media/cpp/cache/images/89/89f95695dced191406c1fae43176797c9183ce57e452bc4267adf4d5beb269e1 b/packages/media/cpp/cache/images/89/89f95695dced191406c1fae43176797c9183ce57e452bc4267adf4d5beb269e1 new file mode 100644 index 00000000..9f1e9eba Binary files /dev/null and b/packages/media/cpp/cache/images/89/89f95695dced191406c1fae43176797c9183ce57e452bc4267adf4d5beb269e1 differ diff --git a/packages/media/cpp/cache/images/8a/8a434007506f4b0c57da4ead34e2634e14c54121ee63b49abdfe189e01910b02 b/packages/media/cpp/cache/images/8a/8a434007506f4b0c57da4ead34e2634e14c54121ee63b49abdfe189e01910b02 new file mode 100644 index 00000000..0f885b47 Binary files /dev/null and b/packages/media/cpp/cache/images/8a/8a434007506f4b0c57da4ead34e2634e14c54121ee63b49abdfe189e01910b02 differ diff --git a/packages/media/cpp/cache/images/8d/8de7a0d7d45e6741f83c8375dc624de6a87ee32c2967f6d407806ec36c92e84e b/packages/media/cpp/cache/images/8d/8de7a0d7d45e6741f83c8375dc624de6a87ee32c2967f6d407806ec36c92e84e new file mode 100644 index 00000000..f193a47d Binary files /dev/null and b/packages/media/cpp/cache/images/8d/8de7a0d7d45e6741f83c8375dc624de6a87ee32c2967f6d407806ec36c92e84e differ diff --git a/packages/media/cpp/cache/images/8e/8eaf55cc1f3d1845c6a4f58e1b49a825eb807e905aec8f40bff55dcfde4d73db b/packages/media/cpp/cache/images/8e/8eaf55cc1f3d1845c6a4f58e1b49a825eb807e905aec8f40bff55dcfde4d73db new file mode 100644 index 00000000..e15bf84e Binary files /dev/null and b/packages/media/cpp/cache/images/8e/8eaf55cc1f3d1845c6a4f58e1b49a825eb807e905aec8f40bff55dcfde4d73db differ diff --git a/packages/media/cpp/cache/images/8f/8f20d6aa49ef67ed79b69fe1fbadab78cbba9c1b20809ede09b6c919f5b47e07 b/packages/media/cpp/cache/images/8f/8f20d6aa49ef67ed79b69fe1fbadab78cbba9c1b20809ede09b6c919f5b47e07 new file mode 100644 index 00000000..601fbb04 Binary files /dev/null and b/packages/media/cpp/cache/images/8f/8f20d6aa49ef67ed79b69fe1fbadab78cbba9c1b20809ede09b6c919f5b47e07 differ diff --git a/packages/media/cpp/cache/images/8f/8f77b6a594a493ac5c25e6b9760f7e6016612c3776784de1a13211e13e5ff1d4 b/packages/media/cpp/cache/images/8f/8f77b6a594a493ac5c25e6b9760f7e6016612c3776784de1a13211e13e5ff1d4 new file mode 100644 index 00000000..7bd87a69 Binary files /dev/null and b/packages/media/cpp/cache/images/8f/8f77b6a594a493ac5c25e6b9760f7e6016612c3776784de1a13211e13e5ff1d4 differ diff --git a/packages/media/cpp/cache/images/90/905e729a9cb0304c285f8ddcd0913b044e38a648a6b728112b0ca8d4024e7095 b/packages/media/cpp/cache/images/90/905e729a9cb0304c285f8ddcd0913b044e38a648a6b728112b0ca8d4024e7095 new file mode 100644 index 00000000..7a6d866e Binary files /dev/null and b/packages/media/cpp/cache/images/90/905e729a9cb0304c285f8ddcd0913b044e38a648a6b728112b0ca8d4024e7095 differ diff --git a/packages/media/cpp/cache/images/90/90de37059d751ce916bcd68247e4e58d2d773d8847ea2f168b5e2034109ff14b b/packages/media/cpp/cache/images/90/90de37059d751ce916bcd68247e4e58d2d773d8847ea2f168b5e2034109ff14b new file mode 100644 index 00000000..b301e082 Binary files /dev/null and b/packages/media/cpp/cache/images/90/90de37059d751ce916bcd68247e4e58d2d773d8847ea2f168b5e2034109ff14b differ diff --git a/packages/media/cpp/cache/images/90/90fa398d0adde0d13d9e1c55e12c495b8ac18f603e2815fcaeb341661343e243 b/packages/media/cpp/cache/images/90/90fa398d0adde0d13d9e1c55e12c495b8ac18f603e2815fcaeb341661343e243 new file mode 100644 index 00000000..3789ef8f Binary files /dev/null and b/packages/media/cpp/cache/images/90/90fa398d0adde0d13d9e1c55e12c495b8ac18f603e2815fcaeb341661343e243 differ diff --git a/packages/media/cpp/cache/images/91/9113025eb15638ce14eaab70a941bd498c98dd0f922af2b4877347c53907dcdd b/packages/media/cpp/cache/images/91/9113025eb15638ce14eaab70a941bd498c98dd0f922af2b4877347c53907dcdd new file mode 100644 index 00000000..0272c7ef Binary files /dev/null and b/packages/media/cpp/cache/images/91/9113025eb15638ce14eaab70a941bd498c98dd0f922af2b4877347c53907dcdd differ diff --git a/packages/media/cpp/cache/images/91/9127e94de281cdb03db1f2d6331a00dd5c1e0a8a0203f6ff86391a68152f8979 b/packages/media/cpp/cache/images/91/9127e94de281cdb03db1f2d6331a00dd5c1e0a8a0203f6ff86391a68152f8979 new file mode 100644 index 00000000..f23900ab Binary files /dev/null and b/packages/media/cpp/cache/images/91/9127e94de281cdb03db1f2d6331a00dd5c1e0a8a0203f6ff86391a68152f8979 differ diff --git a/packages/media/cpp/cache/images/91/915bd2b06236a791fc545df27d26d3ac8a957c5700f734ed83e00876560346ce b/packages/media/cpp/cache/images/91/915bd2b06236a791fc545df27d26d3ac8a957c5700f734ed83e00876560346ce new file mode 100644 index 00000000..dffc0c26 Binary files /dev/null and b/packages/media/cpp/cache/images/91/915bd2b06236a791fc545df27d26d3ac8a957c5700f734ed83e00876560346ce differ diff --git a/packages/media/cpp/cache/images/92/92d9ba4bbffbdb10495c5c35b4aaf55b03ec136903361d6edc8f8d737e1e3016 b/packages/media/cpp/cache/images/92/92d9ba4bbffbdb10495c5c35b4aaf55b03ec136903361d6edc8f8d737e1e3016 new file mode 100644 index 00000000..59f576b0 Binary files /dev/null and b/packages/media/cpp/cache/images/92/92d9ba4bbffbdb10495c5c35b4aaf55b03ec136903361d6edc8f8d737e1e3016 differ diff --git a/packages/media/cpp/cache/images/93/93815a475fa041fa5d4068b97e3b66e68030654b9438518e9908417cb370535c b/packages/media/cpp/cache/images/93/93815a475fa041fa5d4068b97e3b66e68030654b9438518e9908417cb370535c new file mode 100644 index 00000000..93b2da89 Binary files /dev/null and b/packages/media/cpp/cache/images/93/93815a475fa041fa5d4068b97e3b66e68030654b9438518e9908417cb370535c differ diff --git a/packages/media/cpp/cache/images/95/954a53f8329e8c9955059e28a8e803686463034272fda074425e9f52b91d4653 b/packages/media/cpp/cache/images/95/954a53f8329e8c9955059e28a8e803686463034272fda074425e9f52b91d4653 new file mode 100644 index 00000000..4d67f58a Binary files /dev/null and b/packages/media/cpp/cache/images/95/954a53f8329e8c9955059e28a8e803686463034272fda074425e9f52b91d4653 differ diff --git a/packages/media/cpp/cache/images/96/96258fe4d923c25bfd567d32ca5c6b2b3c2c51c3fbc98dc4c90e91d14a27b02e b/packages/media/cpp/cache/images/96/96258fe4d923c25bfd567d32ca5c6b2b3c2c51c3fbc98dc4c90e91d14a27b02e new file mode 100644 index 00000000..f5e53c42 Binary files /dev/null and b/packages/media/cpp/cache/images/96/96258fe4d923c25bfd567d32ca5c6b2b3c2c51c3fbc98dc4c90e91d14a27b02e differ diff --git a/packages/media/cpp/cache/images/97/97f0cf70ff7a1476976bf4e19f41f0cbd3fc0a4d5549e7f0448a0ea2e5c4124d b/packages/media/cpp/cache/images/97/97f0cf70ff7a1476976bf4e19f41f0cbd3fc0a4d5549e7f0448a0ea2e5c4124d new file mode 100644 index 00000000..37efa8c8 Binary files /dev/null and b/packages/media/cpp/cache/images/97/97f0cf70ff7a1476976bf4e19f41f0cbd3fc0a4d5549e7f0448a0ea2e5c4124d differ diff --git a/packages/media/cpp/cache/images/98/9898fc102af93ad3f7ebdeabc0a896a9ac8e7fb7ba6134a05c02afa33ba902fa b/packages/media/cpp/cache/images/98/9898fc102af93ad3f7ebdeabc0a896a9ac8e7fb7ba6134a05c02afa33ba902fa new file mode 100644 index 00000000..0ef5effe Binary files /dev/null and b/packages/media/cpp/cache/images/98/9898fc102af93ad3f7ebdeabc0a896a9ac8e7fb7ba6134a05c02afa33ba902fa differ diff --git a/packages/media/cpp/cache/images/9a/9a3ba41731f78dac133b11f3cc8c997688bd941aca3b6641b945aba0574ad5b9 b/packages/media/cpp/cache/images/9a/9a3ba41731f78dac133b11f3cc8c997688bd941aca3b6641b945aba0574ad5b9 new file mode 100644 index 00000000..6ab1970d Binary files /dev/null and b/packages/media/cpp/cache/images/9a/9a3ba41731f78dac133b11f3cc8c997688bd941aca3b6641b945aba0574ad5b9 differ diff --git a/packages/media/cpp/cache/images/9a/9aea889ba333744215eefe7e0b6f763548a2cb229c571aee2a9d97111563b3ab b/packages/media/cpp/cache/images/9a/9aea889ba333744215eefe7e0b6f763548a2cb229c571aee2a9d97111563b3ab new file mode 100644 index 00000000..f7d7eb02 Binary files /dev/null and b/packages/media/cpp/cache/images/9a/9aea889ba333744215eefe7e0b6f763548a2cb229c571aee2a9d97111563b3ab differ diff --git a/packages/media/cpp/cache/images/9a/9af549f85abf4c5b341b690f87d2416ec02280631f75fcab607c5a8e2f0215ac b/packages/media/cpp/cache/images/9a/9af549f85abf4c5b341b690f87d2416ec02280631f75fcab607c5a8e2f0215ac new file mode 100644 index 00000000..2c733c5f Binary files /dev/null and b/packages/media/cpp/cache/images/9a/9af549f85abf4c5b341b690f87d2416ec02280631f75fcab607c5a8e2f0215ac differ diff --git a/packages/media/cpp/cache/images/9b/9bbf8b501d01234537c48e18ee22ecf9ebbd900e3b2c560efa8e8d9e82b26f13 b/packages/media/cpp/cache/images/9b/9bbf8b501d01234537c48e18ee22ecf9ebbd900e3b2c560efa8e8d9e82b26f13 new file mode 100644 index 00000000..1f60fac0 Binary files /dev/null and b/packages/media/cpp/cache/images/9b/9bbf8b501d01234537c48e18ee22ecf9ebbd900e3b2c560efa8e8d9e82b26f13 differ diff --git a/packages/media/cpp/cache/images/9d/9d2d0853bc65cd86e23b3d32ca36f3e64145280343fc511ea96d6f868ab9d51a b/packages/media/cpp/cache/images/9d/9d2d0853bc65cd86e23b3d32ca36f3e64145280343fc511ea96d6f868ab9d51a new file mode 100644 index 00000000..4a159408 Binary files /dev/null and b/packages/media/cpp/cache/images/9d/9d2d0853bc65cd86e23b3d32ca36f3e64145280343fc511ea96d6f868ab9d51a differ diff --git a/packages/media/cpp/cache/images/9d/9d335651dac8efc42b41cf81004250473334f7395fac0bfa6f638fd2f2c280de b/packages/media/cpp/cache/images/9d/9d335651dac8efc42b41cf81004250473334f7395fac0bfa6f638fd2f2c280de new file mode 100644 index 00000000..51fa012d Binary files /dev/null and b/packages/media/cpp/cache/images/9d/9d335651dac8efc42b41cf81004250473334f7395fac0bfa6f638fd2f2c280de differ diff --git a/packages/media/cpp/cache/images/9d/9dd2b481ba8ae2c870fe516617cb0449a1b7ed74852ce9f7c857ed0d54e41796 b/packages/media/cpp/cache/images/9d/9dd2b481ba8ae2c870fe516617cb0449a1b7ed74852ce9f7c857ed0d54e41796 new file mode 100644 index 00000000..8915e543 Binary files /dev/null and b/packages/media/cpp/cache/images/9d/9dd2b481ba8ae2c870fe516617cb0449a1b7ed74852ce9f7c857ed0d54e41796 differ diff --git a/packages/media/cpp/cache/images/9d/9de3fec2aa13d6178c42912f89c8a5d3a6b496690d3013c7f9130f08c25bf90d b/packages/media/cpp/cache/images/9d/9de3fec2aa13d6178c42912f89c8a5d3a6b496690d3013c7f9130f08c25bf90d new file mode 100644 index 00000000..4f148e3a Binary files /dev/null and b/packages/media/cpp/cache/images/9d/9de3fec2aa13d6178c42912f89c8a5d3a6b496690d3013c7f9130f08c25bf90d differ diff --git a/packages/media/cpp/cache/images/9e/9e8c27e96e3d641d8db59f9fc67e9f7208a0a82110080299438a7da82f6a9314 b/packages/media/cpp/cache/images/9e/9e8c27e96e3d641d8db59f9fc67e9f7208a0a82110080299438a7da82f6a9314 new file mode 100644 index 00000000..9f5f8262 Binary files /dev/null and b/packages/media/cpp/cache/images/9e/9e8c27e96e3d641d8db59f9fc67e9f7208a0a82110080299438a7da82f6a9314 differ diff --git a/packages/media/cpp/cache/images/9e/9ec818b65f787eacf652a5e4ba760ccc86ea9026a1875c973051cbadba6f5715 b/packages/media/cpp/cache/images/9e/9ec818b65f787eacf652a5e4ba760ccc86ea9026a1875c973051cbadba6f5715 new file mode 100644 index 00000000..2563e063 Binary files /dev/null and b/packages/media/cpp/cache/images/9e/9ec818b65f787eacf652a5e4ba760ccc86ea9026a1875c973051cbadba6f5715 differ diff --git a/packages/media/cpp/cache/images/9e/9ec8deb8589728133ec28ca97a5ae61aaa9b5abc2b483785e844755df9afe091 b/packages/media/cpp/cache/images/9e/9ec8deb8589728133ec28ca97a5ae61aaa9b5abc2b483785e844755df9afe091 new file mode 100644 index 00000000..1b202a22 Binary files /dev/null and b/packages/media/cpp/cache/images/9e/9ec8deb8589728133ec28ca97a5ae61aaa9b5abc2b483785e844755df9afe091 differ diff --git a/packages/media/cpp/cache/images/9e/9eeaf76a5e3896d6110b9f824905b833650f477d4a67c3b7091098106aaea2fb b/packages/media/cpp/cache/images/9e/9eeaf76a5e3896d6110b9f824905b833650f477d4a67c3b7091098106aaea2fb new file mode 100644 index 00000000..975ce196 Binary files /dev/null and b/packages/media/cpp/cache/images/9e/9eeaf76a5e3896d6110b9f824905b833650f477d4a67c3b7091098106aaea2fb differ diff --git a/packages/media/cpp/cache/images/9f/9f28d7d5b517db27dc3c439f5f3585166f08636e16a0d5975a210c157e1a71a5 b/packages/media/cpp/cache/images/9f/9f28d7d5b517db27dc3c439f5f3585166f08636e16a0d5975a210c157e1a71a5 new file mode 100644 index 00000000..b47d970e Binary files /dev/null and b/packages/media/cpp/cache/images/9f/9f28d7d5b517db27dc3c439f5f3585166f08636e16a0d5975a210c157e1a71a5 differ diff --git a/packages/media/cpp/cache/images/9f/9fdf958bc91eb27674b33bbb275b7462a890daf1234fa173488171e9bc73a7c0 b/packages/media/cpp/cache/images/9f/9fdf958bc91eb27674b33bbb275b7462a890daf1234fa173488171e9bc73a7c0 new file mode 100644 index 00000000..c3b0b887 Binary files /dev/null and b/packages/media/cpp/cache/images/9f/9fdf958bc91eb27674b33bbb275b7462a890daf1234fa173488171e9bc73a7c0 differ diff --git a/packages/media/cpp/cache/images/a1/a180d2fc55231da14045512d2e9e0fe253355dbc87a0b5d917e9a44b66ac654d b/packages/media/cpp/cache/images/a1/a180d2fc55231da14045512d2e9e0fe253355dbc87a0b5d917e9a44b66ac654d new file mode 100644 index 00000000..58fe417e Binary files /dev/null and b/packages/media/cpp/cache/images/a1/a180d2fc55231da14045512d2e9e0fe253355dbc87a0b5d917e9a44b66ac654d differ diff --git a/packages/media/cpp/cache/images/a1/a1c52ccad9cd211ace692a96b466f6dbfe47e1e3d1853f1c0ba2e162e1491331 b/packages/media/cpp/cache/images/a1/a1c52ccad9cd211ace692a96b466f6dbfe47e1e3d1853f1c0ba2e162e1491331 new file mode 100644 index 00000000..5800aeb4 Binary files /dev/null and b/packages/media/cpp/cache/images/a1/a1c52ccad9cd211ace692a96b466f6dbfe47e1e3d1853f1c0ba2e162e1491331 differ diff --git a/packages/media/cpp/cache/images/a2/a2afd47157c80d748cec7d579be615d064a5aa549efbb9c0b9cd742cf30908dc b/packages/media/cpp/cache/images/a2/a2afd47157c80d748cec7d579be615d064a5aa549efbb9c0b9cd742cf30908dc new file mode 100644 index 00000000..27c3a47f Binary files /dev/null and b/packages/media/cpp/cache/images/a2/a2afd47157c80d748cec7d579be615d064a5aa549efbb9c0b9cd742cf30908dc differ diff --git a/packages/media/cpp/cache/images/a3/a33d19d8631fb74df72a74c37250506c9bce9f80480b1eac65f0e4d6ae926d8b b/packages/media/cpp/cache/images/a3/a33d19d8631fb74df72a74c37250506c9bce9f80480b1eac65f0e4d6ae926d8b new file mode 100644 index 00000000..976c8ec2 Binary files /dev/null and b/packages/media/cpp/cache/images/a3/a33d19d8631fb74df72a74c37250506c9bce9f80480b1eac65f0e4d6ae926d8b differ diff --git a/packages/media/cpp/cache/images/a3/a36d5935a2ff2f5348170d1bcc0c010c86af0ba50ed3d2fb74d8cc991d151827 b/packages/media/cpp/cache/images/a3/a36d5935a2ff2f5348170d1bcc0c010c86af0ba50ed3d2fb74d8cc991d151827 new file mode 100644 index 00000000..b140205c Binary files /dev/null and b/packages/media/cpp/cache/images/a3/a36d5935a2ff2f5348170d1bcc0c010c86af0ba50ed3d2fb74d8cc991d151827 differ diff --git a/packages/media/cpp/cache/images/a4/a40a3eee7a92dad8d644dcc1ff4033cc5fb84fd7daa98679700bed1a92737eeb b/packages/media/cpp/cache/images/a4/a40a3eee7a92dad8d644dcc1ff4033cc5fb84fd7daa98679700bed1a92737eeb new file mode 100644 index 00000000..608772a5 Binary files /dev/null and b/packages/media/cpp/cache/images/a4/a40a3eee7a92dad8d644dcc1ff4033cc5fb84fd7daa98679700bed1a92737eeb differ diff --git a/packages/media/cpp/cache/images/a5/a54cc19a93971391611a2767650e5901b3f6dc15d31e8cb9da294738713c57fe b/packages/media/cpp/cache/images/a5/a54cc19a93971391611a2767650e5901b3f6dc15d31e8cb9da294738713c57fe new file mode 100644 index 00000000..3d06297f Binary files /dev/null and b/packages/media/cpp/cache/images/a5/a54cc19a93971391611a2767650e5901b3f6dc15d31e8cb9da294738713c57fe differ diff --git a/packages/media/cpp/cache/images/a8/a8b3b2fe1b952ec4f8672234ad7b331acace1300fa5feab94af3796efbc456a3 b/packages/media/cpp/cache/images/a8/a8b3b2fe1b952ec4f8672234ad7b331acace1300fa5feab94af3796efbc456a3 new file mode 100644 index 00000000..c5664e13 Binary files /dev/null and b/packages/media/cpp/cache/images/a8/a8b3b2fe1b952ec4f8672234ad7b331acace1300fa5feab94af3796efbc456a3 differ diff --git a/packages/media/cpp/cache/images/ab/abde5662d57d8a764377af4c001fde61c7c6a42a9e6532628a7dee45f471fe09 b/packages/media/cpp/cache/images/ab/abde5662d57d8a764377af4c001fde61c7c6a42a9e6532628a7dee45f471fe09 new file mode 100644 index 00000000..0f91da9d Binary files /dev/null and b/packages/media/cpp/cache/images/ab/abde5662d57d8a764377af4c001fde61c7c6a42a9e6532628a7dee45f471fe09 differ diff --git a/packages/media/cpp/cache/images/ad/ad38c20cd55a53138c533a81d14e255d2158fac96aaeeafd56f9dc91e484e986 b/packages/media/cpp/cache/images/ad/ad38c20cd55a53138c533a81d14e255d2158fac96aaeeafd56f9dc91e484e986 new file mode 100644 index 00000000..84f6d726 Binary files /dev/null and b/packages/media/cpp/cache/images/ad/ad38c20cd55a53138c533a81d14e255d2158fac96aaeeafd56f9dc91e484e986 differ diff --git a/packages/media/cpp/cache/images/b0/b05672ce368404b34c08354c2214737d0c8ae79623dc452957b9ba3b93650775 b/packages/media/cpp/cache/images/b0/b05672ce368404b34c08354c2214737d0c8ae79623dc452957b9ba3b93650775 new file mode 100644 index 00000000..660b8b86 Binary files /dev/null and b/packages/media/cpp/cache/images/b0/b05672ce368404b34c08354c2214737d0c8ae79623dc452957b9ba3b93650775 differ diff --git a/packages/media/cpp/cache/images/b1/b182895f57e6ad8084a0514516b6e5bedb5fe4f532cd8f118470005f62b39d1c b/packages/media/cpp/cache/images/b1/b182895f57e6ad8084a0514516b6e5bedb5fe4f532cd8f118470005f62b39d1c new file mode 100644 index 00000000..f2ca8789 Binary files /dev/null and b/packages/media/cpp/cache/images/b1/b182895f57e6ad8084a0514516b6e5bedb5fe4f532cd8f118470005f62b39d1c differ diff --git a/packages/media/cpp/cache/images/b2/b219684abfd7a324ef6c383443876070b525fcdc33d933dbf01d6a6935e7186b b/packages/media/cpp/cache/images/b2/b219684abfd7a324ef6c383443876070b525fcdc33d933dbf01d6a6935e7186b new file mode 100644 index 00000000..0d6d169e Binary files /dev/null and b/packages/media/cpp/cache/images/b2/b219684abfd7a324ef6c383443876070b525fcdc33d933dbf01d6a6935e7186b differ diff --git a/packages/media/cpp/cache/images/b2/b2a5b653e440315440e7650a79b409c9007fc57793458349da84cb52f7f3e950 b/packages/media/cpp/cache/images/b2/b2a5b653e440315440e7650a79b409c9007fc57793458349da84cb52f7f3e950 new file mode 100644 index 00000000..758537a8 Binary files /dev/null and b/packages/media/cpp/cache/images/b2/b2a5b653e440315440e7650a79b409c9007fc57793458349da84cb52f7f3e950 differ diff --git a/packages/media/cpp/cache/images/b3/b3b6afd5a3d58020cf50a238c900ec3259f6ae1aa44449e7ab17f910208f33a3 b/packages/media/cpp/cache/images/b3/b3b6afd5a3d58020cf50a238c900ec3259f6ae1aa44449e7ab17f910208f33a3 new file mode 100644 index 00000000..c5f0399c Binary files /dev/null and b/packages/media/cpp/cache/images/b3/b3b6afd5a3d58020cf50a238c900ec3259f6ae1aa44449e7ab17f910208f33a3 differ diff --git a/packages/media/cpp/cache/images/b3/b3d8939c6a04fd1b52e89ea303655daec5899d2ca404686d23a0b202ff3b9c1f b/packages/media/cpp/cache/images/b3/b3d8939c6a04fd1b52e89ea303655daec5899d2ca404686d23a0b202ff3b9c1f new file mode 100644 index 00000000..10899e36 Binary files /dev/null and b/packages/media/cpp/cache/images/b3/b3d8939c6a04fd1b52e89ea303655daec5899d2ca404686d23a0b202ff3b9c1f differ diff --git a/packages/media/cpp/cache/images/b4/b41de9722bddea1c4a51a06ca0c3ac8947bd108288b4d4d9dd04a35eae66d8e0 b/packages/media/cpp/cache/images/b4/b41de9722bddea1c4a51a06ca0c3ac8947bd108288b4d4d9dd04a35eae66d8e0 new file mode 100644 index 00000000..0aba51e3 Binary files /dev/null and b/packages/media/cpp/cache/images/b4/b41de9722bddea1c4a51a06ca0c3ac8947bd108288b4d4d9dd04a35eae66d8e0 differ diff --git a/packages/media/cpp/cache/images/b4/b477b121eac1de8e302e3507fc38fe7d4f61eb82234f95a585daac7836bd7083 b/packages/media/cpp/cache/images/b4/b477b121eac1de8e302e3507fc38fe7d4f61eb82234f95a585daac7836bd7083 new file mode 100644 index 00000000..9ce4247b Binary files /dev/null and b/packages/media/cpp/cache/images/b4/b477b121eac1de8e302e3507fc38fe7d4f61eb82234f95a585daac7836bd7083 differ diff --git a/packages/media/cpp/cache/images/b4/b4fa197513eb35d600e12d637c014a1021fd839a062f0e98150789e01847abe5 b/packages/media/cpp/cache/images/b4/b4fa197513eb35d600e12d637c014a1021fd839a062f0e98150789e01847abe5 new file mode 100644 index 00000000..ed4e09b0 Binary files /dev/null and b/packages/media/cpp/cache/images/b4/b4fa197513eb35d600e12d637c014a1021fd839a062f0e98150789e01847abe5 differ diff --git a/packages/media/cpp/cache/images/b5/b50201430c4d4e522fb94acb76538198aacc68ebd1b0506e5e8347a53e4d6c5d b/packages/media/cpp/cache/images/b5/b50201430c4d4e522fb94acb76538198aacc68ebd1b0506e5e8347a53e4d6c5d new file mode 100644 index 00000000..703b11b7 Binary files /dev/null and b/packages/media/cpp/cache/images/b5/b50201430c4d4e522fb94acb76538198aacc68ebd1b0506e5e8347a53e4d6c5d differ diff --git a/packages/media/cpp/cache/images/b5/b5f553d6ed2ec29824cf378d036f8e547f3eba27bae33ff50127a06481530dcf b/packages/media/cpp/cache/images/b5/b5f553d6ed2ec29824cf378d036f8e547f3eba27bae33ff50127a06481530dcf new file mode 100644 index 00000000..ab36f753 Binary files /dev/null and b/packages/media/cpp/cache/images/b5/b5f553d6ed2ec29824cf378d036f8e547f3eba27bae33ff50127a06481530dcf differ diff --git a/packages/media/cpp/cache/images/b7/b72880e434380adacf851cc89d8df06d71c2a08ec180a0adbd8bff5d0948ca3d b/packages/media/cpp/cache/images/b7/b72880e434380adacf851cc89d8df06d71c2a08ec180a0adbd8bff5d0948ca3d new file mode 100644 index 00000000..f58d1569 Binary files /dev/null and b/packages/media/cpp/cache/images/b7/b72880e434380adacf851cc89d8df06d71c2a08ec180a0adbd8bff5d0948ca3d differ diff --git a/packages/media/cpp/cache/images/b8/b80a4b4a1e9bd72cfd376a92aa178460ce7ae855529a7879e01c816e9c8648fc b/packages/media/cpp/cache/images/b8/b80a4b4a1e9bd72cfd376a92aa178460ce7ae855529a7879e01c816e9c8648fc new file mode 100644 index 00000000..3b80ae2f Binary files /dev/null and b/packages/media/cpp/cache/images/b8/b80a4b4a1e9bd72cfd376a92aa178460ce7ae855529a7879e01c816e9c8648fc differ diff --git a/packages/media/cpp/cache/images/b8/b8e8b468af9246e523cae9ba21a93b6e1710e8df7510ea93e1424ce9a846c434 b/packages/media/cpp/cache/images/b8/b8e8b468af9246e523cae9ba21a93b6e1710e8df7510ea93e1424ce9a846c434 new file mode 100644 index 00000000..c8005388 Binary files /dev/null and b/packages/media/cpp/cache/images/b8/b8e8b468af9246e523cae9ba21a93b6e1710e8df7510ea93e1424ce9a846c434 differ diff --git a/packages/media/cpp/cache/images/b9/b90491f5f9651040f8d1e33ed72db4863ca942e783d10504263e65c494c338a0 b/packages/media/cpp/cache/images/b9/b90491f5f9651040f8d1e33ed72db4863ca942e783d10504263e65c494c338a0 new file mode 100644 index 00000000..130a1235 Binary files /dev/null and b/packages/media/cpp/cache/images/b9/b90491f5f9651040f8d1e33ed72db4863ca942e783d10504263e65c494c338a0 differ diff --git a/packages/media/cpp/cache/images/ba/ba4622fe30ee44c4ad1aa5f26d7265c01c186739646277f8868577e2459fb7c1 b/packages/media/cpp/cache/images/ba/ba4622fe30ee44c4ad1aa5f26d7265c01c186739646277f8868577e2459fb7c1 new file mode 100644 index 00000000..d9e8763c Binary files /dev/null and b/packages/media/cpp/cache/images/ba/ba4622fe30ee44c4ad1aa5f26d7265c01c186739646277f8868577e2459fb7c1 differ diff --git a/packages/media/cpp/cache/images/ba/ba666e2d27f56ccb0d27fdeeb71bdb5cd864be0a8c7e334507cd7fe52deb3f88 b/packages/media/cpp/cache/images/ba/ba666e2d27f56ccb0d27fdeeb71bdb5cd864be0a8c7e334507cd7fe52deb3f88 new file mode 100644 index 00000000..044d1a9f Binary files /dev/null and b/packages/media/cpp/cache/images/ba/ba666e2d27f56ccb0d27fdeeb71bdb5cd864be0a8c7e334507cd7fe52deb3f88 differ diff --git a/packages/media/cpp/cache/images/ba/bad3e47c3e1d03d14c0a65a3564ce9b84fb40f57d7267d3f9646062ca9c699ec b/packages/media/cpp/cache/images/ba/bad3e47c3e1d03d14c0a65a3564ce9b84fb40f57d7267d3f9646062ca9c699ec new file mode 100644 index 00000000..30a64a93 Binary files /dev/null and b/packages/media/cpp/cache/images/ba/bad3e47c3e1d03d14c0a65a3564ce9b84fb40f57d7267d3f9646062ca9c699ec differ diff --git a/packages/media/cpp/cache/images/ba/bade3aaef17f060eb3457e604a0be5d531851389647523be70aa1cdaefd5db3c b/packages/media/cpp/cache/images/ba/bade3aaef17f060eb3457e604a0be5d531851389647523be70aa1cdaefd5db3c new file mode 100644 index 00000000..5fcf8085 Binary files /dev/null and b/packages/media/cpp/cache/images/ba/bade3aaef17f060eb3457e604a0be5d531851389647523be70aa1cdaefd5db3c differ diff --git a/packages/media/cpp/cache/images/ba/bae6de1dd0b811a66c324ba5b007919d67ff8a6ac8be82c2d60876fd163b5039 b/packages/media/cpp/cache/images/ba/bae6de1dd0b811a66c324ba5b007919d67ff8a6ac8be82c2d60876fd163b5039 new file mode 100644 index 00000000..e31b4fd2 Binary files /dev/null and b/packages/media/cpp/cache/images/ba/bae6de1dd0b811a66c324ba5b007919d67ff8a6ac8be82c2d60876fd163b5039 differ diff --git a/packages/media/cpp/cache/images/bb/bb28b60a2206b8a57e7b7bdc0309f5bd4e2959da5c2f5e19b5901d7ad7634058 b/packages/media/cpp/cache/images/bb/bb28b60a2206b8a57e7b7bdc0309f5bd4e2959da5c2f5e19b5901d7ad7634058 new file mode 100644 index 00000000..652f1d37 Binary files /dev/null and b/packages/media/cpp/cache/images/bb/bb28b60a2206b8a57e7b7bdc0309f5bd4e2959da5c2f5e19b5901d7ad7634058 differ diff --git a/packages/media/cpp/cache/images/bd/bdf2aa055b6289a588e051e49e7282aa63ec9ad2ad742dc290f5215fa18d9917 b/packages/media/cpp/cache/images/bd/bdf2aa055b6289a588e051e49e7282aa63ec9ad2ad742dc290f5215fa18d9917 new file mode 100644 index 00000000..7c7f5ac1 Binary files /dev/null and b/packages/media/cpp/cache/images/bd/bdf2aa055b6289a588e051e49e7282aa63ec9ad2ad742dc290f5215fa18d9917 differ diff --git a/packages/media/cpp/cache/images/be/be9b3cf2604658b2649c2e4be0f83011e43eced61d64c7deb3c5512b165766cf b/packages/media/cpp/cache/images/be/be9b3cf2604658b2649c2e4be0f83011e43eced61d64c7deb3c5512b165766cf new file mode 100644 index 00000000..976333bb Binary files /dev/null and b/packages/media/cpp/cache/images/be/be9b3cf2604658b2649c2e4be0f83011e43eced61d64c7deb3c5512b165766cf differ diff --git a/packages/media/cpp/cache/images/be/bee6589a2401a464042844550b961bb03a5cf8595a697a18920c0bcb373e708c b/packages/media/cpp/cache/images/be/bee6589a2401a464042844550b961bb03a5cf8595a697a18920c0bcb373e708c new file mode 100644 index 00000000..ae48a021 Binary files /dev/null and b/packages/media/cpp/cache/images/be/bee6589a2401a464042844550b961bb03a5cf8595a697a18920c0bcb373e708c differ diff --git a/packages/media/cpp/cache/images/bf/bf79e85048129b7739b41127667fd1ce5194eaa0a44bf24b2932bbd46eb77987 b/packages/media/cpp/cache/images/bf/bf79e85048129b7739b41127667fd1ce5194eaa0a44bf24b2932bbd46eb77987 new file mode 100644 index 00000000..aa8f1898 Binary files /dev/null and b/packages/media/cpp/cache/images/bf/bf79e85048129b7739b41127667fd1ce5194eaa0a44bf24b2932bbd46eb77987 differ diff --git a/packages/media/cpp/cache/images/bf/bfd522d0e6b01e7ad2705e8eceed2556728aacbbd92a0e2a986b45e6e92c683c b/packages/media/cpp/cache/images/bf/bfd522d0e6b01e7ad2705e8eceed2556728aacbbd92a0e2a986b45e6e92c683c new file mode 100644 index 00000000..e8328c80 Binary files /dev/null and b/packages/media/cpp/cache/images/bf/bfd522d0e6b01e7ad2705e8eceed2556728aacbbd92a0e2a986b45e6e92c683c differ diff --git a/packages/media/cpp/cache/images/c0/c0feb9f2006e450d7c9df9be5f70ff1042629dbe75f5127fd723943059e238a9 b/packages/media/cpp/cache/images/c0/c0feb9f2006e450d7c9df9be5f70ff1042629dbe75f5127fd723943059e238a9 new file mode 100644 index 00000000..00ebc19f Binary files /dev/null and b/packages/media/cpp/cache/images/c0/c0feb9f2006e450d7c9df9be5f70ff1042629dbe75f5127fd723943059e238a9 differ diff --git a/packages/media/cpp/cache/images/c2/c2949ec661d2a36cbf42deb1d4a68851f72b448a9f3bb6a2fca8d75a5b0be3f0 b/packages/media/cpp/cache/images/c2/c2949ec661d2a36cbf42deb1d4a68851f72b448a9f3bb6a2fca8d75a5b0be3f0 new file mode 100644 index 00000000..0036b09e Binary files /dev/null and b/packages/media/cpp/cache/images/c2/c2949ec661d2a36cbf42deb1d4a68851f72b448a9f3bb6a2fca8d75a5b0be3f0 differ diff --git a/packages/media/cpp/cache/images/c3/c3412b94309ff17230fa271d0c5c906b1e4043aa4d8dd57c22e7f070812b3ae4 b/packages/media/cpp/cache/images/c3/c3412b94309ff17230fa271d0c5c906b1e4043aa4d8dd57c22e7f070812b3ae4 new file mode 100644 index 00000000..b863a88f Binary files /dev/null and b/packages/media/cpp/cache/images/c3/c3412b94309ff17230fa271d0c5c906b1e4043aa4d8dd57c22e7f070812b3ae4 differ diff --git a/packages/media/cpp/cache/images/c3/c3eb486869520c62350f66f975f7dc7cd3587294d7025bc945f778f7040969c8 b/packages/media/cpp/cache/images/c3/c3eb486869520c62350f66f975f7dc7cd3587294d7025bc945f778f7040969c8 new file mode 100644 index 00000000..a001062d Binary files /dev/null and b/packages/media/cpp/cache/images/c3/c3eb486869520c62350f66f975f7dc7cd3587294d7025bc945f778f7040969c8 differ diff --git a/packages/media/cpp/cache/images/c5/c529661852eb6f80c2325bf96cec935ee828967f069527a1524013836d5c0c4b b/packages/media/cpp/cache/images/c5/c529661852eb6f80c2325bf96cec935ee828967f069527a1524013836d5c0c4b new file mode 100644 index 00000000..dc77fe6f Binary files /dev/null and b/packages/media/cpp/cache/images/c5/c529661852eb6f80c2325bf96cec935ee828967f069527a1524013836d5c0c4b differ diff --git a/packages/media/cpp/cache/images/c5/c549ffc9899b27000ffa709e3f5d39816a839b50f9b630a2d4150a1221aef22a b/packages/media/cpp/cache/images/c5/c549ffc9899b27000ffa709e3f5d39816a839b50f9b630a2d4150a1221aef22a new file mode 100644 index 00000000..c4bf1106 Binary files /dev/null and b/packages/media/cpp/cache/images/c5/c549ffc9899b27000ffa709e3f5d39816a839b50f9b630a2d4150a1221aef22a differ diff --git a/packages/media/cpp/cache/images/c6/c692cead0e3e7dcb448e449b89c7b92ded62b31b6c8bfe22856210678c32340a b/packages/media/cpp/cache/images/c6/c692cead0e3e7dcb448e449b89c7b92ded62b31b6c8bfe22856210678c32340a new file mode 100644 index 00000000..0da08e88 Binary files /dev/null and b/packages/media/cpp/cache/images/c6/c692cead0e3e7dcb448e449b89c7b92ded62b31b6c8bfe22856210678c32340a differ diff --git a/packages/media/cpp/cache/images/c8/c8f29bf23e102cfb3e06b49ef3bab3af4af63ccd5f6ab772cd88fbab461a4b32 b/packages/media/cpp/cache/images/c8/c8f29bf23e102cfb3e06b49ef3bab3af4af63ccd5f6ab772cd88fbab461a4b32 new file mode 100644 index 00000000..1ea68578 Binary files /dev/null and b/packages/media/cpp/cache/images/c8/c8f29bf23e102cfb3e06b49ef3bab3af4af63ccd5f6ab772cd88fbab461a4b32 differ diff --git a/packages/media/cpp/cache/images/c9/c94f77b1e128ae385170606ecbe6f157c2758c935f4ce27cbaf438a45a83096a b/packages/media/cpp/cache/images/c9/c94f77b1e128ae385170606ecbe6f157c2758c935f4ce27cbaf438a45a83096a new file mode 100644 index 00000000..d651dd27 Binary files /dev/null and b/packages/media/cpp/cache/images/c9/c94f77b1e128ae385170606ecbe6f157c2758c935f4ce27cbaf438a45a83096a differ diff --git a/packages/media/cpp/cache/images/ca/ca0bd0fdddf009068b60c3147f36122165287d4641c1013f0b1ba517a38093b4 b/packages/media/cpp/cache/images/ca/ca0bd0fdddf009068b60c3147f36122165287d4641c1013f0b1ba517a38093b4 new file mode 100644 index 00000000..83b2b0f1 Binary files /dev/null and b/packages/media/cpp/cache/images/ca/ca0bd0fdddf009068b60c3147f36122165287d4641c1013f0b1ba517a38093b4 differ diff --git a/packages/media/cpp/cache/images/ce/ce6948cf3eb8712f68b02926acbd009336af0eab72132ea8615112d287d8bc96 b/packages/media/cpp/cache/images/ce/ce6948cf3eb8712f68b02926acbd009336af0eab72132ea8615112d287d8bc96 new file mode 100644 index 00000000..c2044c9a Binary files /dev/null and b/packages/media/cpp/cache/images/ce/ce6948cf3eb8712f68b02926acbd009336af0eab72132ea8615112d287d8bc96 differ diff --git a/packages/media/cpp/cache/images/ce/ced7e7485dfaa9e391549a722112ffef44a55e3837c400281164744d0dc08448 b/packages/media/cpp/cache/images/ce/ced7e7485dfaa9e391549a722112ffef44a55e3837c400281164744d0dc08448 new file mode 100644 index 00000000..83f3d84c Binary files /dev/null and b/packages/media/cpp/cache/images/ce/ced7e7485dfaa9e391549a722112ffef44a55e3837c400281164744d0dc08448 differ diff --git a/packages/media/cpp/cache/images/cf/cf6e83fc9c2042c58266ddcb5959f51bafbdbf09b9108c23a4048c1adccc1db8 b/packages/media/cpp/cache/images/cf/cf6e83fc9c2042c58266ddcb5959f51bafbdbf09b9108c23a4048c1adccc1db8 new file mode 100644 index 00000000..bdfbf01c Binary files /dev/null and b/packages/media/cpp/cache/images/cf/cf6e83fc9c2042c58266ddcb5959f51bafbdbf09b9108c23a4048c1adccc1db8 differ diff --git a/packages/media/cpp/cache/images/d1/d146942a424b786940a98b1c85624f4fa2dda7e206db5a4c5b0b63e76c45a96e b/packages/media/cpp/cache/images/d1/d146942a424b786940a98b1c85624f4fa2dda7e206db5a4c5b0b63e76c45a96e new file mode 100644 index 00000000..e0d8649a Binary files /dev/null and b/packages/media/cpp/cache/images/d1/d146942a424b786940a98b1c85624f4fa2dda7e206db5a4c5b0b63e76c45a96e differ diff --git a/packages/media/cpp/cache/images/d1/d1e670c79704468e74c3d43932880d86cf85db5c44884ffb39d1825ee29bb6ae b/packages/media/cpp/cache/images/d1/d1e670c79704468e74c3d43932880d86cf85db5c44884ffb39d1825ee29bb6ae new file mode 100644 index 00000000..778cb06a Binary files /dev/null and b/packages/media/cpp/cache/images/d1/d1e670c79704468e74c3d43932880d86cf85db5c44884ffb39d1825ee29bb6ae differ diff --git a/packages/media/cpp/cache/images/d2/d2ee0dd029c4fe4f2bfb817df586c1a2101a4d127cebb0cf4b0dbb45a38295bf b/packages/media/cpp/cache/images/d2/d2ee0dd029c4fe4f2bfb817df586c1a2101a4d127cebb0cf4b0dbb45a38295bf new file mode 100644 index 00000000..17534078 Binary files /dev/null and b/packages/media/cpp/cache/images/d2/d2ee0dd029c4fe4f2bfb817df586c1a2101a4d127cebb0cf4b0dbb45a38295bf differ diff --git a/packages/media/cpp/cache/images/d4/d48226052ebd847356a0b0f91e11a407c5bc6b12561189b00f60c85b7368d5d5 b/packages/media/cpp/cache/images/d4/d48226052ebd847356a0b0f91e11a407c5bc6b12561189b00f60c85b7368d5d5 new file mode 100644 index 00000000..3db0345c Binary files /dev/null and b/packages/media/cpp/cache/images/d4/d48226052ebd847356a0b0f91e11a407c5bc6b12561189b00f60c85b7368d5d5 differ diff --git a/packages/media/cpp/cache/images/d5/d56b456e2067518a0a8fe034499383c2e471454cc8443956b293905ecff8e205 b/packages/media/cpp/cache/images/d5/d56b456e2067518a0a8fe034499383c2e471454cc8443956b293905ecff8e205 new file mode 100644 index 00000000..56293f60 Binary files /dev/null and b/packages/media/cpp/cache/images/d5/d56b456e2067518a0a8fe034499383c2e471454cc8443956b293905ecff8e205 differ diff --git a/packages/media/cpp/cache/images/d5/d5fdad9be3864f4082717d1c00c74ddcc1dab9da3e438134b88bddfdb8a2b280 b/packages/media/cpp/cache/images/d5/d5fdad9be3864f4082717d1c00c74ddcc1dab9da3e438134b88bddfdb8a2b280 new file mode 100644 index 00000000..aacae95f Binary files /dev/null and b/packages/media/cpp/cache/images/d5/d5fdad9be3864f4082717d1c00c74ddcc1dab9da3e438134b88bddfdb8a2b280 differ diff --git a/packages/media/cpp/cache/images/d6/d612c7555c679e36a7c60941f5d90a55c3d00a103bd4a500a540edd70ad95f9b b/packages/media/cpp/cache/images/d6/d612c7555c679e36a7c60941f5d90a55c3d00a103bd4a500a540edd70ad95f9b new file mode 100644 index 00000000..d4e55c29 Binary files /dev/null and b/packages/media/cpp/cache/images/d6/d612c7555c679e36a7c60941f5d90a55c3d00a103bd4a500a540edd70ad95f9b differ diff --git a/packages/media/cpp/cache/images/d6/d6b073161761cfa39937618c7f9d1fe303d7a5fb18ea0b357e04bb31184fec0c b/packages/media/cpp/cache/images/d6/d6b073161761cfa39937618c7f9d1fe303d7a5fb18ea0b357e04bb31184fec0c new file mode 100644 index 00000000..fba42a11 Binary files /dev/null and b/packages/media/cpp/cache/images/d6/d6b073161761cfa39937618c7f9d1fe303d7a5fb18ea0b357e04bb31184fec0c differ diff --git a/packages/media/cpp/cache/images/d8/d822e71b3823126636ae50a49030412cd06d2a5726fa72c3fb42b7375d2f7363 b/packages/media/cpp/cache/images/d8/d822e71b3823126636ae50a49030412cd06d2a5726fa72c3fb42b7375d2f7363 new file mode 100644 index 00000000..d789a9f6 Binary files /dev/null and b/packages/media/cpp/cache/images/d8/d822e71b3823126636ae50a49030412cd06d2a5726fa72c3fb42b7375d2f7363 differ diff --git a/packages/media/cpp/cache/images/d9/d947d16bd8fd55cabf589212220da4aae8284e472a0b2aec06021c825904b732 b/packages/media/cpp/cache/images/d9/d947d16bd8fd55cabf589212220da4aae8284e472a0b2aec06021c825904b732 new file mode 100644 index 00000000..0d1bbfe4 Binary files /dev/null and b/packages/media/cpp/cache/images/d9/d947d16bd8fd55cabf589212220da4aae8284e472a0b2aec06021c825904b732 differ diff --git a/packages/media/cpp/cache/images/db/db409fdae4ec706e3d34da6c29af59e61fd2f7a593028aa4bc8aba71e46e1bba b/packages/media/cpp/cache/images/db/db409fdae4ec706e3d34da6c29af59e61fd2f7a593028aa4bc8aba71e46e1bba new file mode 100644 index 00000000..d58772f8 Binary files /dev/null and b/packages/media/cpp/cache/images/db/db409fdae4ec706e3d34da6c29af59e61fd2f7a593028aa4bc8aba71e46e1bba differ diff --git a/packages/media/cpp/cache/images/db/db4386d50a7621597ceeb2a596d73162c7f0227afae9953b63ade8778178f641 b/packages/media/cpp/cache/images/db/db4386d50a7621597ceeb2a596d73162c7f0227afae9953b63ade8778178f641 new file mode 100644 index 00000000..d8a9dee8 Binary files /dev/null and b/packages/media/cpp/cache/images/db/db4386d50a7621597ceeb2a596d73162c7f0227afae9953b63ade8778178f641 differ diff --git a/packages/media/cpp/cache/images/db/db5835023df6a080b1d067fd5ea1942a4c503505c5ab7cda89a3642120f6ce80 b/packages/media/cpp/cache/images/db/db5835023df6a080b1d067fd5ea1942a4c503505c5ab7cda89a3642120f6ce80 new file mode 100644 index 00000000..6d9e21f0 Binary files /dev/null and b/packages/media/cpp/cache/images/db/db5835023df6a080b1d067fd5ea1942a4c503505c5ab7cda89a3642120f6ce80 differ diff --git a/packages/media/cpp/cache/images/db/db95ea6dd344b1c703ee6874e00e11edbc8861007f55ca8c9ee180f5b69add47 b/packages/media/cpp/cache/images/db/db95ea6dd344b1c703ee6874e00e11edbc8861007f55ca8c9ee180f5b69add47 new file mode 100644 index 00000000..303494b8 Binary files /dev/null and b/packages/media/cpp/cache/images/db/db95ea6dd344b1c703ee6874e00e11edbc8861007f55ca8c9ee180f5b69add47 differ diff --git a/packages/media/cpp/cache/images/dc/dc9572e33fcd1677dc412614a0d04b28c45b95ade60373e552794a98fae80ba4 b/packages/media/cpp/cache/images/dc/dc9572e33fcd1677dc412614a0d04b28c45b95ade60373e552794a98fae80ba4 new file mode 100644 index 00000000..ac02b5e2 Binary files /dev/null and b/packages/media/cpp/cache/images/dc/dc9572e33fcd1677dc412614a0d04b28c45b95ade60373e552794a98fae80ba4 differ diff --git a/packages/media/cpp/cache/images/dd/dd9ed4b2525c14b472b92e309e99e9ebb4375c2fb0270a583b2b5cd584b42c37 b/packages/media/cpp/cache/images/dd/dd9ed4b2525c14b472b92e309e99e9ebb4375c2fb0270a583b2b5cd584b42c37 new file mode 100644 index 00000000..bd102019 Binary files /dev/null and b/packages/media/cpp/cache/images/dd/dd9ed4b2525c14b472b92e309e99e9ebb4375c2fb0270a583b2b5cd584b42c37 differ diff --git a/packages/media/cpp/cache/images/de/dec6965d52e972192c27b8fb7411d23e68e04b3c434e3cc75b182d9fa6ed7e73 b/packages/media/cpp/cache/images/de/dec6965d52e972192c27b8fb7411d23e68e04b3c434e3cc75b182d9fa6ed7e73 new file mode 100644 index 00000000..ec1c3fff Binary files /dev/null and b/packages/media/cpp/cache/images/de/dec6965d52e972192c27b8fb7411d23e68e04b3c434e3cc75b182d9fa6ed7e73 differ diff --git a/packages/media/cpp/cache/images/df/df51e5ef69b3a4134f7ac97c1001006de4a6f7ea4b2fb5d360fb9a82e5774cf5 b/packages/media/cpp/cache/images/df/df51e5ef69b3a4134f7ac97c1001006de4a6f7ea4b2fb5d360fb9a82e5774cf5 new file mode 100644 index 00000000..a3c07bb8 Binary files /dev/null and b/packages/media/cpp/cache/images/df/df51e5ef69b3a4134f7ac97c1001006de4a6f7ea4b2fb5d360fb9a82e5774cf5 differ diff --git a/packages/media/cpp/cache/images/df/df5eeede859aaccfb2d65213e4e8365c1376213102191150155c9fdb8cd3c799 b/packages/media/cpp/cache/images/df/df5eeede859aaccfb2d65213e4e8365c1376213102191150155c9fdb8cd3c799 new file mode 100644 index 00000000..c8e85be5 Binary files /dev/null and b/packages/media/cpp/cache/images/df/df5eeede859aaccfb2d65213e4e8365c1376213102191150155c9fdb8cd3c799 differ diff --git a/packages/media/cpp/cache/images/df/df655617d7a48d7c717354af6dbd3dbea91378f048afb7dd2a084cfc975b6905 b/packages/media/cpp/cache/images/df/df655617d7a48d7c717354af6dbd3dbea91378f048afb7dd2a084cfc975b6905 new file mode 100644 index 00000000..98100373 Binary files /dev/null and b/packages/media/cpp/cache/images/df/df655617d7a48d7c717354af6dbd3dbea91378f048afb7dd2a084cfc975b6905 differ diff --git a/packages/media/cpp/cache/images/e0/e0f409228cba3058437464df54596031d06c686e978c34d2e43c659836f458db b/packages/media/cpp/cache/images/e0/e0f409228cba3058437464df54596031d06c686e978c34d2e43c659836f458db new file mode 100644 index 00000000..80503c21 Binary files /dev/null and b/packages/media/cpp/cache/images/e0/e0f409228cba3058437464df54596031d06c686e978c34d2e43c659836f458db differ diff --git a/packages/media/cpp/cache/images/e2/e28ed5287792cb1d023fa43897847c971073a494af094339f5c04469dfa1591c b/packages/media/cpp/cache/images/e2/e28ed5287792cb1d023fa43897847c971073a494af094339f5c04469dfa1591c new file mode 100644 index 00000000..3ee42e34 Binary files /dev/null and b/packages/media/cpp/cache/images/e2/e28ed5287792cb1d023fa43897847c971073a494af094339f5c04469dfa1591c differ diff --git a/packages/media/cpp/cache/images/e4/e42e18b72133d6cb7f2c2b9f53706bd589164c200db280899511ac580914fdfc b/packages/media/cpp/cache/images/e4/e42e18b72133d6cb7f2c2b9f53706bd589164c200db280899511ac580914fdfc new file mode 100644 index 00000000..734d8b1d Binary files /dev/null and b/packages/media/cpp/cache/images/e4/e42e18b72133d6cb7f2c2b9f53706bd589164c200db280899511ac580914fdfc differ diff --git a/packages/media/cpp/cache/images/e4/e47f656ca6aebe0acb02a00f4f891c5fa6bd6a0582eed4f22fd39410f5bd6d0f b/packages/media/cpp/cache/images/e4/e47f656ca6aebe0acb02a00f4f891c5fa6bd6a0582eed4f22fd39410f5bd6d0f new file mode 100644 index 00000000..b9bad2a2 Binary files /dev/null and b/packages/media/cpp/cache/images/e4/e47f656ca6aebe0acb02a00f4f891c5fa6bd6a0582eed4f22fd39410f5bd6d0f differ diff --git a/packages/media/cpp/cache/images/e4/e4f66723e50a43a5792687bf714d9a085b337b8627dbf4af3aec6b88b09fefbf b/packages/media/cpp/cache/images/e4/e4f66723e50a43a5792687bf714d9a085b337b8627dbf4af3aec6b88b09fefbf new file mode 100644 index 00000000..fc44c9f0 Binary files /dev/null and b/packages/media/cpp/cache/images/e4/e4f66723e50a43a5792687bf714d9a085b337b8627dbf4af3aec6b88b09fefbf differ diff --git a/packages/media/cpp/cache/images/e5/e570c41f051025d3f9324449807e6e7d9d62bd08779310c39da54300698fd790 b/packages/media/cpp/cache/images/e5/e570c41f051025d3f9324449807e6e7d9d62bd08779310c39da54300698fd790 new file mode 100644 index 00000000..24e2a277 Binary files /dev/null and b/packages/media/cpp/cache/images/e5/e570c41f051025d3f9324449807e6e7d9d62bd08779310c39da54300698fd790 differ diff --git a/packages/media/cpp/cache/images/e5/e5fb68a867598864cf1d8abbb8a69ca780146e29e25327c530575428863af824 b/packages/media/cpp/cache/images/e5/e5fb68a867598864cf1d8abbb8a69ca780146e29e25327c530575428863af824 new file mode 100644 index 00000000..e331f1a1 Binary files /dev/null and b/packages/media/cpp/cache/images/e5/e5fb68a867598864cf1d8abbb8a69ca780146e29e25327c530575428863af824 differ diff --git a/packages/media/cpp/cache/images/e6/e6406a434b03d4eecc7e8aa47fff837605c35218d5fc90b4fb4ac6caca36c971 b/packages/media/cpp/cache/images/e6/e6406a434b03d4eecc7e8aa47fff837605c35218d5fc90b4fb4ac6caca36c971 new file mode 100644 index 00000000..52d4c67b Binary files /dev/null and b/packages/media/cpp/cache/images/e6/e6406a434b03d4eecc7e8aa47fff837605c35218d5fc90b4fb4ac6caca36c971 differ diff --git a/packages/media/cpp/cache/images/e8/e838b0a2a38b111dd1e62e0c57c64c1c36e9181b735bb36f7bdc01694be62406 b/packages/media/cpp/cache/images/e8/e838b0a2a38b111dd1e62e0c57c64c1c36e9181b735bb36f7bdc01694be62406 new file mode 100644 index 00000000..1c13fdeb Binary files /dev/null and b/packages/media/cpp/cache/images/e8/e838b0a2a38b111dd1e62e0c57c64c1c36e9181b735bb36f7bdc01694be62406 differ diff --git a/packages/media/cpp/cache/images/ea/ea285710b397aab3e190f724c60c408d9b4cd90c2c0a490fe4d973cd59e9080c b/packages/media/cpp/cache/images/ea/ea285710b397aab3e190f724c60c408d9b4cd90c2c0a490fe4d973cd59e9080c new file mode 100644 index 00000000..92aca2bc Binary files /dev/null and b/packages/media/cpp/cache/images/ea/ea285710b397aab3e190f724c60c408d9b4cd90c2c0a490fe4d973cd59e9080c differ diff --git a/packages/media/cpp/cache/images/ea/ea936138e9d80b1750c543e3996f0bc54eadaef75a3ba24f66d3483be24c4513 b/packages/media/cpp/cache/images/ea/ea936138e9d80b1750c543e3996f0bc54eadaef75a3ba24f66d3483be24c4513 new file mode 100644 index 00000000..cbe7953f Binary files /dev/null and b/packages/media/cpp/cache/images/ea/ea936138e9d80b1750c543e3996f0bc54eadaef75a3ba24f66d3483be24c4513 differ diff --git a/packages/media/cpp/cache/images/eb/eb0d80bcdf754ac57b21b3bae612b9f4207d74613ba9cd8036f462654004d6e6 b/packages/media/cpp/cache/images/eb/eb0d80bcdf754ac57b21b3bae612b9f4207d74613ba9cd8036f462654004d6e6 new file mode 100644 index 00000000..d5d31919 Binary files /dev/null and b/packages/media/cpp/cache/images/eb/eb0d80bcdf754ac57b21b3bae612b9f4207d74613ba9cd8036f462654004d6e6 differ diff --git a/packages/media/cpp/cache/images/ec/ec3eec2b3cf58a15d72736859bdf86be4548afb7220fdc7e604880359cc9bc73 b/packages/media/cpp/cache/images/ec/ec3eec2b3cf58a15d72736859bdf86be4548afb7220fdc7e604880359cc9bc73 new file mode 100644 index 00000000..d2a0e54a Binary files /dev/null and b/packages/media/cpp/cache/images/ec/ec3eec2b3cf58a15d72736859bdf86be4548afb7220fdc7e604880359cc9bc73 differ diff --git a/packages/media/cpp/cache/images/ed/edaed93ed7eef8ac9bb3ef5635f0644812330038d6586cbb2a2042c7bc402537 b/packages/media/cpp/cache/images/ed/edaed93ed7eef8ac9bb3ef5635f0644812330038d6586cbb2a2042c7bc402537 new file mode 100644 index 00000000..7b3f77e3 Binary files /dev/null and b/packages/media/cpp/cache/images/ed/edaed93ed7eef8ac9bb3ef5635f0644812330038d6586cbb2a2042c7bc402537 differ diff --git a/packages/media/cpp/cache/images/ef/efe93fa36262f23326e2b8ba23f2cf4b204c575bdc83a553dfde087fe4328df8 b/packages/media/cpp/cache/images/ef/efe93fa36262f23326e2b8ba23f2cf4b204c575bdc83a553dfde087fe4328df8 new file mode 100644 index 00000000..692a754a Binary files /dev/null and b/packages/media/cpp/cache/images/ef/efe93fa36262f23326e2b8ba23f2cf4b204c575bdc83a553dfde087fe4328df8 differ diff --git a/packages/media/cpp/cache/images/f0/f058ad9c75f4517eea9bb4045cdad052f175e17ea5ed6f7847fd49a36125a34d b/packages/media/cpp/cache/images/f0/f058ad9c75f4517eea9bb4045cdad052f175e17ea5ed6f7847fd49a36125a34d new file mode 100644 index 00000000..f9bc1b75 Binary files /dev/null and b/packages/media/cpp/cache/images/f0/f058ad9c75f4517eea9bb4045cdad052f175e17ea5ed6f7847fd49a36125a34d differ diff --git a/packages/media/cpp/cache/images/f3/f30fff97a5ecfa3c2f0e883880d89a93c859caa20051042912450dd959a7acc5 b/packages/media/cpp/cache/images/f3/f30fff97a5ecfa3c2f0e883880d89a93c859caa20051042912450dd959a7acc5 new file mode 100644 index 00000000..8583a3f4 Binary files /dev/null and b/packages/media/cpp/cache/images/f3/f30fff97a5ecfa3c2f0e883880d89a93c859caa20051042912450dd959a7acc5 differ diff --git a/packages/media/cpp/cache/images/f3/f3b9d16a44c4b63f6c9dd9d8456eb05ad1c650c7a60bc37c51aef0338c317974 b/packages/media/cpp/cache/images/f3/f3b9d16a44c4b63f6c9dd9d8456eb05ad1c650c7a60bc37c51aef0338c317974 new file mode 100644 index 00000000..f2ef5f9b Binary files /dev/null and b/packages/media/cpp/cache/images/f3/f3b9d16a44c4b63f6c9dd9d8456eb05ad1c650c7a60bc37c51aef0338c317974 differ diff --git a/packages/media/cpp/cache/images/f4/f40d47e6974e18ee9623b167086a046b0d80f85deace39a0fc5cc3832394e371 b/packages/media/cpp/cache/images/f4/f40d47e6974e18ee9623b167086a046b0d80f85deace39a0fc5cc3832394e371 new file mode 100644 index 00000000..8b0b1946 Binary files /dev/null and b/packages/media/cpp/cache/images/f4/f40d47e6974e18ee9623b167086a046b0d80f85deace39a0fc5cc3832394e371 differ diff --git a/packages/media/cpp/cache/images/f4/f4efa20e7383a20f757b06907fea86ee700ec1f097314a37938703ef2b06fc5f b/packages/media/cpp/cache/images/f4/f4efa20e7383a20f757b06907fea86ee700ec1f097314a37938703ef2b06fc5f new file mode 100644 index 00000000..d75856d4 Binary files /dev/null and b/packages/media/cpp/cache/images/f4/f4efa20e7383a20f757b06907fea86ee700ec1f097314a37938703ef2b06fc5f differ diff --git a/packages/media/cpp/cache/images/f5/f5f28b9e725edb5657bdea3632364255ccd65a352c83e1e737a9f832395e3f1c b/packages/media/cpp/cache/images/f5/f5f28b9e725edb5657bdea3632364255ccd65a352c83e1e737a9f832395e3f1c new file mode 100644 index 00000000..a385cb9a Binary files /dev/null and b/packages/media/cpp/cache/images/f5/f5f28b9e725edb5657bdea3632364255ccd65a352c83e1e737a9f832395e3f1c differ diff --git a/packages/media/cpp/cache/images/f6/f69e88ab484ebd81f63a02e713fb4dbdd5123619bcd3abfca5b23070c5fc584a b/packages/media/cpp/cache/images/f6/f69e88ab484ebd81f63a02e713fb4dbdd5123619bcd3abfca5b23070c5fc584a new file mode 100644 index 00000000..4d4c5254 Binary files /dev/null and b/packages/media/cpp/cache/images/f6/f69e88ab484ebd81f63a02e713fb4dbdd5123619bcd3abfca5b23070c5fc584a differ diff --git a/packages/media/cpp/cache/images/f7/f7150c7783c2197bf4e34d9f2ddb7cf0a5a1b8d896991fee250782eebf3bd8e2 b/packages/media/cpp/cache/images/f7/f7150c7783c2197bf4e34d9f2ddb7cf0a5a1b8d896991fee250782eebf3bd8e2 new file mode 100644 index 00000000..8e83f619 Binary files /dev/null and b/packages/media/cpp/cache/images/f7/f7150c7783c2197bf4e34d9f2ddb7cf0a5a1b8d896991fee250782eebf3bd8e2 differ diff --git a/packages/media/cpp/cache/images/f7/f72e55e43a47060849c19cb70ebb76da594601f69ec81c6db6ec39260e64ef54 b/packages/media/cpp/cache/images/f7/f72e55e43a47060849c19cb70ebb76da594601f69ec81c6db6ec39260e64ef54 new file mode 100644 index 00000000..c6d156b7 Binary files /dev/null and b/packages/media/cpp/cache/images/f7/f72e55e43a47060849c19cb70ebb76da594601f69ec81c6db6ec39260e64ef54 differ diff --git a/packages/media/cpp/cache/images/f8/f88db18e46cd164a925e73ed7a7f9c9eb1465c685ca9df392b6ad58531d9675b b/packages/media/cpp/cache/images/f8/f88db18e46cd164a925e73ed7a7f9c9eb1465c685ca9df392b6ad58531d9675b new file mode 100644 index 00000000..6b9900a0 Binary files /dev/null and b/packages/media/cpp/cache/images/f8/f88db18e46cd164a925e73ed7a7f9c9eb1465c685ca9df392b6ad58531d9675b differ diff --git a/packages/media/cpp/cache/images/f9/f90015e794a2297394367637c5d64764d994aaf416074169b1419376a0ecae9b b/packages/media/cpp/cache/images/f9/f90015e794a2297394367637c5d64764d994aaf416074169b1419376a0ecae9b new file mode 100644 index 00000000..df4fbabf Binary files /dev/null and b/packages/media/cpp/cache/images/f9/f90015e794a2297394367637c5d64764d994aaf416074169b1419376a0ecae9b differ diff --git a/packages/media/cpp/cache/images/f9/f90eb3d60365f751e5ad1490b6c1f6be04b2fb5f0f6e0930c4184279a81eacdf b/packages/media/cpp/cache/images/f9/f90eb3d60365f751e5ad1490b6c1f6be04b2fb5f0f6e0930c4184279a81eacdf new file mode 100644 index 00000000..e5099d89 Binary files /dev/null and b/packages/media/cpp/cache/images/f9/f90eb3d60365f751e5ad1490b6c1f6be04b2fb5f0f6e0930c4184279a81eacdf differ diff --git a/packages/media/cpp/cache/images/f9/f9107837fea9a0e0fec68507944e99d6fa096a3464e9e0c4f12860eb6491d88d b/packages/media/cpp/cache/images/f9/f9107837fea9a0e0fec68507944e99d6fa096a3464e9e0c4f12860eb6491d88d new file mode 100644 index 00000000..87291e63 Binary files /dev/null and b/packages/media/cpp/cache/images/f9/f9107837fea9a0e0fec68507944e99d6fa096a3464e9e0c4f12860eb6491d88d differ diff --git a/packages/media/cpp/cache/images/f9/f9cc23f88bc8456dab876070105391eecb2ec105aebadff1fa771fd35e7a1d8b b/packages/media/cpp/cache/images/f9/f9cc23f88bc8456dab876070105391eecb2ec105aebadff1fa771fd35e7a1d8b new file mode 100644 index 00000000..1925c0ba Binary files /dev/null and b/packages/media/cpp/cache/images/f9/f9cc23f88bc8456dab876070105391eecb2ec105aebadff1fa771fd35e7a1d8b differ diff --git a/packages/media/cpp/cache/images/fb/fb4bd720a3f89499c0ac741379516c40d9c7cee57b42047dee8bebea34254032 b/packages/media/cpp/cache/images/fb/fb4bd720a3f89499c0ac741379516c40d9c7cee57b42047dee8bebea34254032 new file mode 100644 index 00000000..7807c602 Binary files /dev/null and b/packages/media/cpp/cache/images/fb/fb4bd720a3f89499c0ac741379516c40d9c7cee57b42047dee8bebea34254032 differ diff --git a/packages/media/cpp/cache/images/fb/fbac2f680b833a1ba5c87688dd635dc1b7d42d2629999a7f98b30741edd496ae b/packages/media/cpp/cache/images/fb/fbac2f680b833a1ba5c87688dd635dc1b7d42d2629999a7f98b30741edd496ae new file mode 100644 index 00000000..521dca3c Binary files /dev/null and b/packages/media/cpp/cache/images/fb/fbac2f680b833a1ba5c87688dd635dc1b7d42d2629999a7f98b30741edd496ae differ diff --git a/packages/media/cpp/cache/images/fb/fbfa3951b919c26fbde69c747c6091c39e20d751b14c800ba7935cecece47737 b/packages/media/cpp/cache/images/fb/fbfa3951b919c26fbde69c747c6091c39e20d751b14c800ba7935cecece47737 new file mode 100644 index 00000000..d2bd2ca9 Binary files /dev/null and b/packages/media/cpp/cache/images/fb/fbfa3951b919c26fbde69c747c6091c39e20d751b14c800ba7935cecece47737 differ diff --git a/packages/media/cpp/cache/images/fc/fc58bdadf18e84515b477d8b69412d9f00bfaa601dcf7a4cc8177eb67cfae43c b/packages/media/cpp/cache/images/fc/fc58bdadf18e84515b477d8b69412d9f00bfaa601dcf7a4cc8177eb67cfae43c new file mode 100644 index 00000000..78621858 Binary files /dev/null and b/packages/media/cpp/cache/images/fc/fc58bdadf18e84515b477d8b69412d9f00bfaa601dcf7a4cc8177eb67cfae43c differ diff --git a/packages/media/cpp/cache/images/fc/fcc108878b4f662c5ac1ee21a242e29c294467f4281744f9a722df01bc9873ea b/packages/media/cpp/cache/images/fc/fcc108878b4f662c5ac1ee21a242e29c294467f4281744f9a722df01bc9873ea new file mode 100644 index 00000000..86ad79b0 Binary files /dev/null and b/packages/media/cpp/cache/images/fc/fcc108878b4f662c5ac1ee21a242e29c294467f4281744f9a722df01bc9873ea differ diff --git a/packages/media/cpp/cache/images/fd/fd606faec7b4880bbedc29c4203d0cb7ede8e2a75f236ab07c1bfeae636c67e4 b/packages/media/cpp/cache/images/fd/fd606faec7b4880bbedc29c4203d0cb7ede8e2a75f236ab07c1bfeae636c67e4 new file mode 100644 index 00000000..e55c0a50 Binary files /dev/null and b/packages/media/cpp/cache/images/fd/fd606faec7b4880bbedc29c4203d0cb7ede8e2a75f236ab07c1bfeae636c67e4 differ diff --git a/packages/media/cpp/cache/images/fe/fece0230aafb40e6ed76788e34ac42cf8ed061ac51f8fd358b80ebcd6bc5183d b/packages/media/cpp/cache/images/fe/fece0230aafb40e6ed76788e34ac42cf8ed061ac51f8fd358b80ebcd6bc5183d new file mode 100644 index 00000000..0ee64b73 Binary files /dev/null and b/packages/media/cpp/cache/images/fe/fece0230aafb40e6ed76788e34ac42cf8ed061ac51f8fd358b80ebcd6bc5183d differ diff --git a/packages/media/cpp/cache/images/ff/fff1a8cc15729767419159e87a83aca2cc1fc74ce4fa7c3f092eb35d66bdfbc2 b/packages/media/cpp/cache/images/ff/fff1a8cc15729767419159e87a83aca2cc1fc74ce4fa7c3f092eb35d66bdfbc2 new file mode 100644 index 00000000..e1c91144 Binary files /dev/null and b/packages/media/cpp/cache/images/ff/fff1a8cc15729767419159e87a83aca2cc1fc74ce4fa7c3f092eb35d66bdfbc2 differ diff --git a/packages/media/cpp/config/postgres.toml b/packages/media/cpp/config/postgres.toml index 21adc052..7d3f0787 100644 --- a/packages/media/cpp/config/postgres.toml +++ b/packages/media/cpp/config/postgres.toml @@ -1,14 +1,3 @@ -# Polymech Postgres Configuration -# Derived from pm-pics/server/.env - -[postgres] -url = "postgresql://postgres.ytoadlpbdguriiccjnip:PKUF3t.cZDr3b4k@aws-1-eu-north-1.pooler.supabase.com:6543/postgres?pgbouncer=true" - -[supabase] -url = "https://ytoadlpbdguriiccjnip.supabase.co" -service_key = "sb_secret_A8CNmiO3Th9kl5BVnCb9uA_pPFwvW8_" -publishable_key = "sb_publishable_1GyeD_grTZhrU-_OdUCz4g_gjxcxRNp" - [server] port = 3333 url = "http://localhost:3333" @@ -18,25 +7,6 @@ image_api_url = "http://localhost:3333" url = "https://service.polymech.info" image_api_url = "https://service.polymech.info" -# ----------------------------------------------------------------------------- -# Services -# ----------------------------------------------------------------------------- -[services] -SERPAPI_KEY="517879d08bd8f13df9c4265c42aea8cfe960942f3a10e8774bbec11becbfb687" -GEO_CODER_KEY="65bcf01943459613018206nmi9830a9" -BIG_DATA_KEY="bdc_fac0842cc0b6480fa64c4a6df6c6835c" -SCRAPELESS_KEY="sk_3xKBbjxpOvtRVHMbw1MwSg26feEjBzDKQxQqG2qtlJrW3tbGe6x0uGhz0aMU1DDl" -OPENROUTER="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" - -# ----------------------------------------------------------------------------- -# Enricher Configuration -# ----------------------------------------------------------------------------- -[enricher] -ENRICHER_LOCATION_CONCURRENCY=10 -ENRICHER_META_CONCURRENCY=5 -ENRICHER_META_IDLE_TIMEOUT=60 -ENRICHER_META_SCRAPER="HTTP" - # ----------------------------------------------------------------------------- # System Hard Constraints & Throttle Limits (IPC / Threads / Buffers) # ----------------------------------------------------------------------------- @@ -46,7 +16,3 @@ http_concurrency_throttle = 15 queue_depth_max = 200 buffer_size_max = 52428800 -[cache] -GADM_CACHE_DEV = "../../packages/gadm/cache/gadm" -GADM_CACHE_PROD = "../../../geo-cache/gadm/" - diff --git a/packages/media/cpp/dist/media-img.exe b/packages/media/cpp/dist/media-img.exe index b30300ed..8ac4d678 100644 Binary files a/packages/media/cpp/dist/media-img.exe and b/packages/media/cpp/dist/media-img.exe differ diff --git a/packages/media/cpp/dist/media-img.pdb b/packages/media/cpp/dist/media-img.pdb index c75dbec6..0057f5d7 100644 Binary files a/packages/media/cpp/dist/media-img.pdb and b/packages/media/cpp/dist/media-img.pdb differ diff --git a/packages/media/cpp/install-lnx.sh b/packages/media/cpp/install-lnx.sh index 3fcc655b..c54a8682 100644 --- a/packages/media/cpp/install-lnx.sh +++ b/packages/media/cpp/install-lnx.sh @@ -1,13 +1,13 @@ #!/usr/bin/env bash # ───────────────────────────────────────────────────────────────────────────── -# install-lnx.sh – Install build dependencies for polymech-cli on Linux +# install-lnx.sh – Linux build deps for packages/media/cpp (media-img) and related tools # # Tested on: Ubuntu 20.04+ / Debian 11+ # Usage: sudo bash install-lnx.sh # ───────────────────────────────────────────────────────────────────────────── set -euo pipefail -echo "── polymech-cli Linux dependency installer ──" +echo "── media-img (C++) Linux dependency installer ──" # ── 1. System packages (apt) ───────────────────────────────────────────────── echo "" @@ -19,6 +19,7 @@ apt-get install -y --no-install-recommends \ g++ \ git \ libssl-dev \ + libvips-dev \ pkg-config \ snapd @@ -49,12 +50,11 @@ fi echo "" echo "── Done! ──" echo "" -echo "All C++ dependencies (CLI11, tomlplusplus, Catch2, asio, concurrentqueue," -echo "taskflow, curl, lexbor, rapidjson) are fetched automatically by CMake" -echo "FetchContent at build time — no manual installation needed." +echo "CMake FetchContent pulls CLI11, Asio, httplib, nlohmann/json, dotenv, and p-ranav/glob." +echo "libvips is required at link time (libvips-dev above)." echo "" echo "To build:" echo " cd $(dirname "$0")" -echo " npm run build:linux" +echo " cmake --preset release && cmake --build --preset release" echo "" -echo "The binary will be placed in: dist/polymech-cli" +echo "The binary will be placed in: dist/media-img" diff --git a/packages/media/cpp/orchestrator/test-media.mjs b/packages/media/cpp/orchestrator/test-media.mjs index 5f0cad04..105d05b7 100644 --- a/packages/media/cpp/orchestrator/test-media.mjs +++ b/packages/media/cpp/orchestrator/test-media.mjs @@ -7,6 +7,8 @@ * * npm run test:media -- --rest-only * npm run test:media -- --ipc-only + * npm run test:media -- --templates-only + * npm run test:media -- --glob-batch-only * * Fixtures: tests/assets (run `node tests/assets/build-fixtures.mjs` if missing). * @@ -14,7 +16,7 @@ * MEDIA_IMG_TEST_UNIX — Unix socket path for IPC UDS test (default /tmp/media-img-test.sock) */ -import { spawn } from 'node:child_process'; +import { spawn, spawnSync } from 'node:child_process'; import { existsSync, mkdtempSync, rmSync, unlinkSync } from 'node:fs'; import net from 'node:net'; import { tmpdir } from 'node:os'; @@ -39,6 +41,8 @@ const { assert } = stats; const restOnly = process.argv.includes('--rest-only'); const ipcOnly = process.argv.includes('--ipc-only'); +const templatesOnly = process.argv.includes('--templates-only'); +const globBatchOnly = process.argv.includes('--glob-batch-only'); function getFreePort() { return new Promise((resolvePort, reject) => { @@ -128,6 +132,97 @@ async function suiteRest(assetsDir) { } } +async function suiteDstTemplateRest(assetsDir) { + console.log('\n── REST: dst path templates (${SRC_DIR}, ${SRC_NAME}, …) ──\n'); + + const inPng = resolve(assetsDir, 'square-64.png'); + assert(existsSync(inPng), `fixture ${inPng}`); + + const port = await getFreePort(); + const proc = spawn(EXE, ['serve', '--host', '127.0.0.1', '--port', String(port)], { + stdio: ['ignore', 'pipe', 'pipe'], + }); + pipeWorkerStderr(proc, '[media-img:serve:tpl]'); + + try { + await waitListen('127.0.0.1', port, 'serve'); + const base = `http://127.0.0.1:${port}`; + const outDir = mkdtempSync(join(tmpdir(), 'media-dst-rest-')); + + const outPattern = join(outDir, '${SRC_NAME}_thumb.webp'); + const rt = await fetch(`${base}/v1/resize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + input: inPng, + output: outPattern, + max_width: 24, + format: 'webp', + }), + signal: AbortSignal.timeout(timeouts.httpMs), + }); + assert(rt.ok, 'POST /v1/resize template ok'); + const jt = await rt.json(); + assert(jt?.ok === true, 'template resize JSON ok'); + const expectedWebp = join(outDir, 'square-64_thumb.webp'); + assert(existsSync(expectedWebp), `expected ${expectedWebp}`); + + const outAmp = join(outDir, '&{SRC_NAME}_tiny.png'); + const r2 = await fetch(`${base}/v1/resize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + input: inPng, + output: outAmp, + expand_glob: false, + max_width: 16, + }), + signal: AbortSignal.timeout(timeouts.httpMs), + }); + assert(r2.ok, 'template + expand_glob false'); + assert(existsSync(join(outDir, 'square-64_tiny.png')), 'ampersand template output'); + + const subDir = join(assetsDir, 'tpl-sub'); + const outNested = join(subDir, '${SRC_NAME}_nested.png'); + const rn = await fetch(`${base}/v1/resize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + input: inPng, + output: outNested, + max_width: 12, + }), + signal: AbortSignal.timeout(timeouts.httpMs), + }); + assert(rn.ok, 'POST nested subdir + ${SRC_NAME}'); + const expectedNested = join(subDir, 'square-64_nested.png'); + assert(existsSync(expectedNested), `nested template ${expectedNested}`); + + const outViaSrcDir = '${SRC_DIR}/tpl-from-srcdir/${SRC_NAME}_sd.webp'; + const rsd = await fetch(`${base}/v1/resize`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + input: inPng, + output: outViaSrcDir, + max_width: 10, + format: 'webp', + }), + signal: AbortSignal.timeout(timeouts.httpMs), + }); + assert(rsd.ok, 'POST ${SRC_DIR} in output path'); + const fromSrcDir = join(assetsDir, 'tpl-from-srcdir', 'square-64_sd.webp'); + assert(existsSync(fromSrcDir), `expected ${fromSrcDir}`); + + rmSync(outDir, { recursive: true, force: true }); + rmSync(subDir, { recursive: true, force: true }); + rmSync(join(assetsDir, 'tpl-from-srcdir'), { recursive: true, force: true }); + } finally { + proc.kill(); + await new Promise((r) => setTimeout(r, 150)); + } +} + async function suiteIpcTcp(assetsDir) { console.log('\n── IPC TCP (media-img ipc --host --port) ──\n'); @@ -177,6 +272,95 @@ async function suiteIpcTcp(assetsDir) { } } +async function suiteDstTemplateIpcTcp(assetsDir) { + console.log('\n── IPC TCP: dst templates ──\n'); + + const inPng = resolve(assetsDir, 'square-64.png'); + assert(existsSync(inPng), `fixture ${inPng}`); + + const port = await getFreePort(); + const proc = spawn(EXE, ['ipc', '--host', '127.0.0.1', '--port', String(port)], { + stdio: ['ignore', 'pipe', 'pipe'], + }); + pipeWorkerStderr(proc, '[media-img:ipc:tpl]'); + + try { + await waitListen('127.0.0.1', port, 'ipc'); + const outDir = mkdtempSync(join(tmpdir(), 'media-dst-ipc-')); + const outPattern = join(outDir, '${SRC_NAME}_ipc.webp'); + + const sock = await connectTcp('127.0.0.1', port); + const res = await requestLineJson( + sock, + { + input: inPng, + output: outPattern, + max_width: 20, + format: 'webp', + }, + timeouts.ipcReadMs, + ); + sock.destroy(); + assert(res?.ok === true, 'IPC template ok'); + assert(existsSync(join(outDir, 'square-64_ipc.webp')), 'IPC template output file'); + + rmSync(outDir, { recursive: true, force: true }); + } finally { + proc.kill(); + await new Promise((r) => setTimeout(r, 150)); + } +} + +function suiteDstTemplateCli(assetsDir) { + console.log('\n── CLI: resize --src / --dst templates ──\n'); + + const inPng = resolve(assetsDir, 'square-64.png'); + assert(existsSync(inPng), `fixture ${inPng}`); + + const outDir = mkdtempSync(join(tmpdir(), 'media-dst-cli-')); + const dst = join(outDir, '&{SRC_NAME}_cli.jpg'); + + const r = spawnSync( + EXE, + ['resize', '--src', inPng, '--dst', dst, '--max-width', '18', '--format', 'jpeg'], + { encoding: 'utf8' }, + ); + assert(r.status === 0, `CLI template exit 0, stderr: ${r.stderr}`); + assert(existsSync(join(outDir, 'square-64_cli.jpg')), 'CLI template output'); + + rmSync(outDir, { recursive: true, force: true }); +} + +/** + * Recursive glob under tests/assets/glob-in, dst `${SRC_DIR}/out/${SRC_NAME}_medium.jpg` + * (TS-style `.+(jpg)` / bare `{SRC}` are not supported — use `_medium.jpg` and `${SRC_*}`). + * Does not delete outputs (see tests/assets/.gitignore); inspect on disk after the run. + */ +function suiteGlobBatchCli(assetsDir) { + console.log('\n── CLI: **/*.png glob + ${SRC_DIR}/out/${SRC_NAME}_medium.jpg ──\n'); + console.log(' (outputs under glob-in/**/out/ are kept for manual verification)\n'); + + const rootPng = join(assetsDir, 'glob-in', 'root.png'); + const leafPng = join(assetsDir, 'glob-in', 'sub', 'leaf.png'); + assert(existsSync(rootPng), `fixture ${rootPng}`); + assert(existsSync(leafPng), `fixture ${leafPng}`); + + const globIn = join(assetsDir, 'glob-in', '**', '*.JPG').replace(/\\/g, '/'); + const dstTmpl = '${SRC_DIR}/out/${SRC_NAME}_medium.jpg'; + + const r = spawnSync( + EXE, + ['resize', '--src', globIn, '--dst', dstTmpl, '--max-width', '40', '--format', 'jpeg'], + { encoding: 'utf8' }, + ); + assert(r.status === 0, `glob batch exit 0, stderr: ${r.stderr}`); + + const rootOut = join(assetsDir, 'glob-in', 'out', 'root_medium.jpg'); + const leafOut = join(assetsDir, 'glob-in', 'sub', 'out', 'leaf_medium.jpg'); + assert(existsSync(rootOut), `expected ${rootOut}`); + assert(existsSync(leafOut), `expected ${leafOut}`); +} + async function suiteIpcUnix(assetsDir) { console.log('\n── IPC Unix (media-img ipc --unix) ──\n'); @@ -249,7 +433,7 @@ async function run() { process.exit(1); } - const need = ['square-64.png', 'checker-128x128.png']; + const need = ['square-64.png', 'checker-128x128.png', 'glob-in/root.png', 'glob-in/sub/leaf.png']; const missing = need.filter((f) => !existsSync(join(assetsDir, f))); if (missing.length) { console.error(`Missing fixtures under ${assetsDir}: ${missing.join(', ')}`); @@ -259,12 +443,32 @@ async function run() { console.log(`\nmedia-img integration tests\n binary: ${EXE}\n assets: ${assetsDir}\n`); + if (templatesOnly) { + await suiteDstTemplateRest(assetsDir); + await suiteDstTemplateIpcTcp(assetsDir); + suiteDstTemplateCli(assetsDir); + console.log(`\nDone (templates only). Passed: ${stats.passed} Failed: ${stats.failed}\n`); + process.exit(stats.failed > 0 ? 1 : 0); + return; + } + + if (globBatchOnly) { + suiteGlobBatchCli(assetsDir); + console.log(`\nDone (glob batch only). Passed: ${stats.passed} Failed: ${stats.failed}\n`); + process.exit(stats.failed > 0 ? 1 : 0); + return; + } + const runRest = !ipcOnly; const runIpc = !restOnly; - if (runRest) await suiteRest(assetsDir); + if (runRest) { + await suiteRest(assetsDir); + await suiteDstTemplateRest(assetsDir); + } if (runIpc) { await suiteIpcTcp(assetsDir); + await suiteDstTemplateIpcTcp(assetsDir); if (!platform.isWin) { await suiteIpcUnix(assetsDir); } else { @@ -272,6 +476,10 @@ async function run() { console.log(' (skipped on Windows — use TCP IPC or run tests on Linux/macOS)\n'); } } + if (!ipcOnly) { + suiteDstTemplateCli(assetsDir); + suiteGlobBatchCli(assetsDir); + } console.log(`\nDone. Passed: ${stats.passed} Failed: ${stats.failed}\n`); process.exit(stats.failed > 0 ? 1 : 0); diff --git a/packages/media/cpp/package.json b/packages/media/cpp/package.json index bc99c63f..883f97f1 100644 --- a/packages/media/cpp/package.json +++ b/packages/media/cpp/package.json @@ -16,6 +16,8 @@ "generate:assets": "node tests/assets/build-fixtures.mjs", "setup:vips": "powershell -ExecutionPolicy Bypass -File scripts/fetch-vips-windows.ps1", "test:media": "node orchestrator/test-media.mjs", + "test:media:templates": "node orchestrator/test-media.mjs --templates-only", + "test:media:glob": "node orchestrator/test-media.mjs --glob-batch-only", "test:media:rest": "node orchestrator/test-media.mjs --rest-only", "test:media:ipc": "node orchestrator/test-media.mjs --ipc-only", "run": ".\\dist\\media-img.exe --help", diff --git a/packages/media/cpp/polymech.md b/packages/media/cpp/polymech.md deleted file mode 100644 index d79ee001..00000000 --- a/packages/media/cpp/polymech.md +++ /dev/null @@ -1,315 +0,0 @@ -# Polymech C++ Gridsearch Worker — Design - -## Goal - -Port the [gridsearch-worker.ts](../src/products/locations/gridsearch-worker.ts) pipeline to native C++, running as a **CLI subcommand** (`polymech-cli gridsearch`) while keeping all logic in internal libraries under `packages/`. The worker communicates progress via the [IPC framing protocol](./packages/ipc/) and writes results to Supabase via the existing [postgres](./packages/postgres/) package. - ---- - -## Status - -| Package | Status | Tests | Assertions | -|---------|--------|-------|------------| -| `geo` | ✅ Done | 23 | 77 | -| `gadm_reader` | ✅ Done | 18 | 53 | -| `grid` | ✅ Done | 13 | 105 | -| `search` | ✅ Done | 8 | 13 | -| CLI `gridsearch` | ✅ Done | — | dry-run verified (3ms) | -| IPC `gridsearch` | ✅ Done | 1 | 30 | -| **Total** | | **63** | **278** | - ---- - -## Existing C++ Inventory - -| Package | Provides | -|---------|----------| -| `ipc` | Length-prefixed JSON over stdio | -| `postgres` | Supabase PostgREST: `query`, `insert` | -| `http` | libcurl `GET`/`POST` | -| `json` | RapidJSON validate/prettify | -| `logger` | spdlog (stdout or **stderr** in worker mode) | -| `html` | HTML parser | - ---- - -## TypeScript Pipeline (Reference) - -``` -GADM Resolve → Grid Generate → SerpAPI Search → Enrich → Supabase Upsert -``` - -| Phase | Input | Output | Heavy work | -|-------|-------|--------|------------| -| **1. GADM Resolve** | GID list + target level | `GridFeature[]` (GeoJSON polygons with GHS props) | Read pre-cached JSON files from `cache/gadm/boundary_{GID}_{LEVEL}.json` | -| **2. Grid Generate** | `GridFeature[]` + settings | `GridSearchHop[]` (waypoints: lat/lng/radius) | Centroid, bbox, distance, area, point-in-polygon, cell sorting | -| **3. Search** | Waypoints + query + SerpAPI key | Place results (JSON) | HTTP calls to `serpapi.com`, per-waypoint caching | -| **4. Enrich** | Place results | Enriched data (emails, pages) | HTTP scraping | -| **5. Persist** | Enriched places | Supabase `places` + `grid_search_runs` | PostgREST upsert | - ---- - -## Implemented Packages - -### 1. `packages/geo` — Geometry primitives ✅ - -Header + `.cpp`, no external deps. Implements the **turf.js subset** used by the grid generator. - -```cpp -namespace geo { - -struct Coord { double lon, lat; }; -struct BBox { double minLon, minLat, maxLon, maxLat; }; - -BBox bbox(const std::vector& ring); -Coord centroid(const std::vector& ring); -double area_sq_m(const std::vector& ring); -double distance_km(Coord a, Coord b); -bool point_in_polygon(Coord pt, const std::vector& ring); - -std::vector square_grid(BBox extent, double cellSizeKm); -std::vector hex_grid(BBox extent, double cellSizeKm); -std::vector buffer_circle(Coord center, double radiusKm, int steps = 6); -} // namespace geo -``` - -**Rationale**: ~200 lines avoids pulling GEOS/Boost.Geometry. Adopts `pip.h` ray-casting pattern from `packages/gadm/cpp/` without the GDAL/GEOS/PROJ dependency (~700MB). - ---- - -### 2. `packages/gadm_reader` — Boundary resolver ✅ - -Reads pre-cached GADM boundary JSON from disk. No network calls. - -```cpp -namespace gadm { - -struct Feature { - std::string gid, name; - int level; - std::vector> rings; - double ghsPopulation, ghsBuiltWeight; - geo::Coord ghsPopCenter, ghsBuiltCenter; - std::vector> ghsPopCenters; // [lon, lat, weight] - std::vector> ghsBuiltCenters; - double areaSqKm; -}; - -BoundaryResult load_boundary(const std::string& gid, int targetLevel, - const std::string& cacheDir = "cache/gadm"); -} // namespace gadm -``` - -Handles `Polygon`/`MultiPolygon`, GHS enrichment fields, fallback resolution by country code prefix. - ---- - -### 3. `packages/grid` — Grid generator ✅ - -Direct port of [grid-generator.ts](../../shared/src/products/places/grid-generator.ts). - -```cpp -namespace grid { - -struct Waypoint { int step; double lng, lat, radius_km; }; -struct GridOptions { - std::string gridMode; // "hex", "square", "admin", "centers" - double cellSize; // km - double cellOverlap, centroidOverlap; - int maxCellsLimit; - double maxElevation, minDensity, minGhsPop, minGhsBuilt; - std::string ghsFilterMode; // "AND" | "OR" - bool allowMissingGhs, bypassFilters; - std::string pathOrder; // "zigzag", "snake", "spiral-out", "spiral-in", "shortest" - bool groupByRegion; -}; -struct GridResult { std::vector waypoints; int validCells, skippedCells; std::string error; }; - -GridResult generate(const std::vector& features, const GridOptions& opts); -} // namespace grid -``` - -**4 modes**: `admin` (centroid + radius), `centers` (GHS deduplicated), `hex`, `square` (tessellation + PIP) -**5 sort algorithms**: `zigzag`, `snake`, `spiral-out`, `spiral-in`, `shortest` (greedy NN) - ---- - -### 4. `packages/search` — SerpAPI client + config ✅ - -```cpp -namespace search { - -struct Config { - std::string serpapi_key, geocoder_key, bigdata_key; - std::string postgres_url, supabase_url, supabase_service_key; -}; - -Config load_config(const std::string& path = "config/postgres.toml"); - -struct SearchOptions { - std::string query; - double lat, lng; - int zoom = 13, limit = 20; - std::string engine = "google_maps", hl = "en", google_domain = "google.com"; -}; - -struct MapResult { - std::string title, place_id, data_id, address, phone, website, type; - std::vector types; - double rating; int reviews; - GpsCoordinates gps; -}; - -SearchResult search_google_maps(const Config& cfg, const SearchOptions& opts); -} // namespace search -``` - -Reads `[services].SERPAPI_KEY`, `GEO_CODER_KEY`, `BIG_DATA_KEY` from `config/postgres.toml`. HTTP pagination via `http::get()`, JSON parsing with RapidJSON. - ---- - -## CLI Subcommands ✅ - -### 1. `gridsearch` (One-shot execution) - -``` -polymech-cli gridsearch [OPTIONS] - -Positionals: - GID GADM GID (e.g. ESP.1.1_1) — ignored when --settings is used - QUERY Search query — ignored when --settings is used - -Options: - -l, --level INT Target GADM level (default: 0) - -m, --mode TEXT Grid mode: hex|square|admin|centers (default: hex) - -s, --cell-size FLOAT Cell size in km (default: 5.0) - --limit INT Max results per area (default: 20) - -z, --zoom INT Google Maps zoom (default: 13) - --sort TEXT Path order: snake|zigzag|spiral-out|spiral-in|shortest - -c, --config TEXT TOML config path (default: config/postgres.toml) - --cache-dir TEXT GADM cache directory (default: cache/gadm) - --settings TEXT JSON settings file (matches TypeScript GuidedPreset shape) - --enrich Run enrichment pipeline (meta + email) after search - --persistence-postgres Persist run data natively via Postgres - -o, --output TEXT Output JSON file (default: gridsearch-HH-MM.json in cwd) - --dry-run Generate grid only, skip SerpAPI search -``` - -### 2. `worker` (IPC Daemon execution) - -``` -polymech-cli worker [OPTIONS] - -Options: - --daemon Run persistent daemon pool (tier-based) - -c, --config TEXT TOML config path (default: config/postgres.toml) - --user-uid TEXT User ID to bind this daemon to (needed for place owner) - --uds TEXT Run over Unix Domain Socket / Named Pipe (TCP on Windows) at the given path -``` - -### Execution flow - -``` -1. load_config(configPath) → Config (TOML) -2. gadm::load_boundary(gid, level) → features[] -3. grid::generate(features, opts) → waypoints[] -4. --dry-run → output JSON array and exit -5. For each waypoint → search::search_google_maps(cfg, sopts) -6. Stream JSON summary to stdout -``` - -### Example - -```bash -polymech-cli gridsearch ABW "recycling" --dry-run -# → [{"step":1,"lat":12.588582,"lng":-70.040465,"radius_km":3.540}, ...] -# [info] Dry-run complete in 3ms -``` - -### IPC worker mode - -The `worker` subcommand natively routes multiplexed asynchronous `gridsearch` payloads. When launched via `--uds `, it provisions a high-performance Asio streaming server (AF_UNIX sockets on POSIX, TCP sockets on Windows). Event frames (`grid-ready`, `waypoint-start`, `location`, `node`, etc) emit bi-directionally utilizing the IPC bridging protocol, dropping locking blockades completely. - ---- - -## Exposed Configuration / Tuning Parameters - -As we integrate deeper with the core business logic, the Node orchestrator and internal services should configure and enforce limits on the underlying C++ concurrent engine. Relevant configuration surfaces we need to expose for the primary ecosystem libraries include: - -### 1. Taskflow (`https://github.com/taskflow/taskflow`) -- **`executor_threads` (`num_workers`)**: The size of the `tf::Executor` thread pool. As Gridsearch is heavily I/O network bound (HTTP calls for search/enrichment), setting this significantly higher than `std::thread::hardware_concurrency()` may aggressively improve HTTP ingestion throughput globally. -- **`max_concurrent_jobs_per_user`**: A structural limit dictating how many concurrent gridsearch invocation graphs a single tenant/user can enqueue and run actively to prevent monopolization. -- **`http_concurrency_throttle`**: Task limits enforced upon node scraping or SerpAPI requests per-pipeline graph to avoid widespread `429 Too Many Requests` bans. - -### 2. Moodycamel ConcurrentQueue (`https://github.com/cameron314/concurrentqueue`) -- **`queue_depth_max` / `backpressure`**: Since Moodycamel queue memory allocates dynamically and lock-free to any capacity, we must mandate a hard software ceiling/backpressure limit over the Node-to-C++ IPC layer. If Node blindly streams jobs faster than Taskflow can execute them, the daemon will eventually OOM. -- **`bulk_dequeue_size`**: Exposing tuning parameters for the dispatch thread on how many concurrent IPC tasks should be sucked out of the queue simultaneously. - -### 3. Boost.Asio (`https://github.com/chriskohlhoff/asio`) -- **`ipc_timeout_ms` (Read/Write)**: Mandatory timeouts for the IPC socket layer. If the orchestrator stalls, crashes, or goes silent, Asio must reap the connection and automatically GC the in-flight tasks to prevent Zombie worker processes. -- **`max_ipc_connections`**: Absolute limit on simultaneous orchestration pipelines dialing into a single Worker Pod. -- **`buffer_size_max`**: Soft constraints on async payload allocations so a malformed 200MB JSON frame from Node.js doesn't memory-spike the `asio::read` operations abruptly. - ---- - -## Build Integration - -### Dependency graph - -``` - ┌──────────┐ - │ polymech │ (the lib) - │ -cli │ (the binary) - └────┬─────┘ - ┌────────────┼────────────────┐ - ▼ ▼ ▼ - ┌──────────┐ ┌──────────┐ ┌──────────┐ - │ search │ │ grid │ │ ipc │ - └────┬─────┘ └────┬─────┘ └──────────┘ - │ │ - ▼ ▼ - ┌──────────┐ ┌───────────────┐ - │ http │ │ gadm_reader │ - └──────────┘ └────┬──────────┘ - ▼ - ┌──────────┐ - │ geo │ ← no deps (math only) - └──────────┘ - ┌──────────┐ - │ json │ ← RapidJSON - └──────────┘ -``` - -All packages depend on `logger` and `json` implicitly. - ---- - -## Testing - -### Unit tests (Catch2) - -Catch2 targets live in `tests/CMakeLists.txt` (e.g. `test_logger`, `test_html`, `test_postgres`, `test_json`, `test_http`, `test_polymech`, `test_cmd_kbot`, `test_ipc`, `test_functional`, e2e targets). The old geo / gadm_reader / grid / search / enrichers / `test_postgres_live` suites were removed with those package implementations. - -### Integration test (Node.js) - -- Existing `orchestrator/test-ipc.mjs` validates spawn/lifecycle/ping/job -- `orchestrator/test-gridsearch-ipc.mjs` validates full pipeline via IPC (8 event types + job result) -- `orchestrator/test-gridsearch-ipc-uds.mjs` validates high-throughput Unix Domain Sockets mapping, backpressure boundaries, and soft cancellation injections utilizing `action: cancel` frames mid-flight. - ---- - -## IPC Cancellation & Dynamic Job Tuning - -The high-performance UDS daemon now natively tracks and intercepts JSON `action: cancel` frames referencing specific `jobId`s to gracefully exit Taskflow jobs mid-flight. -Dynamic tuning limits, such as memory buffering boundaries or threading capacities, are inherently validated and bound by hard ceilings established inside the `[system]` constraint block of `config/postgres.toml`. - ---- - -## Deferred (Phase 2) - -| Item | Reason | -|------|--------| -| SerpAPI response caching | State store managed by orchestrator for now | -| Protobuf framing | JSON IPC sufficient for current throughput | -| Multi-threaded search | Sequential is fine for SerpAPI rate limits | -| GEOS integration | Custom geo is sufficient for grid math | diff --git a/packages/media/cpp/src/core/cache.cpp b/packages/media/cpp/src/core/cache.cpp new file mode 100644 index 00000000..ee2c29dd --- /dev/null +++ b/packages/media/cpp/src/core/cache.cpp @@ -0,0 +1,151 @@ +#include "cache.hpp" + +#include + +#include +#include + +namespace fs = std::filesystem; + +namespace media { + +namespace { + +std::string sha256_hex(const std::string &s) { + std::string hex; + picosha2::hash256_hex_string(s.begin(), s.end(), hex); + return hex; +} + +std::string serialize_options_for_cache_key(const ResizeOptions &opt) { + std::ostringstream o; + o << opt.max_width << '\n' + << opt.max_height << '\n' + << opt.format << '\n' + << opt.fit << '\n' + << opt.position << '\n' + << opt.kernel << '\n' + << opt.quality << '\n' + << opt.png_compression << '\n' + << (opt.without_enlargement ? 1 : 0) << '\n' + << (opt.autorotate ? 1 : 0) << '\n' + << (opt.strip_metadata ? 1 : 0) << '\n' + << opt.rotate << '\n' + << (opt.flip ? 1 : 0) << '\n' + << (opt.flop ? 1 : 0) << '\n' + << opt.background << '\n'; + return o.str(); +} + +std::string make_cache_key_string(const fs::path &input_canon, std::uintmax_t size, + std::uint64_t mtime_count, const ResizeOptions &opt) { + std::string blob = input_canon.generic_string(); + blob.push_back('\n'); + blob += std::to_string(size); + blob.push_back('\n'); + blob += std::to_string(mtime_count); + blob.push_back('\n'); + blob += serialize_options_for_cache_key(opt); + return blob; +} + +fs::path cache_file_path(const fs::path &cache_root, const std::string &key_hex) { + if (key_hex.size() < 4) + return cache_root / key_hex; + return cache_root / key_hex.substr(0, 2) / key_hex; +} + +bool copy_file_overwrite(const fs::path &from, const fs::path &to, std::string &err_out) { + std::error_code ec; + fs::create_directories(to.parent_path(), ec); + fs::copy_file(from, to, fs::copy_options::overwrite_existing, ec); + if (ec) { + err_out = ec.message(); + return false; + } + return true; +} + +} // namespace + +fs::path default_cache_dir() { + return fs::absolute(fs::path("cache") / "images").lexically_normal(); +} + +fs::path effective_cache_dir(const ResizeOptions &opt) { + if (opt.cache_dir.empty()) + return default_cache_dir(); + return fs::absolute(fs::path(opt.cache_dir)).lexically_normal(); +} + +bool try_copy_from_cache(const std::string &input_path, const std::string &output_path, const ResizeOptions &opt, + std::string &err_out) { + err_out.clear(); + if (!opt.cache_enabled) + return false; + + std::error_code ec; + fs::path in = fs::absolute(fs::path(input_path), ec); + if (ec || !fs::is_regular_file(in, ec)) { + return false; + } + fs::path canon = fs::weakly_canonical(in, ec); + if (ec) + canon = in; + + const std::uintmax_t sz = fs::file_size(canon, ec); + if (ec) + return false; + + const auto ft = fs::last_write_time(canon, ec); + if (ec) + return false; + const std::uint64_t mtime_count = static_cast(ft.time_since_epoch().count()); + + const std::string key_hex = sha256_hex(make_cache_key_string(canon, sz, mtime_count, opt)); + const fs::path root = effective_cache_dir(opt); + const fs::path cached = cache_file_path(root, key_hex); + + if (!fs::is_regular_file(cached, ec) || ec) + return false; + + return copy_file_overwrite(cached, fs::path(output_path), err_out); +} + +void store_in_cache(const std::string &input_path, const std::string &output_path, const ResizeOptions &opt) { + if (!opt.cache_enabled) + return; + + std::error_code ec; + fs::path in = fs::absolute(fs::path(input_path), ec); + if (ec || !fs::is_regular_file(in, ec)) + return; + fs::path canon = fs::weakly_canonical(in, ec); + if (ec) + canon = in; + + const std::uintmax_t sz = fs::file_size(canon, ec); + if (ec) + return; + + const auto ft = fs::last_write_time(canon, ec); + if (ec) + return; + const std::uint64_t mtime_count = static_cast(ft.time_since_epoch().count()); + + const std::string key_hex = sha256_hex(make_cache_key_string(canon, sz, mtime_count, opt)); + const fs::path root = effective_cache_dir(opt); + const fs::path dest = cache_file_path(root, key_hex); + const fs::path tmp = dest.string() + ".tmp"; + + fs::create_directories(dest.parent_path(), ec); + fs::copy_file(fs::path(output_path), tmp, fs::copy_options::overwrite_existing, ec); + if (ec) + return; + fs::rename(tmp, dest, ec); + if (ec) { + fs::remove(tmp, ec); + } +} + +} // namespace media diff --git a/packages/media/cpp/src/core/cache.hpp b/packages/media/cpp/src/core/cache.hpp new file mode 100644 index 00000000..dad19435 --- /dev/null +++ b/packages/media/cpp/src/core/cache.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include "resize.hpp" + +#include +#include + +namespace media { + +/** `/cache/images` (absolute at call time). */ +std::filesystem::path default_cache_dir(); + +/** Resolved cache root: `opt.cache_dir` if set, else `default_cache_dir()`. */ +std::filesystem::path effective_cache_dir(const ResizeOptions &opt); + +/** + * If caching is enabled and a cache entry exists, copy it to `output_path`. + * @return true on cache hit (copy succeeded), false on miss (continue processing). + * On hard error, sets `err_out` and returns false. + */ +bool try_copy_from_cache(const std::string &input_path, const std::string &output_path, const ResizeOptions &opt, + std::string &err_out); + +/** After a successful resize, copy `output_path` into the cache (best-effort; ignores failures). */ +void store_in_cache(const std::string &input_path, const std::string &output_path, const ResizeOptions &opt); + +} // namespace media diff --git a/packages/media/cpp/src/core/glob_paths.cpp b/packages/media/cpp/src/core/glob_paths.cpp new file mode 100644 index 00000000..0446f55f --- /dev/null +++ b/packages/media/cpp/src/core/glob_paths.cpp @@ -0,0 +1,169 @@ +#include "glob_paths.hpp" + +#include + +#include +#include + +namespace fs = std::filesystem; + +namespace media { + +namespace { + +bool trailing_sep(const std::string &s) { + return !s.empty() && (s.back() == '/' || s.back() == '\\'); +} + +void replace_all(std::string &s, const std::string &from, const std::string &to) { + if (from.empty()) + return; + size_t pos = 0; + while ((pos = s.find(from, pos)) != std::string::npos) { + s.replace(pos, from.length(), to); + pos += to.length(); + } +} + +/** Apply `${SRC_*}` and `&{SRC_*}` using absolute input path. */ +fs::path resolve_dst_template(const fs::path &input_abs, const std::string &tmpl) { + const fs::path parent = input_abs.parent_path(); + const std::string dir = parent.generic_string(); + const std::string stem = input_abs.stem().string(); + const std::string ext = input_abs.extension().string(); + + std::string s = tmpl; + // Longer keys first (SRC_FILE_EXT before SRC_NAME) — not strictly required, but stable + replace_all(s, "${SRC_FILE_EXT}", ext); + replace_all(s, "&{SRC_FILE_EXT}", ext); + replace_all(s, "${SRC_NAME}", stem); + replace_all(s, "&{SRC_NAME}", stem); + replace_all(s, "${SRC_DIR}", dir); + replace_all(s, "&{SRC_DIR}", dir); + + fs::path out(s); + if (!out.is_absolute()) + out = fs::absolute(out); + return out.lexically_normal(); +} + +} // namespace + +bool has_dst_template(const std::string &output_spec) { + return output_spec.find("${SRC_") != std::string::npos || output_spec.find("&{SRC_") != std::string::npos; +} + +bool has_glob_tokens(const std::string &path) { + return path.find('*') != std::string::npos || path.find('?') != std::string::npos; +} + +std::vector expand_input_paths(const std::string &input_spec, std::string &err_out) { + err_out.clear(); + if (input_spec.empty()) { + err_out = "input is empty"; + return {}; + } + + if (!has_glob_tokens(input_spec) && input_spec.find("**") == std::string::npos) { + fs::path p = fs::absolute(fs::path(input_spec)); + std::error_code ec; + if (fs::is_regular_file(p, ec)) + return {fs::weakly_canonical(p, ec)}; + err_out = "input file not found: " + p.generic_string(); + return {}; + } + + fs::path pat_path(input_spec); + fs::path resolved = pat_path.is_absolute() ? pat_path : fs::absolute(pat_path); + resolved = resolved.lexically_normal(); + const std::string pat = resolved.string(); + + std::vector matched; + try { + if (input_spec.find("**") != std::string::npos) { + matched = glob::rglob(pat); + } else { + matched = glob::glob(pat); + } + } catch (const std::exception &e) { + err_out = std::string("glob failed: ") + e.what(); + return {}; + } + + std::vector out; + std::unordered_set seen; + for (auto &p : matched) { + std::error_code ec; + if (!fs::is_regular_file(p, ec) || ec) + continue; + fs::path canon = fs::weakly_canonical(p, ec); + if (ec) + canon = p; + const std::string key = canon.generic_string(); + if (seen.insert(key).second) + out.push_back(std::move(canon)); + } + std::sort(out.begin(), out.end()); + if (out.empty()) + err_out = "glob matched no files: " + input_spec; + return out; +} + +std::vector> pair_resize_paths(const std::string &input_spec, + const std::string &output_spec, + std::string &err_out) { + err_out.clear(); + if (output_spec.empty()) { + err_out = "output is empty"; + return {}; + } + + std::vector inputs = expand_input_paths(input_spec, err_out); + if (inputs.empty()) + return {}; + + if (has_dst_template(output_spec)) { + std::vector> pairs; + pairs.reserve(inputs.size()); + for (const auto &in : inputs) + pairs.emplace_back(in, resolve_dst_template(in, output_spec)); + return pairs; + } + + fs::path out_root(output_spec); + std::error_code ec; + + if (inputs.size() == 1) { + const fs::path &in = inputs[0]; + bool out_is_dir = trailing_sep(output_spec); + if (!out_is_dir && fs::exists(out_root, ec) && fs::is_directory(out_root, ec)) + out_is_dir = true; + if (out_is_dir) { + fs::path dir = fs::absolute(out_root); + return {{in, dir / in.filename()}}; + } + return {{in, fs::absolute(out_root)}}; + } + + const bool force_dir = trailing_sep(output_spec); + if (fs::exists(out_root, ec) && fs::is_regular_file(out_root, ec)) { + err_out = "multiple inputs require output to be a directory, not a file: " + output_spec; + return {}; + } + if (!force_dir) { + if (!fs::exists(out_root, ec) || !fs::is_directory(out_root, ec)) { + err_out = "multiple inputs: output must be an existing directory, or end with / or \\ (new dir): " + + output_spec; + return {}; + } + } + + fs::path dir = fs::absolute(out_root); + std::vector> pairs; + pairs.reserve(inputs.size()); + for (const auto &in : inputs) + pairs.emplace_back(in, dir / in.filename()); + return pairs; +} + +} // namespace media diff --git a/packages/media/cpp/src/core/glob_paths.hpp b/packages/media/cpp/src/core/glob_paths.hpp new file mode 100644 index 00000000..135a786e --- /dev/null +++ b/packages/media/cpp/src/core/glob_paths.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include +#include + +namespace media { + +/** True if path likely needs filesystem glob expansion (*, ?, **). */ +bool has_glob_tokens(const std::string &path); + +/** + * True if `output` uses dst templates (`${SRC_DIR}`, `${SRC_NAME}`, `${SRC_FILE_EXT}` or `&{…}`). + * @see docs/Examples.md — SRC_NAME is the stem (no extension); SRC_FILE_EXT includes the leading dot. + */ +bool has_dst_template(const std::string &output_spec); + +/** + * Resolve input spec to regular files: literal path, or glob / recursive glob (same rules as kbot + * `source_files`: `**` uses rglob, else glob). + */ +std::vector expand_input_paths(const std::string &input_spec, std::string &err_out); + +/** + * Map input glob (or single file) to output paths: optional per-file dst templates, one output file, + * or one file per input under a directory (trailing separator or existing directory). + */ +std::vector> +pair_resize_paths(const std::string &input_spec, const std::string &output_spec, std::string &err_out); + +} // namespace media diff --git a/packages/media/cpp/src/core/resize.cpp b/packages/media/cpp/src/core/resize.cpp index 2681b9e6..29805897 100644 --- a/packages/media/cpp/src/core/resize.cpp +++ b/packages/media/cpp/src/core/resize.cpp @@ -1,8 +1,12 @@ #include "resize.hpp" +#include "cache.hpp" +#include "glob_paths.hpp" + #include #include +#include #include #include @@ -156,6 +160,38 @@ bool apply_user_rotate(VipsImage *in, VipsImage **out, int deg, std::string &err } // namespace +bool resize_batch(const std::string &input_spec, const std::string &output_spec, const ResizeOptions &opt, + std::string &err_out, ResizeBatchResult *out_stats) { + if (out_stats) { + out_stats->count = 0; + out_stats->outputs.clear(); + } + std::string pair_err; + auto jobs = pair_resize_paths(input_spec, output_spec, pair_err); + if (!pair_err.empty()) { + err_out = pair_err; + return false; + } + if (jobs.empty()) { + err_out = "no resize jobs"; + return false; + } + for (const auto &job : jobs) { + std::error_code ec; + std::filesystem::create_directories(job.second.parent_path(), ec); + std::string one_err; + if (!resize_file(job.first.string(), job.second.string(), opt, one_err)) { + err_out = job.first.string() + ": " + one_err; + return false; + } + if (out_stats) { + ++out_stats->count; + out_stats->outputs.push_back(job.second.string()); + } + } + return true; +} + void apply_resize_options_from_json(const nlohmann::json &j, ResizeOptions &opt) { auto num = [&](const char *key, int &dest) { if (!j.contains(key) || j[key].is_null()) @@ -192,16 +228,20 @@ void apply_resize_options_from_json(const nlohmann::json &j, ResizeOptions &opt) num_or_bool("flip", opt.flip); num_or_bool("flop", opt.flop); str("background", opt.background); + num_or_bool("cache", opt.cache_enabled); + str("cache_dir", opt.cache_dir); } -bool resize_file(const std::string &input_path, const std::string &output_path, const ResizeOptions &opt_in, - std::string &err_out) { - ensure_vips(); - ResizeOptions opt = opt_in; - to_lower(opt.fit); - to_lower(opt.kernel); - to_lower(opt.position); +void apply_cache_defaults_from_json(const nlohmann::json &j, ResizeOptions &opt, + const CacheServerDefaults &defaults) { + if (!j.contains("cache") || j["cache"].is_null()) + opt.cache_enabled = defaults.enabled; + if (!j.contains("cache_dir") || !j["cache_dir"].is_string() || j["cache_dir"].get().empty()) + opt.cache_dir = defaults.cache_dir; +} +static bool resize_file_vips(const std::string &input_path, const std::string &output_path, ResizeOptions opt, + std::string &err_out) { VipsImage *base = vips_image_new_from_file(input_path.c_str(), "access", VIPS_ACCESS_SEQUENTIAL, NULL); if (!base) { err_out = vips_err(); @@ -401,4 +441,28 @@ bool resize_file(const std::string &input_path, const std::string &output_path, return true; } +bool resize_file(const std::string &input_path, const std::string &output_path, const ResizeOptions &opt_in, + std::string &err_out) { + ResizeOptions opt = opt_in; + to_lower(opt.fit); + to_lower(opt.kernel); + to_lower(opt.position); + + if (opt.cache_enabled) { + std::string ce; + if (try_copy_from_cache(input_path, output_path, opt, ce)) + return true; + if (!ce.empty()) { + err_out = ce; + return false; + } + } + + ensure_vips(); + const bool ok = resize_file_vips(input_path, output_path, opt, err_out); + if (ok && opt.cache_enabled) + store_in_cache(input_path, output_path, opt); + return ok; +} + } // namespace media diff --git a/packages/media/cpp/src/core/resize.hpp b/packages/media/cpp/src/core/resize.hpp index d0352bf2..00745beb 100644 --- a/packages/media/cpp/src/core/resize.hpp +++ b/packages/media/cpp/src/core/resize.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include @@ -48,12 +49,39 @@ struct ResizeOptions { /** Letterbox / embed: `#rrggbb` or `#rgb` */ std::string background = "#ffffff"; + + /** When true (default), reuse prior outputs under `cache_dir` keyed by input + mtime + options. */ + bool cache_enabled = true; + /** Empty: `/cache/images`; otherwise absolute or relative path resolved at use time. */ + std::string cache_dir; +}; + +/** Defaults for `serve` / `ipc` when JSON omits `cache` / `cache_dir`. */ +struct CacheServerDefaults { + bool enabled = true; + std::string cache_dir; }; bool resize_file(const std::string& input_path, const std::string& output_path, const ResizeOptions& opt, std::string& err_out); +/** Result of `resize_batch` when `out_stats` is set (REST / IPC). */ +struct ResizeBatchResult { + int count = 0; + std::vector outputs; +}; + +/** + * One or more inputs (glob `*` `?` `**` or a single file) paired to output file(s) or a directory. + * Stops on first failure; `err_out` names the failing input when possible. + */ +bool resize_batch(const std::string& input_spec, const std::string& output_spec, const ResizeOptions& opt, + std::string& err_out, ResizeBatchResult* out_stats = nullptr); + /** Merge JSON keys into `opt` (REST / IPC). Unknown keys ignored. */ void apply_resize_options_from_json(const nlohmann::json& j, ResizeOptions& opt); +/** Apply JSON `cache` / `cache_dir`, then fill from `defaults` when those keys are absent. */ +void apply_cache_defaults_from_json(const nlohmann::json& j, ResizeOptions& opt, const CacheServerDefaults& defaults); + } // namespace media diff --git a/packages/media/cpp/src/http/serve.cpp b/packages/media/cpp/src/http/serve.cpp index a29ec683..87240765 100644 --- a/packages/media/cpp/src/http/serve.cpp +++ b/packages/media/cpp/src/http/serve.cpp @@ -5,18 +5,19 @@ #include +#include "core/glob_paths.hpp" #include "core/resize.hpp" namespace media::http { -int run_server(const std::string& host, int port) { +int run_server(const std::string &host, int port, const CacheServerDefaults &cache_defaults) { httplib::Server svr; - svr.Get("/health", [](const httplib::Request&, httplib::Response& res) { + svr.Get("/health", [](const httplib::Request &, httplib::Response &res) { res.set_content(R"({"ok":true,"service":"media-img"})", "application/json"); }); - svr.Post("/v1/resize", [](const httplib::Request& req, httplib::Response& res) { + svr.Post("/v1/resize", [cache_defaults](const httplib::Request &req, httplib::Response &res) { nlohmann::json body; try { body = nlohmann::json::parse(req.body.empty() ? "{}" : req.body); @@ -36,15 +37,39 @@ int run_server(const std::string& host, int port) { const std::string out = body["output"].get(); media::ResizeOptions opt; media::apply_resize_options_from_json(body, opt); + media::apply_cache_defaults_from_json(body, opt, cache_defaults); + + bool expand_glob = true; + if (body.contains("expand_glob") && body["expand_glob"].is_boolean()) + expand_glob = body["expand_glob"].get(); + + const bool use_batch = expand_glob || media::has_dst_template(out); std::string err; - if (!media::resize_file(in, out, opt, err)) { + if (!use_batch) { + if (!media::resize_file(in, out, opt, err)) { + res.status = 500; + nlohmann::json j{{"error", err}}; + res.set_content(j.dump(), "application/json"); + return; + } + res.set_content(R"({"ok":true})", "application/json"); + return; + } + + media::ResizeBatchResult stats; + if (!media::resize_batch(in, out, opt, err, &stats)) { res.status = 500; nlohmann::json j{{"error", err}}; res.set_content(j.dump(), "application/json"); return; } - res.set_content(R"({"ok":true})", "application/json"); + if (stats.count > 1) { + nlohmann::json ok{{"ok", true}, {"count", stats.count}, {"outputs", stats.outputs}}; + res.set_content(ok.dump(), "application/json"); + } else { + res.set_content(R"({"ok":true})", "application/json"); + } }); std::cerr << "media-img HTTP listening on http://" << host << ":" << port << "\n"; diff --git a/packages/media/cpp/src/http/serve.hpp b/packages/media/cpp/src/http/serve.hpp index fa67355b..79e6d633 100644 --- a/packages/media/cpp/src/http/serve.hpp +++ b/packages/media/cpp/src/http/serve.hpp @@ -1,10 +1,12 @@ #pragma once +#include "core/resize.hpp" + #include namespace media::http { /** Blocking HTTP server (cpp-httplib). Returns 0 on clean shutdown. */ -int run_server(const std::string& host, int port); +int run_server(const std::string &host, int port, const CacheServerDefaults &cache_defaults); } // namespace media::http diff --git a/packages/media/cpp/src/ipc/ipc_serve.cpp b/packages/media/cpp/src/ipc/ipc_serve.cpp index 220ef953..2dfc5ceb 100644 --- a/packages/media/cpp/src/ipc/ipc_serve.cpp +++ b/packages/media/cpp/src/ipc/ipc_serve.cpp @@ -9,11 +9,45 @@ #include #include +#include "core/glob_paths.hpp" #include "core/resize.hpp" namespace media::ipc { -static int handle_session(asio::ip::tcp::socket sock) { +namespace { + +nlohmann::json make_resize_response(const nlohmann::json &j, const CacheServerDefaults &cache_defaults) { + if (!j.contains("input") || !j.contains("output")) + return nlohmann::json{{"ok", false}, {"error", "need input and output"}}; + + const std::string in = j["input"].get(); + const std::string out = j["output"].get(); + media::ResizeOptions opt; + media::apply_resize_options_from_json(j, opt); + media::apply_cache_defaults_from_json(j, opt, cache_defaults); + + bool expand_glob = true; + if (j.contains("expand_glob") && j["expand_glob"].is_boolean()) + expand_glob = j["expand_glob"].get(); + + const bool use_batch = expand_glob || media::has_dst_template(out); + + std::string err; + if (!use_batch) { + if (!media::resize_file(in, out, opt, err)) + return nlohmann::json{{"ok", false}, {"error", err}}; + return nlohmann::json{{"ok", true}}; + } + + media::ResizeBatchResult stats; + if (!media::resize_batch(in, out, opt, err, &stats)) + return nlohmann::json{{"ok", false}, {"error", err}}; + if (stats.count > 1) + return nlohmann::json{{"ok", true}, {"count", stats.count}, {"outputs", stats.outputs}}; + return nlohmann::json{{"ok", true}}; +} + +static int handle_session(asio::ip::tcp::socket sock, const CacheServerDefaults &cache_defaults) { try { asio::streambuf buf; asio::read_until(sock, buf, '\n'); @@ -26,19 +60,10 @@ static int handle_session(asio::ip::tcp::socket sock) { asio::write(sock, asio::buffer(err + "\n")); return 0; } - if (!j.contains("input") || !j.contains("output")) { - std::string err = R"({"ok":false,"error":"need input and output"})"; - asio::write(sock, asio::buffer(err + "\n")); - return 0; - } - media::ResizeOptions opt; - media::apply_resize_options_from_json(j, opt); - std::string err; - bool ok = media::resize_file(j["input"].get(), j["output"].get(), opt, err); - nlohmann::json out = ok ? nlohmann::json{{"ok", true}} : nlohmann::json{{"ok", false}, {"error", err}}; + nlohmann::json out = make_resize_response(j, cache_defaults); std::string payload = out.dump() + "\n"; asio::write(sock, asio::buffer(payload)); - } catch (const std::exception& e) { + } catch (const std::exception &e) { try { std::string err = std::string(R"({"ok":false,"error":")") + e.what() + "\"}\n"; asio::write(sock, asio::buffer(err)); @@ -48,14 +73,17 @@ static int handle_session(asio::ip::tcp::socket sock) { return 0; } -int run_tcp_server(const std::string& host, int port) { +} // namespace + +int run_tcp_server(const std::string &host, int port, const CacheServerDefaults &cache_defaults) { asio::io_context io; - asio::ip::tcp::acceptor acc(io, asio::ip::tcp::endpoint(asio::ip::make_address(host), static_cast(port))); + asio::ip::tcp::acceptor acc(io, + asio::ip::tcp::endpoint(asio::ip::make_address(host), static_cast(port))); std::cerr << "media-img IPC (TCP) " << host << ":" << port << "\n"; for (;;) { asio::ip::tcp::socket sock(io); acc.accept(sock); - handle_session(std::move(sock)); + handle_session(std::move(sock), cache_defaults); } } @@ -63,7 +91,7 @@ int run_tcp_server(const std::string& host, int port) { #include #include -int run_unix_server(const std::string& path) { +int run_unix_server(const std::string &path, const CacheServerDefaults &cache_defaults) { ::unlink(path.c_str()); asio::io_context io; asio::local::stream_protocol::acceptor acc(io, asio::local::stream_protocol::endpoint(path)); @@ -71,23 +99,26 @@ int run_unix_server(const std::string& path) { for (;;) { asio::local::stream_protocol::socket sock(io); acc.accept(sock); - // reuse same JSON line protocol over stream socket - asio::streambuf buf; - asio::read_until(sock, buf, '\n'); - std::istream is(&buf); - std::string line; - std::getline(is, line); - nlohmann::json j = nlohmann::json::parse(line, nullptr, false); - if (!j.is_object()) { - asio::write(sock, asio::buffer(std::string(R"({"ok":false})") + "\n")); - continue; + try { + asio::streambuf buf; + asio::read_until(sock, buf, '\n'); + std::istream is(&buf); + std::string line; + std::getline(is, line); + nlohmann::json j = nlohmann::json::parse(line, nullptr, false); + if (!j.is_object()) { + asio::write(sock, asio::buffer(std::string(R"({"ok":false})") + "\n")); + continue; + } + nlohmann::json out = make_resize_response(j, cache_defaults); + asio::write(sock, asio::buffer(out.dump() + "\n")); + } catch (const std::exception &e) { + try { + nlohmann::json err{{"ok", false}, {"error", e.what()}}; + asio::write(sock, asio::buffer(err.dump() + "\n")); + } catch (...) { + } } - media::ResizeOptions opt; - media::apply_resize_options_from_json(j, opt); - std::string err; - bool ok = media::resize_file(j["input"].get(), j["output"].get(), opt, err); - nlohmann::json out = ok ? nlohmann::json{{"ok", true}} : nlohmann::json{{"ok", false}, {"error", err}}; - asio::write(sock, asio::buffer(out.dump() + "\n")); } } #endif diff --git a/packages/media/cpp/src/ipc/ipc_serve.hpp b/packages/media/cpp/src/ipc/ipc_serve.hpp index 7a6339a8..65d46d26 100644 --- a/packages/media/cpp/src/ipc/ipc_serve.hpp +++ b/packages/media/cpp/src/ipc/ipc_serve.hpp @@ -1,15 +1,17 @@ #pragma once +#include "core/resize.hpp" + #include namespace media::ipc { /** TCP JSON line server for resize jobs (cross-platform). Returns 0 on error exit 0. */ -int run_tcp_server(const std::string& host, int port); +int run_tcp_server(const std::string &host, int port, const CacheServerDefaults &cache_defaults); #if !defined(_WIN32) /** Unix domain socket (same JSON protocol). */ -int run_unix_server(const std::string& path); +int run_unix_server(const std::string &path, const CacheServerDefaults &cache_defaults); #endif } // namespace media::ipc diff --git a/packages/media/cpp/src/main.cpp b/packages/media/cpp/src/main.cpp index f3cead56..29968aeb 100644 --- a/packages/media/cpp/src/main.cpp +++ b/packages/media/cpp/src/main.cpp @@ -59,6 +59,8 @@ int main(int argc, char **argv) { std::string in_path; std::string out_path; + std::string src_flag; + std::string dst_flag; int max_w = 0; int max_h = 0; std::string format; @@ -76,8 +78,10 @@ int main(int argc, char **argv) { bool allow_enlargement = false; auto *resize_cmd = app.add_subcommand("resize", "Resize / transform an image (libvips, Sharp-like options)"); - resize_cmd->add_option("input", in_path, "Input image path")->required(); - resize_cmd->add_option("output", out_path, "Output image path")->required(); + resize_cmd->add_option("input", in_path, "Input image path or glob (*, ?, **)")->required(false); + resize_cmd->add_option("output", out_path, "Output image path or output directory for batch")->required(false); + resize_cmd->add_option("--src", src_flag, "Same as positional input; glob batch with --dst"); + resize_cmd->add_option("--dst", dst_flag, "Same as positional output; directory if multiple inputs"); resize_cmd->add_option("--max-width", max_w, "Target / max width (0 = no limit)"); resize_cmd->add_option("--max-height", max_h, "Target / max height (0 = no limit)"); resize_cmd->add_option("--format", format, "Output format (default: from extension)"); @@ -96,20 +100,34 @@ int main(int argc, char **argv) { resize_cmd->add_flag("--no-autorotate", no_autorotate, "Disable EXIF orientation"); resize_cmd->add_flag("--no-strip", no_strip, "Keep metadata on output"); resize_cmd->add_flag("--allow-enlargement", allow_enlargement, "Allow upscaling (inside/contain/outside)"); + bool resize_no_cache = false; + std::string resize_cache_dir; + resize_cmd->add_flag("--no-cache", resize_no_cache, "Disable output cache (default: cache on)"); + resize_cmd->add_option("--cache-dir", resize_cache_dir, "Cache root (default: /cache/images)"); std::string host = "127.0.0.1"; int port = 8080; + bool serve_no_cache = false; + std::string serve_cache_dir; auto *serve_cmd = app.add_subcommand("serve", "Run HTTP REST server"); serve_cmd->add_option("--host", host, "Bind address")->default_val("127.0.0.1"); serve_cmd->add_option("-p,--port", port, "TCP port")->default_val(8080); + serve_cmd->add_flag("--no-cache", serve_no_cache, + "Server default: cache off when JSON omits \"cache\" (JSON may still enable per request)"); + serve_cmd->add_option("--cache-dir", serve_cache_dir, "Server default cache dir when JSON omits \"cache_dir\""); std::string ipc_host = "127.0.0.1"; int ipc_port = 9333; std::string ipc_unix; + bool ipc_no_cache = false; + std::string ipc_cache_dir; auto *ipc_cmd = app.add_subcommand("ipc", "Run JSON-line IPC server (TCP; Unix socket on non-Windows)"); ipc_cmd->add_option("--host", ipc_host, "Bind address")->default_val("127.0.0.1"); ipc_cmd->add_option("-p,--port", ipc_port, "TCP port")->default_val(9333); ipc_cmd->add_option("--unix", ipc_unix, "Unix domain socket path (not Windows)"); + ipc_cmd->add_flag("--no-cache", ipc_no_cache, + "Server default: cache off when JSON omits \"cache\" (JSON may still enable per request)"); + ipc_cmd->add_option("--cache-dir", ipc_cache_dir, "Server default cache dir when JSON omits \"cache_dir\""); auto *kbot_cmd = app.add_subcommand("kbot", "Forward remaining args to kbot (KBOT_EXE)"); kbot_cmd->allow_extras(true); @@ -117,6 +135,18 @@ int main(int argc, char **argv) { CLI11_PARSE(app, argc, argv); if (resize_cmd->parsed()) { + const bool use_src_dst = !src_flag.empty() || !dst_flag.empty(); + if (use_src_dst) { + if (src_flag.empty() || dst_flag.empty()) { + std::cerr << "resize: --src and --dst must be used together\n"; + return 1; + } + in_path = src_flag; + out_path = dst_flag; + } else if (in_path.empty() || out_path.empty()) { + std::cerr << "resize: provide input and output paths, or --src and --dst\n"; + return 1; + } media::ResizeOptions opt; opt.max_width = max_w; opt.max_height = max_h; @@ -133,30 +163,41 @@ int main(int argc, char **argv) { opt.autorotate = !no_autorotate; opt.strip_metadata = !no_strip; opt.without_enlargement = !allow_enlargement; + opt.cache_enabled = !resize_no_cache; + opt.cache_dir = resize_cache_dir; std::string err; - if (!media::resize_file(in_path, out_path, opt, err)) { + media::ResizeBatchResult batch; + if (!media::resize_batch(in_path, out_path, opt, err, &batch)) { std::cerr << err << "\n"; return 1; } + if (batch.count > 1) + std::cout << batch.count << " file(s) written\n"; return 0; } if (serve_cmd->parsed()) { - return media::http::run_server(host, port); + media::CacheServerDefaults cd; + cd.enabled = !serve_no_cache; + cd.cache_dir = serve_cache_dir; + return media::http::run_server(host, port, cd); } if (ipc_cmd->parsed()) { + media::CacheServerDefaults cd; + cd.enabled = !ipc_no_cache; + cd.cache_dir = ipc_cache_dir; #if defined(_WIN32) if (!ipc_unix.empty()) { std::cerr << "media-img: --unix is not supported on Windows; use --host and --port.\n"; return 1; } - return media::ipc::run_tcp_server(ipc_host, ipc_port); + return media::ipc::run_tcp_server(ipc_host, ipc_port, cd); #else if (!ipc_unix.empty()) { - return media::ipc::run_unix_server(ipc_unix); + return media::ipc::run_unix_server(ipc_unix, cd); } - return media::ipc::run_tcp_server(ipc_host, ipc_port); + return media::ipc::run_tcp_server(ipc_host, ipc_port, cd); #endif } diff --git a/packages/media/cpp/tests/CMakeLists.txt b/packages/media/cpp/tests/CMakeLists.txt deleted file mode 100644 index 65369880..00000000 --- a/packages/media/cpp/tests/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -# ── Test targets ────────────────────────────────────────────────────────────── -include(CTest) -include(Catch) - -# pthread is required on Linux for Catch2 tests -find_package(Threads REQUIRED) - -# Unit tests — one per package -add_executable(test_logger unit/test_logger.cpp) -target_link_libraries(test_logger PRIVATE Catch2::Catch2WithMain logger Threads::Threads) -catch_discover_tests(test_logger) - -add_executable(test_html unit/test_html.cpp) -target_link_libraries(test_html PRIVATE Catch2::Catch2WithMain html Threads::Threads) -catch_discover_tests(test_html) - -add_executable(test_postgres unit/test_postgres.cpp) -target_link_libraries(test_postgres PRIVATE Catch2::Catch2WithMain postgres Threads::Threads) -catch_discover_tests(test_postgres) - -add_executable(test_json unit/test_json.cpp) -target_link_libraries(test_json PRIVATE Catch2::Catch2WithMain json Threads::Threads) -catch_discover_tests(test_json) - -add_executable(test_http unit/test_http.cpp) -target_link_libraries(test_http PRIVATE Catch2::Catch2WithMain http Threads::Threads) -catch_discover_tests(test_http) - -# Functional test — end-to-end CLI -add_executable(test_functional functional/test_cli.cpp) -target_link_libraries(test_functional PRIVATE Catch2::Catch2WithMain CLI11::CLI11 tomlplusplus::tomlplusplus logger html postgres http json Threads::Threads) -catch_discover_tests(test_functional) - -# E2E test — real Supabase connection (requires config/postgres.toml + network) -add_executable(test_supabase e2e/test_supabase.cpp) -target_link_libraries(test_supabase PRIVATE Catch2::Catch2WithMain tomlplusplus::tomlplusplus logger postgres json Threads::Threads) -catch_discover_tests(test_supabase WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - -add_executable(test_polymech unit/test_polymech.cpp) -target_link_libraries(test_polymech PRIVATE Catch2::Catch2WithMain polymech postgres Threads::Threads) -catch_discover_tests(test_polymech) - -add_executable(test_cmd_kbot unit/test_cmd_kbot.cpp ../src/cmd_kbot.cpp) -target_link_libraries(test_cmd_kbot PRIVATE Catch2::Catch2WithMain CLI11::CLI11 logger tomlplusplus::tomlplusplus kbot Threads::Threads) -catch_discover_tests(test_cmd_kbot) - -# E2E test — polymech fetch_pages from live Supabase -add_executable(test_polymech_e2e e2e/test_polymech_e2e.cpp) -target_link_libraries(test_polymech_e2e PRIVATE Catch2::Catch2WithMain tomlplusplus::tomlplusplus logger postgres polymech json Threads::Threads) -catch_discover_tests(test_polymech_e2e WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - -add_executable(test_ipc unit/test_ipc.cpp) -target_link_libraries(test_ipc PRIVATE Catch2::Catch2WithMain ipc Threads::Threads) -catch_discover_tests(test_ipc) diff --git a/packages/media/cpp/tests/assets/.gitignore b/packages/media/cpp/tests/assets/.gitignore new file mode 100644 index 00000000..0d95cfcc --- /dev/null +++ b/packages/media/cpp/tests/assets/.gitignore @@ -0,0 +1,2 @@ +# Written by glob-batch CLI test (outputs kept for manual inspection) +glob-in/**/out/ diff --git a/packages/media/cpp/tests/assets/build-fixtures.mjs b/packages/media/cpp/tests/assets/build-fixtures.mjs index 3941229f..9f9cd40e 100644 --- a/packages/media/cpp/tests/assets/build-fixtures.mjs +++ b/packages/media/cpp/tests/assets/build-fixtures.mjs @@ -120,4 +120,12 @@ writeFixture('checker-128x128.png', 128, 128, (x, y) => { return [c, c, c]; }); +// Nested PNGs for recursive-glob tests (see orchestrator/test-media.mjs). +mkdirSync(join(__dirname, 'glob-in', 'sub'), { recursive: true }); +writeFixture(join('glob-in', 'root.png'), 48, 48, (x, y) => { + const v = ((x + y) * 3) & 255; + return [v, 200, 100]; +}); +writeFixture(join('glob-in', 'sub', 'leaf.png'), 24, 24, [180, 60, 220]); + console.log('done.'); diff --git a/packages/media/cpp/tests/assets/glob-in/root.png b/packages/media/cpp/tests/assets/glob-in/root.png new file mode 100644 index 00000000..677f0ed2 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/root.png differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/1-interlocked.jpg b/packages/media/cpp/tests/assets/glob-in/sel/1-interlocked.jpg new file mode 100644 index 00000000..7564fff3 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/1-interlocked.jpg differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/1.jpg b/packages/media/cpp/tests/assets/glob-in/sel/1.jpg new file mode 100644 index 00000000..11fffb89 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/1.jpg differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/3.jpg b/packages/media/cpp/tests/assets/glob-in/sel/3.jpg new file mode 100644 index 00000000..1465e690 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/3.jpg differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/DSC06916.JPG b/packages/media/cpp/tests/assets/glob-in/sel/DSC06916.JPG new file mode 100644 index 00000000..2f5b7349 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/DSC06916.JPG differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/DSC06945.JPG b/packages/media/cpp/tests/assets/glob-in/sel/DSC06945.JPG new file mode 100644 index 00000000..4e90fff6 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/DSC06945.JPG differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/DSC06947.JPG b/packages/media/cpp/tests/assets/glob-in/sel/DSC06947.JPG new file mode 100644 index 00000000..13731491 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/DSC06947.JPG differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/DSC06956.JPG b/packages/media/cpp/tests/assets/glob-in/sel/DSC06956.JPG new file mode 100644 index 00000000..dbd2cfe8 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/DSC06956.JPG differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel/DSC07076.JPG b/packages/media/cpp/tests/assets/glob-in/sel/DSC07076.JPG new file mode 100644 index 00000000..e9874336 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel/DSC07076.JPG differ diff --git a/packages/media/cpp/tests/assets/glob-in/sel2.jpg b/packages/media/cpp/tests/assets/glob-in/sel2.jpg new file mode 100644 index 00000000..11fffb89 Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sel2.jpg differ diff --git a/packages/media/cpp/tests/assets/glob-in/sub/leaf.png b/packages/media/cpp/tests/assets/glob-in/sub/leaf.png new file mode 100644 index 00000000..631345ea Binary files /dev/null and b/packages/media/cpp/tests/assets/glob-in/sub/leaf.png differ diff --git a/packages/media/cpp/tests/test-ipc-classifier-distances__17-10.json b/packages/media/cpp/tests/test-ipc-classifier-distances__17-10.json deleted file mode 100644 index c403ceb4..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier-distances__17-10.json +++ /dev/null @@ -1,110 +0,0 @@ -[ - { - "label": "3D printing service", - "distance": 4.5 - }, - { - "label": "Drafting service", - "distance": 5.5 - }, - { - "label": "Engraver", - "distance": 6 - }, - { - "label": "Furniture maker", - "distance": 7 - }, - { - "label": "Industrial engineer", - "distance": 6.5 - }, - { - "label": "Industrial equipment supplier", - "distance": 5 - }, - { - "label": "Laser cutting service", - "distance": 4 - }, - { - "label": "Machine construction", - "distance": 2.5 - }, - { - "label": "Machine repair service", - "distance": 3 - }, - { - "label": "Machine shop", - "distance": 1 - }, - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machinery parts manufacturer", - "distance": 3.5 - }, - { - "label": "Machining manufacturer", - "distance": 3 - }, - { - "label": "Manufacturer", - "distance": 4 - }, - { - "label": "Mechanic", - "distance": 6.5 - }, - { - "label": "Mechanical engineer", - "distance": 5 - }, - { - "label": "Mechanical plant", - "distance": 6 - }, - { - "label": "Metal fabricator", - "distance": 5.5 - }, - { - "label": "Metal heat treating service", - "distance": 6.5 - }, - { - "label": "Metal machinery supplier", - "distance": 5 - }, - { - "label": "Metal working shop", - "distance": 4.5 - }, - { - "label": "Metal workshop", - "distance": 3.5 - }, - { - "label": "Novelty store", - "distance": 9 - }, - { - "label": "Plywood supplier", - "distance": 8 - }, - { - "label": "Sign shop", - "distance": 7.5 - }, - { - "label": "Tool manufacturer", - "distance": 4 - }, - { - "label": "Trophy shop", - "distance": 8 - } -] diff --git a/packages/media/cpp/tests/test-ipc-classifier-distances__17-11.json b/packages/media/cpp/tests/test-ipc-classifier-distances__17-11.json deleted file mode 100644 index fe51488c..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier-distances__17-11.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/packages/media/cpp/tests/test-ipc-classifier-distances__17-12.json b/packages/media/cpp/tests/test-ipc-classifier-distances__17-12.json deleted file mode 100644 index 27f7fc3b..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier-distances__17-12.json +++ /dev/null @@ -1,110 +0,0 @@ -[ - { - "label": "3D printing service", - "distance": 4.5 - }, - { - "label": "Drafting service", - "distance": 6.5 - }, - { - "label": "Engraver", - "distance": 5.5 - }, - { - "label": "Furniture maker", - "distance": 7.5 - }, - { - "label": "Industrial engineer", - "distance": 6 - }, - { - "label": "Industrial equipment supplier", - "distance": 5.5 - }, - { - "label": "Laser cutting service", - "distance": 3.5 - }, - { - "label": "Machine construction", - "distance": 2.5 - }, - { - "label": "Machine repair service", - "distance": 2 - }, - { - "label": "Machine shop", - "distance": 0.2 - }, - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machinery parts manufacturer", - "distance": 2 - }, - { - "label": "Machining manufacturer", - "distance": 1 - }, - { - "label": "Manufacturer", - "distance": 5 - }, - { - "label": "Mechanic", - "distance": 4 - }, - { - "label": "Mechanical engineer", - "distance": 5.5 - }, - { - "label": "Mechanical plant", - "distance": 4.5 - }, - { - "label": "Metal fabricator", - "distance": 2.5 - }, - { - "label": "Metal heat treating service", - "distance": 3 - }, - { - "label": "Metal machinery supplier", - "distance": 4.5 - }, - { - "label": "Metal working shop", - "distance": 1.5 - }, - { - "label": "Metal workshop", - "distance": 1 - }, - { - "label": "Novelty store", - "distance": 10 - }, - { - "label": "Plywood supplier", - "distance": 9 - }, - { - "label": "Sign shop", - "distance": 7 - }, - { - "label": "Tool manufacturer", - "distance": 3 - }, - { - "label": "Trophy shop", - "distance": 8.5 - } -] diff --git a/packages/media/cpp/tests/test-ipc-classifier-distances__17-28.json b/packages/media/cpp/tests/test-ipc-classifier-distances__17-28.json deleted file mode 100644 index e9d4fe6a..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier-distances__17-28.json +++ /dev/null @@ -1,110 +0,0 @@ -[ - { - "label": "3D printing service", - "distance": 6 - }, - { - "label": "Drafting service", - "distance": 7 - }, - { - "label": "Engraver", - "distance": 6.5 - }, - { - "label": "Furniture maker", - "distance": 7.5 - }, - { - "label": "Industrial engineer", - "distance": 7 - }, - { - "label": "Industrial equipment supplier", - "distance": 5.5 - }, - { - "label": "Laser cutting service", - "distance": 4.5 - }, - { - "label": "Machine construction", - "distance": 3 - }, - { - "label": "Machine repair service", - "distance": 2.5 - }, - { - "label": "Machine shop", - "distance": 0.2 - }, - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machinery parts manufacturer", - "distance": 2 - }, - { - "label": "Machining manufacturer", - "distance": 1.5 - }, - { - "label": "Manufacturer", - "distance": 6 - }, - { - "label": "Mechanic", - "distance": 5 - }, - { - "label": "Mechanical engineer", - "distance": 6.5 - }, - { - "label": "Mechanical plant", - "distance": 3.5 - }, - { - "label": "Metal fabricator", - "distance": 2 - }, - { - "label": "Metal heat treating service", - "distance": 3.5 - }, - { - "label": "Metal machinery supplier", - "distance": 5 - }, - { - "label": "Metal working shop", - "distance": 1 - }, - { - "label": "Metal workshop", - "distance": 1.2 - }, - { - "label": "Novelty store", - "distance": 10 - }, - { - "label": "Plywood supplier", - "distance": 9.5 - }, - { - "label": "Sign shop", - "distance": 7.5 - }, - { - "label": "Tool manufacturer", - "distance": 3 - }, - { - "label": "Trophy shop", - "distance": 8 - } -] diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-10.json b/packages/media/cpp/tests/test-ipc-classifier__17-10.json deleted file mode 100644 index bff339d0..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-10.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "meta": { - "testName": "test-ipc-classifier", - "displayName": "test-ipc-classifier::17:10", - "cwd": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp", - "writtenAt": "2026-03-30T15:10:41.858Z", - "jsonFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-10.json", - "mdFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-10.md" - }, - "startedAt": "2026-03-30T15:10:32.177Z", - "finishedAt": "2026-03-30T15:10:41.858Z", - "passed": 3, - "failed": 0, - "ok": true, - "ipcClassifierLlama": false, - "cli": { - "features": [ - "structured" - ], - "provider": "openrouter", - "model": "openai/gpt-4o-mini", - "backend": "remote", - "stressRuns": 1, - "structuredOutput": true - }, - "env": { - "KBOT_IPC_CLASSIFIER_LLAMA": "0", - "KBOT_IPC_LLAMA_AUTOSTART": null, - "KBOT_ROUTER": "openrouter", - "KBOT_IPC_MODEL": "openai/gpt-4o-mini", - "KBOT_CLASSIFIER_LIMIT": null, - "KBOT_CLASSIFIER_TIMEOUT_MS": null, - "KBOT_CLASSIFIER_STRESS_RUNS": null, - "KBOT_LLAMA_PORT": null, - "KBOT_LLAMA_BASE_URL": null - }, - "metrics": { - "timing": { - "startedAt": "2026-03-30T15:10:32.177Z", - "finishedAt": "2026-03-30T15:10:41.858Z" - }, - "host": { - "hostname": "DESKTOP-QH14L5F", - "platform": "win32", - "arch": "x64", - "release": "10.0.18363", - "cpuCount": 16, - "cpuModel": "AMD Ryzen 7 3700X 8-Core Processor", - "totalMemBytes": 68599971840, - "freeMemBytes": 40599396352, - "usedMemBytes": 28000575488, - "loadAvg": [ - 0, - 0, - 0 - ], - "osUptimeSec": 103790.515 - }, - "process": { - "durationWallMs": 9683.872, - "durationClockMs": 9684, - "cpuUserUs": 0, - "cpuSystemUs": 0, - "cpuUserMs": 0, - "cpuSystemMs": 0, - "memory": { - "rss": 45043712, - "heapTotal": 8712192, - "heapUsed": 7011160, - "external": 2467176, - "arrayBuffers": 28649 - }, - "resourceUsage": { - "userCPUTime": 62000, - "systemCPUTime": 15000, - "maxRSS": 46500, - "sharedMemorySize": 0, - "unsharedDataSize": 0, - "unsharedStackSize": 0, - "minorPageFault": 0, - "majorPageFault": 13040, - "swappedOut": 0, - "fsRead": 82, - "fsWrite": 0, - "ipcSent": 0, - "ipcReceived": 0, - "signalsCount": 0, - "voluntaryContextSwitches": 0, - "involuntaryContextSwitches": 0 - }, - "pid": 8056, - "node": "v24.13.0", - "processUptimeSec": 9.7504034 - } - }, - "anchor": "machine workshop", - "source": "JobViewer.tsx:205", - "batch": true, - "backend": "remote_router", - "router": "openrouter", - "model": "openai/gpt-4o-mini", - "labelCount": 27, - "llm": { - "created": 1774883433, - "id": "gen-1774883433-y9pESIPzu7ETDdh7Zlou", - "model": "openai/gpt-4o-mini", - "object": "chat.completion", - "provider": "OpenAI", - "system_fingerprint": "fp_e746093e24", - "usage": { - "completion_tokens": 319, - "completion_tokens_details": { - "audio_tokens": 0, - "image_tokens": 0, - "reasoning_tokens": 0 - }, - "cost": 0.00024405, - "cost_details": { - "upstream_inference_completions_cost": 0.0001914, - "upstream_inference_cost": 0.00024405, - "upstream_inference_prompt_cost": 0.00005265 - }, - "is_byok": false, - "prompt_tokens": 351, - "prompt_tokens_details": { - "audio_tokens": 0, - "cache_write_tokens": 0, - "cached_tokens": 0, - "video_tokens": 0 - }, - "total_tokens": 670 - } - }, - "distances": [ - { - "label": "3D printing service", - "distance": 4.5 - }, - { - "label": "Drafting service", - "distance": 5.5 - }, - { - "label": "Engraver", - "distance": 6 - }, - { - "label": "Furniture maker", - "distance": 7 - }, - { - "label": "Industrial engineer", - "distance": 6.5 - }, - { - "label": "Industrial equipment supplier", - "distance": 5 - }, - { - "label": "Laser cutting service", - "distance": 4 - }, - { - "label": "Machine construction", - "distance": 2.5 - }, - { - "label": "Machine repair service", - "distance": 3 - }, - { - "label": "Machine shop", - "distance": 1 - }, - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machinery parts manufacturer", - "distance": 3.5 - }, - { - "label": "Machining manufacturer", - "distance": 3 - }, - { - "label": "Manufacturer", - "distance": 4 - }, - { - "label": "Mechanic", - "distance": 6.5 - }, - { - "label": "Mechanical engineer", - "distance": 5 - }, - { - "label": "Mechanical plant", - "distance": 6 - }, - { - "label": "Metal fabricator", - "distance": 5.5 - }, - { - "label": "Metal heat treating service", - "distance": 6.5 - }, - { - "label": "Metal machinery supplier", - "distance": 5 - }, - { - "label": "Metal working shop", - "distance": 4.5 - }, - { - "label": "Metal workshop", - "distance": 3.5 - }, - { - "label": "Novelty store", - "distance": 9 - }, - { - "label": "Plywood supplier", - "distance": 8 - }, - { - "label": "Sign shop", - "distance": 7.5 - }, - { - "label": "Tool manufacturer", - "distance": 4 - }, - { - "label": "Trophy shop", - "distance": 8 - } - ], - "byDistance": [ - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machine shop", - "distance": 1 - }, - { - "label": "Machine construction", - "distance": 2.5 - }, - { - "label": "Machine repair service", - "distance": 3 - }, - { - "label": "Machining manufacturer", - "distance": 3 - }, - { - "label": "Machinery parts manufacturer", - "distance": 3.5 - }, - { - "label": "Metal workshop", - "distance": 3.5 - }, - { - "label": "Laser cutting service", - "distance": 4 - }, - { - "label": "Manufacturer", - "distance": 4 - }, - { - "label": "Tool manufacturer", - "distance": 4 - }, - { - "label": "3D printing service", - "distance": 4.5 - }, - { - "label": "Metal working shop", - "distance": 4.5 - }, - { - "label": "Industrial equipment supplier", - "distance": 5 - }, - { - "label": "Mechanical engineer", - "distance": 5 - }, - { - "label": "Metal machinery supplier", - "distance": 5 - }, - { - "label": "Drafting service", - "distance": 5.5 - }, - { - "label": "Metal fabricator", - "distance": 5.5 - }, - { - "label": "Engraver", - "distance": 6 - }, - { - "label": "Mechanical plant", - "distance": 6 - }, - { - "label": "Industrial engineer", - "distance": 6.5 - }, - { - "label": "Mechanic", - "distance": 6.5 - }, - { - "label": "Metal heat treating service", - "distance": 6.5 - }, - { - "label": "Furniture maker", - "distance": 7 - }, - { - "label": "Sign shop", - "distance": 7.5 - }, - { - "label": "Plywood supplier", - "distance": 8 - }, - { - "label": "Trophy shop", - "distance": 8 - }, - { - "label": "Novelty store", - "distance": 9 - } - ], - "rawText": "{\"items\":[{\"label\":\"3D printing service\",\"distance\":4.5},{\"label\":\"Drafting service\",\"distance\":5.5},{\"label\":\"Engraver\",\"distance\":6.0},{\"label\":\"Furniture maker\",\"distance\":7.0},{\"label\":\"Industrial engineer\",\"distance\":6.5},{\"label\":\"Industrial equipment supplier\",\"distance\":5.0},{\"label\":\"Laser cutting service\",\"distance\":4.0},{\"label\":\"Machine construction\",\"distance\":2.5},{\"label\":\"Machine repair service\",\"distance\":3.0},{\"label\":\"Machine shop\",\"distance\":1.0},{\"label\":\"Machine workshop\",\"distance\":0.0},{\"label\":\"Machinery parts manufacturer\",\"distance\":3.5},{\"label\":\"Machining manufacturer\",\"distance\":3.0},{\"label\":\"Manufacturer\",\"distance\":4.0},{\"label\":\"Mechanic\",\"distance\":6.5},{\"label\":\"Mechanical engineer\",\"distance\":5.0},{\"label\":\"Mechanical plant\",\"distance\":6.0},{\"label\":\"Metal fabricator\",\"distance\":5.5},{\"label\":\"Metal heat treating service\",\"distance\":6.5},{\"label\":\"Metal machinery supplier\",\"distance\":5.0},{\"label\":\"Metal working shop\",\"distance\":4.5},{\"label\":\"Metal workshop\",\"distance\":3.5},{\"label\":\"Novelty store\",\"distance\":9.0},{\"label\":\"Plywood supplier\",\"distance\":8.0},{\"label\":\"Sign shop\",\"distance\":7.5},{\"label\":\"Tool manufacturer\",\"distance\":4.0},{\"label\":\"Trophy shop\",\"distance\":8.0}]}", - "parseError": null -} \ No newline at end of file diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-10.md b/packages/media/cpp/tests/test-ipc-classifier__17-10.md deleted file mode 100644 index d0df7ba4..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-10.md +++ /dev/null @@ -1,136 +0,0 @@ -# Test report: test-ipc-classifier::17:10 - -## Summary - -| Key | Value | -| --- | --- | -| Result | PASS | -| Assertions passed | 3 | -| Assertions failed | 0 | -| IPC classifier | remote (KBOT_ROUTER / KBOT_IPC_MODEL) | -| CWD | `C:\Users\zx\Desktop\polymech\polymech-mono\packages\kbot\cpp` | - -## Timing - -| Metric | Value | -| --- | --- | -| Started (ISO) | 2026-03-30T15:10:32.177Z | -| Finished (ISO) | 2026-03-30T15:10:41.858Z | -| Wall time (perf) | 9683.872 ms | -| Wall time (clock) | 9684 ms | - -## Process (Node) - -| Metric | Value | -| --- | --- | -| PID | 8056 | -| Node | v24.13.0 | -| process.uptime() | 9.750 s | -| CPU user (process.cpuUsage Δ) | 0.000 ms (0 µs) | -| CPU system (process.cpuUsage Δ) | 0.000 ms (0 µs) | -| CPU user (resourceUsage) | 62.000 ms | -| CPU system (resourceUsage) | 15.000 ms | -| Max RSS (resourceUsage) | 45 MB | -| RSS | 43 MB (45043712 B) | -| Heap used | 6.7 MB | -| Heap total | 8.3 MB | -| External | 2.4 MB | -| Array buffers | 28 KB | - -## Host - -| Metric | Value | -| --- | --- | -| Hostname | DESKTOP-QH14L5F | -| OS | win32 10.0.18363 | -| Arch | x64 | -| CPUs | 16 | -| CPU model | AMD Ryzen 7 3700X 8-Core Processor | -| RAM total | 64 GB | -| RAM free | 38 GB | -| RAM used | 26 GB | -| Load avg (1/5/15) | 0.00 / 0.00 / 0.00 | -| OS uptime | 28.83 h | - -## LLM API (provider JSON) - -Fields from the chat completion response except assistant message bodies (`usage`, `model`, `id`, provider-specific). - -### Classifier — batched kbot-ai - -```json -{ - "created": 1774883433, - "id": "gen-1774883433-y9pESIPzu7ETDdh7Zlou", - "model": "openai/gpt-4o-mini", - "object": "chat.completion", - "provider": "OpenAI", - "system_fingerprint": "fp_e746093e24", - "usage": { - "completion_tokens": 319, - "completion_tokens_details": { - "audio_tokens": 0, - "image_tokens": 0, - "reasoning_tokens": 0 - }, - "cost": 0.00024405, - "cost_details": { - "upstream_inference_completions_cost": 0.0001914, - "upstream_inference_cost": 0.00024405, - "upstream_inference_prompt_cost": 0.00005265 - }, - "is_byok": false, - "prompt_tokens": 351, - "prompt_tokens_details": { - "audio_tokens": 0, - "cache_write_tokens": 0, - "cached_tokens": 0, - "video_tokens": 0 - }, - "total_tokens": 670 - } -} -``` - -## Classifier batch - -| Key | Value | -| --- | --- | -| Anchor | machine workshop | -| Label count | 27 | -| Backend | remote_router | -| Parse | OK | - -### Nearest labels (by distance) - -| Label | Distance | -| --- | ---: | -| Machine workshop | 0 | -| Machine shop | 1 | -| Machine construction | 2.5 | -| Machine repair service | 3 | -| Machining manufacturer | 3 | -| Machinery parts manufacturer | 3.5 | -| Metal workshop | 3.5 | -| Laser cutting service | 4 | -| Manufacturer | 4 | -| Tool manufacturer | 4 | -| 3D printing service | 4.5 | -| Metal working shop | 4.5 | - -## Environment (selected) - -| Variable | Value | -| --- | --- | -| `KBOT_IPC_CLASSIFIER_LLAMA` | 0 | -| `KBOT_IPC_LLAMA_AUTOSTART` | — | -| `KBOT_ROUTER` | openrouter | -| `KBOT_IPC_MODEL` | openai/gpt-4o-mini | -| `KBOT_CLASSIFIER_LIMIT` | — | -| `KBOT_CLASSIFIER_TIMEOUT_MS` | — | -| `KBOT_CLASSIFIER_STRESS_RUNS` | — | -| `KBOT_LLAMA_PORT` | — | -| `KBOT_LLAMA_BASE_URL` | — | - ---- -*Written 2026-03-30T15:10:41.858Z* diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-11.json b/packages/media/cpp/tests/test-ipc-classifier__17-11.json deleted file mode 100644 index 0ea81345..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-11.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "meta": { - "testName": "test-ipc-classifier", - "displayName": "test-ipc-classifier::17:11", - "cwd": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp", - "writtenAt": "2026-03-30T15:11:05.866Z", - "jsonFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-11.json", - "mdFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-11.md" - }, - "startedAt": "2026-03-30T15:11:05.122Z", - "finishedAt": "2026-03-30T15:11:05.866Z", - "passed": 2, - "failed": 1, - "ok": false, - "ipcClassifierLlama": false, - "cli": { - "features": [ - "structured" - ], - "provider": "openrouter", - "model": "openai/gpt-5o", - "backend": "remote", - "stressRuns": 1, - "structuredOutput": true - }, - "env": { - "KBOT_IPC_CLASSIFIER_LLAMA": "0", - "KBOT_IPC_LLAMA_AUTOSTART": null, - "KBOT_ROUTER": "openrouter", - "KBOT_IPC_MODEL": "openai/gpt-5o", - "KBOT_CLASSIFIER_LIMIT": null, - "KBOT_CLASSIFIER_TIMEOUT_MS": null, - "KBOT_CLASSIFIER_STRESS_RUNS": null, - "KBOT_LLAMA_PORT": null, - "KBOT_LLAMA_BASE_URL": null - }, - "metrics": { - "timing": { - "startedAt": "2026-03-30T15:11:05.122Z", - "finishedAt": "2026-03-30T15:11:05.866Z" - }, - "host": { - "hostname": "DESKTOP-QH14L5F", - "platform": "win32", - "arch": "x64", - "release": "10.0.18363", - "cpuCount": 16, - "cpuModel": "AMD Ryzen 7 3700X 8-Core Processor", - "totalMemBytes": 68599971840, - "freeMemBytes": 40573849600, - "usedMemBytes": 28026122240, - "loadAvg": [ - 0, - 0, - 0 - ], - "osUptimeSec": 103814.531 - }, - "process": { - "durationWallMs": 746.82, - "durationClockMs": 747, - "cpuUserUs": 16000, - "cpuSystemUs": 0, - "cpuUserMs": 16, - "cpuSystemMs": 0, - "memory": { - "rss": 47882240, - "heapTotal": 11857920, - "heapUsed": 8175752, - "external": 2465674, - "arrayBuffers": 27147 - }, - "resourceUsage": { - "userCPUTime": 62000, - "systemCPUTime": 31000, - "maxRSS": 46764, - "sharedMemorySize": 0, - "unsharedDataSize": 0, - "unsharedStackSize": 0, - "minorPageFault": 0, - "majorPageFault": 12590, - "swappedOut": 0, - "fsRead": 82, - "fsWrite": 0, - "ipcSent": 0, - "ipcReceived": 0, - "signalsCount": 0, - "voluntaryContextSwitches": 0, - "involuntaryContextSwitches": 0 - }, - "pid": 14076, - "node": "v24.13.0", - "processUptimeSec": 0.8141866 - } - }, - "anchor": "machine workshop", - "source": "JobViewer.tsx:205", - "batch": true, - "backend": "remote_router", - "router": "openrouter", - "model": "openai/gpt-5o", - "labelCount": 27, - "llm": null, - "distances": [], - "byDistance": [], - "rawText": null, - "parseError": "liboai::Response::CheckResponse(): openai/gpt-5o is not a valid model ID (E_APIERROR:0x02)" -} \ No newline at end of file diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-11.md b/packages/media/cpp/tests/test-ipc-classifier__17-11.md deleted file mode 100644 index 54cd4fd2..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-11.md +++ /dev/null @@ -1,79 +0,0 @@ -# Test report: test-ipc-classifier::17:11 - -## Summary - -| Key | Value | -| --- | --- | -| Result | FAIL | -| Assertions passed | 2 | -| Assertions failed | 1 | -| IPC classifier | remote (KBOT_ROUTER / KBOT_IPC_MODEL) | -| CWD | `C:\Users\zx\Desktop\polymech\polymech-mono\packages\kbot\cpp` | - -## Timing - -| Metric | Value | -| --- | --- | -| Started (ISO) | 2026-03-30T15:11:05.122Z | -| Finished (ISO) | 2026-03-30T15:11:05.866Z | -| Wall time (perf) | 746.82 ms | -| Wall time (clock) | 747 ms | - -## Process (Node) - -| Metric | Value | -| --- | --- | -| PID | 14076 | -| Node | v24.13.0 | -| process.uptime() | 0.814 s | -| CPU user (process.cpuUsage Δ) | 16.000 ms (16000 µs) | -| CPU system (process.cpuUsage Δ) | 0.000 ms (0 µs) | -| CPU user (resourceUsage) | 62.000 ms | -| CPU system (resourceUsage) | 31.000 ms | -| Max RSS (resourceUsage) | 46 MB | -| RSS | 46 MB (47882240 B) | -| Heap used | 7.8 MB | -| Heap total | 11 MB | -| External | 2.4 MB | -| Array buffers | 27 KB | - -## Host - -| Metric | Value | -| --- | --- | -| Hostname | DESKTOP-QH14L5F | -| OS | win32 10.0.18363 | -| Arch | x64 | -| CPUs | 16 | -| CPU model | AMD Ryzen 7 3700X 8-Core Processor | -| RAM total | 64 GB | -| RAM free | 38 GB | -| RAM used | 26 GB | -| Load avg (1/5/15) | 0.00 / 0.00 / 0.00 | -| OS uptime | 28.84 h | - -## Classifier batch - -| Key | Value | -| --- | --- | -| Anchor | machine workshop | -| Label count | 27 | -| Backend | remote_router | -| Parse | Failed: liboai::Response::CheckResponse(): openai/gpt-5o is not a valid model ID (E_APIERROR:0x02) | - -## Environment (selected) - -| Variable | Value | -| --- | --- | -| `KBOT_IPC_CLASSIFIER_LLAMA` | 0 | -| `KBOT_IPC_LLAMA_AUTOSTART` | — | -| `KBOT_ROUTER` | openrouter | -| `KBOT_IPC_MODEL` | openai/gpt-5o | -| `KBOT_CLASSIFIER_LIMIT` | — | -| `KBOT_CLASSIFIER_TIMEOUT_MS` | — | -| `KBOT_CLASSIFIER_STRESS_RUNS` | — | -| `KBOT_LLAMA_PORT` | — | -| `KBOT_LLAMA_BASE_URL` | — | - ---- -*Written 2026-03-30T15:11:05.866Z* diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-12.json b/packages/media/cpp/tests/test-ipc-classifier__17-12.json deleted file mode 100644 index 3f8952a9..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-12.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "meta": { - "testName": "test-ipc-classifier", - "displayName": "test-ipc-classifier::17:12", - "cwd": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp", - "writtenAt": "2026-03-30T15:12:58.442Z", - "jsonFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-12.json", - "mdFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-12.md" - }, - "startedAt": "2026-03-30T15:12:51.189Z", - "finishedAt": "2026-03-30T15:12:58.442Z", - "passed": 3, - "failed": 0, - "ok": true, - "ipcClassifierLlama": false, - "cli": { - "features": [ - "structured" - ], - "provider": "openrouter", - "model": "openai/gpt-5.2", - "backend": "remote", - "stressRuns": 1, - "structuredOutput": true - }, - "env": { - "KBOT_IPC_CLASSIFIER_LLAMA": "0", - "KBOT_IPC_LLAMA_AUTOSTART": null, - "KBOT_ROUTER": "openrouter", - "KBOT_IPC_MODEL": "openai/gpt-5.2", - "KBOT_CLASSIFIER_LIMIT": null, - "KBOT_CLASSIFIER_TIMEOUT_MS": null, - "KBOT_CLASSIFIER_STRESS_RUNS": null, - "KBOT_LLAMA_PORT": null, - "KBOT_LLAMA_BASE_URL": null - }, - "metrics": { - "timing": { - "startedAt": "2026-03-30T15:12:51.189Z", - "finishedAt": "2026-03-30T15:12:58.442Z" - }, - "host": { - "hostname": "DESKTOP-QH14L5F", - "platform": "win32", - "arch": "x64", - "release": "10.0.18363", - "cpuCount": 16, - "cpuModel": "AMD Ryzen 7 3700X 8-Core Processor", - "totalMemBytes": 68599971840, - "freeMemBytes": 39905787904, - "usedMemBytes": 28694183936, - "loadAvg": [ - 0, - 0, - 0 - ], - "osUptimeSec": 103927.093 - }, - "process": { - "durationWallMs": 7256.416, - "durationClockMs": 7257, - "cpuUserUs": 0, - "cpuSystemUs": 0, - "cpuUserMs": 0, - "cpuSystemMs": 0, - "memory": { - "rss": 47939584, - "heapTotal": 11857920, - "heapUsed": 8253736, - "external": 2468354, - "arrayBuffers": 29827 - }, - "resourceUsage": { - "userCPUTime": 31000, - "systemCPUTime": 46000, - "maxRSS": 46756, - "sharedMemorySize": 0, - "unsharedDataSize": 0, - "unsharedStackSize": 0, - "minorPageFault": 0, - "majorPageFault": 12621, - "swappedOut": 0, - "fsRead": 82, - "fsWrite": 0, - "ipcSent": 0, - "ipcReceived": 0, - "signalsCount": 0, - "voluntaryContextSwitches": 0, - "involuntaryContextSwitches": 0 - }, - "pid": 11604, - "node": "v24.13.0", - "processUptimeSec": 7.3238616 - } - }, - "anchor": "machine workshop", - "source": "JobViewer.tsx:205", - "batch": true, - "backend": "remote_router", - "router": "openrouter", - "model": "openai/gpt-5.2", - "labelCount": 27, - "llm": { - "created": 1774883572, - "id": "gen-1774883572-ewNlYlHrTdm2EMYfNeHy", - "model": "openai/gpt-5.2-20251211", - "object": "chat.completion", - "provider": "OpenAI", - "service_tier": "default", - "system_fingerprint": null, - "usage": { - "completion_tokens": 378, - "completion_tokens_details": { - "audio_tokens": 0, - "image_tokens": 0, - "reasoning_tokens": 50 - }, - "cost": 0.0059045, - "cost_details": { - "upstream_inference_completions_cost": 0.005292, - "upstream_inference_cost": 0.0059045, - "upstream_inference_prompt_cost": 0.0006125 - }, - "is_byok": false, - "prompt_tokens": 350, - "prompt_tokens_details": { - "audio_tokens": 0, - "cache_write_tokens": 0, - "cached_tokens": 0, - "video_tokens": 0 - }, - "total_tokens": 728 - } - }, - "distances": [ - { - "label": "3D printing service", - "distance": 4.5 - }, - { - "label": "Drafting service", - "distance": 6.5 - }, - { - "label": "Engraver", - "distance": 5.5 - }, - { - "label": "Furniture maker", - "distance": 7.5 - }, - { - "label": "Industrial engineer", - "distance": 6 - }, - { - "label": "Industrial equipment supplier", - "distance": 5.5 - }, - { - "label": "Laser cutting service", - "distance": 3.5 - }, - { - "label": "Machine construction", - "distance": 2.5 - }, - { - "label": "Machine repair service", - "distance": 2 - }, - { - "label": "Machine shop", - "distance": 0.2 - }, - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machinery parts manufacturer", - "distance": 2 - }, - { - "label": "Machining manufacturer", - "distance": 1 - }, - { - "label": "Manufacturer", - "distance": 5 - }, - { - "label": "Mechanic", - "distance": 4 - }, - { - "label": "Mechanical engineer", - "distance": 5.5 - }, - { - "label": "Mechanical plant", - "distance": 4.5 - }, - { - "label": "Metal fabricator", - "distance": 2.5 - }, - { - "label": "Metal heat treating service", - "distance": 3 - }, - { - "label": "Metal machinery supplier", - "distance": 4.5 - }, - { - "label": "Metal working shop", - "distance": 1.5 - }, - { - "label": "Metal workshop", - "distance": 1 - }, - { - "label": "Novelty store", - "distance": 10 - }, - { - "label": "Plywood supplier", - "distance": 9 - }, - { - "label": "Sign shop", - "distance": 7 - }, - { - "label": "Tool manufacturer", - "distance": 3 - }, - { - "label": "Trophy shop", - "distance": 8.5 - } - ], - "byDistance": [ - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machine shop", - "distance": 0.2 - }, - { - "label": "Machining manufacturer", - "distance": 1 - }, - { - "label": "Metal workshop", - "distance": 1 - }, - { - "label": "Metal working shop", - "distance": 1.5 - }, - { - "label": "Machine repair service", - "distance": 2 - }, - { - "label": "Machinery parts manufacturer", - "distance": 2 - }, - { - "label": "Machine construction", - "distance": 2.5 - }, - { - "label": "Metal fabricator", - "distance": 2.5 - }, - { - "label": "Metal heat treating service", - "distance": 3 - }, - { - "label": "Tool manufacturer", - "distance": 3 - }, - { - "label": "Laser cutting service", - "distance": 3.5 - }, - { - "label": "Mechanic", - "distance": 4 - }, - { - "label": "3D printing service", - "distance": 4.5 - }, - { - "label": "Mechanical plant", - "distance": 4.5 - }, - { - "label": "Metal machinery supplier", - "distance": 4.5 - }, - { - "label": "Manufacturer", - "distance": 5 - }, - { - "label": "Engraver", - "distance": 5.5 - }, - { - "label": "Industrial equipment supplier", - "distance": 5.5 - }, - { - "label": "Mechanical engineer", - "distance": 5.5 - }, - { - "label": "Industrial engineer", - "distance": 6 - }, - { - "label": "Drafting service", - "distance": 6.5 - }, - { - "label": "Sign shop", - "distance": 7 - }, - { - "label": "Furniture maker", - "distance": 7.5 - }, - { - "label": "Trophy shop", - "distance": 8.5 - }, - { - "label": "Plywood supplier", - "distance": 9 - }, - { - "label": "Novelty store", - "distance": 10 - } - ], - "rawText": "{\"items\":[{\"label\":\"3D printing service\",\"distance\":4.5},{\"label\":\"Drafting service\",\"distance\":6.5},{\"label\":\"Engraver\",\"distance\":5.5},{\"label\":\"Furniture maker\",\"distance\":7.5},{\"label\":\"Industrial engineer\",\"distance\":6.0},{\"label\":\"Industrial equipment supplier\",\"distance\":5.5},{\"label\":\"Laser cutting service\",\"distance\":3.5},{\"label\":\"Machine construction\",\"distance\":2.5},{\"label\":\"Machine repair service\",\"distance\":2.0},{\"label\":\"Machine shop\",\"distance\":0.2},{\"label\":\"Machine workshop\",\"distance\":0.0},{\"label\":\"Machinery parts manufacturer\",\"distance\":2.0},{\"label\":\"Machining manufacturer\",\"distance\":1.0},{\"label\":\"Manufacturer\",\"distance\":5.0},{\"label\":\"Mechanic\",\"distance\":4.0},{\"label\":\"Mechanical engineer\",\"distance\":5.5},{\"label\":\"Mechanical plant\",\"distance\":4.5},{\"label\":\"Metal fabricator\",\"distance\":2.5},{\"label\":\"Metal heat treating service\",\"distance\":3.0},{\"label\":\"Metal machinery supplier\",\"distance\":4.5},{\"label\":\"Metal working shop\",\"distance\":1.5},{\"label\":\"Metal workshop\",\"distance\":1.0},{\"label\":\"Novelty store\",\"distance\":10.0},{\"label\":\"Plywood supplier\",\"distance\":9.0},{\"label\":\"Sign shop\",\"distance\":7.0},{\"label\":\"Tool manufacturer\",\"distance\":3.0},{\"label\":\"Trophy shop\",\"distance\":8.5}]}", - "parseError": null -} \ No newline at end of file diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-12.md b/packages/media/cpp/tests/test-ipc-classifier__17-12.md deleted file mode 100644 index a7f0a8a4..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-12.md +++ /dev/null @@ -1,137 +0,0 @@ -# Test report: test-ipc-classifier::17:12 - -## Summary - -| Key | Value | -| --- | --- | -| Result | PASS | -| Assertions passed | 3 | -| Assertions failed | 0 | -| IPC classifier | remote (KBOT_ROUTER / KBOT_IPC_MODEL) | -| CWD | `C:\Users\zx\Desktop\polymech\polymech-mono\packages\kbot\cpp` | - -## Timing - -| Metric | Value | -| --- | --- | -| Started (ISO) | 2026-03-30T15:12:51.189Z | -| Finished (ISO) | 2026-03-30T15:12:58.442Z | -| Wall time (perf) | 7256.416 ms | -| Wall time (clock) | 7257 ms | - -## Process (Node) - -| Metric | Value | -| --- | --- | -| PID | 11604 | -| Node | v24.13.0 | -| process.uptime() | 7.324 s | -| CPU user (process.cpuUsage Δ) | 0.000 ms (0 µs) | -| CPU system (process.cpuUsage Δ) | 0.000 ms (0 µs) | -| CPU user (resourceUsage) | 31.000 ms | -| CPU system (resourceUsage) | 46.000 ms | -| Max RSS (resourceUsage) | 46 MB | -| RSS | 46 MB (47939584 B) | -| Heap used | 7.9 MB | -| Heap total | 11 MB | -| External | 2.4 MB | -| Array buffers | 29 KB | - -## Host - -| Metric | Value | -| --- | --- | -| Hostname | DESKTOP-QH14L5F | -| OS | win32 10.0.18363 | -| Arch | x64 | -| CPUs | 16 | -| CPU model | AMD Ryzen 7 3700X 8-Core Processor | -| RAM total | 64 GB | -| RAM free | 37 GB | -| RAM used | 27 GB | -| Load avg (1/5/15) | 0.00 / 0.00 / 0.00 | -| OS uptime | 28.87 h | - -## LLM API (provider JSON) - -Fields from the chat completion response except assistant message bodies (`usage`, `model`, `id`, provider-specific). - -### Classifier — batched kbot-ai - -```json -{ - "created": 1774883572, - "id": "gen-1774883572-ewNlYlHrTdm2EMYfNeHy", - "model": "openai/gpt-5.2-20251211", - "object": "chat.completion", - "provider": "OpenAI", - "service_tier": "default", - "system_fingerprint": null, - "usage": { - "completion_tokens": 378, - "completion_tokens_details": { - "audio_tokens": 0, - "image_tokens": 0, - "reasoning_tokens": 50 - }, - "cost": 0.0059045, - "cost_details": { - "upstream_inference_completions_cost": 0.005292, - "upstream_inference_cost": 0.0059045, - "upstream_inference_prompt_cost": 0.0006125 - }, - "is_byok": false, - "prompt_tokens": 350, - "prompt_tokens_details": { - "audio_tokens": 0, - "cache_write_tokens": 0, - "cached_tokens": 0, - "video_tokens": 0 - }, - "total_tokens": 728 - } -} -``` - -## Classifier batch - -| Key | Value | -| --- | --- | -| Anchor | machine workshop | -| Label count | 27 | -| Backend | remote_router | -| Parse | OK | - -### Nearest labels (by distance) - -| Label | Distance | -| --- | ---: | -| Machine workshop | 0 | -| Machine shop | 0.2 | -| Machining manufacturer | 1 | -| Metal workshop | 1 | -| Metal working shop | 1.5 | -| Machine repair service | 2 | -| Machinery parts manufacturer | 2 | -| Machine construction | 2.5 | -| Metal fabricator | 2.5 | -| Metal heat treating service | 3 | -| Tool manufacturer | 3 | -| Laser cutting service | 3.5 | - -## Environment (selected) - -| Variable | Value | -| --- | --- | -| `KBOT_IPC_CLASSIFIER_LLAMA` | 0 | -| `KBOT_IPC_LLAMA_AUTOSTART` | — | -| `KBOT_ROUTER` | openrouter | -| `KBOT_IPC_MODEL` | openai/gpt-5.2 | -| `KBOT_CLASSIFIER_LIMIT` | — | -| `KBOT_CLASSIFIER_TIMEOUT_MS` | — | -| `KBOT_CLASSIFIER_STRESS_RUNS` | — | -| `KBOT_LLAMA_PORT` | — | -| `KBOT_LLAMA_BASE_URL` | — | - ---- -*Written 2026-03-30T15:12:58.442Z* diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-28.json b/packages/media/cpp/tests/test-ipc-classifier__17-28.json deleted file mode 100644 index e341e862..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-28.json +++ /dev/null @@ -1,358 +0,0 @@ -{ - "meta": { - "testName": "test-ipc-classifier", - "displayName": "test-ipc-classifier::17:28", - "cwd": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp", - "writtenAt": "2026-03-30T15:28:11.284Z", - "jsonFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-28.json", - "mdFile": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\tests\\test-ipc-classifier__17-28.md" - }, - "startedAt": "2026-03-30T15:28:05.097Z", - "finishedAt": "2026-03-30T15:28:11.284Z", - "passed": 3, - "failed": 0, - "ok": true, - "ipcClassifierLlama": false, - "cli": { - "features": [ - "structured" - ], - "provider": "openrouter", - "model": "openai/gpt-5.2", - "backend": "remote", - "stressRuns": 1, - "structuredOutput": true, - "dst": "C:\\Users\\zx\\Desktop\\polymech\\polymech-mono\\packages\\kbot\\cpp\\a.json" - }, - "env": { - "KBOT_IPC_CLASSIFIER_LLAMA": "0", - "KBOT_IPC_LLAMA_AUTOSTART": null, - "KBOT_ROUTER": "openrouter", - "KBOT_IPC_MODEL": "openai/gpt-5.2", - "KBOT_CLASSIFIER_LIMIT": null, - "KBOT_CLASSIFIER_TIMEOUT_MS": null, - "KBOT_CLASSIFIER_STRESS_RUNS": null, - "KBOT_LLAMA_PORT": null, - "KBOT_LLAMA_BASE_URL": null - }, - "metrics": { - "timing": { - "startedAt": "2026-03-30T15:28:05.097Z", - "finishedAt": "2026-03-30T15:28:11.284Z" - }, - "host": { - "hostname": "DESKTOP-QH14L5F", - "platform": "win32", - "arch": "x64", - "release": "10.0.18363", - "cpuCount": 16, - "cpuModel": "AMD Ryzen 7 3700X 8-Core Processor", - "totalMemBytes": 68599971840, - "freeMemBytes": 39067930624, - "usedMemBytes": 29532041216, - "loadAvg": [ - 0, - 0, - 0 - ], - "osUptimeSec": 104839.937 - }, - "process": { - "durationWallMs": 6189.389, - "durationClockMs": 6190, - "cpuUserUs": 0, - "cpuSystemUs": 15000, - "cpuUserMs": 0, - "cpuSystemMs": 15, - "memory": { - "rss": 47976448, - "heapTotal": 11857920, - "heapUsed": 8264832, - "external": 2475562, - "arrayBuffers": 37035 - }, - "resourceUsage": { - "userCPUTime": 46000, - "systemCPUTime": 46000, - "maxRSS": 46728, - "sharedMemorySize": 0, - "unsharedDataSize": 0, - "unsharedStackSize": 0, - "minorPageFault": 0, - "majorPageFault": 12579, - "swappedOut": 0, - "fsRead": 84, - "fsWrite": 0, - "ipcSent": 0, - "ipcReceived": 0, - "signalsCount": 0, - "voluntaryContextSwitches": 0, - "involuntaryContextSwitches": 0 - }, - "pid": 5940, - "node": "v24.13.0", - "processUptimeSec": 6.254782 - } - }, - "anchor": "machine workshop", - "source": "JobViewer.tsx:205", - "batch": true, - "backend": "remote_router", - "router": "openrouter", - "model": "openai/gpt-5.2", - "labelCount": 27, - "llm": { - "created": 1774884486, - "id": "gen-1774884486-SsTksASvnvqh3oeuahen", - "model": "openai/gpt-5.2-20251211", - "object": "chat.completion", - "provider": "OpenAI", - "service_tier": "default", - "system_fingerprint": null, - "usage": { - "completion_tokens": 408, - "completion_tokens_details": { - "audio_tokens": 0, - "image_tokens": 0, - "reasoning_tokens": 80 - }, - "cost": 0.0063245, - "cost_details": { - "upstream_inference_completions_cost": 0.005712, - "upstream_inference_cost": 0.0063245, - "upstream_inference_prompt_cost": 0.0006125 - }, - "is_byok": false, - "prompt_tokens": 350, - "prompt_tokens_details": { - "audio_tokens": 0, - "cache_write_tokens": 0, - "cached_tokens": 0, - "video_tokens": 0 - }, - "total_tokens": 758 - } - }, - "distances": [ - { - "label": "3D printing service", - "distance": 6 - }, - { - "label": "Drafting service", - "distance": 7 - }, - { - "label": "Engraver", - "distance": 6.5 - }, - { - "label": "Furniture maker", - "distance": 7.5 - }, - { - "label": "Industrial engineer", - "distance": 7 - }, - { - "label": "Industrial equipment supplier", - "distance": 5.5 - }, - { - "label": "Laser cutting service", - "distance": 4.5 - }, - { - "label": "Machine construction", - "distance": 3 - }, - { - "label": "Machine repair service", - "distance": 2.5 - }, - { - "label": "Machine shop", - "distance": 0.2 - }, - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machinery parts manufacturer", - "distance": 2 - }, - { - "label": "Machining manufacturer", - "distance": 1.5 - }, - { - "label": "Manufacturer", - "distance": 6 - }, - { - "label": "Mechanic", - "distance": 5 - }, - { - "label": "Mechanical engineer", - "distance": 6.5 - }, - { - "label": "Mechanical plant", - "distance": 3.5 - }, - { - "label": "Metal fabricator", - "distance": 2 - }, - { - "label": "Metal heat treating service", - "distance": 3.5 - }, - { - "label": "Metal machinery supplier", - "distance": 5 - }, - { - "label": "Metal working shop", - "distance": 1 - }, - { - "label": "Metal workshop", - "distance": 1.2 - }, - { - "label": "Novelty store", - "distance": 10 - }, - { - "label": "Plywood supplier", - "distance": 9.5 - }, - { - "label": "Sign shop", - "distance": 7.5 - }, - { - "label": "Tool manufacturer", - "distance": 3 - }, - { - "label": "Trophy shop", - "distance": 8 - } - ], - "byDistance": [ - { - "label": "Machine workshop", - "distance": 0 - }, - { - "label": "Machine shop", - "distance": 0.2 - }, - { - "label": "Metal working shop", - "distance": 1 - }, - { - "label": "Metal workshop", - "distance": 1.2 - }, - { - "label": "Machining manufacturer", - "distance": 1.5 - }, - { - "label": "Machinery parts manufacturer", - "distance": 2 - }, - { - "label": "Metal fabricator", - "distance": 2 - }, - { - "label": "Machine repair service", - "distance": 2.5 - }, - { - "label": "Machine construction", - "distance": 3 - }, - { - "label": "Tool manufacturer", - "distance": 3 - }, - { - "label": "Mechanical plant", - "distance": 3.5 - }, - { - "label": "Metal heat treating service", - "distance": 3.5 - }, - { - "label": "Laser cutting service", - "distance": 4.5 - }, - { - "label": "Mechanic", - "distance": 5 - }, - { - "label": "Metal machinery supplier", - "distance": 5 - }, - { - "label": "Industrial equipment supplier", - "distance": 5.5 - }, - { - "label": "3D printing service", - "distance": 6 - }, - { - "label": "Manufacturer", - "distance": 6 - }, - { - "label": "Engraver", - "distance": 6.5 - }, - { - "label": "Mechanical engineer", - "distance": 6.5 - }, - { - "label": "Drafting service", - "distance": 7 - }, - { - "label": "Industrial engineer", - "distance": 7 - }, - { - "label": "Furniture maker", - "distance": 7.5 - }, - { - "label": "Sign shop", - "distance": 7.5 - }, - { - "label": "Trophy shop", - "distance": 8 - }, - { - "label": "Plywood supplier", - "distance": 9.5 - }, - { - "label": "Novelty store", - "distance": 10 - } - ], - "rawText": "{\"items\":[{\"label\":\"3D printing service\",\"distance\":6.0},{\"label\":\"Drafting service\",\"distance\":7.0},{\"label\":\"Engraver\",\"distance\":6.5},{\"label\":\"Furniture maker\",\"distance\":7.5},{\"label\":\"Industrial engineer\",\"distance\":7.0},{\"label\":\"Industrial equipment supplier\",\"distance\":5.5},{\"label\":\"Laser cutting service\",\"distance\":4.5},{\"label\":\"Machine construction\",\"distance\":3.0},{\"label\":\"Machine repair service\",\"distance\":2.5},{\"label\":\"Machine shop\",\"distance\":0.2},{\"label\":\"Machine workshop\",\"distance\":0.0},{\"label\":\"Machinery parts manufacturer\",\"distance\":2.0},{\"label\":\"Machining manufacturer\",\"distance\":1.5},{\"label\":\"Manufacturer\",\"distance\":6.0},{\"label\":\"Mechanic\",\"distance\":5.0},{\"label\":\"Mechanical engineer\",\"distance\":6.5},{\"label\":\"Mechanical plant\",\"distance\":3.5},{\"label\":\"Metal fabricator\",\"distance\":2.0},{\"label\":\"Metal heat treating service\",\"distance\":3.5},{\"label\":\"Metal machinery supplier\",\"distance\":5.0},{\"label\":\"Metal working shop\",\"distance\":1.0},{\"label\":\"Metal workshop\",\"distance\":1.2},{\"label\":\"Novelty store\",\"distance\":10.0},{\"label\":\"Plywood supplier\",\"distance\":9.5},{\"label\":\"Sign shop\",\"distance\":7.5},{\"label\":\"Tool manufacturer\",\"distance\":3.0},{\"label\":\"Trophy shop\",\"distance\":8.0}]}", - "parseError": null -} \ No newline at end of file diff --git a/packages/media/cpp/tests/test-ipc-classifier__17-28.md b/packages/media/cpp/tests/test-ipc-classifier__17-28.md deleted file mode 100644 index d62c9124..00000000 --- a/packages/media/cpp/tests/test-ipc-classifier__17-28.md +++ /dev/null @@ -1,137 +0,0 @@ -# Test report: test-ipc-classifier::17:28 - -## Summary - -| Key | Value | -| --- | --- | -| Result | PASS | -| Assertions passed | 3 | -| Assertions failed | 0 | -| IPC classifier | remote (KBOT_ROUTER / KBOT_IPC_MODEL) | -| CWD | `C:\Users\zx\Desktop\polymech\polymech-mono\packages\kbot\cpp` | - -## Timing - -| Metric | Value | -| --- | --- | -| Started (ISO) | 2026-03-30T15:28:05.097Z | -| Finished (ISO) | 2026-03-30T15:28:11.284Z | -| Wall time (perf) | 6189.389 ms | -| Wall time (clock) | 6190 ms | - -## Process (Node) - -| Metric | Value | -| --- | --- | -| PID | 5940 | -| Node | v24.13.0 | -| process.uptime() | 6.255 s | -| CPU user (process.cpuUsage Δ) | 0.000 ms (0 µs) | -| CPU system (process.cpuUsage Δ) | 15.000 ms (15000 µs) | -| CPU user (resourceUsage) | 46.000 ms | -| CPU system (resourceUsage) | 46.000 ms | -| Max RSS (resourceUsage) | 46 MB | -| RSS | 46 MB (47976448 B) | -| Heap used | 7.9 MB | -| Heap total | 11 MB | -| External | 2.4 MB | -| Array buffers | 36 KB | - -## Host - -| Metric | Value | -| --- | --- | -| Hostname | DESKTOP-QH14L5F | -| OS | win32 10.0.18363 | -| Arch | x64 | -| CPUs | 16 | -| CPU model | AMD Ryzen 7 3700X 8-Core Processor | -| RAM total | 64 GB | -| RAM free | 36 GB | -| RAM used | 28 GB | -| Load avg (1/5/15) | 0.00 / 0.00 / 0.00 | -| OS uptime | 29.12 h | - -## LLM API (provider JSON) - -Fields from the chat completion response except assistant message bodies (`usage`, `model`, `id`, provider-specific). - -### Classifier — batched kbot-ai - -```json -{ - "created": 1774884486, - "id": "gen-1774884486-SsTksASvnvqh3oeuahen", - "model": "openai/gpt-5.2-20251211", - "object": "chat.completion", - "provider": "OpenAI", - "service_tier": "default", - "system_fingerprint": null, - "usage": { - "completion_tokens": 408, - "completion_tokens_details": { - "audio_tokens": 0, - "image_tokens": 0, - "reasoning_tokens": 80 - }, - "cost": 0.0063245, - "cost_details": { - "upstream_inference_completions_cost": 0.005712, - "upstream_inference_cost": 0.0063245, - "upstream_inference_prompt_cost": 0.0006125 - }, - "is_byok": false, - "prompt_tokens": 350, - "prompt_tokens_details": { - "audio_tokens": 0, - "cache_write_tokens": 0, - "cached_tokens": 0, - "video_tokens": 0 - }, - "total_tokens": 758 - } -} -``` - -## Classifier batch - -| Key | Value | -| --- | --- | -| Anchor | machine workshop | -| Label count | 27 | -| Backend | remote_router | -| Parse | OK | - -### Nearest labels (by distance) - -| Label | Distance | -| --- | ---: | -| Machine workshop | 0 | -| Machine shop | 0.2 | -| Metal working shop | 1 | -| Metal workshop | 1.2 | -| Machining manufacturer | 1.5 | -| Machinery parts manufacturer | 2 | -| Metal fabricator | 2 | -| Machine repair service | 2.5 | -| Machine construction | 3 | -| Tool manufacturer | 3 | -| Mechanical plant | 3.5 | -| Metal heat treating service | 3.5 | - -## Environment (selected) - -| Variable | Value | -| --- | --- | -| `KBOT_IPC_CLASSIFIER_LLAMA` | 0 | -| `KBOT_IPC_LLAMA_AUTOSTART` | — | -| `KBOT_ROUTER` | openrouter | -| `KBOT_IPC_MODEL` | openai/gpt-5.2 | -| `KBOT_CLASSIFIER_LIMIT` | — | -| `KBOT_CLASSIFIER_TIMEOUT_MS` | — | -| `KBOT_CLASSIFIER_STRESS_RUNS` | — | -| `KBOT_LLAMA_PORT` | — | -| `KBOT_LLAMA_BASE_URL` | — | - ---- -*Written 2026-03-30T15:28:11.284Z*