Skip to content

Releases

FoxicMP progressive SDK 1.84 — AAC and Classic seek fix

Choose a tag to compare

@LiberVixer LiberVixer released this 06 Nov 11:40

Предварительный выпуск progressive API/SDK 1.84 для FoxicMP Classic (Windows), FoxiqMP qt (Windows) и FoxiqMP qt (Linux). Версия приложений — 0.2.0.

Добавлен явный continuous-h264-aac-window-v1: непрерывный предпросмотр подтверждённых локальных MP4/H.264 + AAC-LC с проверенным PCM-окном. Требуется mode=AAC_MODE; прежние video-only defaults сохраняются. YouTubeHarvester в этом выпуске не изменяется.

Исправлена гонка Classic: после завершения remux команда перемотки могла быть молча отклонена, пока локальный fragment index отставал от verified cache. Разрешение seek теперь учитывает подтверждённую завершённость кэша. Старый отказ воспроизведён управляемой задержкой 800 ms; исправленный код прошёл на том же MP4.

Проверены 107 сценариев обычных приложений, чистого .deb, распакованных Windows portable и установленного Linux с импортом всех десяти SDK-модулей из пакетов; ещё 90 повторных сценариев Classic и 4 проверки управляемой задержки. Первичные отказы сохранены в отчёте. Debian packager запрещает Python bytecode caches.

В assets: отдельные Windows portable Classic/Qt, Linux portable и .deb, SDK ZIP, аттестация SHA-256 и SHA256SUMS.txt. Личные Qt INI не включены; Classic содержит factory INI. Установленный Linux обновлён с backup и сохранением профиля. Существующие Windows установки и shell registration сохранены.

Профиль экспериментальный: полная AAC waiting/crash/race/stress матрица, остальные контейнеры/кодеки и физическая A/V точность остаются в чеклисте.

Progressive API / SDK 1.83 — explicit H.264 B-frame preview

Choose a tag to compare

@LiberVixer LiberVixer released this 05 Nov 14:06

SDK 1.83 adds an explicitly selected continuous-h264-reordered-video-v1 profile to FoxicMP Classic, Windows Qt and Linux Qt. The existing default continuous profile and SDK 1.82 payload remain unchanged.

Use ContinuousRemux(client, session_directory, mode=REORDERED_MODE) after checking the player capability. The new profile preserves H.264 B-frame presentation order without transcoding. Its current scope is one local video-only fast-start MP4, known duration, zero timestamp origin and confirmed SHA/ranges, within the advertised memory, byte and packet budgets. Audio, live and encrypted sources are outside this profile.

Included: standalone Python SDK, Windows Classic and Qt portable packages, Linux portable tarball and Debian package (0.2.0-183). These packages are required for this new profile; earlier application installers do not gain it by replacing only the Python SDK. Personal profiles are not included. Application version remains 0.2.0; SDK version is 1.83.

Validation covers all three editions, SDK 1.82 compatibility, explicit playback, pause/append/complete/seek/EOF, Stop, independent endpoints, files-closed receipts and final unpacked payloads. The clean SDK manifest records the exact source commit and every file checksum. See docs/ProgressiveReorderedSdk.md and the validation reports for scope and open acceptance items.

This is an integration prerelease, not full completion of the progressive playback specification. General audio/remux, longer stress tests and previously recorded latency outliers remain open. YouTubeHarvester is unchanged.

Progressive API / SDK 1.82 — Bounded continuous H.264 remux

Choose a tag to compare

@LiberVixer LiberVixer released this 04 Nov 11:07

SDK 1.82 добавляет явный ограниченный continuous-remux API для Linux Qt, Windows Qt и Windows Classic. YouTubeHarvester не изменён.

ContinuousRemux разделяет подготовку и запуск просмотра; после потери ответа ID восстанавливается чтением status. Работают pause/play, seek после outputComplete, stop и подтверждённое освобождение файлов. Writer events не запускают остановленный просмотр.

Поддержанный новый маршрут: один MP4/H.264 video-only без звука и B-frames, известные длина/длительность и нулевое начало времени, SHA-256 подтверждённых ranges. Источник до 128 MiB, output cache до 64 MiB, дополнительные packet/time limits указаны в контракте. Это предварительный выпуск ограниченного профиля; весь progressive-ТЗ ещё не завершён. Прежние v1/v2 маршруты сохранены.

Проверено: 17 SDK unit checks; по 5 реальных SDK сценариев каждой редакции; прежние 17/17/18 playback checks. Qt на каждой ОС прошёл 10 CTest групп. Windows Qt portable без build PATH и извлечённый Linux .deb отдельно прошли настоящий SDK playback. Worker проверяет ABI FFmpeg через --info; .deb сохраняет executable mode и содержит явные runtime dependencies.

Контракт и интеграция · Результаты и ограничения · Чеклист.

В assets: SDK ZIP, portable-сборки трёх редакций с matching worker/runtime и Linux .deb 0.2.0-182. Версия приложения остаётся 0.2.0. Для проверки извлечённого SDK: python3 verify_progressive_sdk.py SDK.zip --require-clean.

Portable-сборки предназначены для новой отдельной папки. Classic содержит заводской INI; при обновлении сохраняйте свой профиль. Старые установщики 0.2.0 не содержат это расширение. Исходники и бинарные hashes связаны через progressive-1.82-assets.json; сборки проверены по записанным hashes исходников. SHA256SUMS.txt охватывает все архивы, .deb и manifest.

Linux в рабочей среде обновлён с backup, настройки сохранены. Установленные Windows-приложения и HKCU не менялись. SDK 1.81 ZIP не изменён. Далее остаются полная waiting/replay/crash/stress matrix, AAC/audio trim, B-frames и остальные профили.

Progressive API / SDK 1.81 — Explicit RF64 sparse island playback

Choose a tag to compare

@LiberVixer LiberVixer released this 03 Nov 05:55

Предварительный SDK 1.81, плеер 0.2.0. Только FoxicMP; Harvester не изменён.

  • Явные новые audio profiles rf64-sparse-pcm16/24: реальный seek через незаписанную дыру в подтверждённый островок и обратно. Known-length RF64, PCM16/24 mono/stereo 44.1/48 kHz, обязательный ready head prefix, duration/offset/header bounds. Обычные RF64 hints сохраняют prefix-gated режим.
  • Стабильные виртуальные fMP4 offsets/PTS создаются из проверенного ds64/header без чтения дыр. Decoder payload ждёт подтверждённых writer ranges; фактические bytes проходят SHA. Размер sparse-файла и виртуальная metadata не считаются PCM. Конец островка не становится EOF; расширение диапазона продолжает тот же reader. Ручная пауза сохраняется; seek в дыру отклоняется.
  • По 272 новых native checks на ОС:8 profiles × inline/external SHA, точный PCM островка, hole wait без отравления источника, стабильные offsets при заполнении/complete, полный fMP4 совпадает с обычным RF64 reference, EOF/release. ASAN/UBSAN и по 82 тестов SDK прошли.
  • По 4 actual runtime profiles в каждой редакции: forward island seek, играющий островок при сохранённой ранней дыре, island-end wait/fill/resume, paused backwards seek, ожидание head gap, complete tail и paused seek в последние 50 ms. Отдельный session проверяет cancel/release при заблокированном на дыре чтении. Нужный реальный PCM decoder проверен в Qt.
  • Проверка последних 50 ms выявила EOF libmpv во время ручной паузы. Новый sparse-mode удерживает decoder через file-local keep-open, API сохраняет paused и реальную позицию; завершение подтверждённого EOF откладывается до снятия паузы. Первые exit8, неудачный опыт с повторным seek и исправление приоритета статуса сохранены в отчёте. Отдельный Linux probe использует частный PulseAudio.
  • Предварительный широкий набор 18/18 групп на каждой Qt ОС прошёл, включая старые RF64/RIFF/MP3 и физические >4 GiB prefix-файлы. Затем дополнен общий inventory containers и проверен Classic complete-tail guard. Окончательные пересобранные EXE прошли 8/8 затронутых Qt-групп на ОС и полный новый Classic controls/runtime набор. Эти результаты и binary hashes разделены в отчёте; старые большие тесты не выдаются за повтор на другом EXE.
  • Linux EXE/V2 client обновлены атомарно с backup; INI и остальные файлы сохранены. Windows EXE/INI и 158 shell keys не менялись; одноразовые задачи/стадии удалены.

ZIP — SDK без EXE/DLL/установщиков/медиа, с двумя manifest-примерами. Нужна сборка из commit ниже. Лимиты 16 GiB и 250000 packets, 128 ranges, 4096 SHA blocks, 16 MiB новых bytes/update. Действуют прежние buffer thresholds: короткий incomplete хвост может ждать complete. Физические sparse islands >4 GiB, максимальные размеры/длительный stress, video/другие containers/live и общий technical-spec acceptance остаются открытыми.

Контракт · Отчёт · Чеклист.

Source commit:6cf41dbae88c28d5d0b2e9e0e5a2fcf2c5b77c28.

Progressive API / SDK 1.80 — RF64 diagnostic packet range map

Choose a tag to compare

@LiberVixer LiberVixer released this 03 Nov 04:58

Предварительный SDK 1.80, плеер 0.2.0. Изменения только FoxicMP; Harvester не изменён.

  • В status RF64 добавлена диагностическая карта целиком подтверждённых PCM-пакетов, включая интервалы за дырой: физические offsets/lengths, первые/конечные frames и исходные ticks. Соседние ranges объединяются до округления, короткий последний packet учитывается без RIFF pad.
  • Карта только геометрическая: geometryOnly=true, payloadVerified=false, islandSeek=false. Вычисление не читает media или SHA-sidecar и не является разрешением воспроизведения островков. Decoder bytes, availableSeconds, буферизация и seek остаются prefix-gated.
  • Ответ ограничен первыми 32 интервалами. intervalCount и truncated явно сообщают об остальных; проверен список из 65 интервалов. Capability согласует структуру diagnostics без изменения CLI/API actions.
  • По 242 новых native checks на ОС: восемь RF64 profiles с inline/external SHA, partial samples/packets, соседние ranges, один отсутствующий байт, короткий конец, no-payload-I/O и release. Все те же 242 проверки прошли под ASAN/UBSAN.
  • По 1608 независимых синтетических geometry cases в Linux и Windows: реальные production layout/mapper, 64-bit адреса включая >4 GiB, no mapper I/O. Linux geometry также под ASAN/UBSAN. Большой физический sparse island для этого теста не создавался.
  • По четыре actual status/playback profiles в каждой из трёх редакций: карта до/после fill, manual pause, недоступный island seek, resume и release. Регрессионный Qt-набор 16/16 групп на каждой ОС с exit0, включая прежние RF64/RIFF/MP3 и повтор физических >4 GiB prefix-файлов. По 81 SDK tests на ОС; все итоговые exit codes 0.
  • Linux EXE обновлён атомарно с backup, INI и остальные файлы сохранены. Установленные Windows EXE/INI и 158 HKCU shell keys не менялись; одноразовая задача и staging Classic удалены.

ZIP — SDK без EXE/DLL/установщиков/медиа. Для новых diagnostics нужна сборка из commit ниже. Island seek, стабильная виртуальная раскладка через holes и decoder adapters, другие контейнеры/live и общая sparse-матрица остаются открытыми. Это компонент подготовки, не объявление отсутствующего playback готовым. Физический >4 GiB Classic playback отдельно доказан SDK1.78; повтор этого большого Classic теста здесь не заявляется.

Контракт · Отчёт · Чеклист.

Source commit: 6678f22141617639c05b62bec507362015aab7e8.

Progressive API / SDK 1.79 — RF64 out-of-order confirmed ranges

Choose a tag to compare

@LiberVixer LiberVixer released this 03 Nov 04:33

Предварительный SDK 1.79, плеер 0.2.0. Изменения только FoxicMP; Harvester не изменён.

  • RF64 PCM16/PCM24 принимает подтверждённые ranges вне порядка. Декодер получает только непрерывный head prefix: дыры не читаются как PCM из нулей и не становятся EOF. После заполнения дыр воспроизведение продолжается с тем же reader, ручная пауза сохраняется. Seek в отдельные островки пока отклоняется; capability сообщает islandSeek: false.
  • До 128 ranges; начальная публикация и update ограничены 16 MiB новых подтверждённых байтов. Один недостающий байт может открыть >16 MiB ранее опубликованных данных. Прежние SHA-блоки неизменны, известный resource size/ranges проверяется против ds64 extent. Прежние RF64 и внешние SHA capability сохранены.
  • По 229 новых native checks на ОС, 16 комбинаций profile/index, точный PCM после заполнения дыр; ASAN/UBSAN прошёл. По 81 Python SDK tests, включая отказ старому плееру без явной capability.
  • По четыре настоящих out-of-order runtime profiles в Linux Qt, Windows Qt и Classic: inline/external SHA, mono/stereo, 44.1/48 kHz; pause, недоступный seek, wait, gap fill/resume, подтверждённый seek, writer complete/EOF/release. Повторены четыре физических >4 GiB Qt-профиля, прежние RIFF/RF64 и MP3; Classic дополнительно проверен на двух прежних профилях.
  • В отчёте сохранены начальные ошибки fixtures. В частности, первая Qt-проверка ошибочно требовала paused при seek в 3-секундный хвост, хотя прежний resume buffer равен 5 секундам: исходные CTest suites exit8. После исправления сценария отдельно повторена затронутая Qt-группа. Дополнительно выявлена и устранена гонка чтения/роста индекса Qt; ожидание index mutex не удерживает mutex статуса (проверено в каждой runtime-строке). После исправления полный набор 15/15 групп на каждой Qt ОС прошёл с exit0. Политика буферизации не менялась.
  • Linux EXE и V2 client обновлены атомарно с backup, INI и остальные файлы сохранены. Windows EXE/INI и 158 HKCU shell keys не менялись; одноразовые задачи и staging удалены.

ZIP — SDK без EXE/DLL/установщиков/медиа. Для новых функций нужна сборка из commit ниже. Это prefix-gated RF64, не произвольный seek в sparse islands. Другие контейнеры, live, полная sparse/audio matrix и реальная Harvester-интеграция остаются открытыми. Физическое >4 GiB Classic evidence относится к отдельному SDK1.78, повтор этого большого Classic теста в данном этапе не заявляется.

Контракт · Отчёт · Чеклист.

Source commit: f1137dcaf12de87d557fbf975d7ed1a6cb2259af.

Progressive API / SDK 1.78 — Real RF64 >4 GiB and authenticated indexes

Choose a tag to compare

@LiberVixer LiberVixer released this 03 Nov 02:58

Плеер 0.2.0; предварительный SDK 1.78 для интеграционных проверок. Harvester не изменён.

  • Внешние SHA-256 таблицы для RF64: до 4096 бинарных записей по 44 байта, проверка длины и SHA индекса до использования. Прежние inline blocks и лимит команды 64 KiB сохранены. Capability согласуется явно и пока относится только к RF64 PCM16/PCM24.
  • По два физических файла больше 4 GiB в Linux Qt, Windows Qt и Windows Classic: все 4,3 GB последовательно записаны, без sparse/truncate. Проверены growing/start/pause, публикация с сохранением ручной паузы, seek за 2^32, настоящий decoder clock/codec и физическое I/O, complete/EOF/release и удаление файла. Независимый FFmpeg PCM и SHA всего файла совпали во всех редакциях.
  • Первый большой тест обнаружил последовательное сканирование MOV при Qt seek. Исправлено открытием decoder window по проверенному FragmentIndex с исходными временными метками. Дополнительно проверена замена ещё не завершённого seek, включая переход назад. Первый неуспешный прогон сохранён в отчёте.
  • По 52 новых native checks и 80 Python SDK tests на ОС; ASAN/UBSAN, прежние native RF64/WAV, восемь небольших RF64 и четыре gapless MP3 на каждой Qt ОС, два Classic regression profiles прошли. Все итоговые exit codes 0.
  • Linux EXE и два SDK-модуля обновлены атомарно с backup; INI и остальные личные файлы сохранены. Windows-установки и 158 shell keys не менялись. Одноразовая задача Classic и staging удалены.

ZIP содержит SDK без EXE/DLL/установщиков/медиа. Для новых функций нужна сборка из указанного commit; установщики приложения этим SDK не обновляются. Большие физические RF64 проверены только PCM16/PCM24 stereo 48 kHz. Остальные rates/layouts, sparse/live, полный demux/audio matrix, длительный stress и реальная Harvester-интеграция остаются открытыми. Точный физический output устройства не заявляется.

Контракт · Проверки · Чеклист.

Source commit: c29d5259432d07c51d8895db0b59b1fcb56e57f7.

Progressive API / SDK 1.77 — Progressive RF64 PCM16/PCM24

Choose a tag to compare

@LiberVixer LiberVixer released this 02 Nov 18:38

Растущий RF64 PCM16/PCM24 для Windows Classic, Windows Qt и Linux Qt.

  • Две явные capability: standalone-rf64-pcm16-v1 и standalone-rf64-pcm24-v1. Mono/stereo 44.1/48 kHz, первая ds64 без size table, 64-bit RIFF/data/sample sizes и согласованный sampleCount, обязательные size sentinels. Один required track/resource, SHA-256 и известная duration VOD.
  • PCM16 tag1 и extensible PCM24 с PCM GUID, 24 valid/container bits и mono mask4/stereo mask3. До 16 GiB и 250000 packets по 16384 audio frames; оба ограничения действуют одновременно. Прежние RIFF-профили и packet sizes не меняются.
  • По восемь growing profiles каждой редакции: buffer/play/pause/seek/resume/tail/complete/EOF/release с тем же reader, без изменения original или перекодирования. Partial headers/packets ждут update; RIFF pad не становится PCM.
  • По 161 new native checks Windows/Linux и те же 161 ASan/UBSan checks полного production bridge. FFmpeg/manual RF64 writers, точный Python PCM oracle, packet bytes/clocks, ds64/sentinel/count/overflow errors, SHA/padding/EOF/release.
  • Внутри native corpus восемь synthetic cases production layout/FragmentIndex/late seek и точного чтения за 4 GiB. Физический большой файл не создавался: сквозной playback реального RF64 больше 4 GiB остаётся открытым.
  • По 138 прежних WAV/extensible PCM24 native checks на ОС; Classic дополнительно проверен на обоих прежних playback-профилях. SDK: по 77 tests на ОС. Все итоговые exit codes 0.
  • Исправлен Qt CLI discovery: JSON с отступами/Windows CRLF достигал 66724 bytes и превышал прежний лимит клиента. Теперь compact JSON без потери полей; лимиты команд сохранены. Дополнительно проверены CLI discovery/autostart, socket/pipe capabilities и отказ слишком большой команде. Второй тест выявил прежний вывод CLI Python в кодовой странице Windows: success/error JSON теперь использует ASCII escapes, сохраняя Unicode-значения. Оба начальных exit8 отражены в отчёте. Windows full suite и Linux focused CLI regression после исправления прошли.
  • Linux обновлён атомарно с backup EXE, комплектных V2/CLI clients; INI и остальные файлы сохранены. Установленные Windows EXE/INI и 158 shell entries не менялись. Тестовые задачи и staging удалены.

ZIP — SDK без EXE/DLL/установщиков/медиа. Для нового режима нужна сборка из указанного commit; установщики приложения 0.2.0 этим SDK не обновляются. Harvester не изменён.

BW64, size tables, неизвестные ds64 sizes, float, другие masks/valid bits/rates/layouts, live/sparse/segments и несколько data chunks вне профиля. Packet clock не означает sample-exact UI seek или bit-exact физический выход. Полная audio matrix, большие реальные RF64, длительный stress, физическая A/V-приёмка и реальная Harvester-интеграция остаются открытыми.

Контракт · Проверки · Чеклист.

Source commit: 0448e25d55de9b6fd617d99d414b919e0e7e3b90.

Progressive API / SDK 1.76 — Progressive WAVEFORMATEXTENSIBLE PCM24

Choose a tag to compare

@LiberVixer LiberVixer released this 02 Nov 14:12

Растущий WAVEFORMATEXTENSIBLE PCM24 для Windows Classic, Windows Qt и Linux Qt.

  • Отдельная capability standalone-wav-extensible-pcm24-v1: RIFF/WAVE tag 65534, fmt40/cbSize22, PCM GUID, 24 container/valid bits, mono mask4/stereo mask3, 44.1/48 kHz. Одна required audio track/resource, SHA-256 и конечная duration VOD.
  • Общий parser проверяет GUID, разрядность, маску и выравнивание до публикации первого packet. Проверенный PCM24 in24/enda adapter сохраняет все три байта sample и исходный порядок каналов без перекодирования. Legacy WAV PCM16 и tag-1 PCM24 не расширяются неявно.
  • По четыре growing profiles каждой редакции: buffering/play/pause/seek/resume/tail/complete/EOF/release с тем же reader. Partial headers/packets ждут update; RIFF pad не становится PCM; prefix без writer complete не становится EOF.
  • По 83 новых native checks Windows/Linux и те же 83 ASan/UBSan checks полного production bridge с leak detection. FFmpeg и независимый struct writer, точный Python PCM oracle, packet bytes/clocks, negative GUID/valid-bits/channel-mask cases, SHA/padding/EOF/release.
  • По 120 прежних WAV PCM16/legacy PCM24 native checks на ОС; Classic дополнительно проверен на обоих прежних playback-профилях. SDK: по 75 tests на ОС. Итоговые exit codes 0. Первый Classic прогон получил player_closing в четвёртом профиле; неуспешный результат сохранён и тестовая копия удалена, полный повтор прошёл на идентичном EXE. Источник команды закрытия не установлен.
  • Linux обновлён атомарно с backup EXE и комплектного V2 client; INI и остальные файлы сохранены. Установленные Windows EXE/INI и 158 shell entries не менялись. Все временные тестовые задачи и staging удалены.

ZIP — SDK без EXE/DLL/установщиков/медиа. Для нового режима нужна сборка из указанного commit; установщики приложения 0.2.0 этим SDK не обновляются. Harvester не изменён.

RF64, float, 20-in-24/24-in-32, другие masks/rates/layouts, cbSize больше 22, live/sparse/segments и несколько data chunks вне профиля. Packet clock не означает sample-exact UI seek или bit-exact физический аудиовыход. Полная audio matrix, физическая A/V-приёмка, длительный stress и реальная Harvester-интеграция остаются открытыми.

Контракт · Проверки · Чеклист.

Source commit: 62ab4d7c2875f2602cdfb723c3b23aad6af0e05e.

Progressive API / SDK 1.75 — Progressive WAV PCM24

Choose a tag to compare

@LiberVixer LiberVixer released this 02 Nov 13:55

Растущий WAV PCM24 для Windows Classic, Windows Qt и Linux Qt.

  • Отдельная capability standalone-wav-pcm24-v1: legacy RIFF/WAVE format tag 1, packed signed PCM24 mono/stereo 44.1/48 kHz, одна required audio track/resource, SHA-256 и конечная duration VOD. Прежний WAV PCM16 API не расширяется неявно.
  • Общая специализация PCM parser и явный opt-in in24/QuickTime v1 с little-endian wave/enda=1. Все три байта sample, packet clocks и PCM сохраняются без перекодирования; чтения идут через ResourceSource/SHA.
  • По четыре growing profiles каждой редакции: buffer/play/pause/seek/resume/tail/complete/EOF/release с тем же reader. Неполный packet ждёт update; prefix без writer complete не становится EOF. RIFF pad не становится PCM.
  • По 65 новых native checks Windows/Linux и те же 65 ASan/UBSan checks полного production bridge с leak detection: точный PCM, clocks, fmt18, odd metadata/data padding, malformed headers, неверный complete и reader release. Проверяется отказ до передачи подменённого блока decoder.
  • По 135 прежних WAV PCM16/E-AC-3 native checks на ОС; Classic дополнительно проверен на обоих прежних playback-профилях. SDK: по 74 tests на ОС. Итоговые exit codes 0. Исправленное исходное предположение теста об eager verify описано в отчёте: production audit сканирует данные ограниченными порциями, а modified payload проверяется перед чтением.
  • Linux обновлён атомарно с резервными копиями EXE и комплектного V2 client; INI и 243 остальных файла сохранены. Установленные Windows EXE/INI и 158 shell entries не менялись. Тестовые задачи и staging удалены.

ZIP — SDK без EXE/DLL/установщиков/медиа. Для нового режима нужна сборка из указанного commit; установщики приложения 0.2.0 этим SDK не обновляются. Harvester не изменён.

RF64, WAVEFORMATEXTENSIBLE, float/другая разрядность, другие rates/layouts, несколько data chunks, live/sparse/segments и trailing bytes вне профиля. Packet clock не означает sample-exact UI seek или bit-exact режим физического аудиоустройства. Полная audio matrix, физическая A/V-приёмка, длительный stress и реальная Harvester-интеграция остаются открытыми.

Контракт · Проверки · Чеклист.

Source commit: eed88d541bb55a7e3a2655bb1392abbf22857ebc.