mirror of
https://github.com/dirtydishes/dreamio.git
synced 2026-06-06 13:37:24 +00:00
537 lines
585 KiB
HTML
537 lines
585 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Queue VLC Subtitles Until Media Start</title>
|
|
<style>
|
|
:root {
|
|
color-scheme: light;
|
|
--ink: oklch(22% 0.02 275);
|
|
--muted: oklch(45% 0.025 275);
|
|
--paper: oklch(98% 0.006 275);
|
|
--panel: oklch(100% 0.004 275);
|
|
--line: oklch(88% 0.018 275);
|
|
--accent: oklch(58% 0.18 288);
|
|
--accent-soft: oklch(94% 0.035 288);
|
|
--code-bg: oklch(25% 0.025 275);
|
|
--code-ink: oklch(96% 0.01 275);
|
|
}
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
background: var(--paper);
|
|
color: var(--ink);
|
|
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
line-height: 1.55;
|
|
}
|
|
main { max-width: 1040px; margin: 0 auto; padding: 48px 24px 64px; }
|
|
header { max-width: 760px; margin-bottom: 36px; }
|
|
.eyebrow { color: var(--accent); font-size: 0.78rem; font-weight: 760; letter-spacing: 0.08em; text-transform: uppercase; }
|
|
h1 { font-size: clamp(2.1rem, 5vw, 4rem); line-height: 0.98; margin: 10px 0 18px; letter-spacing: 0; }
|
|
h2 { margin: 34px 0 10px; font-size: 1.25rem; line-height: 1.2; }
|
|
p { max-width: 74ch; margin: 0 0 14px; }
|
|
ul { margin: 8px 0 18px; padding-left: 1.2rem; max-width: 78ch; }
|
|
li { margin: 6px 0; }
|
|
code { font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; font-size: 0.92em; }
|
|
.summary {
|
|
border: 1px solid var(--line);
|
|
background: var(--panel);
|
|
border-radius: 8px;
|
|
padding: 18px 20px;
|
|
box-shadow: 0 20px 50px oklch(55% 0.08 275 / 0.08);
|
|
}
|
|
.meta { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }
|
|
.pill { background: var(--accent-soft); color: oklch(35% 0.11 288); border-radius: 999px; padding: 5px 10px; font-size: 0.82rem; font-weight: 680; }
|
|
.diff-shell { margin-top: 16px; overflow: auto; border: 1px solid var(--line); border-radius: 8px; background: oklch(16% 0.012 275); }
|
|
.diff-shell > * { min-width: 780px; }
|
|
pre {
|
|
background: var(--code-bg);
|
|
color: var(--code-ink);
|
|
border-radius: 8px;
|
|
padding: 14px 16px;
|
|
overflow: auto;
|
|
}
|
|
a { color: var(--accent); }
|
|
section { border-top: 1px solid var(--line); padding-top: 2px; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<header>
|
|
<div class="eyebrow">Dreamio turn record</div>
|
|
<h1>Queue VLC Subtitles Until Media Start</h1>
|
|
<p class="summary">Fixed a startup race introduced by the real local range buffer: subtitle candidates can now arrive during the cache probe and wait safely until VLC has an active media item.</p>
|
|
<div class="meta">
|
|
<span class="pill">Issue dreamio-qyh</span>
|
|
<span class="pill">May 25, 2026</span>
|
|
<span class="pill">Native playback</span>
|
|
</div>
|
|
</header>
|
|
|
|
<section>
|
|
<h2>Summary</h2>
|
|
<p>The native VLC backend now queues external subtitle candidates received before media startup completes. Once the local-cache or direct VLC media item is created and playback begins, the queued candidates are flushed through the existing subtitle attachment path.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Changes Made</h2>
|
|
<ul>
|
|
<li>Added a pending subtitle queue and URL set to <code>VLCNativePlaybackBackend</code>.</li>
|
|
<li>Reset the queue and startup flag for each new playback request.</li>
|
|
<li>Marked media as started inside <code>startVLCMedia</code>, then flushed queued subtitles.</li>
|
|
<li>Kept the existing attachment, dedupe, delayed refresh, display-name preservation, and auto-selection behavior intact.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Context</h2>
|
|
<p>The logs showed subtitle attachments happening after <code>cache-probe</code> but before <code>opening mode=local-cache</code>. With the real range cache, VLC media creation is delayed by the async probe and local server setup. The native player still forwarded buffered subtitles immediately, so <code>addPlaybackSlave</code> was called while VLC had no active media item.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Important Implementation Details</h2>
|
|
<p>The fix treats pre-media subtitle candidates as valid work, not duplicates. Candidates queued during startup are not inserted into <code>attachedSubtitleURLs</code>; they are held separately so the later flush can attach them normally once VLC is ready.</p>
|
|
<p>When subtitles arrive after media startup, behavior is unchanged. They still attach immediately and use the existing delayed refresh timers to wait for VLC to expose external subtitle tracks.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Relevant Diff Snippets</h2>
|
|
<p>Rendered with <code>@pierre/diffs/ssr</code> from the one-file patch for <code>Dreamio/VLCNativePlaybackBackend.swift</code>.</p>
|
|
<div class="diff-shell"><svg data-icon-sprite aria-hidden="true" width="0" height="0">
|
|
<symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
|
|
<path d="M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-brand-github" viewBox="0 0 16 16">
|
|
<path d="M8 0c4.42 0 8 3.58 8 8a8.01 8.01 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27s-1.36.09-2 .27c-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevron" viewBox="0 0 16 16">
|
|
<path d="M1.47 4.47a.75.75 0 0 1 1.06 0L8 9.94l5.47-5.47a.75.75 0 1 1 1.06 1.06l-6 6a.75.75 0 0 1-1.06 0l-6-6a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevrons-narrow" viewBox="0 0 10 16">
|
|
<path d="M4.47 2.22a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1-1.06 1.06L5 3.81 2.28 6.53a.75.75 0 0 1-1.06-1.06zM1.22 9.47a.75.75 0 0 1 1.06 0L5 12.19l2.72-2.72a.75.75 0 0 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0l-3.25-3.25a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-split" viewBox="0 0 16 16">
|
|
<path d="M14 0H8.5v16H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2m-1.5 6.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 1 0"/><path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5.5V0zm.5 7.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1" opacity=".3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-unified" viewBox="0 0 16 16">
|
|
<path fill-rule="evenodd" d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8.5h16zm-8-4a.5.5 0 0 0-.5.5v1h-1a.5.5 0 0 0 0 1h1v1a.5.5 0 0 0 1 0v-1h1a.5.5 0 0 0 0-1h-1v-1A.5.5 0 0 0 8 10" clip-rule="evenodd"/><path fill-rule="evenodd" d="M14 0a2 2 0 0 1 2 2v5.5H0V2a2 2 0 0 1 2-2zM6.5 3.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z" clip-rule="evenodd" opacity=".4"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand" viewBox="0 0 16 16">
|
|
<path d="M3.47 5.47a.75.75 0 0 1 1.06 0L8 8.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand-all" viewBox="0 0 16 16">
|
|
<path d="M11.47 9.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06L8 12.94zM7.526 1.418a.75.75 0 0 1 1.004.052l4 4a.75.75 0 1 1-1.06 1.06L8 3.06 4.53 6.53a.75.75 0 1 1-1.06-1.06l4-4z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-file-code" viewBox="0 0 16 16">
|
|
<path d="M10.75 0c.199 0 .39.08.53.22l3.5 3.5c.14.14.22.331.22.53v9A2.75 2.75 0 0 1 12.25 16h-8.5A2.75 2.75 0 0 1 1 13.25V2.75A2.75 2.75 0 0 1 3.75 0zm-7 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h8.5c.69 0 1.25-.56 1.25-1.25V5h-1.25A2.25 2.25 0 0 1 10 2.75V1.5z"/><path d="M7.248 6.19a.75.75 0 0 1 .063 1.058L5.753 9l1.558 1.752a.75.75 0 0 1-1.122.996l-2-2.25a.75.75 0 0 1 0-.996l2-2.25a.75.75 0 0 1 1.06-.063M8.69 7.248a.75.75 0 1 1 1.12-.996l2 2.25a.75.75 0 0 1 0 .996l-2 2.25a.75.75 0 1 1-1.12-.996L10.245 9z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-plus" viewBox="0 0 16 16">
|
|
<path d="M8 3a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 8 3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-added" viewBox="0 0 16 16">
|
|
<path d="M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-deleted" viewBox="0 0 16 16">
|
|
<path d="M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-diffstat" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ignored" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m11.53-2.47a.75.75 0 0 0-1.06-1.06l-6 6a.75.75 0 1 0 1.06 1.06z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-modified" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-moved" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.495 4.695a.75.75 0 0 0-.05 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.05 1.06l2.044 2.248-1.796 1.995a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ref" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"/>
|
|
</symbol>
|
|
</svg><style data-core-css="">@layer base, theme, rendered, unsafe;
|
|
@layer base,theme,rendered,unsafe;@layer base{:host{--diffs-font-fallback:"SF Mono", Monaco, Consolas, "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;--diffs-header-font-fallback:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;--diffs-mixer:light-dark(#000,#fff);--diffs-gap-fallback:8px;--diffs-scrollbar-gutter-fallback:6px;--diffs-scrollbar-gutter:var(--diffs-scrollbar-gutter-override,var(--diffs-scrollbar-gutter-measured,var(--diffs-scrollbar-gutter-fallback)));--diffs-added-light:#0dbe4e;--diffs-added-dark:#5ecc71;--diffs-modified-light:#009fff;--diffs-modified-dark:#69b1ff;--diffs-deleted-light:#ff2e3f;--diffs-deleted-dark:#ff6762;color-scheme:light dark;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);font-feature-settings:var(--diffs-font-features);--diffs-bg:light-dark(var(--diffs-light-bg,#fff),var(--diffs-dark-bg,#000));--diffs-bg-buffer:var(--diffs-bg-buffer-override,light-dark(color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer))));--diffs-bg-context:var(--diffs-bg-context-override,light-dark(color-mix(in lab, var(--diffs-bg) 98.5%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92.5%, var(--diffs-mixer))));--diffs-bg-context-gutter:var(--diffs-bg-context-gutter-override,light-dark(color-mix(in lab, var(--diffs-bg-context) 90%, var(--diffs-bg)),color-mix(in lab, var(--diffs-bg-context) 45%, var(--diffs-bg))));--diffs-bg-separator:var(--diffs-bg-separator-override,light-dark(color-mix(in lab, var(--diffs-bg) 96%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 85%, var(--diffs-mixer))));--diffs-fg:light-dark(var(--diffs-light,#000),var(--diffs-dark,#fff));--diffs-fg-number:var(--diffs-fg-number-override,light-dark(color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg)),color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg))));--diffs-fg-conflict-marker:var(--diffs-fg-conflict-marker-override,var(--diffs-fg-number));--diffs-deletion-base:var(--diffs-deletion-color-override,light-dark(var(--diffs-light-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-light))),var(--diffs-dark-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-dark)))));--diffs-addition-base:var(--diffs-addition-color-override,light-dark(var(--diffs-light-addition-color,var(--diffs-addition-color,var(--diffs-added-light))),var(--diffs-dark-addition-color,var(--diffs-addition-color,var(--diffs-added-dark)))));--diffs-modified-base:var(--diffs-modified-color-override,light-dark(var(--diffs-light-modified-color,var(--diffs-modified-color,var(--diffs-modified-light))),var(--diffs-dark-modified-color,var(--diffs-modified-color,var(--diffs-modified-dark)))));--diffs-bg-deletion:var(--diffs-bg-deletion-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-deletion-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-deletion-base))));--diffs-bg-deletion-emphasis:var(--diffs-bg-deletion-emphasis-override,light-dark(rgb(from var(--diffs-deletion-base) r g b / .15),rgb(from var(--diffs-deletion-base) r g b / .2)));--diffs-bg-addition:var(--diffs-bg-addition-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-addition-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-addition-base))));--diffs-bg-addition-emphasis:var(--diffs-bg-addition-emphasis-override,light-dark(rgb(from var(--diffs-addition-base) r g b / .15),rgb(from var(--diffs-addition-base) r g b / .2)));--diffs-selection-base:var(--diffs-modified-base);--diffs-selection-number-fg:light-dark(color-mix(in lab, var(--diffs-selection-base) 65%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-selection-base) 75%, var(--diffs-mixer)));background-color:var(--diffs-bg);color:var(--diffs-fg);display:block}pre,code,[data-error-wrapper]{isolation:isolate;font-family:var(--diffs-font-family,var(--diffs-font-fallback));outline:none;margin:0;padding:0;display:block}pre,code{background-color:var(--diffs-bg)}code{contain:content}*,:before,:after{box-sizing:border-box}[data-icon-sprite]{display:none}[data-diffs-header],[data-separator]{font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback))}[data-diffs-header][data-sticky]{z-index:1;background-color:var(--diffs-bg);position:sticky;top:0}[data-file-info]{color:var(--fg);background-color:color-mix(in lab, var(--bg) 98%, var(--fg));border-block:1px solid color-mix(in lab, var(--bg) 95%, var(--fg));padding:10px;font-weight:700}[data-diff],[data-file]{--diffs-grid-number-column-width:minmax(min-content, max-content);--diffs-code-grid:var(--diffs-grid-number-column-width) 1fr}[data-dehydrated]:is([data-diff],[data-file]){--diffs-code-grid:var(--diffs-grid-number-column-width) minmax(0, 1fr)}:is([data-diff],[data-file]):hover [data-code]::-webkit-scrollbar-thumb{background-color:var(--diffs-bg-context)}@supports (-webkit-touch-callout:none){:host{--diffs-scrollbar-gutter-fallback:0px}}[data-line] span{color:light-dark(var(--diffs-token-light,var(--diffs-light)),var(--diffs-token-dark,var(--diffs-dark)));background-color:light-dark(var(--diffs-token-light-bg,inherit),var(--diffs-token-dark-bg,inherit));font-weight:light-dark(var(--diffs-token-light-font-weight,inherit),var(--diffs-token-dark-font-weight,inherit));font-style:light-dark(var(--diffs-token-light-font-style,inherit),var(--diffs-token-dark-font-style,inherit));-webkit-text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit));text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit))}[data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);color:var(--diffs-fg);background-color:var(--diffs-line-bg,var(--diffs-bg))}@media (pointer:fine){:is([data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]):where([data-hovered]){--diffs-computed-hovered-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-selected-line-bg) 97%, var(--diffs-bg-hover-override,var(--diffs-mixer))),color-mix(in lab, var(--diffs-computed-selected-line-bg) 91%, var(--diffs-bg-hover-override,var(--diffs-mixer))));--diffs-line-bg:var(--diffs-computed-hovered-line-bg,inherit)}}[data-decoration-bg]:is([data-line],[data-no-newline]){--mix-deco-light:92%;--mix-deco-dark:85%}[data-decoration-bg][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]){--mix-deco-light:88%;--mix-deco-dark:80%}[data-decoration-bg][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]){--mix-deco-light:85%;--mix-deco-dark:78%}@media (pointer:fine){[data-decoration-bg][data-hovered]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:85%;--mix-deco-dark:85%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:83%;--mix-deco-dark:83%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:81%;--mix-deco-dark:81%}}[data-decoration-bg]:is([data-line],[data-no-newline]){--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) var(--mix-deco-light), var(--diffs-decoration-bg)),color-mix(in lab, var(--diffs-bg) var(--mix-deco-dark), var(--diffs-decoration-bg)));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-line-annotation],[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context);--diffs-computed-decoration-bg:var(--diffs-annotation-bg);--diffs-computed-diff-line-bg:var(--diffs-annotation-bg);--diffs-computed-selected-line-bg:var(--diffs-annotation-bg);--diffs-line-bg:var(--diffs-annotation-bg)}[data-merge-conflict-actions],[data-gutter-buffer=merge-conflict-action],[data-gutter-buffer=merge-conflict-marker-base],[data-gutter-buffer=merge-conflict-marker-separator],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator]{--diffs-computed-decoration-bg:var(--diffs-bg-context);--diffs-computed-diff-line-bg:var(--diffs-bg-context);--diffs-computed-selected-line-bg:var(--diffs-bg-context);--diffs-line-bg:var(--diffs-bg-context)}[data-gutter-buffer=merge-conflict-marker-start],[data-merge-conflict=marker-start]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-gutter-buffer=merge-conflict-marker-end],[data-merge-conflict=marker-end]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-has-merge-conflict] [data-line-annotation],[data-has-merge-conflict] [data-gutter-buffer=annotation]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);--diffs-line-bg:var(--diffs-bg)}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number]{--mix-light:91%;--mix-dark:85%}:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--mix-light:88%;--mix-dark:80%}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--diffs-diff-line-mix-target:var(--diffs-bg)}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-deletion-override,var(--diffs-deletion-base))}@media (pointer:fine){[data-line-type=change-deletion][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:75%}}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-deletion-override,var(--diffs-deletion-base));--diffs-diff-line-mix-target:var(--diffs-bg-deletion-number-override,var(--diffs-deletion-base))}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-addition-override,var(--diffs-addition-base))}@media (pointer:fine){[data-line-type=change-addition][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--diffs-bg-addition-number-override,var(--diffs-addition-base))}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-current-override,var(--diffs-addition-base))}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--conflict-bg-current-number-override,var(--diffs-addition-base))}@media (pointer:fine){[data-merge-conflict=current][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-incoming-override,var(--diffs-modified-base))}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-modified-base);--diffs-diff-line-mix-target:var(--conflict-bg-incoming-number-override,var(--diffs-modified-base))}@media (pointer:fine){[data-merge-conflict=incoming][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]{--diffs-selection-mix-target:var(--diffs-bg-selection-override,var(--diffs-selection-base))}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--mix-selection-light:82%;--mix-selection-dark:75%}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:75%;--mix-selection-dark:70%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]){--mix-selection-light:75%;--mix-selection-dark:60%;--diffs-selection-mix-target:var(--diffs-bg-selection-number-override,var(--diffs-selection-base))}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:70%;--mix-selection-dark:55%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--diffs-computed-selected-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-light), var(--diffs-selection-mix-target)),color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-dark), var(--diffs-selection-mix-target)));--diffs-line-bg:var(--diffs-computed-selected-line-bg,inherit)}[data-selected-line]:is([data-gutter-buffer],[data-column-number]){color:var(--diffs-selection-number-fg)}[data-no-newline]{-webkit-user-select:none;user-select:none}[data-no-newline] span{opacity:.6}[data-diff-type=split][data-overflow=scroll]{grid-template-columns:1fr 1fr;display:grid}[data-diff-type=split][data-overflow=scroll] [data-additions]{border-left:1px solid var(--diffs-bg)}[data-diff-type=split][data-overflow=scroll] [data-deletions]{border-right:1px solid var(--diffs-bg)}[data-code]{grid-auto-flow:dense;grid-template-columns:var(--diffs-code-grid);overflow:var(--diffs-overflow-override,scroll) clip;overscroll-behavior-x:none;tab-size:var(--diffs-tab-size,2);padding-top:var(--diffs-gap-block,var(--diffs-gap-fallback));padding-bottom:max(0px, calc(var(--diffs-gap-block,var(--diffs-gap-fallback)) - var(--diffs-scrollbar-gutter)));scrollbar-gutter:stable;align-self:flex-start;display:grid}[data-diffs-scrollbar-measure]{opacity:0;pointer-events:none;scrollbar-gutter:auto;grid-template-columns:none;width:100px;height:100px;padding:0;position:absolute;top:-200px;left:-200px}[data-container-size]{container-type:inline-size}[data-code]::-webkit-scrollbar{width:0;height:var(--diffs-scrollbar-gutter)}[data-code]::-webkit-scrollbar-track{background:0 0}[data-code]::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:1px solid #0000;border-radius:3px}[data-code]::-webkit-scrollbar-corner{background-color:#0000}@supports ((-moz-appearance:none)){[data-code]{scrollbar-width:thin;scrollbar-color:var(--diffs-bg-context) transparent;padding-bottom:var(--diffs-gap-block,var(--diffs-gap-fallback))}}:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]) [data-code],[data-overflow=wrap]:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]){padding-top:0}[data-gutter]{grid-template-rows:subgrid;grid-template-columns:subgrid;z-index:3;background-color:var(--diffs-bg);grid-column:1;display:grid;position:relative}[data-gutter] [data-gutter-buffer],[data-gutter] [data-column-number]{border-right:var(--diffs-gap-style,2px solid var(--diffs-bg))}[data-content]{grid-template-rows:subgrid;grid-template-columns:subgrid;background-color:var(--diffs-bg);grid-column:2;min-width:0;display:grid}[data-diff-type=split][data-overflow=wrap]{grid-auto-flow:dense;grid-template-columns:repeat(2, var(--diffs-code-grid));padding-block:var(--diffs-gap-block,var(--diffs-gap-fallback));display:grid}[data-diff-type=split][data-overflow=wrap] [data-deletions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-gutter]{grid-column:1}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-content]{border-right:1px solid var(--diffs-bg);grid-column:2}[data-diff-type=split][data-overflow=wrap] [data-additions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-gutter]{border-left:1px solid var(--diffs-bg);grid-column:3}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-content]{grid-column:4}[data-overflow=scroll] [data-gutter]{position:sticky;left:0}[data-interactive-lines] [data-line]{cursor:pointer}[data-interactive-line-numbers] [data-column-number]{cursor:pointer;touch-action:none}[data-content-buffer],[data-gutter-buffer]{-webkit-user-select:none;user-select:none;min-height:1lh;position:relative}[data-gutter-buffer]{padding-left:2ch;padding-right:1ch}[data-gutter-buffer]:before{content:"";min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));display:block}[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context-gutter);min-height:0}[data-gutter-buffer=buffer]{--diffs-line-bg:var(--diffs-bg-context-gutter)}[data-content-buffer]{background-position:5px 0;background-size:8px 8px;background-origin:border-box;background-image:repeating-linear-gradient(-45deg, transparent, transparent 4.242px, var(--diffs-bg-buffer) 4.242px, var(--diffs-bg-buffer) 5.656px);grid-column:1}[data-separator]{box-sizing:content-box;background-color:var(--diffs-bg)}[data-separator=simple]{min-height:4px}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata],[data-separator=simple]{background-color:var(--diffs-bg-separator)}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata]{height:32px;position:relative}[data-separator-wrapper]{-webkit-user-select:none;user-select:none;fill:currentColor;background-color:var(--diffs-bg);align-items:center;height:100%;display:flex;position:absolute;inset-inline:0}[data-content] [data-separator-wrapper]{display:none}[data-separator=metadata] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;color:var(--diffs-fg-number);white-space:nowrap;text-overflow:ellipsis;min-width:min-content;padding-inline:1ch;inset-inline:100% auto;overflow:hidden}[data-separator=line-info]{margin-block:var(--diffs-gap-block,var(--diffs-gap-fallback))}[data-separator=line-info] [data-separator-wrapper]{min-width:16px}[data-separator=line-info-basic],[data-separator=metadata]{margin-block:0}[data-separator=line-info][data-separator-first]{margin-top:0}[data-separator=line-info][data-separator-last]{margin-bottom:0}[data-expand-index] [data-separator-wrapper]{grid-template-columns:32px auto;display:grid}[data-expand-index] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:32px 32px auto}[data-expand-button],[data-separator-content]{background-color:var(--diffs-bg-separator);flex:none;align-items:center;display:flex}[data-expand-index] [data-separator-content]:hover{cursor:pointer;text-decoration:underline}[data-expand-button]{cursor:pointer;min-width:32px;color:var(--diffs-fg-number);border-right:2px solid var(--diffs-bg);flex-shrink:0;justify-content:center;align-self:stretch}[data-expand-button]:hover{color:var(--diffs-fg)}[data-expand-button][data-expand-all-button]{display:none}[data-expand-down] [data-icon]{transform:scaleY(-1)}[data-separator-content]{height:100%;color:var(--diffs-fg-number);flex:auto;justify-content:flex-start;padding:0 1ch;overflow:hidden}:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-content]{-webkit-user-select:none;user-select:none;height:100%;overflow:clip}[data-unmodified-lines]{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}@supports (width:1cqi){[data-unified] [data-separator=line-info] [data-separator-wrapper]{padding-inline:var(--diffs-gap-inline,var(--diffs-gap-fallback));width:100cqi}:is([data-unified] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content]{border-radius:6px}[data-unified] [data-separator=line-info][data-expand-index] [data-separator-wrapper] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-gutter] [data-separator=line-info] [data-separator-wrapper]{padding-left:var(--diffs-gap-inline,var(--diffs-gap-fallback))}[data-gutter] [data-separator=line-info] [data-separator-content]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-gutter] [data-separator=line-info][data-expand-index] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-additions] [data-content] [data-separator=line-info]{background-color:var(--diffs-bg)}:is([data-additions] [data-content] [data-separator=line-info]) [data-separator-wrapper]{display:none}[data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);border-top-right-radius:6px;border-bottom-right-radius:6px;height:100%;display:block}:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}[data-overflow=scroll] [data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{width:calc(100cqi - var(--diffs-gap-inline,var(--diffs-gap-fallback)))}[data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;margin-right:var(--diffs-gap-inline,var(--diffs-gap-fallback));border-top-right-radius:6px;border-bottom-right-radius:6px;display:block}:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}@media (pointer:fine){[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:unset}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:6px;border-top-left-radius:unset}}}@media (pointer:coarse){[data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px 34px auto}:is([data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]) [data-separator-content]{grid-column:unset;grid-row:unset}@supports (width:1cqi){:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up],[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:unset;border-top-left-radius:unset}}}@media (pointer:fine){[data-separator-wrapper][data-separator-multi-button]{grid-template-rows:50% 50%;display:grid}[data-separator-wrapper][data-separator-multi-button] [data-separator-content]{grid-area:1/2/-1;min-width:min-content}[data-separator-wrapper][data-separator-multi-button] [data-expand-button]{grid-column:1}[data-separator=line-info] [data-separator-wrapper],[data-separator=line-info] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px auto}[data-separator=line-info-basic][data-expand-index] [data-separator-wrapper]{grid-template-columns:100% auto}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-up]{border-bottom:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-down]{border-top:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}}[data-additions] [data-gutter] [data-separator-wrapper],[data-additions] [data-separator=line-info-basic] [data-separator-wrapper],[data-content] [data-separator-wrapper]{display:none}[data-line-annotation]{min-height:var(--diffs-annotation-min-height,0);z-index:2}[data-merge-conflict-actions]{z-index:2}[data-separator=custom]{grid-template-columns:subgrid;display:grid}[data-line],[data-column-number],[data-no-newline]{padding-inline:1ch;position:relative}[data-indicators=classic] [data-line]{padding-inline-start:2ch}:is([data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion]),[data-line]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion])):before{-webkit-user-select:none;user-select:none;width:1ch;height:1lh;display:inline-block;position:absolute;top:0;left:0}:is([data-line]:is([data-indicators=classic] [data-line-type=change-addition]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition])):before{content:"+";color:var(--diffs-addition-base)}:is([data-line]:is([data-indicators=classic] [data-line-type=change-deletion]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-deletion])):before{content:"-";color:var(--diffs-deletion-base)}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion],[data-indicators=bars] [data-line-type=change-addition]):before{content:"";-webkit-user-select:none;user-select:none;contain:strict;width:4px;height:100%;display:block;position:absolute;top:0;left:0}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion]):before{background-image:linear-gradient(0deg, var(--diffs-bg-deletion) 50%, var(--diffs-deletion-base) 50%);background-repeat:repeat;background-size:2px 2px;background-size:calc(1lh/round(1lh / 2px)) calc(1lh/round(1lh / 2px))}[data-column-number]:is([data-indicators=bars] [data-line-type=change-addition]):before{background-color:var(--diffs-addition-base)}[data-overflow=wrap] [data-line],[data-overflow=wrap] [data-annotation-content]{white-space:pre-wrap;word-break:break-word}[data-overflow=scroll] [data-line]{white-space:pre;min-height:1lh}[data-column-number]{box-sizing:content-box;text-align:right;-webkit-user-select:none;user-select:none;color:var(--diffs-fg-number);padding-left:2ch}[data-line-number-content]{min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));z-index:1;display:inline-block;position:relative}[data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]{min-width:4px;padding:0}:is([data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]):before{min-width:0}[data-disable-line-numbers] [data-line-number-content]{display:none}[data-disable-line-numbers] [data-gutter-utility-slot]{right:unset;justify-content:flex-start;left:0}[data-disable-line-numbers][data-indicators=bars] [data-gutter-utility-slot]{left:6px}[data-file][data-disable-line-numbers] [data-gutter-buffer],[data-file][data-disable-line-numbers] [data-column-number]{border-right:0;min-width:0}[data-diff-span]{-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:3px}[data-line-type=change-addition] [data-diff-span]{background-color:var(--diffs-bg-addition-emphasis)}[data-line-type=change-deletion] [data-diff-span]{background-color:var(--diffs-bg-deletion-emphasis)}[data-merge-conflict=marker-start],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator],[data-merge-conflict=marker-end]{color:var(--diffs-fg);padding-left:1ch}[data-merge-conflict=marker-start],[data-merge-conflict=marker-end]{align-items:center;display:flex}:is([data-merge-conflict=marker-start],[data-merge-conflict=marker-end]):after{color:var(--diffs-fg-conflict-marker);font-size:.75rem;font-style:normal;line-height:1.25rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));padding-left:1ch}[data-merge-conflict=marker-start]:after{content:"(Current Change)"}[data-merge-conflict=marker-end]:after{content:"(Incoming Change)"}[data-merge-conflict-actions-content]{min-height:1.75rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));color:var(--diffs-fg);align-items:center;gap:.25rem;padding-inline:.5rem;font-size:.75rem;line-height:1.2;display:flex}[data-merge-conflict-action]{appearance:none;color:var(--diffs-fg-number);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-style:normal}[data-merge-conflict-action]:hover{color:var(--diffs-fg)}[data-merge-conflict-action=current]:hover{color:var(--diffs-addition-base)}[data-merge-conflict-action=incoming]:hover{color:var(--diffs-modified-base)}[data-merge-conflict-action-separator]{color:var(--diffs-fg-number);opacity:.6;-webkit-user-select:none;user-select:none}[data-diffs-header=default]{background-color:var(--diffs-bg);justify-content:space-between;align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));min-height:calc(1lh + var(--diffs-gap-block,var(--diffs-gap-fallback))*3);z-index:2;flex-direction:row;padding-inline:16px;display:flex;position:relative;top:0}[data-header-content]{align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));white-space:nowrap;flex-direction:row;min-width:0;display:flex}[data-header-content] [data-prev-name],[data-header-content] [data-title]{text-overflow:ellipsis;white-space:nowrap;direction:rtl;min-width:0;overflow:hidden}[data-prev-name]{opacity:.7}[data-rename-icon]{fill:currentColor;flex-grow:0;flex-shrink:0}[data-diffs-header=default] [data-metadata]{white-space:nowrap;align-items:center;gap:1ch;display:flex}[data-diffs-header=default] [data-additions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-addition-base)}[data-diffs-header=default] [data-deletions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-deletion-base)}[data-change-icon]{fill:currentColor;flex-shrink:0}[data-change-icon=change],[data-change-icon=rename-pure],[data-change-icon=rename-changed]{color:var(--diffs-modified-base)}[data-change-icon=new]{color:var(--diffs-addition-base)}[data-change-icon=deleted]{color:var(--diffs-deletion-base)}[data-change-icon=file]{opacity:.6}[data-annotation-content]{z-index:2;isolation:isolate;align-self:flex-start;min-width:0;display:flow-root;position:relative}[data-overflow=scroll] [data-annotation-content],[data-overflow=scroll] [data-merge-conflict-actions-content]{width:var(--diffs-column-content-width,auto);left:var(--diffs-column-number-width,0);position:sticky}[data-annotation-slot]{text-wrap-mode:wrap;word-break:normal;white-space-collapse:collapse}[data-gutter-utility-slot]{touch-action:none;justify-content:flex-end;display:flex;position:absolute;top:0;bottom:0;right:0}[data-utility-button]{appearance:none;cursor:pointer;width:1lh;height:1lh;font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);background-color:var(--diffs-modified-base);color:var(--diffs-bg);fill:currentColor;z-index:4;touch-action:none;border:none;border-radius:4px;justify-content:center;align-items:center;margin-right:calc(1ch - 1lh);padding:0;display:flex;position:relative}[data-utility-button]:before{content:"";display:block;position:absolute;inset:0 0 0 -4px}[data-decoration-bar-stack]{pointer-events:none;isolation:isolate;z-index:1;background-color:var(--diffs-decoration-bar-color,transparent);box-sizing:content-box;border-left:2px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg);width:6px;position:absolute;top:0;bottom:0;right:-2px}[data-decoration-bar-depth="1"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 20%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="2"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 45%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="3"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 65%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-start] [data-decoration-bar-stack]{border-top-left-radius:5px;border-top-right-radius:5px}[data-decoration-bar-end] [data-decoration-bar-stack]{z-index:3;border-bottom-right-radius:5px;border-bottom-left-radius:5px}[data-placeholder]{contain:strict}[data-error-wrapper]{padding:var(--diffs-gap-block,var(--diffs-gap-fallback)) var(--diffs-gap-inline,var(--diffs-gap-fallback));scrollbar-width:none;max-height:400px;overflow:auto}[data-error-wrapper] [data-error-message]{color:var(--diffs-deletion-base);font-size:18px;font-weight:700}[data-error-wrapper] [data-error-stack]{color:var(--diffs-fg-number)}}@layer theme,rendered,unsafe;
|
|
@layer theme {
|
|
|
|
}</style><style data-theme-css="">@layer base, theme, rendered, unsafe;
|
|
@layer rendered {
|
|
:host {
|
|
--diffs-scrollbar-gutter-measured: var(--diffs-scrollbar-gutter-fallback);
|
|
--diffs-dark:#fafafa;--diffs-dark-bg:#0a0a0a;--diffs-dark-addition-color:#07c480;--diffs-dark-deletion-color:#ff2e3f;--diffs-dark-modified-color:#009fff;--diffs-light:#0a0a0a;--diffs-light-bg:#ffffff;--diffs-light-addition-color:#18a46c;--diffs-light-deletion-color:#d52c36;--diffs-light-modified-color:#009fff;
|
|
}
|
|
}</style><div data-diffs-header="default" data-change-type="change"><div data-header-content=""><slot name="header-prefix"></slot><svg width="16" height="16" viewBox="0 0 16 16" data-change-icon="change"><use href="#diffs-icon-symbol-modified"></use></svg><div data-title=""><bdi>Dreamio/VLCNativePlaybackBackend.swift</bdi></div></div><div data-metadata=""><span data-additions-count="">+48</span><slot name="header-metadata"></slot></div></div><pre data-diff="" data-diff-type="split" data-overflow="scroll" data-background="" data-indicators="bars" tabindex="0" style="--diffs-min-number-column-width-default:3ch;" data-dehydrated=""><code data-code="" data-container-size="" data-deletions=""><div data-gutter="" style="grid-row: span 83"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">27 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="28" data-line-index="27,27"><span data-line-number-content="">28</span></div><div data-line-type="context" data-column-number="29" data-line-index="28,28"><span data-line-number-content="">29</span></div><div data-line-type="context" data-column-number="30" data-line-index="29,29"><span data-line-number-content="">30</span></div><div data-gutter-buffer="buffer" data-buffer-size="3" style="grid-row: span 3;min-height:calc(3 * 1lh);"></div><div data-line-type="context" data-column-number="31" data-line-index="33,33"><span data-line-number-content="">31</span></div><div data-line-type="context" data-column-number="32" data-line-index="34,34"><span data-line-number-content="">32</span></div><div data-line-type="context" data-column-number="33" data-line-index="35,35"><span data-line-number-content="">33</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">20 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="54" data-line-index="56,56"><span data-line-number-content="">54</span></div><div data-line-type="context" data-column-number="55" data-line-index="57,57"><span data-line-number-content="">55</span></div><div data-line-type="context" data-column-number="56" data-line-index="58,58"><span data-line-number-content="">56</span></div><div data-gutter-buffer="buffer" data-buffer-size="3" style="grid-row: span 3;min-height:calc(3 * 1lh);"></div><div data-line-type="context" data-column-number="57" data-line-index="62,62"><span data-line-number-content="">57</span></div><div data-line-type="context" data-column-number="58" data-line-index="63,63"><span data-line-number-content="">58</span></div><div data-line-type="context" data-column-number="59" data-line-index="64,64"><span data-line-number-content="">59</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">295 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="355" data-line-index="360,360"><span data-line-number-content="">355</span></div><div data-line-type="context" data-column-number="356" data-line-index="361,361"><span data-line-number-content="">356</span></div><div data-line-type="context" data-column-number="357" data-line-index="362,362"><span data-line-number-content="">357</span></div><div data-gutter-buffer="buffer" data-buffer-size="2" style="grid-row: span 2;min-height:calc(2 * 1lh);"></div><div data-line-type="context" data-column-number="358" data-line-index="365,365"><span data-line-number-content="">358</span></div><div data-line-type="context" data-column-number="359" data-line-index="366,366"><span data-line-number-content="">359</span></div><div data-line-type="context" data-column-number="360" data-line-index="367,367"><span data-line-number-content="">360</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">10 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="371" data-line-index="378,378"><span data-line-number-content="">371</span></div><div data-line-type="context" data-column-number="372" data-line-index="379,379"><span data-line-number-content="">372</span></div><div data-line-type="context" data-column-number="373" data-line-index="380,380"><span data-line-number-content="">373</span></div><div data-gutter-buffer="buffer" data-buffer-size="10" style="grid-row: span 10;min-height:calc(10 * 1lh);"></div><div data-line-type="context" data-column-number="374" data-line-index="391,391"><span data-line-number-content="">374</span></div><div data-line-type="context" data-column-number="375" data-line-index="392,392"><span data-line-number-content="">375</span></div><div data-line-type="context" data-column-number="376" data-line-index="393,393"><span data-line-number-content="">376</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">36 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="413" data-line-index="430,430"><span data-line-number-content="">413</span></div><div data-line-type="context" data-column-number="414" data-line-index="431,431"><span data-line-number-content="">414</span></div><div data-line-type="context" data-column-number="415" data-line-index="432,432"><span data-line-number-content="">415</span></div><div data-gutter-buffer="buffer" data-buffer-size="30" style="grid-row: span 30;min-height:calc(30 * 1lh);"></div><div data-line-type="context" data-column-number="416" data-line-index="463,463"><span data-line-number-content="">416</span></div><div data-line-type="context" data-column-number="417" data-line-index="464,464"><span data-line-number-content="">417</span></div><div data-line-type="context" data-column-number="418" data-line-index="465,465"><span data-line-number-content="">418</span></div></div><div data-content="" style="grid-row: span 83"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">27 unmodified lines</span></div></div></div><div data-line="28" data-alt-line="28" data-line-type="context" data-line-index="27,27"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lastLoggedState: </span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span></div><div data-line="29" data-alt-line="29" data-line-type="context" data-line-index="28,28"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lastBufferingLogTime: Date</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span></div><div data-line="30" data-alt-line="30" data-line-type="context" data-line-index="29,29"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedSubtitleURLs </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Set</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"><</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">>()</span></div><div data-content-buffer="" data-buffer-size="3" style="grid-row: span 3;min-height:calc(3 * 1lh)"></div><div data-line="31" data-alt-line="34" data-line-type="context" data-line-index="33,33"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didAutoSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="32" data-alt-line="35" data-line-type="context" data-line-index="34,34"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didUserSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="33" data-alt-line="36" data-line-type="context" data-line-index="35,35"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> autoSelectedSubtitleTrackID: </span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">Int32</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">20 unmodified lines</span></div></div></div><div data-line="54" data-alt-line="57" data-line-type="context" data-line-index="56,56"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> canImport</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">MobileVLCKit</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="55" data-alt-line="58" data-line-type="context" data-line-index="57,57"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> playbackStartupTask</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">cancel</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="56" data-alt-line="59" data-line-type="context" data-line-index="58,58"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedSubtitleURLs.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeAll</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-content-buffer="" data-buffer-size="3" style="grid-row: span 3;min-height:calc(3 * 1lh)"></div><div data-line="57" data-alt-line="63" data-line-type="context" data-line-index="62,62"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didAutoSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="58" data-alt-line="64" data-line-type="context" data-line-index="63,63"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didUserSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="59" data-alt-line="65" data-line-type="context" data-line-index="64,64"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> autoSelectedSubtitleTrackID </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">295 unmodified lines</span></div></div></div><div data-line="355" data-alt-line="361" data-line-type="context" data-line-index="360,360"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioVLC] opening mode=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">playbackMode</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> cachingMs=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">cachingMilliseconds</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> url=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="356" data-alt-line="362" data-line-type="context" data-line-index="361,361"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="357" data-alt-line="363" data-line-type="context" data-line-index="362,362"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> mediaPlayer.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">play</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-content-buffer="" data-buffer-size="2" style="grid-row: span 2;min-height:calc(2 * 1lh)"></div><div data-line="358" data-alt-line="366" data-line-type="context" data-line-index="365,365"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="359" data-alt-line="367" data-line-type="context" data-line-index="366,366">
|
|
</div><div data-line="360" data-alt-line="368" data-line-type="context" data-line-index="367,367"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> addRemoteHeaders</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">to</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> media</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: VLCMedia, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">request</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: NativePlaybackRequest</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">10 unmodified lines</span></div></div></div><div data-line="371" data-alt-line="379" data-line-type="context" data-line-index="378,378"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="372" data-alt-line="380" data-line-type="context" data-line-index="379,379">
|
|
</div><div data-line="373" data-alt-line="381" data-line-type="context" data-line-index="380,380"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> attachSubtitles</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidates</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">])</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Int</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-content-buffer="" data-buffer-size="10" style="grid-row: span 10;min-height:calc(10 * 1lh)"></div><div data-line="374" data-alt-line="392" data-line-type="context" data-line-index="391,391"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedCount </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 0</span></div><div data-line="375" data-alt-line="393" data-line-type="context" data-line-index="392,392"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> duplicateCount </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 0</span></div><div data-line="376" data-alt-line="394" data-line-type="context" data-line-index="393,393"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> baselineTrackIDs </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Set</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">rawSubtitleTracks</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.filter </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">{</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> $0</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">id</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> >=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.map</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">\.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">id</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">))</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">36 unmodified lines</span></div></div></div><div data-line="413" data-alt-line="431" data-line-type="context" data-line-index="430,430"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedCount</span></div><div data-line="414" data-alt-line="432" data-line-type="context" data-line-index="431,431"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="415" data-alt-line="433" data-line-type="context" data-line-index="432,432">
|
|
</div><div data-content-buffer="" data-buffer-size="30" style="grid-row: span 30;min-height:calc(30 * 1lh)"></div><div data-line="416" data-alt-line="464" data-line-type="context" data-line-index="463,463"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> rawSubtitleTracks</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> [</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">SubtitleTrack</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="417" data-alt-line="465" data-line-type="context" data-line-index="464,464"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> names </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> mediaPlayer.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">videoSubTitlesNames</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> as?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">String</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">] </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">??</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> []</span></div><div data-line="418" data-alt-line="466" data-line-type="context" data-line-index="465,465"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> indexes </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> mediaPlayer.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">videoSubTitlesIndexes</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> as?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [NSNumber] </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">??</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> []</span></div></div></code><code data-code="" data-container-size="" data-additions=""><div data-gutter="" style="grid-row: span 83"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">27 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="28" data-line-index="27,27"><span data-line-number-content="">28</span></div><div data-line-type="context" data-column-number="29" data-line-index="28,28"><span data-line-number-content="">29</span></div><div data-line-type="context" data-column-number="30" data-line-index="29,29"><span data-line-number-content="">30</span></div><div data-line-type="change-addition" data-column-number="31" data-line-index="30,30"><span data-line-number-content="">31</span></div><div data-line-type="change-addition" data-column-number="32" data-line-index="31,31"><span data-line-number-content="">32</span></div><div data-line-type="change-addition" data-column-number="33" data-line-index="32,32"><span data-line-number-content="">33</span></div><div data-line-type="context" data-column-number="34" data-line-index="33,33"><span data-line-number-content="">34</span></div><div data-line-type="context" data-column-number="35" data-line-index="34,34"><span data-line-number-content="">35</span></div><div data-line-type="context" data-column-number="36" data-line-index="35,35"><span data-line-number-content="">36</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">20 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="57" data-line-index="56,56"><span data-line-number-content="">57</span></div><div data-line-type="context" data-column-number="58" data-line-index="57,57"><span data-line-number-content="">58</span></div><div data-line-type="context" data-column-number="59" data-line-index="58,58"><span data-line-number-content="">59</span></div><div data-line-type="change-addition" data-column-number="60" data-line-index="59,59"><span data-line-number-content="">60</span></div><div data-line-type="change-addition" data-column-number="61" data-line-index="60,60"><span data-line-number-content="">61</span></div><div data-line-type="change-addition" data-column-number="62" data-line-index="61,61"><span data-line-number-content="">62</span></div><div data-line-type="context" data-column-number="63" data-line-index="62,62"><span data-line-number-content="">63</span></div><div data-line-type="context" data-column-number="64" data-line-index="63,63"><span data-line-number-content="">64</span></div><div data-line-type="context" data-column-number="65" data-line-index="64,64"><span data-line-number-content="">65</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">295 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="361" data-line-index="360,360"><span data-line-number-content="">361</span></div><div data-line-type="context" data-column-number="362" data-line-index="361,361"><span data-line-number-content="">362</span></div><div data-line-type="context" data-column-number="363" data-line-index="362,362"><span data-line-number-content="">363</span></div><div data-line-type="change-addition" data-column-number="364" data-line-index="363,363"><span data-line-number-content="">364</span></div><div data-line-type="change-addition" data-column-number="365" data-line-index="364,364"><span data-line-number-content="">365</span></div><div data-line-type="context" data-column-number="366" data-line-index="365,365"><span data-line-number-content="">366</span></div><div data-line-type="context" data-column-number="367" data-line-index="366,366"><span data-line-number-content="">367</span></div><div data-line-type="context" data-column-number="368" data-line-index="367,367"><span data-line-number-content="">368</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">10 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="379" data-line-index="378,378"><span data-line-number-content="">379</span></div><div data-line-type="context" data-column-number="380" data-line-index="379,379"><span data-line-number-content="">380</span></div><div data-line-type="context" data-column-number="381" data-line-index="380,380"><span data-line-number-content="">381</span></div><div data-line-type="change-addition" data-column-number="382" data-line-index="381,381"><span data-line-number-content="">382</span></div><div data-line-type="change-addition" data-column-number="383" data-line-index="382,382"><span data-line-number-content="">383</span></div><div data-line-type="change-addition" data-column-number="384" data-line-index="383,383"><span data-line-number-content="">384</span></div><div data-line-type="change-addition" data-column-number="385" data-line-index="384,384"><span data-line-number-content="">385</span></div><div data-line-type="change-addition" data-column-number="386" data-line-index="385,385"><span data-line-number-content="">386</span></div><div data-line-type="change-addition" data-column-number="387" data-line-index="386,386"><span data-line-number-content="">387</span></div><div data-line-type="change-addition" data-column-number="388" data-line-index="387,387"><span data-line-number-content="">388</span></div><div data-line-type="change-addition" data-column-number="389" data-line-index="388,388"><span data-line-number-content="">389</span></div><div data-line-type="change-addition" data-column-number="390" data-line-index="389,389"><span data-line-number-content="">390</span></div><div data-line-type="change-addition" data-column-number="391" data-line-index="390,390"><span data-line-number-content="">391</span></div><div data-line-type="context" data-column-number="392" data-line-index="391,391"><span data-line-number-content="">392</span></div><div data-line-type="context" data-column-number="393" data-line-index="392,392"><span data-line-number-content="">393</span></div><div data-line-type="context" data-column-number="394" data-line-index="393,393"><span data-line-number-content="">394</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">36 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="431" data-line-index="430,430"><span data-line-number-content="">431</span></div><div data-line-type="context" data-column-number="432" data-line-index="431,431"><span data-line-number-content="">432</span></div><div data-line-type="context" data-column-number="433" data-line-index="432,432"><span data-line-number-content="">433</span></div><div data-line-type="change-addition" data-column-number="434" data-line-index="433,433"><span data-line-number-content="">434</span></div><div data-line-type="change-addition" data-column-number="435" data-line-index="434,434"><span data-line-number-content="">435</span></div><div data-line-type="change-addition" data-column-number="436" data-line-index="435,435"><span data-line-number-content="">436</span></div><div data-line-type="change-addition" data-column-number="437" data-line-index="436,436"><span data-line-number-content="">437</span></div><div data-line-type="change-addition" data-column-number="438" data-line-index="437,437"><span data-line-number-content="">438</span></div><div data-line-type="change-addition" data-column-number="439" data-line-index="438,438"><span data-line-number-content="">439</span></div><div data-line-type="change-addition" data-column-number="440" data-line-index="439,439"><span data-line-number-content="">440</span></div><div data-line-type="change-addition" data-column-number="441" data-line-index="440,440"><span data-line-number-content="">441</span></div><div data-line-type="change-addition" data-column-number="442" data-line-index="441,441"><span data-line-number-content="">442</span></div><div data-line-type="change-addition" data-column-number="443" data-line-index="442,442"><span data-line-number-content="">443</span></div><div data-line-type="change-addition" data-column-number="444" data-line-index="443,443"><span data-line-number-content="">444</span></div><div data-line-type="change-addition" data-column-number="445" data-line-index="444,444"><span data-line-number-content="">445</span></div><div data-line-type="change-addition" data-column-number="446" data-line-index="445,445"><span data-line-number-content="">446</span></div><div data-line-type="change-addition" data-column-number="447" data-line-index="446,446"><span data-line-number-content="">447</span></div><div data-line-type="change-addition" data-column-number="448" data-line-index="447,447"><span data-line-number-content="">448</span></div><div data-line-type="change-addition" data-column-number="449" data-line-index="448,448"><span data-line-number-content="">449</span></div><div data-line-type="change-addition" data-column-number="450" data-line-index="449,449"><span data-line-number-content="">450</span></div><div data-line-type="change-addition" data-column-number="451" data-line-index="450,450"><span data-line-number-content="">451</span></div><div data-line-type="change-addition" data-column-number="452" data-line-index="451,451"><span data-line-number-content="">452</span></div><div data-line-type="change-addition" data-column-number="453" data-line-index="452,452"><span data-line-number-content="">453</span></div><div data-line-type="change-addition" data-column-number="454" data-line-index="453,453"><span data-line-number-content="">454</span></div><div data-line-type="change-addition" data-column-number="455" data-line-index="454,454"><span data-line-number-content="">455</span></div><div data-line-type="change-addition" data-column-number="456" data-line-index="455,455"><span data-line-number-content="">456</span></div><div data-line-type="change-addition" data-column-number="457" data-line-index="456,456"><span data-line-number-content="">457</span></div><div data-line-type="change-addition" data-column-number="458" data-line-index="457,457"><span data-line-number-content="">458</span></div><div data-line-type="change-addition" data-column-number="459" data-line-index="458,458"><span data-line-number-content="">459</span></div><div data-line-type="change-addition" data-column-number="460" data-line-index="459,459"><span data-line-number-content="">460</span></div><div data-line-type="change-addition" data-column-number="461" data-line-index="460,460"><span data-line-number-content="">461</span></div><div data-line-type="change-addition" data-column-number="462" data-line-index="461,461"><span data-line-number-content="">462</span></div><div data-line-type="change-addition" data-column-number="463" data-line-index="462,462"><span data-line-number-content="">463</span></div><div data-line-type="context" data-column-number="464" data-line-index="463,463"><span data-line-number-content="">464</span></div><div data-line-type="context" data-column-number="465" data-line-index="464,464"><span data-line-number-content="">465</span></div><div data-line-type="context" data-column-number="466" data-line-index="465,465"><span data-line-number-content="">466</span></div></div><div data-content="" style="grid-row: span 83"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">27 unmodified lines</span></div></div></div><div data-line="28" data-alt-line="28" data-line-type="context" data-line-index="27,27"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lastLoggedState: </span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span></div><div data-line="29" data-alt-line="29" data-line-type="context" data-line-index="28,28"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lastBufferingLogTime: Date</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span></div><div data-line="30" data-alt-line="30" data-line-type="context" data-line-index="29,29"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedSubtitleURLs </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Set</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"><</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">>()</span></div><div data-line="31" data-line-type="change-addition" data-line-index="30,30"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleCandidates: </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> []</span></div><div data-line="32" data-line-type="change-addition" data-line-index="31,31"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleURLs </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Set</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"><</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">>()</span></div><div data-line="33" data-line-type="change-addition" data-line-index="32,32"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> hasStartedMedia </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="34" data-alt-line="31" data-line-type="context" data-line-index="33,33"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didAutoSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="35" data-alt-line="32" data-line-type="context" data-line-index="34,34"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didUserSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="36" data-alt-line="33" data-line-type="context" data-line-index="35,35"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> autoSelectedSubtitleTrackID: </span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">Int32</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">20 unmodified lines</span></div></div></div><div data-line="57" data-alt-line="54" data-line-type="context" data-line-index="56,56"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> canImport</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">MobileVLCKit</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="58" data-alt-line="55" data-line-type="context" data-line-index="57,57"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> playbackStartupTask</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">cancel</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="59" data-alt-line="56" data-line-type="context" data-line-index="58,58"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedSubtitleURLs.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeAll</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="60" data-line-type="change-addition" data-line-index="59,59"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleCandidates.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeAll</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="61" data-line-type="change-addition" data-line-index="60,60"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleURLs.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeAll</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="62" data-line-type="change-addition" data-line-index="61,61"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> hasStartedMedia </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="63" data-alt-line="57" data-line-type="context" data-line-index="62,62"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didAutoSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="64" data-alt-line="58" data-line-type="context" data-line-index="63,63"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> didUserSelectSubtitleTrack </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="65" data-alt-line="59" data-line-type="context" data-line-index="64,64"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> autoSelectedSubtitleTrackID </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">295 unmodified lines</span></div></div></div><div data-line="361" data-alt-line="355" data-line-type="context" data-line-index="360,360"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioVLC] opening mode=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">playbackMode</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> cachingMs=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">cachingMilliseconds</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> url=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="362" data-alt-line="356" data-line-type="context" data-line-index="361,361"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="363" data-alt-line="357" data-line-type="context" data-line-index="362,362"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> mediaPlayer.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">play</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="364" data-line-type="change-addition" data-line-index="363,363"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> hasStartedMedia </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> true</span></div><div data-line="365" data-line-type="change-addition" data-line-index="364,364"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> flushPendingSubtitleCandidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="366" data-alt-line="358" data-line-type="context" data-line-index="365,365"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="367" data-alt-line="359" data-line-type="context" data-line-index="366,366">
|
|
</div><div data-line="368" data-alt-line="360" data-line-type="context" data-line-index="367,367"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> addRemoteHeaders</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">to</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> media</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: VLCMedia, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">request</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: NativePlaybackRequest</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">10 unmodified lines</span></div></div></div><div data-line="379" data-alt-line="371" data-line-type="context" data-line-index="378,378"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="380" data-alt-line="372" data-line-type="context" data-line-index="379,379">
|
|
</div><div data-line="381" data-alt-line="373" data-line-type="context" data-line-index="380,380"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> attachSubtitles</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidates</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">])</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Int</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="382" data-line-type="change-addition" data-line-index="381,381"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> hasStartedMedia </span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="383" data-line-type="change-addition" data-line-index="382,382"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> queued </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> queuePendingSubtitleCandidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="384" data-line-type="change-addition" data-line-index="383,383"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="385" data-line-type="change-addition" data-line-index="384,384"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> if</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">candidates.isEmpty </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">{</span></div><div data-line="386" data-line-type="change-addition" data-line-index="385,385"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioVLC] subtitle candidates=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">candidates.count</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> queued=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">queued</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> reason=media-not-started"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="387" data-line-type="change-addition" data-line-index="386,386"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="388" data-line-type="change-addition" data-line-index="387,387"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="389" data-line-type="change-addition" data-line-index="388,388"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> queued</span></div><div data-line="390" data-line-type="change-addition" data-line-index="389,389"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="391" data-line-type="change-addition" data-line-index="390,390">
|
|
</div><div data-line="392" data-alt-line="374" data-line-type="context" data-line-index="391,391"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedCount </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 0</span></div><div data-line="393" data-alt-line="375" data-line-type="context" data-line-index="392,392"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> duplicateCount </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 0</span></div><div data-line="394" data-alt-line="376" data-line-type="context" data-line-index="393,393"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> baselineTrackIDs </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Set</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">rawSubtitleTracks</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.filter </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">{</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> $0</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">id</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> >=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.map</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">\.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">id</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">))</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">36 unmodified lines</span></div></div></div><div data-line="431" data-alt-line="413" data-line-type="context" data-line-index="430,430"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> attachedCount</span></div><div data-line="432" data-alt-line="414" data-line-type="context" data-line-index="431,431"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="433" data-alt-line="415" data-line-type="context" data-line-index="432,432">
|
|
</div><div data-line="434" data-line-type="change-addition" data-line-index="433,433"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> queuePendingSubtitleCandidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidates</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">])</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Int</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="435" data-line-type="change-addition" data-line-index="434,434"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> queuedCount </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 0</span></div><div data-line="436" data-line-type="change-addition" data-line-index="435,435"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> candidates.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">forEach</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> candidate </span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">in</span></div><div data-line="437" data-line-type="change-addition" data-line-index="436,436"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">attachedSubtitleURLs.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate.url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="438" data-line-type="change-addition" data-line-index="437,437"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">pendingSubtitleURLs.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate.url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="439" data-line-type="change-addition" data-line-index="438,438"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="440" data-line-type="change-addition" data-line-index="439,439"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span></div><div data-line="441" data-line-type="change-addition" data-line-index="440,440"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="442" data-line-type="change-addition" data-line-index="441,441">
|
|
</div><div data-line="443" data-line-type="change-addition" data-line-index="442,442"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleURLs.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">insert</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate.url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="444" data-line-type="change-addition" data-line-index="443,443"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleCandidates.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">append</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="445" data-line-type="change-addition" data-line-index="444,444"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> queuedCount </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">+=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 1</span></div><div data-line="446" data-line-type="change-addition" data-line-index="445,445"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="447" data-line-type="change-addition" data-line-index="446,446"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> queuedCount</span></div><div data-line="448" data-line-type="change-addition" data-line-index="447,447"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="449" data-line-type="change-addition" data-line-index="448,448">
|
|
</div><div data-line="450" data-line-type="change-addition" data-line-index="449,449"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> flushPendingSubtitleCandidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="451" data-line-type="change-addition" data-line-index="450,450"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">pendingSubtitleCandidates.isEmpty </span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="452" data-line-type="change-addition" data-line-index="451,451"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span></div><div data-line="453" data-line-type="change-addition" data-line-index="452,452"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="454" data-line-type="change-addition" data-line-index="453,453">
|
|
</div><div data-line="455" data-line-type="change-addition" data-line-index="454,454"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> candidates </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleCandidates</span></div><div data-line="456" data-line-type="change-addition" data-line-index="455,455"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleCandidates.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeAll</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="457" data-line-type="change-addition" data-line-index="456,456"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> pendingSubtitleURLs.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeAll</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="458" data-line-type="change-addition" data-line-index="457,457"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="459" data-line-type="change-addition" data-line-index="458,458"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioVLC] flushing queued subtitles count=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">candidates.count</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="460" data-line-type="change-addition" data-line-index="459,459"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="461" data-line-type="change-addition" data-line-index="460,460"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> _ </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> attachSubtitles</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="462" data-line-type="change-addition" data-line-index="461,461"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="463" data-line-type="change-addition" data-line-index="462,462">
|
|
</div><div data-line="464" data-alt-line="416" data-line-type="context" data-line-index="463,463"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> rawSubtitleTracks</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> [</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">SubtitleTrack</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="465" data-alt-line="417" data-line-type="context" data-line-index="464,464"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> names </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> mediaPlayer.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">videoSubTitlesNames</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> as?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">String</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">] </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">??</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> []</span></div><div data-line="466" data-alt-line="418" data-line-type="context" data-line-index="465,465"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> indexes </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> mediaPlayer.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">videoSubTitlesIndexes</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> as?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [NSNumber] </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">??</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> []</span></div></div></code></pre></div>
|
|
</section>
|
|
|
|
|
|
<section>
|
|
<h2>New Changes as of May 25, 2026 at 6:55 PM EDT</h2>
|
|
<h3>Summary of changes</h3>
|
|
<p>After the queue fix landed, device logs showed the queued subtitles flushing after VLC media startup, but VLC still exposed no subtitle tracks. The remaining problem was the subtitle URL shape: Stremio provider download URLs are extensionless and VLC accepts them without creating visible external subtitle tracks.</p>
|
|
<p>The subtitle resolver now downloads resolvable subtitle bodies and caches them as local files with real subtitle extensions before handing them to VLC. Stremio download URLs are still parsed as candidates, but they are no longer treated as direct VLC-ready subtitle files.</p>
|
|
<h3>Why this change was made</h3>
|
|
<p>The native backend debug output showed <code>ext=none</code> for every attached Stremio subtitle and <code>visible=0</code> after attachment. Caching the subtitle payload gives VLC a local <code>.srt</code>, <code>.vtt</code>, or <code>.ass</code> file, which is a more reliable attachment target than a provider download endpoint.</p>
|
|
<h3>Code diffs</h3>
|
|
<div class="diff-shell"><svg data-icon-sprite aria-hidden="true" width="0" height="0">
|
|
<symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
|
|
<path d="M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-brand-github" viewBox="0 0 16 16">
|
|
<path d="M8 0c4.42 0 8 3.58 8 8a8.01 8.01 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27s-1.36.09-2 .27c-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevron" viewBox="0 0 16 16">
|
|
<path d="M1.47 4.47a.75.75 0 0 1 1.06 0L8 9.94l5.47-5.47a.75.75 0 1 1 1.06 1.06l-6 6a.75.75 0 0 1-1.06 0l-6-6a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevrons-narrow" viewBox="0 0 10 16">
|
|
<path d="M4.47 2.22a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1-1.06 1.06L5 3.81 2.28 6.53a.75.75 0 0 1-1.06-1.06zM1.22 9.47a.75.75 0 0 1 1.06 0L5 12.19l2.72-2.72a.75.75 0 0 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0l-3.25-3.25a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-split" viewBox="0 0 16 16">
|
|
<path d="M14 0H8.5v16H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2m-1.5 6.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 1 0"/><path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5.5V0zm.5 7.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1" opacity=".3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-unified" viewBox="0 0 16 16">
|
|
<path fill-rule="evenodd" d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8.5h16zm-8-4a.5.5 0 0 0-.5.5v1h-1a.5.5 0 0 0 0 1h1v1a.5.5 0 0 0 1 0v-1h1a.5.5 0 0 0 0-1h-1v-1A.5.5 0 0 0 8 10" clip-rule="evenodd"/><path fill-rule="evenodd" d="M14 0a2 2 0 0 1 2 2v5.5H0V2a2 2 0 0 1 2-2zM6.5 3.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z" clip-rule="evenodd" opacity=".4"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand" viewBox="0 0 16 16">
|
|
<path d="M3.47 5.47a.75.75 0 0 1 1.06 0L8 8.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand-all" viewBox="0 0 16 16">
|
|
<path d="M11.47 9.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06L8 12.94zM7.526 1.418a.75.75 0 0 1 1.004.052l4 4a.75.75 0 1 1-1.06 1.06L8 3.06 4.53 6.53a.75.75 0 1 1-1.06-1.06l4-4z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-file-code" viewBox="0 0 16 16">
|
|
<path d="M10.75 0c.199 0 .39.08.53.22l3.5 3.5c.14.14.22.331.22.53v9A2.75 2.75 0 0 1 12.25 16h-8.5A2.75 2.75 0 0 1 1 13.25V2.75A2.75 2.75 0 0 1 3.75 0zm-7 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h8.5c.69 0 1.25-.56 1.25-1.25V5h-1.25A2.25 2.25 0 0 1 10 2.75V1.5z"/><path d="M7.248 6.19a.75.75 0 0 1 .063 1.058L5.753 9l1.558 1.752a.75.75 0 0 1-1.122.996l-2-2.25a.75.75 0 0 1 0-.996l2-2.25a.75.75 0 0 1 1.06-.063M8.69 7.248a.75.75 0 1 1 1.12-.996l2 2.25a.75.75 0 0 1 0 .996l-2 2.25a.75.75 0 1 1-1.12-.996L10.245 9z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-plus" viewBox="0 0 16 16">
|
|
<path d="M8 3a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 8 3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-added" viewBox="0 0 16 16">
|
|
<path d="M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-deleted" viewBox="0 0 16 16">
|
|
<path d="M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-diffstat" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ignored" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m11.53-2.47a.75.75 0 0 0-1.06-1.06l-6 6a.75.75 0 1 0 1.06 1.06z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-modified" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-moved" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.495 4.695a.75.75 0 0 0-.05 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.05 1.06l2.044 2.248-1.796 1.995a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ref" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"/>
|
|
</symbol>
|
|
</svg><style data-core-css="">@layer base, theme, rendered, unsafe;
|
|
@layer base,theme,rendered,unsafe;@layer base{:host{--diffs-font-fallback:"SF Mono", Monaco, Consolas, "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;--diffs-header-font-fallback:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;--diffs-mixer:light-dark(#000,#fff);--diffs-gap-fallback:8px;--diffs-scrollbar-gutter-fallback:6px;--diffs-scrollbar-gutter:var(--diffs-scrollbar-gutter-override,var(--diffs-scrollbar-gutter-measured,var(--diffs-scrollbar-gutter-fallback)));--diffs-added-light:#0dbe4e;--diffs-added-dark:#5ecc71;--diffs-modified-light:#009fff;--diffs-modified-dark:#69b1ff;--diffs-deleted-light:#ff2e3f;--diffs-deleted-dark:#ff6762;color-scheme:light dark;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);font-feature-settings:var(--diffs-font-features);--diffs-bg:light-dark(var(--diffs-light-bg,#fff),var(--diffs-dark-bg,#000));--diffs-bg-buffer:var(--diffs-bg-buffer-override,light-dark(color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer))));--diffs-bg-context:var(--diffs-bg-context-override,light-dark(color-mix(in lab, var(--diffs-bg) 98.5%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92.5%, var(--diffs-mixer))));--diffs-bg-context-gutter:var(--diffs-bg-context-gutter-override,light-dark(color-mix(in lab, var(--diffs-bg-context) 90%, var(--diffs-bg)),color-mix(in lab, var(--diffs-bg-context) 45%, var(--diffs-bg))));--diffs-bg-separator:var(--diffs-bg-separator-override,light-dark(color-mix(in lab, var(--diffs-bg) 96%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 85%, var(--diffs-mixer))));--diffs-fg:light-dark(var(--diffs-light,#000),var(--diffs-dark,#fff));--diffs-fg-number:var(--diffs-fg-number-override,light-dark(color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg)),color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg))));--diffs-fg-conflict-marker:var(--diffs-fg-conflict-marker-override,var(--diffs-fg-number));--diffs-deletion-base:var(--diffs-deletion-color-override,light-dark(var(--diffs-light-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-light))),var(--diffs-dark-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-dark)))));--diffs-addition-base:var(--diffs-addition-color-override,light-dark(var(--diffs-light-addition-color,var(--diffs-addition-color,var(--diffs-added-light))),var(--diffs-dark-addition-color,var(--diffs-addition-color,var(--diffs-added-dark)))));--diffs-modified-base:var(--diffs-modified-color-override,light-dark(var(--diffs-light-modified-color,var(--diffs-modified-color,var(--diffs-modified-light))),var(--diffs-dark-modified-color,var(--diffs-modified-color,var(--diffs-modified-dark)))));--diffs-bg-deletion:var(--diffs-bg-deletion-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-deletion-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-deletion-base))));--diffs-bg-deletion-emphasis:var(--diffs-bg-deletion-emphasis-override,light-dark(rgb(from var(--diffs-deletion-base) r g b / .15),rgb(from var(--diffs-deletion-base) r g b / .2)));--diffs-bg-addition:var(--diffs-bg-addition-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-addition-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-addition-base))));--diffs-bg-addition-emphasis:var(--diffs-bg-addition-emphasis-override,light-dark(rgb(from var(--diffs-addition-base) r g b / .15),rgb(from var(--diffs-addition-base) r g b / .2)));--diffs-selection-base:var(--diffs-modified-base);--diffs-selection-number-fg:light-dark(color-mix(in lab, var(--diffs-selection-base) 65%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-selection-base) 75%, var(--diffs-mixer)));background-color:var(--diffs-bg);color:var(--diffs-fg);display:block}pre,code,[data-error-wrapper]{isolation:isolate;font-family:var(--diffs-font-family,var(--diffs-font-fallback));outline:none;margin:0;padding:0;display:block}pre,code{background-color:var(--diffs-bg)}code{contain:content}*,:before,:after{box-sizing:border-box}[data-icon-sprite]{display:none}[data-diffs-header],[data-separator]{font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback))}[data-diffs-header][data-sticky]{z-index:1;background-color:var(--diffs-bg);position:sticky;top:0}[data-file-info]{color:var(--fg);background-color:color-mix(in lab, var(--bg) 98%, var(--fg));border-block:1px solid color-mix(in lab, var(--bg) 95%, var(--fg));padding:10px;font-weight:700}[data-diff],[data-file]{--diffs-grid-number-column-width:minmax(min-content, max-content);--diffs-code-grid:var(--diffs-grid-number-column-width) 1fr}[data-dehydrated]:is([data-diff],[data-file]){--diffs-code-grid:var(--diffs-grid-number-column-width) minmax(0, 1fr)}:is([data-diff],[data-file]):hover [data-code]::-webkit-scrollbar-thumb{background-color:var(--diffs-bg-context)}@supports (-webkit-touch-callout:none){:host{--diffs-scrollbar-gutter-fallback:0px}}[data-line] span{color:light-dark(var(--diffs-token-light,var(--diffs-light)),var(--diffs-token-dark,var(--diffs-dark)));background-color:light-dark(var(--diffs-token-light-bg,inherit),var(--diffs-token-dark-bg,inherit));font-weight:light-dark(var(--diffs-token-light-font-weight,inherit),var(--diffs-token-dark-font-weight,inherit));font-style:light-dark(var(--diffs-token-light-font-style,inherit),var(--diffs-token-dark-font-style,inherit));-webkit-text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit));text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit))}[data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);color:var(--diffs-fg);background-color:var(--diffs-line-bg,var(--diffs-bg))}@media (pointer:fine){:is([data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]):where([data-hovered]){--diffs-computed-hovered-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-selected-line-bg) 97%, var(--diffs-bg-hover-override,var(--diffs-mixer))),color-mix(in lab, var(--diffs-computed-selected-line-bg) 91%, var(--diffs-bg-hover-override,var(--diffs-mixer))));--diffs-line-bg:var(--diffs-computed-hovered-line-bg,inherit)}}[data-decoration-bg]:is([data-line],[data-no-newline]){--mix-deco-light:92%;--mix-deco-dark:85%}[data-decoration-bg][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]){--mix-deco-light:88%;--mix-deco-dark:80%}[data-decoration-bg][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]){--mix-deco-light:85%;--mix-deco-dark:78%}@media (pointer:fine){[data-decoration-bg][data-hovered]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:85%;--mix-deco-dark:85%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:83%;--mix-deco-dark:83%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:81%;--mix-deco-dark:81%}}[data-decoration-bg]:is([data-line],[data-no-newline]){--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) var(--mix-deco-light), var(--diffs-decoration-bg)),color-mix(in lab, var(--diffs-bg) var(--mix-deco-dark), var(--diffs-decoration-bg)));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-line-annotation],[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context);--diffs-computed-decoration-bg:var(--diffs-annotation-bg);--diffs-computed-diff-line-bg:var(--diffs-annotation-bg);--diffs-computed-selected-line-bg:var(--diffs-annotation-bg);--diffs-line-bg:var(--diffs-annotation-bg)}[data-merge-conflict-actions],[data-gutter-buffer=merge-conflict-action],[data-gutter-buffer=merge-conflict-marker-base],[data-gutter-buffer=merge-conflict-marker-separator],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator]{--diffs-computed-decoration-bg:var(--diffs-bg-context);--diffs-computed-diff-line-bg:var(--diffs-bg-context);--diffs-computed-selected-line-bg:var(--diffs-bg-context);--diffs-line-bg:var(--diffs-bg-context)}[data-gutter-buffer=merge-conflict-marker-start],[data-merge-conflict=marker-start]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-gutter-buffer=merge-conflict-marker-end],[data-merge-conflict=marker-end]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-has-merge-conflict] [data-line-annotation],[data-has-merge-conflict] [data-gutter-buffer=annotation]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);--diffs-line-bg:var(--diffs-bg)}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number]{--mix-light:91%;--mix-dark:85%}:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--mix-light:88%;--mix-dark:80%}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--diffs-diff-line-mix-target:var(--diffs-bg)}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-deletion-override,var(--diffs-deletion-base))}@media (pointer:fine){[data-line-type=change-deletion][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:75%}}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-deletion-override,var(--diffs-deletion-base));--diffs-diff-line-mix-target:var(--diffs-bg-deletion-number-override,var(--diffs-deletion-base))}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-addition-override,var(--diffs-addition-base))}@media (pointer:fine){[data-line-type=change-addition][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--diffs-bg-addition-number-override,var(--diffs-addition-base))}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-current-override,var(--diffs-addition-base))}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--conflict-bg-current-number-override,var(--diffs-addition-base))}@media (pointer:fine){[data-merge-conflict=current][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-incoming-override,var(--diffs-modified-base))}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-modified-base);--diffs-diff-line-mix-target:var(--conflict-bg-incoming-number-override,var(--diffs-modified-base))}@media (pointer:fine){[data-merge-conflict=incoming][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]{--diffs-selection-mix-target:var(--diffs-bg-selection-override,var(--diffs-selection-base))}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--mix-selection-light:82%;--mix-selection-dark:75%}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:75%;--mix-selection-dark:70%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]){--mix-selection-light:75%;--mix-selection-dark:60%;--diffs-selection-mix-target:var(--diffs-bg-selection-number-override,var(--diffs-selection-base))}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:70%;--mix-selection-dark:55%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--diffs-computed-selected-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-light), var(--diffs-selection-mix-target)),color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-dark), var(--diffs-selection-mix-target)));--diffs-line-bg:var(--diffs-computed-selected-line-bg,inherit)}[data-selected-line]:is([data-gutter-buffer],[data-column-number]){color:var(--diffs-selection-number-fg)}[data-no-newline]{-webkit-user-select:none;user-select:none}[data-no-newline] span{opacity:.6}[data-diff-type=split][data-overflow=scroll]{grid-template-columns:1fr 1fr;display:grid}[data-diff-type=split][data-overflow=scroll] [data-additions]{border-left:1px solid var(--diffs-bg)}[data-diff-type=split][data-overflow=scroll] [data-deletions]{border-right:1px solid var(--diffs-bg)}[data-code]{grid-auto-flow:dense;grid-template-columns:var(--diffs-code-grid);overflow:var(--diffs-overflow-override,scroll) clip;overscroll-behavior-x:none;tab-size:var(--diffs-tab-size,2);padding-top:var(--diffs-gap-block,var(--diffs-gap-fallback));padding-bottom:max(0px, calc(var(--diffs-gap-block,var(--diffs-gap-fallback)) - var(--diffs-scrollbar-gutter)));scrollbar-gutter:stable;align-self:flex-start;display:grid}[data-diffs-scrollbar-measure]{opacity:0;pointer-events:none;scrollbar-gutter:auto;grid-template-columns:none;width:100px;height:100px;padding:0;position:absolute;top:-200px;left:-200px}[data-container-size]{container-type:inline-size}[data-code]::-webkit-scrollbar{width:0;height:var(--diffs-scrollbar-gutter)}[data-code]::-webkit-scrollbar-track{background:0 0}[data-code]::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:1px solid #0000;border-radius:3px}[data-code]::-webkit-scrollbar-corner{background-color:#0000}@supports ((-moz-appearance:none)){[data-code]{scrollbar-width:thin;scrollbar-color:var(--diffs-bg-context) transparent;padding-bottom:var(--diffs-gap-block,var(--diffs-gap-fallback))}}:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]) [data-code],[data-overflow=wrap]:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]){padding-top:0}[data-gutter]{grid-template-rows:subgrid;grid-template-columns:subgrid;z-index:3;background-color:var(--diffs-bg);grid-column:1;display:grid;position:relative}[data-gutter] [data-gutter-buffer],[data-gutter] [data-column-number]{border-right:var(--diffs-gap-style,2px solid var(--diffs-bg))}[data-content]{grid-template-rows:subgrid;grid-template-columns:subgrid;background-color:var(--diffs-bg);grid-column:2;min-width:0;display:grid}[data-diff-type=split][data-overflow=wrap]{grid-auto-flow:dense;grid-template-columns:repeat(2, var(--diffs-code-grid));padding-block:var(--diffs-gap-block,var(--diffs-gap-fallback));display:grid}[data-diff-type=split][data-overflow=wrap] [data-deletions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-gutter]{grid-column:1}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-content]{border-right:1px solid var(--diffs-bg);grid-column:2}[data-diff-type=split][data-overflow=wrap] [data-additions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-gutter]{border-left:1px solid var(--diffs-bg);grid-column:3}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-content]{grid-column:4}[data-overflow=scroll] [data-gutter]{position:sticky;left:0}[data-interactive-lines] [data-line]{cursor:pointer}[data-interactive-line-numbers] [data-column-number]{cursor:pointer;touch-action:none}[data-content-buffer],[data-gutter-buffer]{-webkit-user-select:none;user-select:none;min-height:1lh;position:relative}[data-gutter-buffer]{padding-left:2ch;padding-right:1ch}[data-gutter-buffer]:before{content:"";min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));display:block}[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context-gutter);min-height:0}[data-gutter-buffer=buffer]{--diffs-line-bg:var(--diffs-bg-context-gutter)}[data-content-buffer]{background-position:5px 0;background-size:8px 8px;background-origin:border-box;background-image:repeating-linear-gradient(-45deg, transparent, transparent 4.242px, var(--diffs-bg-buffer) 4.242px, var(--diffs-bg-buffer) 5.656px);grid-column:1}[data-separator]{box-sizing:content-box;background-color:var(--diffs-bg)}[data-separator=simple]{min-height:4px}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata],[data-separator=simple]{background-color:var(--diffs-bg-separator)}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata]{height:32px;position:relative}[data-separator-wrapper]{-webkit-user-select:none;user-select:none;fill:currentColor;background-color:var(--diffs-bg);align-items:center;height:100%;display:flex;position:absolute;inset-inline:0}[data-content] [data-separator-wrapper]{display:none}[data-separator=metadata] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;color:var(--diffs-fg-number);white-space:nowrap;text-overflow:ellipsis;min-width:min-content;padding-inline:1ch;inset-inline:100% auto;overflow:hidden}[data-separator=line-info]{margin-block:var(--diffs-gap-block,var(--diffs-gap-fallback))}[data-separator=line-info] [data-separator-wrapper]{min-width:16px}[data-separator=line-info-basic],[data-separator=metadata]{margin-block:0}[data-separator=line-info][data-separator-first]{margin-top:0}[data-separator=line-info][data-separator-last]{margin-bottom:0}[data-expand-index] [data-separator-wrapper]{grid-template-columns:32px auto;display:grid}[data-expand-index] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:32px 32px auto}[data-expand-button],[data-separator-content]{background-color:var(--diffs-bg-separator);flex:none;align-items:center;display:flex}[data-expand-index] [data-separator-content]:hover{cursor:pointer;text-decoration:underline}[data-expand-button]{cursor:pointer;min-width:32px;color:var(--diffs-fg-number);border-right:2px solid var(--diffs-bg);flex-shrink:0;justify-content:center;align-self:stretch}[data-expand-button]:hover{color:var(--diffs-fg)}[data-expand-button][data-expand-all-button]{display:none}[data-expand-down] [data-icon]{transform:scaleY(-1)}[data-separator-content]{height:100%;color:var(--diffs-fg-number);flex:auto;justify-content:flex-start;padding:0 1ch;overflow:hidden}:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-content]{-webkit-user-select:none;user-select:none;height:100%;overflow:clip}[data-unmodified-lines]{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}@supports (width:1cqi){[data-unified] [data-separator=line-info] [data-separator-wrapper]{padding-inline:var(--diffs-gap-inline,var(--diffs-gap-fallback));width:100cqi}:is([data-unified] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content]{border-radius:6px}[data-unified] [data-separator=line-info][data-expand-index] [data-separator-wrapper] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-gutter] [data-separator=line-info] [data-separator-wrapper]{padding-left:var(--diffs-gap-inline,var(--diffs-gap-fallback))}[data-gutter] [data-separator=line-info] [data-separator-content]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-gutter] [data-separator=line-info][data-expand-index] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-additions] [data-content] [data-separator=line-info]{background-color:var(--diffs-bg)}:is([data-additions] [data-content] [data-separator=line-info]) [data-separator-wrapper]{display:none}[data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);border-top-right-radius:6px;border-bottom-right-radius:6px;height:100%;display:block}:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}[data-overflow=scroll] [data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{width:calc(100cqi - var(--diffs-gap-inline,var(--diffs-gap-fallback)))}[data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;margin-right:var(--diffs-gap-inline,var(--diffs-gap-fallback));border-top-right-radius:6px;border-bottom-right-radius:6px;display:block}:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}@media (pointer:fine){[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:unset}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:6px;border-top-left-radius:unset}}}@media (pointer:coarse){[data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px 34px auto}:is([data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]) [data-separator-content]{grid-column:unset;grid-row:unset}@supports (width:1cqi){:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up],[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:unset;border-top-left-radius:unset}}}@media (pointer:fine){[data-separator-wrapper][data-separator-multi-button]{grid-template-rows:50% 50%;display:grid}[data-separator-wrapper][data-separator-multi-button] [data-separator-content]{grid-area:1/2/-1;min-width:min-content}[data-separator-wrapper][data-separator-multi-button] [data-expand-button]{grid-column:1}[data-separator=line-info] [data-separator-wrapper],[data-separator=line-info] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px auto}[data-separator=line-info-basic][data-expand-index] [data-separator-wrapper]{grid-template-columns:100% auto}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-up]{border-bottom:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-down]{border-top:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}}[data-additions] [data-gutter] [data-separator-wrapper],[data-additions] [data-separator=line-info-basic] [data-separator-wrapper],[data-content] [data-separator-wrapper]{display:none}[data-line-annotation]{min-height:var(--diffs-annotation-min-height,0);z-index:2}[data-merge-conflict-actions]{z-index:2}[data-separator=custom]{grid-template-columns:subgrid;display:grid}[data-line],[data-column-number],[data-no-newline]{padding-inline:1ch;position:relative}[data-indicators=classic] [data-line]{padding-inline-start:2ch}:is([data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion]),[data-line]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion])):before{-webkit-user-select:none;user-select:none;width:1ch;height:1lh;display:inline-block;position:absolute;top:0;left:0}:is([data-line]:is([data-indicators=classic] [data-line-type=change-addition]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition])):before{content:"+";color:var(--diffs-addition-base)}:is([data-line]:is([data-indicators=classic] [data-line-type=change-deletion]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-deletion])):before{content:"-";color:var(--diffs-deletion-base)}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion],[data-indicators=bars] [data-line-type=change-addition]):before{content:"";-webkit-user-select:none;user-select:none;contain:strict;width:4px;height:100%;display:block;position:absolute;top:0;left:0}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion]):before{background-image:linear-gradient(0deg, var(--diffs-bg-deletion) 50%, var(--diffs-deletion-base) 50%);background-repeat:repeat;background-size:2px 2px;background-size:calc(1lh/round(1lh / 2px)) calc(1lh/round(1lh / 2px))}[data-column-number]:is([data-indicators=bars] [data-line-type=change-addition]):before{background-color:var(--diffs-addition-base)}[data-overflow=wrap] [data-line],[data-overflow=wrap] [data-annotation-content]{white-space:pre-wrap;word-break:break-word}[data-overflow=scroll] [data-line]{white-space:pre;min-height:1lh}[data-column-number]{box-sizing:content-box;text-align:right;-webkit-user-select:none;user-select:none;color:var(--diffs-fg-number);padding-left:2ch}[data-line-number-content]{min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));z-index:1;display:inline-block;position:relative}[data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]{min-width:4px;padding:0}:is([data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]):before{min-width:0}[data-disable-line-numbers] [data-line-number-content]{display:none}[data-disable-line-numbers] [data-gutter-utility-slot]{right:unset;justify-content:flex-start;left:0}[data-disable-line-numbers][data-indicators=bars] [data-gutter-utility-slot]{left:6px}[data-file][data-disable-line-numbers] [data-gutter-buffer],[data-file][data-disable-line-numbers] [data-column-number]{border-right:0;min-width:0}[data-diff-span]{-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:3px}[data-line-type=change-addition] [data-diff-span]{background-color:var(--diffs-bg-addition-emphasis)}[data-line-type=change-deletion] [data-diff-span]{background-color:var(--diffs-bg-deletion-emphasis)}[data-merge-conflict=marker-start],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator],[data-merge-conflict=marker-end]{color:var(--diffs-fg);padding-left:1ch}[data-merge-conflict=marker-start],[data-merge-conflict=marker-end]{align-items:center;display:flex}:is([data-merge-conflict=marker-start],[data-merge-conflict=marker-end]):after{color:var(--diffs-fg-conflict-marker);font-size:.75rem;font-style:normal;line-height:1.25rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));padding-left:1ch}[data-merge-conflict=marker-start]:after{content:"(Current Change)"}[data-merge-conflict=marker-end]:after{content:"(Incoming Change)"}[data-merge-conflict-actions-content]{min-height:1.75rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));color:var(--diffs-fg);align-items:center;gap:.25rem;padding-inline:.5rem;font-size:.75rem;line-height:1.2;display:flex}[data-merge-conflict-action]{appearance:none;color:var(--diffs-fg-number);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-style:normal}[data-merge-conflict-action]:hover{color:var(--diffs-fg)}[data-merge-conflict-action=current]:hover{color:var(--diffs-addition-base)}[data-merge-conflict-action=incoming]:hover{color:var(--diffs-modified-base)}[data-merge-conflict-action-separator]{color:var(--diffs-fg-number);opacity:.6;-webkit-user-select:none;user-select:none}[data-diffs-header=default]{background-color:var(--diffs-bg);justify-content:space-between;align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));min-height:calc(1lh + var(--diffs-gap-block,var(--diffs-gap-fallback))*3);z-index:2;flex-direction:row;padding-inline:16px;display:flex;position:relative;top:0}[data-header-content]{align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));white-space:nowrap;flex-direction:row;min-width:0;display:flex}[data-header-content] [data-prev-name],[data-header-content] [data-title]{text-overflow:ellipsis;white-space:nowrap;direction:rtl;min-width:0;overflow:hidden}[data-prev-name]{opacity:.7}[data-rename-icon]{fill:currentColor;flex-grow:0;flex-shrink:0}[data-diffs-header=default] [data-metadata]{white-space:nowrap;align-items:center;gap:1ch;display:flex}[data-diffs-header=default] [data-additions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-addition-base)}[data-diffs-header=default] [data-deletions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-deletion-base)}[data-change-icon]{fill:currentColor;flex-shrink:0}[data-change-icon=change],[data-change-icon=rename-pure],[data-change-icon=rename-changed]{color:var(--diffs-modified-base)}[data-change-icon=new]{color:var(--diffs-addition-base)}[data-change-icon=deleted]{color:var(--diffs-deletion-base)}[data-change-icon=file]{opacity:.6}[data-annotation-content]{z-index:2;isolation:isolate;align-self:flex-start;min-width:0;display:flow-root;position:relative}[data-overflow=scroll] [data-annotation-content],[data-overflow=scroll] [data-merge-conflict-actions-content]{width:var(--diffs-column-content-width,auto);left:var(--diffs-column-number-width,0);position:sticky}[data-annotation-slot]{text-wrap-mode:wrap;word-break:normal;white-space-collapse:collapse}[data-gutter-utility-slot]{touch-action:none;justify-content:flex-end;display:flex;position:absolute;top:0;bottom:0;right:0}[data-utility-button]{appearance:none;cursor:pointer;width:1lh;height:1lh;font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);background-color:var(--diffs-modified-base);color:var(--diffs-bg);fill:currentColor;z-index:4;touch-action:none;border:none;border-radius:4px;justify-content:center;align-items:center;margin-right:calc(1ch - 1lh);padding:0;display:flex;position:relative}[data-utility-button]:before{content:"";display:block;position:absolute;inset:0 0 0 -4px}[data-decoration-bar-stack]{pointer-events:none;isolation:isolate;z-index:1;background-color:var(--diffs-decoration-bar-color,transparent);box-sizing:content-box;border-left:2px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg);width:6px;position:absolute;top:0;bottom:0;right:-2px}[data-decoration-bar-depth="1"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 20%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="2"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 45%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="3"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 65%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-start] [data-decoration-bar-stack]{border-top-left-radius:5px;border-top-right-radius:5px}[data-decoration-bar-end] [data-decoration-bar-stack]{z-index:3;border-bottom-right-radius:5px;border-bottom-left-radius:5px}[data-placeholder]{contain:strict}[data-error-wrapper]{padding:var(--diffs-gap-block,var(--diffs-gap-fallback)) var(--diffs-gap-inline,var(--diffs-gap-fallback));scrollbar-width:none;max-height:400px;overflow:auto}[data-error-wrapper] [data-error-message]{color:var(--diffs-deletion-base);font-size:18px;font-weight:700}[data-error-wrapper] [data-error-stack]{color:var(--diffs-fg-number)}}@layer theme,rendered,unsafe;
|
|
@layer theme {
|
|
|
|
}</style><style data-theme-css="">@layer base, theme, rendered, unsafe;
|
|
@layer rendered {
|
|
:host {
|
|
--diffs-scrollbar-gutter-measured: var(--diffs-scrollbar-gutter-fallback);
|
|
--diffs-dark:#fafafa;--diffs-dark-bg:#0a0a0a;--diffs-dark-addition-color:#07c480;--diffs-dark-deletion-color:#ff2e3f;--diffs-dark-modified-color:#009fff;--diffs-light:#0a0a0a;--diffs-light-bg:#ffffff;--diffs-light-addition-color:#18a46c;--diffs-light-deletion-color:#d52c36;--diffs-light-modified-color:#009fff;
|
|
}
|
|
}</style><div data-diffs-header="default" data-change-type="change"><div data-header-content=""><slot name="header-prefix"></slot><svg width="16" height="16" viewBox="0 0 16 16" data-change-icon="change"><use href="#diffs-icon-symbol-modified"></use></svg><div data-title=""><bdi>Dreamio/StreamResolver.swift</bdi></div></div><div data-metadata=""><span data-deletions-count="">-2</span><span data-additions-count="">+79</span><slot name="header-metadata"></slot></div></div><pre data-diff="" data-diff-type="split" data-overflow="scroll" data-background="" data-indicators="bars" tabindex="0" style="--diffs-min-number-column-width-default:3ch;" data-dehydrated=""><code data-code="" data-container-size="" data-deletions=""><div data-gutter="" style="grid-row: span 117"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">34 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="35" data-line-index="34,34"><span data-line-number-content="">35</span></div><div data-line-type="context" data-column-number="36" data-line-index="35,35"><span data-line-number-content="">36</span></div><div data-line-type="context" data-column-number="37" data-line-index="36,36"><span data-line-number-content="">37</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="38" data-line-index="38,38"><span data-line-number-content="">38</span></div><div data-line-type="change-deletion" data-column-number="39" data-line-index="39,39"><span data-line-number-content="">39</span></div><div data-gutter-buffer="buffer" data-buffer-size="3" style="grid-row: span 3;min-height:calc(3 * 1lh);"></div><div data-line-type="context" data-column-number="40" data-line-index="44,43"><span data-line-number-content="">40</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="41" data-line-index="46,45"><span data-line-number-content="">41</span></div><div data-line-type="context" data-column-number="42" data-line-index="47,46"><span data-line-number-content="">42</span></div><div data-line-type="context" data-column-number="43" data-line-index="48,47"><span data-line-number-content="">43</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">25 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="69" data-line-index="74,73"><span data-line-number-content="">69</span></div><div data-line-type="context" data-column-number="70" data-line-index="75,74"><span data-line-number-content="">70</span></div><div data-line-type="context" data-column-number="71" data-line-index="76,75"><span data-line-number-content="">71</span></div><div data-gutter-buffer="buffer" data-buffer-size="4" style="grid-row: span 4;min-height:calc(4 * 1lh);"></div><div data-line-type="context" data-column-number="72" data-line-index="81,80"><span data-line-number-content="">72</span></div><div data-line-type="context" data-column-number="73" data-line-index="82,81"><span data-line-number-content="">73</span></div><div data-line-type="context" data-column-number="74" data-line-index="83,82"><span data-line-number-content="">74</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="87" data-line-index="96,95"><span data-line-number-content="">87</span></div><div data-line-type="context" data-column-number="88" data-line-index="97,96"><span data-line-number-content="">88</span></div><div data-line-type="context" data-column-number="89" data-line-index="98,97"><span data-line-number-content="">89</span></div><div data-gutter-buffer="buffer" data-buffer-size="25" style="grid-row: span 25;min-height:calc(25 * 1lh);"></div><div data-line-type="context" data-column-number="90" data-line-index="124,123"><span data-line-number-content="">90</span></div><div data-line-type="context" data-column-number="91" data-line-index="125,124"><span data-line-number-content="">91</span></div><div data-line-type="context" data-column-number="92" data-line-index="126,125"><span data-line-number-content="">92</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">38 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="131" data-line-index="165,164"><span data-line-number-content="">131</span></div><div data-line-type="context" data-column-number="132" data-line-index="166,165"><span data-line-number-content="">132</span></div><div data-line-type="context" data-column-number="133" data-line-index="167,166"><span data-line-number-content="">133</span></div><div data-line-type="change-deletion" data-column-number="134" data-line-index="168,167"><span data-line-number-content="">134</span></div><div data-line-type="context" data-column-number="135" data-line-index="169,168"><span data-line-number-content="">135</span></div><div data-line-type="context" data-column-number="136" data-line-index="170,169"><span data-line-number-content="">136</span></div><div data-line-type="context" data-column-number="137" data-line-index="171,170"><span data-line-number-content="">137</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="154" data-line-index="188,187"><span data-line-number-content="">154</span></div><div data-line-type="context" data-column-number="155" data-line-index="189,188"><span data-line-number-content="">155</span></div><div data-line-type="context" data-column-number="156" data-line-index="190,189"><span data-line-number-content="">156</span></div><div data-gutter-buffer="buffer" data-buffer-size="44" style="grid-row: span 44;min-height:calc(44 * 1lh);"></div><div data-line-type="context" data-column-number="157" data-line-index="235,234"><span data-line-number-content="">157</span></div><div data-line-type="context" data-column-number="158" data-line-index="236,235"><span data-line-number-content="">158</span></div><div data-line-type="context" data-column-number="159" data-line-index="237,236"><span data-line-number-content="">159</span></div></div><div data-content="" style="grid-row: span 117"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">34 unmodified lines</span></div></div></div><div data-line="35" data-alt-line="35" data-line-type="context" data-line-index="34,34">
|
|
</div><div data-line="36" data-alt-line="36" data-line-type="context" data-line-index="35,35"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">final</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> class</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> SubtitleResolver</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> SubtitleResolving </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">{</span></div><div data-line="37" data-alt-line="37" data-line-type="context" data-line-index="36,36"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> session: URLSession</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="38" data-alt-line="39" data-line-type="context" data-line-index="38,38">
|
|
</div><div data-line="39" data-line-type="change-deletion" data-line-index="39,39"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> init</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span data-diff-span=""><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">session</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URLSession </span><span style="--diffs-token-dark:#08C0EF;--diffs-token-light:#08C0EF">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">shared</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></span></div><div data-content-buffer="" data-buffer-size="3" style="grid-row: span 3;min-height:calc(3 * 1lh)"></div><div data-line="40" data-alt-line="44" data-line-type="context" data-line-index="44,43"><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">session</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> session</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="41" data-alt-line="46" data-line-type="context" data-line-index="46,45"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="42" data-alt-line="47" data-line-type="context" data-line-index="47,46">
|
|
</div><div data-line="43" data-alt-line="48" data-line-type="context" data-line-index="48,47"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> resolve</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidate</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">25 unmodified lines</span></div></div></div><div data-line="69" data-alt-line="74" data-line-type="context" data-line-index="74,73"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> finalURL, label</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> candidate.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">label</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> candidate.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="70" data-alt-line="75" data-line-type="context" data-line-index="75,74"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="71" data-alt-line="76" data-line-type="context" data-line-index="76,75">
|
|
</div><div data-content-buffer="" data-buffer-size="4" style="grid-row: span 4;min-height:calc(4 * 1lh)"></div><div data-line="72" data-alt-line="81" data-line-type="context" data-line-index="81,80"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">bestPlayableCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="73" data-alt-line="82" data-line-type="context" data-line-index="82,81"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> from</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data,</span></div><div data-line="74" data-alt-line="83" data-line-type="context" data-line-index="83,82"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> responseURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> response.url,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line="87" data-alt-line="96" data-line-type="context" data-line-index="96,95"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="88" data-alt-line="97" data-line-type="context" data-line-index="97,96"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="89" data-alt-line="98" data-line-type="context" data-line-index="98,97">
|
|
</div><div data-content-buffer="" data-buffer-size="25" style="grid-row: span 25;min-height:calc(25 * 1lh)"></div><div data-line="90" data-alt-line="124" data-line-type="context" data-line-index="124,123"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> bestPlayableCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="91" data-alt-line="125" data-line-type="context" data-line-index="125,124"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> from</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data,</span></div><div data-line="92" data-alt-line="126" data-line-type="context" data-line-index="126,125"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> responseURL</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">38 unmodified lines</span></div></div></div><div data-line="131" data-alt-line="165" data-line-type="context" data-line-index="165,164"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">lowercased</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="132" data-alt-line="166" data-line-type="context" data-line-index="166,165"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> [</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"srt"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"vtt"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"ass"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"ssa"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"sub"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">pathExtension</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.lowercased</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">())</span></div><div data-line="133" data-alt-line="167" data-line-type="context" data-line-index="167,166"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".srt?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".vtt?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ass?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ssa?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".sub?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".srt&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".vtt&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ass&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ssa&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".sub&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">].</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">where</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> lowercased.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="134" data-line-type="change-deletion" data-line-index="168,167"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> isStremioSubtitleDownloadURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="135" data-alt-line="168" data-line-type="context" data-line-index="169,168"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="136" data-alt-line="169" data-line-type="context" data-line-index="170,169">
|
|
</div><div data-line="137" data-alt-line="170" data-line-type="context" data-line-index="171,170"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> shouldResolve</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> url</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Bool</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line="154" data-alt-line="187" data-line-type="context" data-line-index="188,187"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> path.range</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">of</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> #"(^|/)download(/|$)"#</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, options</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">regularExpression</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="155" data-alt-line="188" data-line-type="context" data-line-index="189,188"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="156" data-alt-line="189" data-line-type="context" data-line-index="190,189">
|
|
</div><div data-content-buffer="" data-buffer-size="44" style="grid-row: span 44;min-height:calc(44 * 1lh)"></div><div data-line="157" data-alt-line="234" data-line-type="context" data-line-index="235,234"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> logRejected</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidate</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">responseURL</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="158" data-alt-line="235" data-line-type="context" data-line-index="236,235"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="159" data-alt-line="236" data-line-type="context" data-line-index="237,236"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseDescription </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseURL.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">map</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">$0</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ??</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "none"</span></div></div></code><code data-code="" data-container-size="" data-additions=""><div data-gutter="" style="grid-row: span 117"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">34 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="35" data-line-index="34,34"><span data-line-number-content="">35</span></div><div data-line-type="context" data-column-number="36" data-line-index="35,35"><span data-line-number-content="">36</span></div><div data-line-type="context" data-column-number="37" data-line-index="36,36"><span data-line-number-content="">37</span></div><div data-line-type="change-addition" data-column-number="38" data-line-index="37,37"><span data-line-number-content="">38</span></div><div data-line-type="context" data-column-number="39" data-line-index="38,38"><span data-line-number-content="">39</span></div><div data-line-type="change-addition" data-column-number="40" data-line-index="40,39"><span data-line-number-content="">40</span></div><div data-line-type="change-addition" data-column-number="41" data-line-index="41,40"><span data-line-number-content="">41</span></div><div data-line-type="change-addition" data-column-number="42" data-line-index="42,41"><span data-line-number-content="">42</span></div><div data-line-type="change-addition" data-column-number="43" data-line-index="43,42"><span data-line-number-content="">43</span></div><div data-line-type="context" data-column-number="44" data-line-index="44,43"><span data-line-number-content="">44</span></div><div data-line-type="change-addition" data-column-number="45" data-line-index="45,44"><span data-line-number-content="">45</span></div><div data-line-type="context" data-column-number="46" data-line-index="46,45"><span data-line-number-content="">46</span></div><div data-line-type="context" data-column-number="47" data-line-index="47,46"><span data-line-number-content="">47</span></div><div data-line-type="context" data-column-number="48" data-line-index="48,47"><span data-line-number-content="">48</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">25 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="74" data-line-index="74,73"><span data-line-number-content="">74</span></div><div data-line-type="context" data-column-number="75" data-line-index="75,74"><span data-line-number-content="">75</span></div><div data-line-type="context" data-column-number="76" data-line-index="76,75"><span data-line-number-content="">76</span></div><div data-line-type="change-addition" data-column-number="77" data-line-index="77,76"><span data-line-number-content="">77</span></div><div data-line-type="change-addition" data-column-number="78" data-line-index="78,77"><span data-line-number-content="">78</span></div><div data-line-type="change-addition" data-column-number="79" data-line-index="79,78"><span data-line-number-content="">79</span></div><div data-line-type="change-addition" data-column-number="80" data-line-index="80,79"><span data-line-number-content="">80</span></div><div data-line-type="context" data-column-number="81" data-line-index="81,80"><span data-line-number-content="">81</span></div><div data-line-type="context" data-column-number="82" data-line-index="82,81"><span data-line-number-content="">82</span></div><div data-line-type="context" data-column-number="83" data-line-index="83,82"><span data-line-number-content="">83</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="96" data-line-index="96,95"><span data-line-number-content="">96</span></div><div data-line-type="context" data-column-number="97" data-line-index="97,96"><span data-line-number-content="">97</span></div><div data-line-type="context" data-column-number="98" data-line-index="98,97"><span data-line-number-content="">98</span></div><div data-line-type="change-addition" data-column-number="99" data-line-index="99,98"><span data-line-number-content="">99</span></div><div data-line-type="change-addition" data-column-number="100" data-line-index="100,99"><span data-line-number-content="">100</span></div><div data-line-type="change-addition" data-column-number="101" data-line-index="101,100"><span data-line-number-content="">101</span></div><div data-line-type="change-addition" data-column-number="102" data-line-index="102,101"><span data-line-number-content="">102</span></div><div data-line-type="change-addition" data-column-number="103" data-line-index="103,102"><span data-line-number-content="">103</span></div><div data-line-type="change-addition" data-column-number="104" data-line-index="104,103"><span data-line-number-content="">104</span></div><div data-line-type="change-addition" data-column-number="105" data-line-index="105,104"><span data-line-number-content="">105</span></div><div data-line-type="change-addition" data-column-number="106" data-line-index="106,105"><span data-line-number-content="">106</span></div><div data-line-type="change-addition" data-column-number="107" data-line-index="107,106"><span data-line-number-content="">107</span></div><div data-line-type="change-addition" data-column-number="108" data-line-index="108,107"><span data-line-number-content="">108</span></div><div data-line-type="change-addition" data-column-number="109" data-line-index="109,108"><span data-line-number-content="">109</span></div><div data-line-type="change-addition" data-column-number="110" data-line-index="110,109"><span data-line-number-content="">110</span></div><div data-line-type="change-addition" data-column-number="111" data-line-index="111,110"><span data-line-number-content="">111</span></div><div data-line-type="change-addition" data-column-number="112" data-line-index="112,111"><span data-line-number-content="">112</span></div><div data-line-type="change-addition" data-column-number="113" data-line-index="113,112"><span data-line-number-content="">113</span></div><div data-line-type="change-addition" data-column-number="114" data-line-index="114,113"><span data-line-number-content="">114</span></div><div data-line-type="change-addition" data-column-number="115" data-line-index="115,114"><span data-line-number-content="">115</span></div><div data-line-type="change-addition" data-column-number="116" data-line-index="116,115"><span data-line-number-content="">116</span></div><div data-line-type="change-addition" data-column-number="117" data-line-index="117,116"><span data-line-number-content="">117</span></div><div data-line-type="change-addition" data-column-number="118" data-line-index="118,117"><span data-line-number-content="">118</span></div><div data-line-type="change-addition" data-column-number="119" data-line-index="119,118"><span data-line-number-content="">119</span></div><div data-line-type="change-addition" data-column-number="120" data-line-index="120,119"><span data-line-number-content="">120</span></div><div data-line-type="change-addition" data-column-number="121" data-line-index="121,120"><span data-line-number-content="">121</span></div><div data-line-type="change-addition" data-column-number="122" data-line-index="122,121"><span data-line-number-content="">122</span></div><div data-line-type="change-addition" data-column-number="123" data-line-index="123,122"><span data-line-number-content="">123</span></div><div data-line-type="context" data-column-number="124" data-line-index="124,123"><span data-line-number-content="">124</span></div><div data-line-type="context" data-column-number="125" data-line-index="125,124"><span data-line-number-content="">125</span></div><div data-line-type="context" data-column-number="126" data-line-index="126,125"><span data-line-number-content="">126</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">38 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="165" data-line-index="165,164"><span data-line-number-content="">165</span></div><div data-line-type="context" data-column-number="166" data-line-index="166,165"><span data-line-number-content="">166</span></div><div data-line-type="context" data-column-number="167" data-line-index="167,166"><span data-line-number-content="">167</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="168" data-line-index="169,168"><span data-line-number-content="">168</span></div><div data-line-type="context" data-column-number="169" data-line-index="170,169"><span data-line-number-content="">169</span></div><div data-line-type="context" data-column-number="170" data-line-index="171,170"><span data-line-number-content="">170</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="187" data-line-index="188,187"><span data-line-number-content="">187</span></div><div data-line-type="context" data-column-number="188" data-line-index="189,188"><span data-line-number-content="">188</span></div><div data-line-type="context" data-column-number="189" data-line-index="190,189"><span data-line-number-content="">189</span></div><div data-line-type="change-addition" data-column-number="190" data-line-index="191,190"><span data-line-number-content="">190</span></div><div data-line-type="change-addition" data-column-number="191" data-line-index="192,191"><span data-line-number-content="">191</span></div><div data-line-type="change-addition" data-column-number="192" data-line-index="193,192"><span data-line-number-content="">192</span></div><div data-line-type="change-addition" data-column-number="193" data-line-index="194,193"><span data-line-number-content="">193</span></div><div data-line-type="change-addition" data-column-number="194" data-line-index="195,194"><span data-line-number-content="">194</span></div><div data-line-type="change-addition" data-column-number="195" data-line-index="196,195"><span data-line-number-content="">195</span></div><div data-line-type="change-addition" data-column-number="196" data-line-index="197,196"><span data-line-number-content="">196</span></div><div data-line-type="change-addition" data-column-number="197" data-line-index="198,197"><span data-line-number-content="">197</span></div><div data-line-type="change-addition" data-column-number="198" data-line-index="199,198"><span data-line-number-content="">198</span></div><div data-line-type="change-addition" data-column-number="199" data-line-index="200,199"><span data-line-number-content="">199</span></div><div data-line-type="change-addition" data-column-number="200" data-line-index="201,200"><span data-line-number-content="">200</span></div><div data-line-type="change-addition" data-column-number="201" data-line-index="202,201"><span data-line-number-content="">201</span></div><div data-line-type="change-addition" data-column-number="202" data-line-index="203,202"><span data-line-number-content="">202</span></div><div data-line-type="change-addition" data-column-number="203" data-line-index="204,203"><span data-line-number-content="">203</span></div><div data-line-type="change-addition" data-column-number="204" data-line-index="205,204"><span data-line-number-content="">204</span></div><div data-line-type="change-addition" data-column-number="205" data-line-index="206,205"><span data-line-number-content="">205</span></div><div data-line-type="change-addition" data-column-number="206" data-line-index="207,206"><span data-line-number-content="">206</span></div><div data-line-type="change-addition" data-column-number="207" data-line-index="208,207"><span data-line-number-content="">207</span></div><div data-line-type="change-addition" data-column-number="208" data-line-index="209,208"><span data-line-number-content="">208</span></div><div data-line-type="change-addition" data-column-number="209" data-line-index="210,209"><span data-line-number-content="">209</span></div><div data-line-type="change-addition" data-column-number="210" data-line-index="211,210"><span data-line-number-content="">210</span></div><div data-line-type="change-addition" data-column-number="211" data-line-index="212,211"><span data-line-number-content="">211</span></div><div data-line-type="change-addition" data-column-number="212" data-line-index="213,212"><span data-line-number-content="">212</span></div><div data-line-type="change-addition" data-column-number="213" data-line-index="214,213"><span data-line-number-content="">213</span></div><div data-line-type="change-addition" data-column-number="214" data-line-index="215,214"><span data-line-number-content="">214</span></div><div data-line-type="change-addition" data-column-number="215" data-line-index="216,215"><span data-line-number-content="">215</span></div><div data-line-type="change-addition" data-column-number="216" data-line-index="217,216"><span data-line-number-content="">216</span></div><div data-line-type="change-addition" data-column-number="217" data-line-index="218,217"><span data-line-number-content="">217</span></div><div data-line-type="change-addition" data-column-number="218" data-line-index="219,218"><span data-line-number-content="">218</span></div><div data-line-type="change-addition" data-column-number="219" data-line-index="220,219"><span data-line-number-content="">219</span></div><div data-line-type="change-addition" data-column-number="220" data-line-index="221,220"><span data-line-number-content="">220</span></div><div data-line-type="change-addition" data-column-number="221" data-line-index="222,221"><span data-line-number-content="">221</span></div><div data-line-type="change-addition" data-column-number="222" data-line-index="223,222"><span data-line-number-content="">222</span></div><div data-line-type="change-addition" data-column-number="223" data-line-index="224,223"><span data-line-number-content="">223</span></div><div data-line-type="change-addition" data-column-number="224" data-line-index="225,224"><span data-line-number-content="">224</span></div><div data-line-type="change-addition" data-column-number="225" data-line-index="226,225"><span data-line-number-content="">225</span></div><div data-line-type="change-addition" data-column-number="226" data-line-index="227,226"><span data-line-number-content="">226</span></div><div data-line-type="change-addition" data-column-number="227" data-line-index="228,227"><span data-line-number-content="">227</span></div><div data-line-type="change-addition" data-column-number="228" data-line-index="229,228"><span data-line-number-content="">228</span></div><div data-line-type="change-addition" data-column-number="229" data-line-index="230,229"><span data-line-number-content="">229</span></div><div data-line-type="change-addition" data-column-number="230" data-line-index="231,230"><span data-line-number-content="">230</span></div><div data-line-type="change-addition" data-column-number="231" data-line-index="232,231"><span data-line-number-content="">231</span></div><div data-line-type="change-addition" data-column-number="232" data-line-index="233,232"><span data-line-number-content="">232</span></div><div data-line-type="change-addition" data-column-number="233" data-line-index="234,233"><span data-line-number-content="">233</span></div><div data-line-type="context" data-column-number="234" data-line-index="235,234"><span data-line-number-content="">234</span></div><div data-line-type="context" data-column-number="235" data-line-index="236,235"><span data-line-number-content="">235</span></div><div data-line-type="context" data-column-number="236" data-line-index="237,236"><span data-line-number-content="">236</span></div></div><div data-content="" style="grid-row: span 117"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">34 unmodified lines</span></div></div></div><div data-line="35" data-alt-line="35" data-line-type="context" data-line-index="34,34">
|
|
</div><div data-line="36" data-alt-line="36" data-line-type="context" data-line-index="35,35"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">final</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> class</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> SubtitleResolver</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> SubtitleResolving </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">{</span></div><div data-line="37" data-alt-line="37" data-line-type="context" data-line-index="36,36"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> session: URLSession</span></div><div data-line="38" data-line-type="change-addition" data-line-index="37,37"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cacheDirectory: URL</span></div><div data-line="39" data-alt-line="38" data-line-type="context" data-line-index="38,38">
|
|
</div><div data-line="40" data-line-type="change-addition" data-line-index="40,39"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> init</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="41" data-line-type="change-addition" data-line-index="41,40"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> session</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URLSession </span><span style="--diffs-token-dark:#08C0EF;--diffs-token-light:#08C0EF">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">shared</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="42" data-line-type="change-addition" data-line-index="42,41"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheDirectory</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL </span><span style="--diffs-token-dark:#08C0EF;--diffs-token-light:#08C0EF">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> FileManager.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">default</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">temporaryDirectory</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">appendingPathComponent</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"DreamioSubtitles"</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, isDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> true</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="43" data-line-type="change-addition" data-line-index="43,42"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> )</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="44" data-alt-line="40" data-line-type="context" data-line-index="44,43"><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">session</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> session</span></div><div data-line="45" data-line-type="change-addition" data-line-index="45,44"><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">cacheDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cacheDirectory</span></div><div data-line="46" data-alt-line="41" data-line-type="context" data-line-index="46,45"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="47" data-alt-line="42" data-line-type="context" data-line-index="47,46">
|
|
</div><div data-line="48" data-alt-line="43" data-line-type="context" data-line-index="48,47"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> resolve</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidate</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">25 unmodified lines</span></div></div></div><div data-line="74" data-alt-line="69" data-line-type="context" data-line-index="74,73"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> finalURL, label</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> candidate.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">label</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> candidate.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="75" data-alt-line="70" data-line-type="context" data-line-index="75,74"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="76" data-alt-line="71" data-line-type="context" data-line-index="76,75">
|
|
</div><div data-line="77" data-line-type="change-addition" data-line-index="77,76"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> if</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cachedCandidate </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheSubtitleDataIfNeeded</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data, original</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="78" data-line-type="change-addition" data-line-index="78,77"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cachedCandidate</span></div><div data-line="79" data-line-type="change-addition" data-line-index="79,78"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="80" data-line-type="change-addition" data-line-index="80,79">
|
|
</div><div data-line="81" data-alt-line="72" data-line-type="context" data-line-index="81,80"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">bestPlayableCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="82" data-alt-line="73" data-line-type="context" data-line-index="82,81"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> from</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data,</span></div><div data-line="83" data-alt-line="74" data-line-type="context" data-line-index="83,82"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> responseURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> response.url,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line="96" data-alt-line="87" data-line-type="context" data-line-index="96,95"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="97" data-alt-line="88" data-line-type="context" data-line-index="97,96"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="98" data-alt-line="89" data-line-type="context" data-line-index="98,97">
|
|
</div><div data-line="99" data-line-type="change-addition" data-line-index="99,98"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheSubtitleDataIfNeeded</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">original</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="100" data-line-type="change-addition" data-line-index="100,99"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> subtitleType </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">subtitleType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="101" data-line-type="change-addition" data-line-index="101,100"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="102" data-line-type="change-addition" data-line-index="102,101"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="103" data-line-type="change-addition" data-line-index="103,102">
|
|
</div><div data-line="104" data-line-type="change-addition" data-line-index="104,103"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> do</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="105" data-line-type="change-addition" data-line-index="105,104"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> try</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> FileManager.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">default</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">createDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="106" data-line-type="change-addition" data-line-index="106,105"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> at</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheDirectory,</span></div><div data-line="107" data-line-type="change-addition" data-line-index="107,106"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> withIntermediateDirectories</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> true</span></div><div data-line="108" data-line-type="change-addition" data-line-index="108,107"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> )</span></div><div data-line="109" data-line-type="change-addition" data-line-index="109,108"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> filename </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">UUID</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">uuidString</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">.</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">subtitleType.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">fileExtension</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span></div><div data-line="110" data-line-type="change-addition" data-line-index="110,109"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> fileURL </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cacheDirectory.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">appendingPathComponent</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">filename</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="111" data-line-type="change-addition" data-line-index="111,110"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> try</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> data.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">write</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">to</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> fileURL, options</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">atomic</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="112" data-line-type="change-addition" data-line-index="112,111"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="113" data-line-type="change-addition" data-line-index="113,112"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioSubtitles] cached subtitle url=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">original.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> file=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">fileURL.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">lastPathComponent</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="114" data-line-type="change-addition" data-line-index="114,113"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="115" data-line-type="change-addition" data-line-index="115,114"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> fileURL, label</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> original.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">label</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> original.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="116" data-line-type="change-addition" data-line-index="116,115"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> catch</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="117" data-line-type="change-addition" data-line-index="117,116"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="118" data-line-type="change-addition" data-line-index="118,117"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioSubtitles] cache failure=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">error.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">localizedDescription</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> url=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">original.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="119" data-line-type="change-addition" data-line-index="119,118"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="120" data-line-type="change-addition" data-line-index="120,119"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="121" data-line-type="change-addition" data-line-index="121,120"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="122" data-line-type="change-addition" data-line-index="122,121"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="123" data-line-type="change-addition" data-line-index="123,122">
|
|
</div><div data-line="124" data-alt-line="90" data-line-type="context" data-line-index="124,123"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> bestPlayableCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="125" data-alt-line="91" data-line-type="context" data-line-index="125,124"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> from</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data,</span></div><div data-line="126" data-alt-line="92" data-line-type="context" data-line-index="126,125"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> responseURL</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">38 unmodified lines</span></div></div></div><div data-line="165" data-alt-line="131" data-line-type="context" data-line-index="165,164"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">lowercased</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="166" data-alt-line="132" data-line-type="context" data-line-index="166,165"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> [</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"srt"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"vtt"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"ass"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"ssa"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"sub"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">pathExtension</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.lowercased</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">())</span></div><div data-line="167" data-alt-line="133" data-line-type="context" data-line-index="167,166"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".srt?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".vtt?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ass?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ssa?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".sub?"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".srt&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".vtt&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ass&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".ssa&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">".sub&"</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">].</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">where</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> lowercased.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="168" data-alt-line="135" data-line-type="context" data-line-index="169,168"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="169" data-alt-line="136" data-line-type="context" data-line-index="170,169">
|
|
</div><div data-line="170" data-alt-line="137" data-line-type="context" data-line-index="171,170"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> shouldResolve</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> url</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Bool</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line="187" data-alt-line="154" data-line-type="context" data-line-index="188,187"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> path.range</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">of</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> #"(^|/)download(/|$)"#</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, options</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">regularExpression</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="188" data-alt-line="155" data-line-type="context" data-line-index="189,188"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="189" data-alt-line="156" data-line-type="context" data-line-index="190,189">
|
|
</div><div data-line="190" data-line-type="change-addition" data-line-index="191,190"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> enum</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> SubtitlePayloadType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="191" data-line-type="change-addition" data-line-index="192,191"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> case</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628"> srt</span></div><div data-line="192" data-line-type="change-addition" data-line-index="193,192"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> case</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628"> vtt</span></div><div data-line="193" data-line-type="change-addition" data-line-index="194,193"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> case</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628"> ass</span></div><div data-line="194" data-line-type="change-addition" data-line-index="195,194">
|
|
</div><div data-line="195" data-line-type="change-addition" data-line-index="196,195"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> var</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> fileExtension: </span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="196" data-line-type="change-addition" data-line-index="197,196"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> switch</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> self</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="197" data-line-type="change-addition" data-line-index="198,197"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> case</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">srt</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span></div><div data-line="198" data-line-type="change-addition" data-line-index="199,198"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "srt"</span></div><div data-line="199" data-line-type="change-addition" data-line-index="200,199"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> case</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">vtt</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span></div><div data-line="200" data-line-type="change-addition" data-line-index="201,200"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "vtt"</span></div><div data-line="201" data-line-type="change-addition" data-line-index="202,201"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> case</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">ass</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span></div><div data-line="202" data-line-type="change-addition" data-line-index="203,202"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "ass"</span></div><div data-line="203" data-line-type="change-addition" data-line-index="204,203"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="204" data-line-type="change-addition" data-line-index="205,204"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="205" data-line-type="change-addition" data-line-index="206,205"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="206" data-line-type="change-addition" data-line-index="207,206">
|
|
</div><div data-line="207" data-line-type="change-addition" data-line-index="208,207"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> subtitleType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitlePayloadType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="208" data-line-type="change-addition" data-line-index="209,208"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">data.isEmpty,</span></div><div data-line="209" data-line-type="change-addition" data-line-index="210,209"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> text </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data.prefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">4096</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, encoding</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)?</span></div><div data-line="210" data-line-type="change-addition" data-line-index="211,210"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">trimmingCharacters</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">whitespacesAndNewlines</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="211" data-line-type="change-addition" data-line-index="212,211"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">text.isEmpty</span></div><div data-line="212" data-line-type="change-addition" data-line-index="213,212"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="213" data-line-type="change-addition" data-line-index="214,213"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="214" data-line-type="change-addition" data-line-index="215,214"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="215" data-line-type="change-addition" data-line-index="216,215">
|
|
</div><div data-line="216" data-line-type="change-addition" data-line-index="217,216"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> text.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">lowercased</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="217" data-line-type="change-addition" data-line-index="218,217"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">hasPrefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"webvtt"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="218" data-line-type="change-addition" data-line-index="219,218"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">vtt</span></div><div data-line="219" data-line-type="change-addition" data-line-index="220,219"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="220" data-line-type="change-addition" data-line-index="221,220"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">hasPrefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[script info]"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="221" data-line-type="change-addition" data-line-index="222,221"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\n</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">[events]"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="222" data-line-type="change-addition" data-line-index="223,222"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\r\n</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">[events]"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="223" data-line-type="change-addition" data-line-index="224,223"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">ass</span></div><div data-line="224" data-line-type="change-addition" data-line-index="225,224"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="225" data-line-type="change-addition" data-line-index="226,225"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.range</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="226" data-line-type="change-addition" data-line-index="227,226"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> of</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> #"(?m)^\d+\s*[\r\n]+(?:\d{1,2}:)?\d{2}:\d{2}[,.]\d{3}\s*-->\s*(?:\d{1,2}:)?\d{2}:\d{2}[,.]\d{3}"#</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">,</span></div><div data-line="227" data-line-type="change-addition" data-line-index="228,227"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> options</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">regularExpression</span></div><div data-line="228" data-line-type="change-addition" data-line-index="229,228"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> )</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="229" data-line-type="change-addition" data-line-index="230,229"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">srt</span></div><div data-line="230" data-line-type="change-addition" data-line-index="231,230"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="231" data-line-type="change-addition" data-line-index="232,231"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="232" data-line-type="change-addition" data-line-index="233,232"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="233" data-line-type="change-addition" data-line-index="234,233">
|
|
</div><div data-line="234" data-alt-line="157" data-line-type="context" data-line-index="235,234"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> logRejected</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidate</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">responseURL</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="235" data-alt-line="158" data-line-type="context" data-line-index="236,235"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="236" data-alt-line="159" data-line-type="context" data-line-index="237,236"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseDescription </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseURL.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">map</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">$0</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ??</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "none"</span></div></div></code></pre><svg data-icon-sprite aria-hidden="true" width="0" height="0">
|
|
<symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
|
|
<path d="M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-brand-github" viewBox="0 0 16 16">
|
|
<path d="M8 0c4.42 0 8 3.58 8 8a8.01 8.01 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27s-1.36.09-2 .27c-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevron" viewBox="0 0 16 16">
|
|
<path d="M1.47 4.47a.75.75 0 0 1 1.06 0L8 9.94l5.47-5.47a.75.75 0 1 1 1.06 1.06l-6 6a.75.75 0 0 1-1.06 0l-6-6a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevrons-narrow" viewBox="0 0 10 16">
|
|
<path d="M4.47 2.22a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1-1.06 1.06L5 3.81 2.28 6.53a.75.75 0 0 1-1.06-1.06zM1.22 9.47a.75.75 0 0 1 1.06 0L5 12.19l2.72-2.72a.75.75 0 0 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0l-3.25-3.25a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-split" viewBox="0 0 16 16">
|
|
<path d="M14 0H8.5v16H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2m-1.5 6.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 1 0"/><path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5.5V0zm.5 7.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1" opacity=".3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-unified" viewBox="0 0 16 16">
|
|
<path fill-rule="evenodd" d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8.5h16zm-8-4a.5.5 0 0 0-.5.5v1h-1a.5.5 0 0 0 0 1h1v1a.5.5 0 0 0 1 0v-1h1a.5.5 0 0 0 0-1h-1v-1A.5.5 0 0 0 8 10" clip-rule="evenodd"/><path fill-rule="evenodd" d="M14 0a2 2 0 0 1 2 2v5.5H0V2a2 2 0 0 1 2-2zM6.5 3.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z" clip-rule="evenodd" opacity=".4"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand" viewBox="0 0 16 16">
|
|
<path d="M3.47 5.47a.75.75 0 0 1 1.06 0L8 8.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand-all" viewBox="0 0 16 16">
|
|
<path d="M11.47 9.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06L8 12.94zM7.526 1.418a.75.75 0 0 1 1.004.052l4 4a.75.75 0 1 1-1.06 1.06L8 3.06 4.53 6.53a.75.75 0 1 1-1.06-1.06l4-4z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-file-code" viewBox="0 0 16 16">
|
|
<path d="M10.75 0c.199 0 .39.08.53.22l3.5 3.5c.14.14.22.331.22.53v9A2.75 2.75 0 0 1 12.25 16h-8.5A2.75 2.75 0 0 1 1 13.25V2.75A2.75 2.75 0 0 1 3.75 0zm-7 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h8.5c.69 0 1.25-.56 1.25-1.25V5h-1.25A2.25 2.25 0 0 1 10 2.75V1.5z"/><path d="M7.248 6.19a.75.75 0 0 1 .063 1.058L5.753 9l1.558 1.752a.75.75 0 0 1-1.122.996l-2-2.25a.75.75 0 0 1 0-.996l2-2.25a.75.75 0 0 1 1.06-.063M8.69 7.248a.75.75 0 1 1 1.12-.996l2 2.25a.75.75 0 0 1 0 .996l-2 2.25a.75.75 0 1 1-1.12-.996L10.245 9z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-plus" viewBox="0 0 16 16">
|
|
<path d="M8 3a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 8 3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-added" viewBox="0 0 16 16">
|
|
<path d="M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-deleted" viewBox="0 0 16 16">
|
|
<path d="M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-diffstat" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ignored" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m11.53-2.47a.75.75 0 0 0-1.06-1.06l-6 6a.75.75 0 1 0 1.06 1.06z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-modified" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-moved" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.495 4.695a.75.75 0 0 0-.05 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.05 1.06l2.044 2.248-1.796 1.995a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ref" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"/>
|
|
</symbol>
|
|
</svg><style data-core-css="">@layer base, theme, rendered, unsafe;
|
|
@layer base,theme,rendered,unsafe;@layer base{:host{--diffs-font-fallback:"SF Mono", Monaco, Consolas, "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;--diffs-header-font-fallback:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;--diffs-mixer:light-dark(#000,#fff);--diffs-gap-fallback:8px;--diffs-scrollbar-gutter-fallback:6px;--diffs-scrollbar-gutter:var(--diffs-scrollbar-gutter-override,var(--diffs-scrollbar-gutter-measured,var(--diffs-scrollbar-gutter-fallback)));--diffs-added-light:#0dbe4e;--diffs-added-dark:#5ecc71;--diffs-modified-light:#009fff;--diffs-modified-dark:#69b1ff;--diffs-deleted-light:#ff2e3f;--diffs-deleted-dark:#ff6762;color-scheme:light dark;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);font-feature-settings:var(--diffs-font-features);--diffs-bg:light-dark(var(--diffs-light-bg,#fff),var(--diffs-dark-bg,#000));--diffs-bg-buffer:var(--diffs-bg-buffer-override,light-dark(color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer))));--diffs-bg-context:var(--diffs-bg-context-override,light-dark(color-mix(in lab, var(--diffs-bg) 98.5%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92.5%, var(--diffs-mixer))));--diffs-bg-context-gutter:var(--diffs-bg-context-gutter-override,light-dark(color-mix(in lab, var(--diffs-bg-context) 90%, var(--diffs-bg)),color-mix(in lab, var(--diffs-bg-context) 45%, var(--diffs-bg))));--diffs-bg-separator:var(--diffs-bg-separator-override,light-dark(color-mix(in lab, var(--diffs-bg) 96%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 85%, var(--diffs-mixer))));--diffs-fg:light-dark(var(--diffs-light,#000),var(--diffs-dark,#fff));--diffs-fg-number:var(--diffs-fg-number-override,light-dark(color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg)),color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg))));--diffs-fg-conflict-marker:var(--diffs-fg-conflict-marker-override,var(--diffs-fg-number));--diffs-deletion-base:var(--diffs-deletion-color-override,light-dark(var(--diffs-light-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-light))),var(--diffs-dark-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-dark)))));--diffs-addition-base:var(--diffs-addition-color-override,light-dark(var(--diffs-light-addition-color,var(--diffs-addition-color,var(--diffs-added-light))),var(--diffs-dark-addition-color,var(--diffs-addition-color,var(--diffs-added-dark)))));--diffs-modified-base:var(--diffs-modified-color-override,light-dark(var(--diffs-light-modified-color,var(--diffs-modified-color,var(--diffs-modified-light))),var(--diffs-dark-modified-color,var(--diffs-modified-color,var(--diffs-modified-dark)))));--diffs-bg-deletion:var(--diffs-bg-deletion-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-deletion-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-deletion-base))));--diffs-bg-deletion-emphasis:var(--diffs-bg-deletion-emphasis-override,light-dark(rgb(from var(--diffs-deletion-base) r g b / .15),rgb(from var(--diffs-deletion-base) r g b / .2)));--diffs-bg-addition:var(--diffs-bg-addition-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-addition-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-addition-base))));--diffs-bg-addition-emphasis:var(--diffs-bg-addition-emphasis-override,light-dark(rgb(from var(--diffs-addition-base) r g b / .15),rgb(from var(--diffs-addition-base) r g b / .2)));--diffs-selection-base:var(--diffs-modified-base);--diffs-selection-number-fg:light-dark(color-mix(in lab, var(--diffs-selection-base) 65%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-selection-base) 75%, var(--diffs-mixer)));background-color:var(--diffs-bg);color:var(--diffs-fg);display:block}pre,code,[data-error-wrapper]{isolation:isolate;font-family:var(--diffs-font-family,var(--diffs-font-fallback));outline:none;margin:0;padding:0;display:block}pre,code{background-color:var(--diffs-bg)}code{contain:content}*,:before,:after{box-sizing:border-box}[data-icon-sprite]{display:none}[data-diffs-header],[data-separator]{font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback))}[data-diffs-header][data-sticky]{z-index:1;background-color:var(--diffs-bg);position:sticky;top:0}[data-file-info]{color:var(--fg);background-color:color-mix(in lab, var(--bg) 98%, var(--fg));border-block:1px solid color-mix(in lab, var(--bg) 95%, var(--fg));padding:10px;font-weight:700}[data-diff],[data-file]{--diffs-grid-number-column-width:minmax(min-content, max-content);--diffs-code-grid:var(--diffs-grid-number-column-width) 1fr}[data-dehydrated]:is([data-diff],[data-file]){--diffs-code-grid:var(--diffs-grid-number-column-width) minmax(0, 1fr)}:is([data-diff],[data-file]):hover [data-code]::-webkit-scrollbar-thumb{background-color:var(--diffs-bg-context)}@supports (-webkit-touch-callout:none){:host{--diffs-scrollbar-gutter-fallback:0px}}[data-line] span{color:light-dark(var(--diffs-token-light,var(--diffs-light)),var(--diffs-token-dark,var(--diffs-dark)));background-color:light-dark(var(--diffs-token-light-bg,inherit),var(--diffs-token-dark-bg,inherit));font-weight:light-dark(var(--diffs-token-light-font-weight,inherit),var(--diffs-token-dark-font-weight,inherit));font-style:light-dark(var(--diffs-token-light-font-style,inherit),var(--diffs-token-dark-font-style,inherit));-webkit-text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit));text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit))}[data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);color:var(--diffs-fg);background-color:var(--diffs-line-bg,var(--diffs-bg))}@media (pointer:fine){:is([data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]):where([data-hovered]){--diffs-computed-hovered-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-selected-line-bg) 97%, var(--diffs-bg-hover-override,var(--diffs-mixer))),color-mix(in lab, var(--diffs-computed-selected-line-bg) 91%, var(--diffs-bg-hover-override,var(--diffs-mixer))));--diffs-line-bg:var(--diffs-computed-hovered-line-bg,inherit)}}[data-decoration-bg]:is([data-line],[data-no-newline]){--mix-deco-light:92%;--mix-deco-dark:85%}[data-decoration-bg][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]){--mix-deco-light:88%;--mix-deco-dark:80%}[data-decoration-bg][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]){--mix-deco-light:85%;--mix-deco-dark:78%}@media (pointer:fine){[data-decoration-bg][data-hovered]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:85%;--mix-deco-dark:85%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:83%;--mix-deco-dark:83%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:81%;--mix-deco-dark:81%}}[data-decoration-bg]:is([data-line],[data-no-newline]){--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) var(--mix-deco-light), var(--diffs-decoration-bg)),color-mix(in lab, var(--diffs-bg) var(--mix-deco-dark), var(--diffs-decoration-bg)));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-line-annotation],[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context);--diffs-computed-decoration-bg:var(--diffs-annotation-bg);--diffs-computed-diff-line-bg:var(--diffs-annotation-bg);--diffs-computed-selected-line-bg:var(--diffs-annotation-bg);--diffs-line-bg:var(--diffs-annotation-bg)}[data-merge-conflict-actions],[data-gutter-buffer=merge-conflict-action],[data-gutter-buffer=merge-conflict-marker-base],[data-gutter-buffer=merge-conflict-marker-separator],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator]{--diffs-computed-decoration-bg:var(--diffs-bg-context);--diffs-computed-diff-line-bg:var(--diffs-bg-context);--diffs-computed-selected-line-bg:var(--diffs-bg-context);--diffs-line-bg:var(--diffs-bg-context)}[data-gutter-buffer=merge-conflict-marker-start],[data-merge-conflict=marker-start]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-gutter-buffer=merge-conflict-marker-end],[data-merge-conflict=marker-end]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-has-merge-conflict] [data-line-annotation],[data-has-merge-conflict] [data-gutter-buffer=annotation]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);--diffs-line-bg:var(--diffs-bg)}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number]{--mix-light:91%;--mix-dark:85%}:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--mix-light:88%;--mix-dark:80%}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--diffs-diff-line-mix-target:var(--diffs-bg)}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-deletion-override,var(--diffs-deletion-base))}@media (pointer:fine){[data-line-type=change-deletion][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:75%}}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-deletion-override,var(--diffs-deletion-base));--diffs-diff-line-mix-target:var(--diffs-bg-deletion-number-override,var(--diffs-deletion-base))}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-addition-override,var(--diffs-addition-base))}@media (pointer:fine){[data-line-type=change-addition][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--diffs-bg-addition-number-override,var(--diffs-addition-base))}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-current-override,var(--diffs-addition-base))}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--conflict-bg-current-number-override,var(--diffs-addition-base))}@media (pointer:fine){[data-merge-conflict=current][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-incoming-override,var(--diffs-modified-base))}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-modified-base);--diffs-diff-line-mix-target:var(--conflict-bg-incoming-number-override,var(--diffs-modified-base))}@media (pointer:fine){[data-merge-conflict=incoming][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]{--diffs-selection-mix-target:var(--diffs-bg-selection-override,var(--diffs-selection-base))}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--mix-selection-light:82%;--mix-selection-dark:75%}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:75%;--mix-selection-dark:70%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]){--mix-selection-light:75%;--mix-selection-dark:60%;--diffs-selection-mix-target:var(--diffs-bg-selection-number-override,var(--diffs-selection-base))}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:70%;--mix-selection-dark:55%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--diffs-computed-selected-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-light), var(--diffs-selection-mix-target)),color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-dark), var(--diffs-selection-mix-target)));--diffs-line-bg:var(--diffs-computed-selected-line-bg,inherit)}[data-selected-line]:is([data-gutter-buffer],[data-column-number]){color:var(--diffs-selection-number-fg)}[data-no-newline]{-webkit-user-select:none;user-select:none}[data-no-newline] span{opacity:.6}[data-diff-type=split][data-overflow=scroll]{grid-template-columns:1fr 1fr;display:grid}[data-diff-type=split][data-overflow=scroll] [data-additions]{border-left:1px solid var(--diffs-bg)}[data-diff-type=split][data-overflow=scroll] [data-deletions]{border-right:1px solid var(--diffs-bg)}[data-code]{grid-auto-flow:dense;grid-template-columns:var(--diffs-code-grid);overflow:var(--diffs-overflow-override,scroll) clip;overscroll-behavior-x:none;tab-size:var(--diffs-tab-size,2);padding-top:var(--diffs-gap-block,var(--diffs-gap-fallback));padding-bottom:max(0px, calc(var(--diffs-gap-block,var(--diffs-gap-fallback)) - var(--diffs-scrollbar-gutter)));scrollbar-gutter:stable;align-self:flex-start;display:grid}[data-diffs-scrollbar-measure]{opacity:0;pointer-events:none;scrollbar-gutter:auto;grid-template-columns:none;width:100px;height:100px;padding:0;position:absolute;top:-200px;left:-200px}[data-container-size]{container-type:inline-size}[data-code]::-webkit-scrollbar{width:0;height:var(--diffs-scrollbar-gutter)}[data-code]::-webkit-scrollbar-track{background:0 0}[data-code]::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:1px solid #0000;border-radius:3px}[data-code]::-webkit-scrollbar-corner{background-color:#0000}@supports ((-moz-appearance:none)){[data-code]{scrollbar-width:thin;scrollbar-color:var(--diffs-bg-context) transparent;padding-bottom:var(--diffs-gap-block,var(--diffs-gap-fallback))}}:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]) [data-code],[data-overflow=wrap]:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]){padding-top:0}[data-gutter]{grid-template-rows:subgrid;grid-template-columns:subgrid;z-index:3;background-color:var(--diffs-bg);grid-column:1;display:grid;position:relative}[data-gutter] [data-gutter-buffer],[data-gutter] [data-column-number]{border-right:var(--diffs-gap-style,2px solid var(--diffs-bg))}[data-content]{grid-template-rows:subgrid;grid-template-columns:subgrid;background-color:var(--diffs-bg);grid-column:2;min-width:0;display:grid}[data-diff-type=split][data-overflow=wrap]{grid-auto-flow:dense;grid-template-columns:repeat(2, var(--diffs-code-grid));padding-block:var(--diffs-gap-block,var(--diffs-gap-fallback));display:grid}[data-diff-type=split][data-overflow=wrap] [data-deletions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-gutter]{grid-column:1}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-content]{border-right:1px solid var(--diffs-bg);grid-column:2}[data-diff-type=split][data-overflow=wrap] [data-additions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-gutter]{border-left:1px solid var(--diffs-bg);grid-column:3}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-content]{grid-column:4}[data-overflow=scroll] [data-gutter]{position:sticky;left:0}[data-interactive-lines] [data-line]{cursor:pointer}[data-interactive-line-numbers] [data-column-number]{cursor:pointer;touch-action:none}[data-content-buffer],[data-gutter-buffer]{-webkit-user-select:none;user-select:none;min-height:1lh;position:relative}[data-gutter-buffer]{padding-left:2ch;padding-right:1ch}[data-gutter-buffer]:before{content:"";min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));display:block}[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context-gutter);min-height:0}[data-gutter-buffer=buffer]{--diffs-line-bg:var(--diffs-bg-context-gutter)}[data-content-buffer]{background-position:5px 0;background-size:8px 8px;background-origin:border-box;background-image:repeating-linear-gradient(-45deg, transparent, transparent 4.242px, var(--diffs-bg-buffer) 4.242px, var(--diffs-bg-buffer) 5.656px);grid-column:1}[data-separator]{box-sizing:content-box;background-color:var(--diffs-bg)}[data-separator=simple]{min-height:4px}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata],[data-separator=simple]{background-color:var(--diffs-bg-separator)}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata]{height:32px;position:relative}[data-separator-wrapper]{-webkit-user-select:none;user-select:none;fill:currentColor;background-color:var(--diffs-bg);align-items:center;height:100%;display:flex;position:absolute;inset-inline:0}[data-content] [data-separator-wrapper]{display:none}[data-separator=metadata] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;color:var(--diffs-fg-number);white-space:nowrap;text-overflow:ellipsis;min-width:min-content;padding-inline:1ch;inset-inline:100% auto;overflow:hidden}[data-separator=line-info]{margin-block:var(--diffs-gap-block,var(--diffs-gap-fallback))}[data-separator=line-info] [data-separator-wrapper]{min-width:16px}[data-separator=line-info-basic],[data-separator=metadata]{margin-block:0}[data-separator=line-info][data-separator-first]{margin-top:0}[data-separator=line-info][data-separator-last]{margin-bottom:0}[data-expand-index] [data-separator-wrapper]{grid-template-columns:32px auto;display:grid}[data-expand-index] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:32px 32px auto}[data-expand-button],[data-separator-content]{background-color:var(--diffs-bg-separator);flex:none;align-items:center;display:flex}[data-expand-index] [data-separator-content]:hover{cursor:pointer;text-decoration:underline}[data-expand-button]{cursor:pointer;min-width:32px;color:var(--diffs-fg-number);border-right:2px solid var(--diffs-bg);flex-shrink:0;justify-content:center;align-self:stretch}[data-expand-button]:hover{color:var(--diffs-fg)}[data-expand-button][data-expand-all-button]{display:none}[data-expand-down] [data-icon]{transform:scaleY(-1)}[data-separator-content]{height:100%;color:var(--diffs-fg-number);flex:auto;justify-content:flex-start;padding:0 1ch;overflow:hidden}:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-content]{-webkit-user-select:none;user-select:none;height:100%;overflow:clip}[data-unmodified-lines]{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}@supports (width:1cqi){[data-unified] [data-separator=line-info] [data-separator-wrapper]{padding-inline:var(--diffs-gap-inline,var(--diffs-gap-fallback));width:100cqi}:is([data-unified] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content]{border-radius:6px}[data-unified] [data-separator=line-info][data-expand-index] [data-separator-wrapper] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-gutter] [data-separator=line-info] [data-separator-wrapper]{padding-left:var(--diffs-gap-inline,var(--diffs-gap-fallback))}[data-gutter] [data-separator=line-info] [data-separator-content]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-gutter] [data-separator=line-info][data-expand-index] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-additions] [data-content] [data-separator=line-info]{background-color:var(--diffs-bg)}:is([data-additions] [data-content] [data-separator=line-info]) [data-separator-wrapper]{display:none}[data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);border-top-right-radius:6px;border-bottom-right-radius:6px;height:100%;display:block}:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}[data-overflow=scroll] [data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{width:calc(100cqi - var(--diffs-gap-inline,var(--diffs-gap-fallback)))}[data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;margin-right:var(--diffs-gap-inline,var(--diffs-gap-fallback));border-top-right-radius:6px;border-bottom-right-radius:6px;display:block}:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}@media (pointer:fine){[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:unset}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:6px;border-top-left-radius:unset}}}@media (pointer:coarse){[data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px 34px auto}:is([data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]) [data-separator-content]{grid-column:unset;grid-row:unset}@supports (width:1cqi){:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up],[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:unset;border-top-left-radius:unset}}}@media (pointer:fine){[data-separator-wrapper][data-separator-multi-button]{grid-template-rows:50% 50%;display:grid}[data-separator-wrapper][data-separator-multi-button] [data-separator-content]{grid-area:1/2/-1;min-width:min-content}[data-separator-wrapper][data-separator-multi-button] [data-expand-button]{grid-column:1}[data-separator=line-info] [data-separator-wrapper],[data-separator=line-info] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px auto}[data-separator=line-info-basic][data-expand-index] [data-separator-wrapper]{grid-template-columns:100% auto}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-up]{border-bottom:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-down]{border-top:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}}[data-additions] [data-gutter] [data-separator-wrapper],[data-additions] [data-separator=line-info-basic] [data-separator-wrapper],[data-content] [data-separator-wrapper]{display:none}[data-line-annotation]{min-height:var(--diffs-annotation-min-height,0);z-index:2}[data-merge-conflict-actions]{z-index:2}[data-separator=custom]{grid-template-columns:subgrid;display:grid}[data-line],[data-column-number],[data-no-newline]{padding-inline:1ch;position:relative}[data-indicators=classic] [data-line]{padding-inline-start:2ch}:is([data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion]),[data-line]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion])):before{-webkit-user-select:none;user-select:none;width:1ch;height:1lh;display:inline-block;position:absolute;top:0;left:0}:is([data-line]:is([data-indicators=classic] [data-line-type=change-addition]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition])):before{content:"+";color:var(--diffs-addition-base)}:is([data-line]:is([data-indicators=classic] [data-line-type=change-deletion]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-deletion])):before{content:"-";color:var(--diffs-deletion-base)}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion],[data-indicators=bars] [data-line-type=change-addition]):before{content:"";-webkit-user-select:none;user-select:none;contain:strict;width:4px;height:100%;display:block;position:absolute;top:0;left:0}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion]):before{background-image:linear-gradient(0deg, var(--diffs-bg-deletion) 50%, var(--diffs-deletion-base) 50%);background-repeat:repeat;background-size:2px 2px;background-size:calc(1lh/round(1lh / 2px)) calc(1lh/round(1lh / 2px))}[data-column-number]:is([data-indicators=bars] [data-line-type=change-addition]):before{background-color:var(--diffs-addition-base)}[data-overflow=wrap] [data-line],[data-overflow=wrap] [data-annotation-content]{white-space:pre-wrap;word-break:break-word}[data-overflow=scroll] [data-line]{white-space:pre;min-height:1lh}[data-column-number]{box-sizing:content-box;text-align:right;-webkit-user-select:none;user-select:none;color:var(--diffs-fg-number);padding-left:2ch}[data-line-number-content]{min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));z-index:1;display:inline-block;position:relative}[data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]{min-width:4px;padding:0}:is([data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]):before{min-width:0}[data-disable-line-numbers] [data-line-number-content]{display:none}[data-disable-line-numbers] [data-gutter-utility-slot]{right:unset;justify-content:flex-start;left:0}[data-disable-line-numbers][data-indicators=bars] [data-gutter-utility-slot]{left:6px}[data-file][data-disable-line-numbers] [data-gutter-buffer],[data-file][data-disable-line-numbers] [data-column-number]{border-right:0;min-width:0}[data-diff-span]{-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:3px}[data-line-type=change-addition] [data-diff-span]{background-color:var(--diffs-bg-addition-emphasis)}[data-line-type=change-deletion] [data-diff-span]{background-color:var(--diffs-bg-deletion-emphasis)}[data-merge-conflict=marker-start],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator],[data-merge-conflict=marker-end]{color:var(--diffs-fg);padding-left:1ch}[data-merge-conflict=marker-start],[data-merge-conflict=marker-end]{align-items:center;display:flex}:is([data-merge-conflict=marker-start],[data-merge-conflict=marker-end]):after{color:var(--diffs-fg-conflict-marker);font-size:.75rem;font-style:normal;line-height:1.25rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));padding-left:1ch}[data-merge-conflict=marker-start]:after{content:"(Current Change)"}[data-merge-conflict=marker-end]:after{content:"(Incoming Change)"}[data-merge-conflict-actions-content]{min-height:1.75rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));color:var(--diffs-fg);align-items:center;gap:.25rem;padding-inline:.5rem;font-size:.75rem;line-height:1.2;display:flex}[data-merge-conflict-action]{appearance:none;color:var(--diffs-fg-number);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-style:normal}[data-merge-conflict-action]:hover{color:var(--diffs-fg)}[data-merge-conflict-action=current]:hover{color:var(--diffs-addition-base)}[data-merge-conflict-action=incoming]:hover{color:var(--diffs-modified-base)}[data-merge-conflict-action-separator]{color:var(--diffs-fg-number);opacity:.6;-webkit-user-select:none;user-select:none}[data-diffs-header=default]{background-color:var(--diffs-bg);justify-content:space-between;align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));min-height:calc(1lh + var(--diffs-gap-block,var(--diffs-gap-fallback))*3);z-index:2;flex-direction:row;padding-inline:16px;display:flex;position:relative;top:0}[data-header-content]{align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));white-space:nowrap;flex-direction:row;min-width:0;display:flex}[data-header-content] [data-prev-name],[data-header-content] [data-title]{text-overflow:ellipsis;white-space:nowrap;direction:rtl;min-width:0;overflow:hidden}[data-prev-name]{opacity:.7}[data-rename-icon]{fill:currentColor;flex-grow:0;flex-shrink:0}[data-diffs-header=default] [data-metadata]{white-space:nowrap;align-items:center;gap:1ch;display:flex}[data-diffs-header=default] [data-additions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-addition-base)}[data-diffs-header=default] [data-deletions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-deletion-base)}[data-change-icon]{fill:currentColor;flex-shrink:0}[data-change-icon=change],[data-change-icon=rename-pure],[data-change-icon=rename-changed]{color:var(--diffs-modified-base)}[data-change-icon=new]{color:var(--diffs-addition-base)}[data-change-icon=deleted]{color:var(--diffs-deletion-base)}[data-change-icon=file]{opacity:.6}[data-annotation-content]{z-index:2;isolation:isolate;align-self:flex-start;min-width:0;display:flow-root;position:relative}[data-overflow=scroll] [data-annotation-content],[data-overflow=scroll] [data-merge-conflict-actions-content]{width:var(--diffs-column-content-width,auto);left:var(--diffs-column-number-width,0);position:sticky}[data-annotation-slot]{text-wrap-mode:wrap;word-break:normal;white-space-collapse:collapse}[data-gutter-utility-slot]{touch-action:none;justify-content:flex-end;display:flex;position:absolute;top:0;bottom:0;right:0}[data-utility-button]{appearance:none;cursor:pointer;width:1lh;height:1lh;font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);background-color:var(--diffs-modified-base);color:var(--diffs-bg);fill:currentColor;z-index:4;touch-action:none;border:none;border-radius:4px;justify-content:center;align-items:center;margin-right:calc(1ch - 1lh);padding:0;display:flex;position:relative}[data-utility-button]:before{content:"";display:block;position:absolute;inset:0 0 0 -4px}[data-decoration-bar-stack]{pointer-events:none;isolation:isolate;z-index:1;background-color:var(--diffs-decoration-bar-color,transparent);box-sizing:content-box;border-left:2px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg);width:6px;position:absolute;top:0;bottom:0;right:-2px}[data-decoration-bar-depth="1"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 20%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="2"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 45%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="3"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 65%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-start] [data-decoration-bar-stack]{border-top-left-radius:5px;border-top-right-radius:5px}[data-decoration-bar-end] [data-decoration-bar-stack]{z-index:3;border-bottom-right-radius:5px;border-bottom-left-radius:5px}[data-placeholder]{contain:strict}[data-error-wrapper]{padding:var(--diffs-gap-block,var(--diffs-gap-fallback)) var(--diffs-gap-inline,var(--diffs-gap-fallback));scrollbar-width:none;max-height:400px;overflow:auto}[data-error-wrapper] [data-error-message]{color:var(--diffs-deletion-base);font-size:18px;font-weight:700}[data-error-wrapper] [data-error-stack]{color:var(--diffs-fg-number)}}@layer theme,rendered,unsafe;
|
|
@layer theme {
|
|
|
|
}</style><style data-theme-css="">@layer base, theme, rendered, unsafe;
|
|
@layer rendered {
|
|
:host {
|
|
--diffs-scrollbar-gutter-measured: var(--diffs-scrollbar-gutter-fallback);
|
|
--diffs-dark:#fafafa;--diffs-dark-bg:#0a0a0a;--diffs-dark-addition-color:#07c480;--diffs-dark-deletion-color:#ff2e3f;--diffs-dark-modified-color:#009fff;--diffs-light:#0a0a0a;--diffs-light-bg:#ffffff;--diffs-light-addition-color:#18a46c;--diffs-light-deletion-color:#d52c36;--diffs-light-modified-color:#009fff;
|
|
}
|
|
}</style><div data-diffs-header="default" data-change-type="change"><div data-header-content=""><slot name="header-prefix"></slot><svg width="16" height="16" viewBox="0 0 16 16" data-change-icon="change"><use href="#diffs-icon-symbol-modified"></use></svg><div data-title=""><bdi>Tests/StreamResolverTests.swift</bdi></div></div><div data-metadata=""><span data-deletions-count="">-1</span><span data-additions-count="">+43</span><slot name="header-metadata"></slot></div></div><pre data-diff="" data-diff-type="split" data-overflow="scroll" data-background="" data-indicators="bars" tabindex="0" style="--diffs-min-number-column-width-default:3ch;" data-dehydrated=""><code data-code="" data-container-size="" data-deletions=""><div data-gutter="" style="grid-row: span 79"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">15 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="16" data-line-index="15,15"><span data-line-number-content="">16</span></div><div data-line-type="context" data-column-number="17" data-line-index="16,16"><span data-line-number-content="">17</span></div><div data-line-type="context" data-column-number="18" data-line-index="17,17"><span data-line-number-content="">18</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="19" data-line-index="19,19"><span data-line-number-content="">19</span></div><div data-line-type="context" data-column-number="20" data-line-index="20,20"><span data-line-number-content="">20</span></div><div data-line-type="context" data-column-number="21" data-line-index="21,21"><span data-line-number-content="">21</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">248 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="270" data-line-index="270,270"><span data-line-number-content="">270</span></div><div data-line-type="context" data-column-number="271" data-line-index="271,271"><span data-line-number-content="">271</span></div><div data-line-type="context" data-column-number="272" data-line-index="272,272"><span data-line-number-content="">272</span></div><div data-line-type="change-deletion" data-column-number="273" data-line-index="273,273"><span data-line-number-content="">273</span></div><div data-line-type="context" data-column-number="274" data-line-index="275,274"><span data-line-number-content="">274</span></div><div data-line-type="context" data-column-number="275" data-line-index="276,275"><span data-line-number-content="">275</span></div><div data-line-type="context" data-column-number="276" data-line-index="277,276"><span data-line-number-content="">276</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">160 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="437" data-line-index="438,437"><span data-line-number-content="">437</span></div><div data-line-type="context" data-column-number="438" data-line-index="439,438"><span data-line-number-content="">438</span></div><div data-line-type="context" data-column-number="439" data-line-index="440,439"><span data-line-number-content="">439</span></div><div data-gutter-buffer="buffer" data-buffer-size="38" style="grid-row: span 38;min-height:calc(38 * 1lh);"></div><div data-line-type="context" data-column-number="440" data-line-index="479,478"><span data-line-number-content="">440</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="441" data-line-index="481,480"><span data-line-number-content="">441</span></div><div data-line-type="context" data-column-number="442" data-line-index="482,481"><span data-line-number-content="">442</span></div><div data-line-type="context" data-column-number="443" data-line-index="483,482"><span data-line-number-content="">443</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">14 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="458" data-line-index="498,497"><span data-line-number-content="">458</span></div><div data-line-type="context" data-column-number="459" data-line-index="499,498"><span data-line-number-content="">459</span></div><div data-line-type="context" data-column-number="460" data-line-index="500,499"><span data-line-number-content="">460</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="461" data-line-index="502,501"><span data-line-number-content="">461</span></div><div data-line-type="context" data-column-number="462" data-line-index="503,502"><span data-line-number-content="">462</span></div><div data-line-type="context" data-column-number="463" data-line-index="504,503"><span data-line-number-content="">463</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="476" data-line-index="517,516"><span data-line-number-content="">476</span></div><div data-line-type="context" data-column-number="477" data-line-index="518,517"><span data-line-number-content="">477</span></div><div data-line-type="context" data-column-number="478" data-line-index="519,518"><span data-line-number-content="">478</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="479" data-line-index="521,520"><span data-line-number-content="">479</span></div><div data-line-type="context" data-column-number="480" data-line-index="522,521"><span data-line-number-content="">480</span></div><div data-line-type="context" data-column-number="481" data-line-index="523,522"><span data-line-number-content="">481</span></div></div><div data-content="" style="grid-row: span 79"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">15 unmodified lines</span></div></div></div><div data-line="16" data-alt-line="16" data-line-type="context" data-line-index="15,15"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testStremioSubtitleDownloadURLParsing</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="17" data-alt-line="17" data-line-type="context" data-line-index="16,16"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesV3DownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="18" data-alt-line="18" data-line-type="context" data-line-index="17,17"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesNestedDownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="19" data-alt-line="20" data-line-type="context" data-line-index="19,19"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="20" data-alt-line="21" data-line-type="context" data-line-index="20,20"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRedirectToDirectSubtitle</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="21" data-alt-line="22" data-line-type="context" data-line-index="21,21"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRejectsNonSubtitleAPIResponse</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">248 unmodified lines</span></div></div></div><div data-line="270" data-alt-line="271" data-line-type="context" data-line-index="270,270"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"https://subs5.strem.io/en/download/subencoding-stremio-utf8/src-api/file/1952341941"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="271" data-alt-line="272" data-line-type="context" data-line-index="271,271"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">label</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"English"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="272" data-alt-line="273" data-line-type="context" data-line-index="272,272"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"eng"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="273" data-line-type="change-deletion" data-line-index="273,273"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assert</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">SubtitleResolver.isDirectSubtitleFile</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"Expected Stremio subtitle downloads to be </span><span data-diff-span=""><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">attachable without another resolver hop</span></span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="274" data-alt-line="275" data-line-type="context" data-line-index="275,274"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="275" data-alt-line="276" data-line-type="context" data-line-index="276,275">
|
|
</div><div data-line="276" data-alt-line="277" data-line-type="context" data-line-index="277,276"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testContentRangeParsing</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">160 unmodified lines</span></div></div></div><div data-line="437" data-alt-line="438" data-line-type="context" data-line-index="438,437"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"eng"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="438" data-alt-line="439" data-line-type="context" data-line-index="439,438"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="439" data-alt-line="440" data-line-type="context" data-line-index="440,439">
|
|
</div><div data-content-buffer="" data-buffer-size="38" style="grid-row: span 38;min-height:calc(38 * 1lh)"></div><div data-line="440" data-alt-line="479" data-line-type="context" data-line-index="479,478"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="441" data-alt-line="481" data-line-type="context" data-line-index="481,480"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="442" data-alt-line="482" data-line-type="context" data-line-index="482,481"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://api.opensubtitles.com/api/v1/download/123"</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="443" data-alt-line="483" data-line-type="context" data-line-index="483,482"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">14 unmodified lines</span></div></div></div><div data-line="458" data-alt-line="498" data-line-type="context" data-line-index="498,497"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="459" data-alt-line="499" data-line-type="context" data-line-index="499,498">
|
|
</div><div data-line="460" data-alt-line="500" data-line-type="context" data-line-index="500,499"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRedirectToDirectSubtitle</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="461" data-alt-line="502" data-line-type="context" data-line-index="502,501"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="462" data-alt-line="503" data-line-type="context" data-line-index="503,502"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://api.opensubtitles.com/api/v1/download/redirect"</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="463" data-alt-line="504" data-line-type="context" data-line-index="504,503"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line="476" data-alt-line="517" data-line-type="context" data-line-index="517,516"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="477" data-alt-line="518" data-line-type="context" data-line-index="518,517">
|
|
</div><div data-line="478" data-alt-line="519" data-line-type="context" data-line-index="519,518"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRejectsNonSubtitleAPIResponse</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="479" data-alt-line="521" data-line-type="context" data-line-index="521,520"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="480" data-alt-line="522" data-line-type="context" data-line-index="522,521"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://api.opensubtitles.com/api/v1/download/not-found"</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="481" data-alt-line="523" data-line-type="context" data-line-index="523,522"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div></div></code><code data-code="" data-container-size="" data-additions=""><div data-gutter="" style="grid-row: span 79"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">15 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="16" data-line-index="15,15"><span data-line-number-content="">16</span></div><div data-line-type="context" data-column-number="17" data-line-index="16,16"><span data-line-number-content="">17</span></div><div data-line-type="context" data-column-number="18" data-line-index="17,17"><span data-line-number-content="">18</span></div><div data-line-type="change-addition" data-column-number="19" data-line-index="18,18"><span data-line-number-content="">19</span></div><div data-line-type="context" data-column-number="20" data-line-index="19,19"><span data-line-number-content="">20</span></div><div data-line-type="context" data-column-number="21" data-line-index="20,20"><span data-line-number-content="">21</span></div><div data-line-type="context" data-column-number="22" data-line-index="21,21"><span data-line-number-content="">22</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">248 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="271" data-line-index="270,270"><span data-line-number-content="">271</span></div><div data-line-type="context" data-column-number="272" data-line-index="271,271"><span data-line-number-content="">272</span></div><div data-line-type="context" data-column-number="273" data-line-index="272,272"><span data-line-number-content="">273</span></div><div data-line-type="change-addition" data-column-number="274" data-line-index="274,273"><span data-line-number-content="">274</span></div><div data-line-type="context" data-column-number="275" data-line-index="275,274"><span data-line-number-content="">275</span></div><div data-line-type="context" data-column-number="276" data-line-index="276,275"><span data-line-number-content="">276</span></div><div data-line-type="context" data-column-number="277" data-line-index="277,276"><span data-line-number-content="">277</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">160 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="438" data-line-index="438,437"><span data-line-number-content="">438</span></div><div data-line-type="context" data-column-number="439" data-line-index="439,438"><span data-line-number-content="">439</span></div><div data-line-type="context" data-column-number="440" data-line-index="440,439"><span data-line-number-content="">440</span></div><div data-line-type="change-addition" data-column-number="441" data-line-index="441,440"><span data-line-number-content="">441</span></div><div data-line-type="change-addition" data-column-number="442" data-line-index="442,441"><span data-line-number-content="">442</span></div><div data-line-type="change-addition" data-column-number="443" data-line-index="443,442"><span data-line-number-content="">443</span></div><div data-line-type="change-addition" data-column-number="444" data-line-index="444,443"><span data-line-number-content="">444</span></div><div data-line-type="change-addition" data-column-number="445" data-line-index="445,444"><span data-line-number-content="">445</span></div><div data-line-type="change-addition" data-column-number="446" data-line-index="446,445"><span data-line-number-content="">446</span></div><div data-line-type="change-addition" data-column-number="447" data-line-index="447,446"><span data-line-number-content="">447</span></div><div data-line-type="change-addition" data-column-number="448" data-line-index="448,447"><span data-line-number-content="">448</span></div><div data-line-type="change-addition" data-column-number="449" data-line-index="449,448"><span data-line-number-content="">449</span></div><div data-line-type="change-addition" data-column-number="450" data-line-index="450,449"><span data-line-number-content="">450</span></div><div data-line-type="change-addition" data-column-number="451" data-line-index="451,450"><span data-line-number-content="">451</span></div><div data-line-type="change-addition" data-column-number="452" data-line-index="452,451"><span data-line-number-content="">452</span></div><div data-line-type="change-addition" data-column-number="453" data-line-index="453,452"><span data-line-number-content="">453</span></div><div data-line-type="change-addition" data-column-number="454" data-line-index="454,453"><span data-line-number-content="">454</span></div><div data-line-type="change-addition" data-column-number="455" data-line-index="455,454"><span data-line-number-content="">455</span></div><div data-line-type="change-addition" data-column-number="456" data-line-index="456,455"><span data-line-number-content="">456</span></div><div data-line-type="change-addition" data-column-number="457" data-line-index="457,456"><span data-line-number-content="">457</span></div><div data-line-type="change-addition" data-column-number="458" data-line-index="458,457"><span data-line-number-content="">458</span></div><div data-line-type="change-addition" data-column-number="459" data-line-index="459,458"><span data-line-number-content="">459</span></div><div data-line-type="change-addition" data-column-number="460" data-line-index="460,459"><span data-line-number-content="">460</span></div><div data-line-type="change-addition" data-column-number="461" data-line-index="461,460"><span data-line-number-content="">461</span></div><div data-line-type="change-addition" data-column-number="462" data-line-index="462,461"><span data-line-number-content="">462</span></div><div data-line-type="change-addition" data-column-number="463" data-line-index="463,462"><span data-line-number-content="">463</span></div><div data-line-type="change-addition" data-column-number="464" data-line-index="464,463"><span data-line-number-content="">464</span></div><div data-line-type="change-addition" data-column-number="465" data-line-index="465,464"><span data-line-number-content="">465</span></div><div data-line-type="change-addition" data-column-number="466" data-line-index="466,465"><span data-line-number-content="">466</span></div><div data-line-type="change-addition" data-column-number="467" data-line-index="467,466"><span data-line-number-content="">467</span></div><div data-line-type="change-addition" data-column-number="468" data-line-index="468,467"><span data-line-number-content="">468</span></div><div data-line-type="change-addition" data-column-number="469" data-line-index="469,468"><span data-line-number-content="">469</span></div><div data-line-type="change-addition" data-column-number="470" data-line-index="470,469"><span data-line-number-content="">470</span></div><div data-line-type="change-addition" data-column-number="471" data-line-index="471,470"><span data-line-number-content="">471</span></div><div data-line-type="change-addition" data-column-number="472" data-line-index="472,471"><span data-line-number-content="">472</span></div><div data-line-type="change-addition" data-column-number="473" data-line-index="473,472"><span data-line-number-content="">473</span></div><div data-line-type="change-addition" data-column-number="474" data-line-index="474,473"><span data-line-number-content="">474</span></div><div data-line-type="change-addition" data-column-number="475" data-line-index="475,474"><span data-line-number-content="">475</span></div><div data-line-type="change-addition" data-column-number="476" data-line-index="476,475"><span data-line-number-content="">476</span></div><div data-line-type="change-addition" data-column-number="477" data-line-index="477,476"><span data-line-number-content="">477</span></div><div data-line-type="change-addition" data-column-number="478" data-line-index="478,477"><span data-line-number-content="">478</span></div><div data-line-type="context" data-column-number="479" data-line-index="479,478"><span data-line-number-content="">479</span></div><div data-line-type="change-addition" data-column-number="480" data-line-index="480,479"><span data-line-number-content="">480</span></div><div data-line-type="context" data-column-number="481" data-line-index="481,480"><span data-line-number-content="">481</span></div><div data-line-type="context" data-column-number="482" data-line-index="482,481"><span data-line-number-content="">482</span></div><div data-line-type="context" data-column-number="483" data-line-index="483,482"><span data-line-number-content="">483</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">14 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="498" data-line-index="498,497"><span data-line-number-content="">498</span></div><div data-line-type="context" data-column-number="499" data-line-index="499,498"><span data-line-number-content="">499</span></div><div data-line-type="context" data-column-number="500" data-line-index="500,499"><span data-line-number-content="">500</span></div><div data-line-type="change-addition" data-column-number="501" data-line-index="501,500"><span data-line-number-content="">501</span></div><div data-line-type="context" data-column-number="502" data-line-index="502,501"><span data-line-number-content="">502</span></div><div data-line-type="context" data-column-number="503" data-line-index="503,502"><span data-line-number-content="">503</span></div><div data-line-type="context" data-column-number="504" data-line-index="504,503"><span data-line-number-content="">504</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="517" data-line-index="517,516"><span data-line-number-content="">517</span></div><div data-line-type="context" data-column-number="518" data-line-index="518,517"><span data-line-number-content="">518</span></div><div data-line-type="context" data-column-number="519" data-line-index="519,518"><span data-line-number-content="">519</span></div><div data-line-type="change-addition" data-column-number="520" data-line-index="520,519"><span data-line-number-content="">520</span></div><div data-line-type="context" data-column-number="521" data-line-index="521,520"><span data-line-number-content="">521</span></div><div data-line-type="context" data-column-number="522" data-line-index="522,521"><span data-line-number-content="">522</span></div><div data-line-type="context" data-column-number="523" data-line-index="523,522"><span data-line-number-content="">523</span></div></div><div data-content="" style="grid-row: span 79"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">15 unmodified lines</span></div></div></div><div data-line="16" data-alt-line="16" data-line-type="context" data-line-index="15,15"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testStremioSubtitleDownloadURLParsing</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="17" data-alt-line="17" data-line-type="context" data-line-index="16,16"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesV3DownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="18" data-alt-line="18" data-line-type="context" data-line-index="17,17"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesNestedDownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="19" data-line-type="change-addition" data-line-index="18,18"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverCachesStremioDownloadBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="20" data-alt-line="19" data-line-type="context" data-line-index="19,19"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="21" data-alt-line="20" data-line-type="context" data-line-index="20,20"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRedirectToDirectSubtitle</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="22" data-alt-line="21" data-line-type="context" data-line-index="21,21"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRejectsNonSubtitleAPIResponse</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">248 unmodified lines</span></div></div></div><div data-line="271" data-alt-line="270" data-line-type="context" data-line-index="270,270"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"https://subs5.strem.io/en/download/subencoding-stremio-utf8/src-api/file/1952341941"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="272" data-alt-line="271" data-line-type="context" data-line-index="271,271"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">label</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"English"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="273" data-alt-line="272" data-line-type="context" data-line-index="272,272"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"eng"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="274" data-line-type="change-addition" data-line-index="274,273"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assert</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span data-diff-span=""><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">!</span></span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">SubtitleResolver.isDirectSubtitleFile</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidates</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">[</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">0</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">]</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"Expected Stremio subtitle downloads to be </span><span data-diff-span=""><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">resolved before VLC attachment</span></span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="275" data-alt-line="274" data-line-type="context" data-line-index="275,274"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="276" data-alt-line="275" data-line-type="context" data-line-index="276,275">
|
|
</div><div data-line="277" data-alt-line="276" data-line-type="context" data-line-index="277,276"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testContentRangeParsing</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">160 unmodified lines</span></div></div></div><div data-line="438" data-alt-line="437" data-line-type="context" data-line-index="438,437"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"eng"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="439" data-alt-line="438" data-line-type="context" data-line-index="439,438"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="440" data-alt-line="439" data-line-type="context" data-line-index="440,439">
|
|
</div><div data-line="441" data-line-type="change-addition" data-line-index="441,440"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverCachesStremioDownloadBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="442" data-line-type="change-addition" data-line-index="442,441"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> sourceURL </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://subs5.strem.io/en/download/subencoding-stremio-utf8/src-api/file/1952341941"</span></div><div data-line="443" data-line-type="change-addition" data-line-index="443,442"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> subtitleBody </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> """</span></div><div data-line="444" data-line-type="change-addition" data-line-index="444,443"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> 1</span></div><div data-line="445" data-line-type="change-addition" data-line-index="445,444"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> 00:00:01,000 --> 00:00:02,000</span></div><div data-line="446" data-line-type="change-addition" data-line-index="446,445"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> Hello from Stremio</span></div><div data-line="447" data-line-type="change-addition" data-line-index="447,446">
|
|
</div><div data-line="448" data-line-type="change-addition" data-line-index="448,447"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> """</span></div><div data-line="449" data-line-type="change-addition" data-line-index="449,448"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handler</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="450" data-line-type="change-addition" data-line-index="450,449"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="451" data-line-type="change-addition" data-line-index="451,450"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> sourceURL</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="452" data-line-type="change-addition" data-line-index="452,451"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="453" data-line-type="change-addition" data-line-index="453,452"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">string</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> sourceURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)!</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="454" data-line-type="change-addition" data-line-index="454,453"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> subtitleBody.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">using</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)!</span></div><div data-line="455" data-line-type="change-addition" data-line-index="455,454"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> )</span></div><div data-line="456" data-line-type="change-addition" data-line-index="456,455"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> ]</span></div><div data-line="457" data-line-type="change-addition" data-line-index="457,456">
|
|
</div><div data-line="458" data-line-type="change-addition" data-line-index="458,457"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cacheDirectory </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> FileManager.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">default</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">temporaryDirectory</span></div><div data-line="459" data-line-type="change-addition" data-line-index="459,458"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">appendingPathComponent</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"DreamioSubtitleResolverTests-</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">UUID</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">uuidString</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, isDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> true</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="460" data-line-type="change-addition" data-line-index="460,459"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> defer</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="461" data-line-type="change-addition" data-line-index="461,460"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> try</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> FileManager.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">default</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeItem</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">at</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="462" data-line-type="change-addition" data-line-index="462,461"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="463" data-line-type="change-addition" data-line-index="463,462">
|
|
</div><div data-line="464" data-line-type="change-addition" data-line-index="464,463"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> resolver </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> SubtitleResolver</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">session</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> mockSession</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, cacheDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="465" data-line-type="change-addition" data-line-index="465,464"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> candidate </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> resolver.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">resolve</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="466" data-line-type="change-addition" data-line-index="466,465"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">string</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> sourceURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)!</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">,</span></div><div data-line="467" data-line-type="change-addition" data-line-index="467,466"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> label</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "English"</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">,</span></div><div data-line="468" data-line-type="change-addition" data-line-index="468,467"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "eng"</span></div><div data-line="469" data-line-type="change-addition" data-line-index="469,468"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ))</span></div><div data-line="470" data-line-type="change-addition" data-line-index="470,469">
|
|
</div><div data-line="471" data-line-type="change-addition" data-line-index="471,470"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">isFileURL</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">true</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="472" data-line-type="change-addition" data-line-index="472,471"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">pathExtension</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"srt"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="473" data-line-type="change-addition" data-line-index="473,472"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">label</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"English"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="474" data-line-type="change-addition" data-line-index="474,473"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">language</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"eng"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="475" data-line-type="change-addition" data-line-index="475,474"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cachedBody </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> try</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contentsOf</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">!</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url, encoding</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="476" data-line-type="change-addition" data-line-index="476,475"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">cachedBody, subtitleBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="477" data-line-type="change-addition" data-line-index="477,476"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="478" data-line-type="change-addition" data-line-index="478,477">
|
|
</div><div data-line="479" data-alt-line="440" data-line-type="context" data-line-index="479,478"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="480" data-line-type="change-addition" data-line-index="480,479"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handler</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="481" data-alt-line="441" data-line-type="context" data-line-index="481,480"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="482" data-alt-line="442" data-line-type="context" data-line-index="482,481"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://api.opensubtitles.com/api/v1/download/123"</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="483" data-alt-line="443" data-line-type="context" data-line-index="483,482"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">14 unmodified lines</span></div></div></div><div data-line="498" data-alt-line="458" data-line-type="context" data-line-index="498,497"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="499" data-alt-line="459" data-line-type="context" data-line-index="499,498">
|
|
</div><div data-line="500" data-alt-line="460" data-line-type="context" data-line-index="500,499"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRedirectToDirectSubtitle</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="501" data-line-type="change-addition" data-line-index="501,500"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handler</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="502" data-alt-line="461" data-line-type="context" data-line-index="502,501"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="503" data-alt-line="462" data-line-type="context" data-line-index="503,502"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://api.opensubtitles.com/api/v1/download/redirect"</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="504" data-alt-line="463" data-line-type="context" data-line-index="504,503"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">12 unmodified lines</span></div></div></div><div data-line="517" data-alt-line="476" data-line-type="context" data-line-index="517,516"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="518" data-alt-line="477" data-line-type="context" data-line-index="518,517">
|
|
</div><div data-line="519" data-alt-line="478" data-line-type="context" data-line-index="519,518"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRejectsNonSubtitleAPIResponse</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="520" data-line-type="change-addition" data-line-index="520,519"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handler</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="521" data-alt-line="479" data-line-type="context" data-line-index="521,520"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="522" data-alt-line="480" data-line-type="context" data-line-index="522,521"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://api.opensubtitles.com/api/v1/download/not-found"</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="523" data-alt-line="481" data-line-type="context" data-line-index="523,522"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div></div></code></pre></div>
|
|
<h3>Related issues or PRs</h3>
|
|
<p>Related Beads issue: <code>dreamio-771</code>.</p>
|
|
</section>
|
|
|
|
|
|
<section>
|
|
<h2>New Changes as of May 25, 2026 at 7:00 PM EDT</h2>
|
|
<h3>Summary of changes</h3>
|
|
<p>Device logs showed Stremio subtitle downloads returning text, but the strict resolver detector rejected every body as <code>text-without-direct-subtitle</code>. The resolver now accepts plausible plain subtitle text from Stremio download endpoints and caches it as a local <code>.srt</code> file.</p>
|
|
<h3>Why this change was made</h3>
|
|
<p>The previous cache step only recognized classic indexed SRT, WebVTT, and ASS signatures. The live Stremio payloads appear to be subtitle-like text without matching that narrow signature, so they never reached VLC. This update keeps strict handling for general URLs while applying a provider-specific fallback for Stremio subtitle downloads.</p>
|
|
<h3>Code diffs</h3>
|
|
<div class="diff-shell"><svg data-icon-sprite aria-hidden="true" width="0" height="0">
|
|
<symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
|
|
<path d="M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-brand-github" viewBox="0 0 16 16">
|
|
<path d="M8 0c4.42 0 8 3.58 8 8a8.01 8.01 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27s-1.36.09-2 .27c-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevron" viewBox="0 0 16 16">
|
|
<path d="M1.47 4.47a.75.75 0 0 1 1.06 0L8 9.94l5.47-5.47a.75.75 0 1 1 1.06 1.06l-6 6a.75.75 0 0 1-1.06 0l-6-6a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevrons-narrow" viewBox="0 0 10 16">
|
|
<path d="M4.47 2.22a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1-1.06 1.06L5 3.81 2.28 6.53a.75.75 0 0 1-1.06-1.06zM1.22 9.47a.75.75 0 0 1 1.06 0L5 12.19l2.72-2.72a.75.75 0 0 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0l-3.25-3.25a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-split" viewBox="0 0 16 16">
|
|
<path d="M14 0H8.5v16H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2m-1.5 6.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 1 0"/><path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5.5V0zm.5 7.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1" opacity=".3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-unified" viewBox="0 0 16 16">
|
|
<path fill-rule="evenodd" d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8.5h16zm-8-4a.5.5 0 0 0-.5.5v1h-1a.5.5 0 0 0 0 1h1v1a.5.5 0 0 0 1 0v-1h1a.5.5 0 0 0 0-1h-1v-1A.5.5 0 0 0 8 10" clip-rule="evenodd"/><path fill-rule="evenodd" d="M14 0a2 2 0 0 1 2 2v5.5H0V2a2 2 0 0 1 2-2zM6.5 3.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z" clip-rule="evenodd" opacity=".4"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand" viewBox="0 0 16 16">
|
|
<path d="M3.47 5.47a.75.75 0 0 1 1.06 0L8 8.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand-all" viewBox="0 0 16 16">
|
|
<path d="M11.47 9.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06L8 12.94zM7.526 1.418a.75.75 0 0 1 1.004.052l4 4a.75.75 0 1 1-1.06 1.06L8 3.06 4.53 6.53a.75.75 0 1 1-1.06-1.06l4-4z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-file-code" viewBox="0 0 16 16">
|
|
<path d="M10.75 0c.199 0 .39.08.53.22l3.5 3.5c.14.14.22.331.22.53v9A2.75 2.75 0 0 1 12.25 16h-8.5A2.75 2.75 0 0 1 1 13.25V2.75A2.75 2.75 0 0 1 3.75 0zm-7 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h8.5c.69 0 1.25-.56 1.25-1.25V5h-1.25A2.25 2.25 0 0 1 10 2.75V1.5z"/><path d="M7.248 6.19a.75.75 0 0 1 .063 1.058L5.753 9l1.558 1.752a.75.75 0 0 1-1.122.996l-2-2.25a.75.75 0 0 1 0-.996l2-2.25a.75.75 0 0 1 1.06-.063M8.69 7.248a.75.75 0 1 1 1.12-.996l2 2.25a.75.75 0 0 1 0 .996l-2 2.25a.75.75 0 1 1-1.12-.996L10.245 9z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-plus" viewBox="0 0 16 16">
|
|
<path d="M8 3a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 8 3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-added" viewBox="0 0 16 16">
|
|
<path d="M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-deleted" viewBox="0 0 16 16">
|
|
<path d="M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-diffstat" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ignored" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m11.53-2.47a.75.75 0 0 0-1.06-1.06l-6 6a.75.75 0 1 0 1.06 1.06z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-modified" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-moved" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.495 4.695a.75.75 0 0 0-.05 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.05 1.06l2.044 2.248-1.796 1.995a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ref" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"/>
|
|
</symbol>
|
|
</svg><style data-core-css="">@layer base, theme, rendered, unsafe;
|
|
@layer base,theme,rendered,unsafe;@layer base{:host{--diffs-font-fallback:"SF Mono", Monaco, Consolas, "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;--diffs-header-font-fallback:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;--diffs-mixer:light-dark(#000,#fff);--diffs-gap-fallback:8px;--diffs-scrollbar-gutter-fallback:6px;--diffs-scrollbar-gutter:var(--diffs-scrollbar-gutter-override,var(--diffs-scrollbar-gutter-measured,var(--diffs-scrollbar-gutter-fallback)));--diffs-added-light:#0dbe4e;--diffs-added-dark:#5ecc71;--diffs-modified-light:#009fff;--diffs-modified-dark:#69b1ff;--diffs-deleted-light:#ff2e3f;--diffs-deleted-dark:#ff6762;color-scheme:light dark;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);font-feature-settings:var(--diffs-font-features);--diffs-bg:light-dark(var(--diffs-light-bg,#fff),var(--diffs-dark-bg,#000));--diffs-bg-buffer:var(--diffs-bg-buffer-override,light-dark(color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer))));--diffs-bg-context:var(--diffs-bg-context-override,light-dark(color-mix(in lab, var(--diffs-bg) 98.5%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92.5%, var(--diffs-mixer))));--diffs-bg-context-gutter:var(--diffs-bg-context-gutter-override,light-dark(color-mix(in lab, var(--diffs-bg-context) 90%, var(--diffs-bg)),color-mix(in lab, var(--diffs-bg-context) 45%, var(--diffs-bg))));--diffs-bg-separator:var(--diffs-bg-separator-override,light-dark(color-mix(in lab, var(--diffs-bg) 96%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 85%, var(--diffs-mixer))));--diffs-fg:light-dark(var(--diffs-light,#000),var(--diffs-dark,#fff));--diffs-fg-number:var(--diffs-fg-number-override,light-dark(color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg)),color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg))));--diffs-fg-conflict-marker:var(--diffs-fg-conflict-marker-override,var(--diffs-fg-number));--diffs-deletion-base:var(--diffs-deletion-color-override,light-dark(var(--diffs-light-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-light))),var(--diffs-dark-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-dark)))));--diffs-addition-base:var(--diffs-addition-color-override,light-dark(var(--diffs-light-addition-color,var(--diffs-addition-color,var(--diffs-added-light))),var(--diffs-dark-addition-color,var(--diffs-addition-color,var(--diffs-added-dark)))));--diffs-modified-base:var(--diffs-modified-color-override,light-dark(var(--diffs-light-modified-color,var(--diffs-modified-color,var(--diffs-modified-light))),var(--diffs-dark-modified-color,var(--diffs-modified-color,var(--diffs-modified-dark)))));--diffs-bg-deletion:var(--diffs-bg-deletion-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-deletion-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-deletion-base))));--diffs-bg-deletion-emphasis:var(--diffs-bg-deletion-emphasis-override,light-dark(rgb(from var(--diffs-deletion-base) r g b / .15),rgb(from var(--diffs-deletion-base) r g b / .2)));--diffs-bg-addition:var(--diffs-bg-addition-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-addition-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-addition-base))));--diffs-bg-addition-emphasis:var(--diffs-bg-addition-emphasis-override,light-dark(rgb(from var(--diffs-addition-base) r g b / .15),rgb(from var(--diffs-addition-base) r g b / .2)));--diffs-selection-base:var(--diffs-modified-base);--diffs-selection-number-fg:light-dark(color-mix(in lab, var(--diffs-selection-base) 65%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-selection-base) 75%, var(--diffs-mixer)));background-color:var(--diffs-bg);color:var(--diffs-fg);display:block}pre,code,[data-error-wrapper]{isolation:isolate;font-family:var(--diffs-font-family,var(--diffs-font-fallback));outline:none;margin:0;padding:0;display:block}pre,code{background-color:var(--diffs-bg)}code{contain:content}*,:before,:after{box-sizing:border-box}[data-icon-sprite]{display:none}[data-diffs-header],[data-separator]{font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback))}[data-diffs-header][data-sticky]{z-index:1;background-color:var(--diffs-bg);position:sticky;top:0}[data-file-info]{color:var(--fg);background-color:color-mix(in lab, var(--bg) 98%, var(--fg));border-block:1px solid color-mix(in lab, var(--bg) 95%, var(--fg));padding:10px;font-weight:700}[data-diff],[data-file]{--diffs-grid-number-column-width:minmax(min-content, max-content);--diffs-code-grid:var(--diffs-grid-number-column-width) 1fr}[data-dehydrated]:is([data-diff],[data-file]){--diffs-code-grid:var(--diffs-grid-number-column-width) minmax(0, 1fr)}:is([data-diff],[data-file]):hover [data-code]::-webkit-scrollbar-thumb{background-color:var(--diffs-bg-context)}@supports (-webkit-touch-callout:none){:host{--diffs-scrollbar-gutter-fallback:0px}}[data-line] span{color:light-dark(var(--diffs-token-light,var(--diffs-light)),var(--diffs-token-dark,var(--diffs-dark)));background-color:light-dark(var(--diffs-token-light-bg,inherit),var(--diffs-token-dark-bg,inherit));font-weight:light-dark(var(--diffs-token-light-font-weight,inherit),var(--diffs-token-dark-font-weight,inherit));font-style:light-dark(var(--diffs-token-light-font-style,inherit),var(--diffs-token-dark-font-style,inherit));-webkit-text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit));text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit))}[data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);color:var(--diffs-fg);background-color:var(--diffs-line-bg,var(--diffs-bg))}@media (pointer:fine){:is([data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]):where([data-hovered]){--diffs-computed-hovered-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-selected-line-bg) 97%, var(--diffs-bg-hover-override,var(--diffs-mixer))),color-mix(in lab, var(--diffs-computed-selected-line-bg) 91%, var(--diffs-bg-hover-override,var(--diffs-mixer))));--diffs-line-bg:var(--diffs-computed-hovered-line-bg,inherit)}}[data-decoration-bg]:is([data-line],[data-no-newline]){--mix-deco-light:92%;--mix-deco-dark:85%}[data-decoration-bg][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]){--mix-deco-light:88%;--mix-deco-dark:80%}[data-decoration-bg][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]){--mix-deco-light:85%;--mix-deco-dark:78%}@media (pointer:fine){[data-decoration-bg][data-hovered]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:85%;--mix-deco-dark:85%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:83%;--mix-deco-dark:83%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:81%;--mix-deco-dark:81%}}[data-decoration-bg]:is([data-line],[data-no-newline]){--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) var(--mix-deco-light), var(--diffs-decoration-bg)),color-mix(in lab, var(--diffs-bg) var(--mix-deco-dark), var(--diffs-decoration-bg)));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-line-annotation],[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context);--diffs-computed-decoration-bg:var(--diffs-annotation-bg);--diffs-computed-diff-line-bg:var(--diffs-annotation-bg);--diffs-computed-selected-line-bg:var(--diffs-annotation-bg);--diffs-line-bg:var(--diffs-annotation-bg)}[data-merge-conflict-actions],[data-gutter-buffer=merge-conflict-action],[data-gutter-buffer=merge-conflict-marker-base],[data-gutter-buffer=merge-conflict-marker-separator],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator]{--diffs-computed-decoration-bg:var(--diffs-bg-context);--diffs-computed-diff-line-bg:var(--diffs-bg-context);--diffs-computed-selected-line-bg:var(--diffs-bg-context);--diffs-line-bg:var(--diffs-bg-context)}[data-gutter-buffer=merge-conflict-marker-start],[data-merge-conflict=marker-start]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-gutter-buffer=merge-conflict-marker-end],[data-merge-conflict=marker-end]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-has-merge-conflict] [data-line-annotation],[data-has-merge-conflict] [data-gutter-buffer=annotation]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);--diffs-line-bg:var(--diffs-bg)}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number]{--mix-light:91%;--mix-dark:85%}:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--mix-light:88%;--mix-dark:80%}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--diffs-diff-line-mix-target:var(--diffs-bg)}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-deletion-override,var(--diffs-deletion-base))}@media (pointer:fine){[data-line-type=change-deletion][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:75%}}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-deletion-override,var(--diffs-deletion-base));--diffs-diff-line-mix-target:var(--diffs-bg-deletion-number-override,var(--diffs-deletion-base))}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-addition-override,var(--diffs-addition-base))}@media (pointer:fine){[data-line-type=change-addition][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--diffs-bg-addition-number-override,var(--diffs-addition-base))}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-current-override,var(--diffs-addition-base))}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--conflict-bg-current-number-override,var(--diffs-addition-base))}@media (pointer:fine){[data-merge-conflict=current][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-incoming-override,var(--diffs-modified-base))}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-modified-base);--diffs-diff-line-mix-target:var(--conflict-bg-incoming-number-override,var(--diffs-modified-base))}@media (pointer:fine){[data-merge-conflict=incoming][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]{--diffs-selection-mix-target:var(--diffs-bg-selection-override,var(--diffs-selection-base))}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--mix-selection-light:82%;--mix-selection-dark:75%}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:75%;--mix-selection-dark:70%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]){--mix-selection-light:75%;--mix-selection-dark:60%;--diffs-selection-mix-target:var(--diffs-bg-selection-number-override,var(--diffs-selection-base))}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:70%;--mix-selection-dark:55%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--diffs-computed-selected-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-light), var(--diffs-selection-mix-target)),color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-dark), var(--diffs-selection-mix-target)));--diffs-line-bg:var(--diffs-computed-selected-line-bg,inherit)}[data-selected-line]:is([data-gutter-buffer],[data-column-number]){color:var(--diffs-selection-number-fg)}[data-no-newline]{-webkit-user-select:none;user-select:none}[data-no-newline] span{opacity:.6}[data-diff-type=split][data-overflow=scroll]{grid-template-columns:1fr 1fr;display:grid}[data-diff-type=split][data-overflow=scroll] [data-additions]{border-left:1px solid var(--diffs-bg)}[data-diff-type=split][data-overflow=scroll] [data-deletions]{border-right:1px solid var(--diffs-bg)}[data-code]{grid-auto-flow:dense;grid-template-columns:var(--diffs-code-grid);overflow:var(--diffs-overflow-override,scroll) clip;overscroll-behavior-x:none;tab-size:var(--diffs-tab-size,2);padding-top:var(--diffs-gap-block,var(--diffs-gap-fallback));padding-bottom:max(0px, calc(var(--diffs-gap-block,var(--diffs-gap-fallback)) - var(--diffs-scrollbar-gutter)));scrollbar-gutter:stable;align-self:flex-start;display:grid}[data-diffs-scrollbar-measure]{opacity:0;pointer-events:none;scrollbar-gutter:auto;grid-template-columns:none;width:100px;height:100px;padding:0;position:absolute;top:-200px;left:-200px}[data-container-size]{container-type:inline-size}[data-code]::-webkit-scrollbar{width:0;height:var(--diffs-scrollbar-gutter)}[data-code]::-webkit-scrollbar-track{background:0 0}[data-code]::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:1px solid #0000;border-radius:3px}[data-code]::-webkit-scrollbar-corner{background-color:#0000}@supports ((-moz-appearance:none)){[data-code]{scrollbar-width:thin;scrollbar-color:var(--diffs-bg-context) transparent;padding-bottom:var(--diffs-gap-block,var(--diffs-gap-fallback))}}:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]) [data-code],[data-overflow=wrap]:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]){padding-top:0}[data-gutter]{grid-template-rows:subgrid;grid-template-columns:subgrid;z-index:3;background-color:var(--diffs-bg);grid-column:1;display:grid;position:relative}[data-gutter] [data-gutter-buffer],[data-gutter] [data-column-number]{border-right:var(--diffs-gap-style,2px solid var(--diffs-bg))}[data-content]{grid-template-rows:subgrid;grid-template-columns:subgrid;background-color:var(--diffs-bg);grid-column:2;min-width:0;display:grid}[data-diff-type=split][data-overflow=wrap]{grid-auto-flow:dense;grid-template-columns:repeat(2, var(--diffs-code-grid));padding-block:var(--diffs-gap-block,var(--diffs-gap-fallback));display:grid}[data-diff-type=split][data-overflow=wrap] [data-deletions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-gutter]{grid-column:1}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-content]{border-right:1px solid var(--diffs-bg);grid-column:2}[data-diff-type=split][data-overflow=wrap] [data-additions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-gutter]{border-left:1px solid var(--diffs-bg);grid-column:3}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-content]{grid-column:4}[data-overflow=scroll] [data-gutter]{position:sticky;left:0}[data-interactive-lines] [data-line]{cursor:pointer}[data-interactive-line-numbers] [data-column-number]{cursor:pointer;touch-action:none}[data-content-buffer],[data-gutter-buffer]{-webkit-user-select:none;user-select:none;min-height:1lh;position:relative}[data-gutter-buffer]{padding-left:2ch;padding-right:1ch}[data-gutter-buffer]:before{content:"";min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));display:block}[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context-gutter);min-height:0}[data-gutter-buffer=buffer]{--diffs-line-bg:var(--diffs-bg-context-gutter)}[data-content-buffer]{background-position:5px 0;background-size:8px 8px;background-origin:border-box;background-image:repeating-linear-gradient(-45deg, transparent, transparent 4.242px, var(--diffs-bg-buffer) 4.242px, var(--diffs-bg-buffer) 5.656px);grid-column:1}[data-separator]{box-sizing:content-box;background-color:var(--diffs-bg)}[data-separator=simple]{min-height:4px}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata],[data-separator=simple]{background-color:var(--diffs-bg-separator)}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata]{height:32px;position:relative}[data-separator-wrapper]{-webkit-user-select:none;user-select:none;fill:currentColor;background-color:var(--diffs-bg);align-items:center;height:100%;display:flex;position:absolute;inset-inline:0}[data-content] [data-separator-wrapper]{display:none}[data-separator=metadata] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;color:var(--diffs-fg-number);white-space:nowrap;text-overflow:ellipsis;min-width:min-content;padding-inline:1ch;inset-inline:100% auto;overflow:hidden}[data-separator=line-info]{margin-block:var(--diffs-gap-block,var(--diffs-gap-fallback))}[data-separator=line-info] [data-separator-wrapper]{min-width:16px}[data-separator=line-info-basic],[data-separator=metadata]{margin-block:0}[data-separator=line-info][data-separator-first]{margin-top:0}[data-separator=line-info][data-separator-last]{margin-bottom:0}[data-expand-index] [data-separator-wrapper]{grid-template-columns:32px auto;display:grid}[data-expand-index] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:32px 32px auto}[data-expand-button],[data-separator-content]{background-color:var(--diffs-bg-separator);flex:none;align-items:center;display:flex}[data-expand-index] [data-separator-content]:hover{cursor:pointer;text-decoration:underline}[data-expand-button]{cursor:pointer;min-width:32px;color:var(--diffs-fg-number);border-right:2px solid var(--diffs-bg);flex-shrink:0;justify-content:center;align-self:stretch}[data-expand-button]:hover{color:var(--diffs-fg)}[data-expand-button][data-expand-all-button]{display:none}[data-expand-down] [data-icon]{transform:scaleY(-1)}[data-separator-content]{height:100%;color:var(--diffs-fg-number);flex:auto;justify-content:flex-start;padding:0 1ch;overflow:hidden}:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-content]{-webkit-user-select:none;user-select:none;height:100%;overflow:clip}[data-unmodified-lines]{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}@supports (width:1cqi){[data-unified] [data-separator=line-info] [data-separator-wrapper]{padding-inline:var(--diffs-gap-inline,var(--diffs-gap-fallback));width:100cqi}:is([data-unified] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content]{border-radius:6px}[data-unified] [data-separator=line-info][data-expand-index] [data-separator-wrapper] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-gutter] [data-separator=line-info] [data-separator-wrapper]{padding-left:var(--diffs-gap-inline,var(--diffs-gap-fallback))}[data-gutter] [data-separator=line-info] [data-separator-content]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-gutter] [data-separator=line-info][data-expand-index] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-additions] [data-content] [data-separator=line-info]{background-color:var(--diffs-bg)}:is([data-additions] [data-content] [data-separator=line-info]) [data-separator-wrapper]{display:none}[data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);border-top-right-radius:6px;border-bottom-right-radius:6px;height:100%;display:block}:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}[data-overflow=scroll] [data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{width:calc(100cqi - var(--diffs-gap-inline,var(--diffs-gap-fallback)))}[data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;margin-right:var(--diffs-gap-inline,var(--diffs-gap-fallback));border-top-right-radius:6px;border-bottom-right-radius:6px;display:block}:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}@media (pointer:fine){[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:unset}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:6px;border-top-left-radius:unset}}}@media (pointer:coarse){[data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px 34px auto}:is([data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]) [data-separator-content]{grid-column:unset;grid-row:unset}@supports (width:1cqi){:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up],[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:unset;border-top-left-radius:unset}}}@media (pointer:fine){[data-separator-wrapper][data-separator-multi-button]{grid-template-rows:50% 50%;display:grid}[data-separator-wrapper][data-separator-multi-button] [data-separator-content]{grid-area:1/2/-1;min-width:min-content}[data-separator-wrapper][data-separator-multi-button] [data-expand-button]{grid-column:1}[data-separator=line-info] [data-separator-wrapper],[data-separator=line-info] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px auto}[data-separator=line-info-basic][data-expand-index] [data-separator-wrapper]{grid-template-columns:100% auto}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-up]{border-bottom:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-down]{border-top:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}}[data-additions] [data-gutter] [data-separator-wrapper],[data-additions] [data-separator=line-info-basic] [data-separator-wrapper],[data-content] [data-separator-wrapper]{display:none}[data-line-annotation]{min-height:var(--diffs-annotation-min-height,0);z-index:2}[data-merge-conflict-actions]{z-index:2}[data-separator=custom]{grid-template-columns:subgrid;display:grid}[data-line],[data-column-number],[data-no-newline]{padding-inline:1ch;position:relative}[data-indicators=classic] [data-line]{padding-inline-start:2ch}:is([data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion]),[data-line]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion])):before{-webkit-user-select:none;user-select:none;width:1ch;height:1lh;display:inline-block;position:absolute;top:0;left:0}:is([data-line]:is([data-indicators=classic] [data-line-type=change-addition]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition])):before{content:"+";color:var(--diffs-addition-base)}:is([data-line]:is([data-indicators=classic] [data-line-type=change-deletion]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-deletion])):before{content:"-";color:var(--diffs-deletion-base)}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion],[data-indicators=bars] [data-line-type=change-addition]):before{content:"";-webkit-user-select:none;user-select:none;contain:strict;width:4px;height:100%;display:block;position:absolute;top:0;left:0}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion]):before{background-image:linear-gradient(0deg, var(--diffs-bg-deletion) 50%, var(--diffs-deletion-base) 50%);background-repeat:repeat;background-size:2px 2px;background-size:calc(1lh/round(1lh / 2px)) calc(1lh/round(1lh / 2px))}[data-column-number]:is([data-indicators=bars] [data-line-type=change-addition]):before{background-color:var(--diffs-addition-base)}[data-overflow=wrap] [data-line],[data-overflow=wrap] [data-annotation-content]{white-space:pre-wrap;word-break:break-word}[data-overflow=scroll] [data-line]{white-space:pre;min-height:1lh}[data-column-number]{box-sizing:content-box;text-align:right;-webkit-user-select:none;user-select:none;color:var(--diffs-fg-number);padding-left:2ch}[data-line-number-content]{min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));z-index:1;display:inline-block;position:relative}[data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]{min-width:4px;padding:0}:is([data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]):before{min-width:0}[data-disable-line-numbers] [data-line-number-content]{display:none}[data-disable-line-numbers] [data-gutter-utility-slot]{right:unset;justify-content:flex-start;left:0}[data-disable-line-numbers][data-indicators=bars] [data-gutter-utility-slot]{left:6px}[data-file][data-disable-line-numbers] [data-gutter-buffer],[data-file][data-disable-line-numbers] [data-column-number]{border-right:0;min-width:0}[data-diff-span]{-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:3px}[data-line-type=change-addition] [data-diff-span]{background-color:var(--diffs-bg-addition-emphasis)}[data-line-type=change-deletion] [data-diff-span]{background-color:var(--diffs-bg-deletion-emphasis)}[data-merge-conflict=marker-start],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator],[data-merge-conflict=marker-end]{color:var(--diffs-fg);padding-left:1ch}[data-merge-conflict=marker-start],[data-merge-conflict=marker-end]{align-items:center;display:flex}:is([data-merge-conflict=marker-start],[data-merge-conflict=marker-end]):after{color:var(--diffs-fg-conflict-marker);font-size:.75rem;font-style:normal;line-height:1.25rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));padding-left:1ch}[data-merge-conflict=marker-start]:after{content:"(Current Change)"}[data-merge-conflict=marker-end]:after{content:"(Incoming Change)"}[data-merge-conflict-actions-content]{min-height:1.75rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));color:var(--diffs-fg);align-items:center;gap:.25rem;padding-inline:.5rem;font-size:.75rem;line-height:1.2;display:flex}[data-merge-conflict-action]{appearance:none;color:var(--diffs-fg-number);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-style:normal}[data-merge-conflict-action]:hover{color:var(--diffs-fg)}[data-merge-conflict-action=current]:hover{color:var(--diffs-addition-base)}[data-merge-conflict-action=incoming]:hover{color:var(--diffs-modified-base)}[data-merge-conflict-action-separator]{color:var(--diffs-fg-number);opacity:.6;-webkit-user-select:none;user-select:none}[data-diffs-header=default]{background-color:var(--diffs-bg);justify-content:space-between;align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));min-height:calc(1lh + var(--diffs-gap-block,var(--diffs-gap-fallback))*3);z-index:2;flex-direction:row;padding-inline:16px;display:flex;position:relative;top:0}[data-header-content]{align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));white-space:nowrap;flex-direction:row;min-width:0;display:flex}[data-header-content] [data-prev-name],[data-header-content] [data-title]{text-overflow:ellipsis;white-space:nowrap;direction:rtl;min-width:0;overflow:hidden}[data-prev-name]{opacity:.7}[data-rename-icon]{fill:currentColor;flex-grow:0;flex-shrink:0}[data-diffs-header=default] [data-metadata]{white-space:nowrap;align-items:center;gap:1ch;display:flex}[data-diffs-header=default] [data-additions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-addition-base)}[data-diffs-header=default] [data-deletions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-deletion-base)}[data-change-icon]{fill:currentColor;flex-shrink:0}[data-change-icon=change],[data-change-icon=rename-pure],[data-change-icon=rename-changed]{color:var(--diffs-modified-base)}[data-change-icon=new]{color:var(--diffs-addition-base)}[data-change-icon=deleted]{color:var(--diffs-deletion-base)}[data-change-icon=file]{opacity:.6}[data-annotation-content]{z-index:2;isolation:isolate;align-self:flex-start;min-width:0;display:flow-root;position:relative}[data-overflow=scroll] [data-annotation-content],[data-overflow=scroll] [data-merge-conflict-actions-content]{width:var(--diffs-column-content-width,auto);left:var(--diffs-column-number-width,0);position:sticky}[data-annotation-slot]{text-wrap-mode:wrap;word-break:normal;white-space-collapse:collapse}[data-gutter-utility-slot]{touch-action:none;justify-content:flex-end;display:flex;position:absolute;top:0;bottom:0;right:0}[data-utility-button]{appearance:none;cursor:pointer;width:1lh;height:1lh;font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);background-color:var(--diffs-modified-base);color:var(--diffs-bg);fill:currentColor;z-index:4;touch-action:none;border:none;border-radius:4px;justify-content:center;align-items:center;margin-right:calc(1ch - 1lh);padding:0;display:flex;position:relative}[data-utility-button]:before{content:"";display:block;position:absolute;inset:0 0 0 -4px}[data-decoration-bar-stack]{pointer-events:none;isolation:isolate;z-index:1;background-color:var(--diffs-decoration-bar-color,transparent);box-sizing:content-box;border-left:2px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg);width:6px;position:absolute;top:0;bottom:0;right:-2px}[data-decoration-bar-depth="1"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 20%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="2"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 45%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="3"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 65%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-start] [data-decoration-bar-stack]{border-top-left-radius:5px;border-top-right-radius:5px}[data-decoration-bar-end] [data-decoration-bar-stack]{z-index:3;border-bottom-right-radius:5px;border-bottom-left-radius:5px}[data-placeholder]{contain:strict}[data-error-wrapper]{padding:var(--diffs-gap-block,var(--diffs-gap-fallback)) var(--diffs-gap-inline,var(--diffs-gap-fallback));scrollbar-width:none;max-height:400px;overflow:auto}[data-error-wrapper] [data-error-message]{color:var(--diffs-deletion-base);font-size:18px;font-weight:700}[data-error-wrapper] [data-error-stack]{color:var(--diffs-fg-number)}}@layer theme,rendered,unsafe;
|
|
@layer theme {
|
|
|
|
}</style><style data-theme-css="">@layer base, theme, rendered, unsafe;
|
|
@layer rendered {
|
|
:host {
|
|
--diffs-scrollbar-gutter-measured: var(--diffs-scrollbar-gutter-fallback);
|
|
--diffs-dark:#fafafa;--diffs-dark-bg:#0a0a0a;--diffs-dark-addition-color:#07c480;--diffs-dark-deletion-color:#ff2e3f;--diffs-dark-modified-color:#009fff;--diffs-light:#0a0a0a;--diffs-light-bg:#ffffff;--diffs-light-addition-color:#18a46c;--diffs-light-deletion-color:#d52c36;--diffs-light-modified-color:#009fff;
|
|
}
|
|
}</style><div data-diffs-header="default" data-change-type="change"><div data-header-content=""><slot name="header-prefix"></slot><svg width="16" height="16" viewBox="0 0 16 16" data-change-icon="change"><use href="#diffs-icon-symbol-modified"></use></svg><div data-title=""><bdi>Dreamio/StreamResolver.swift</bdi></div></div><div data-metadata=""><span data-deletions-count="">-3</span><span data-additions-count="">+37</span><slot name="header-metadata"></slot></div></div><pre data-diff="" data-diff-type="split" data-overflow="scroll" data-background="" data-indicators="bars" tabindex="0" style="--diffs-min-number-column-width-default:3ch;" data-dehydrated=""><code data-code="" data-container-size="" data-deletions=""><div data-gutter="" style="grid-row: span 71"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">96 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="97" data-line-index="96,96"><span data-line-number-content="">97</span></div><div data-line-type="context" data-column-number="98" data-line-index="97,97"><span data-line-number-content="">98</span></div><div data-line-type="context" data-column-number="99" data-line-index="98,98"><span data-line-number-content="">99</span></div><div data-line-type="change-deletion" data-column-number="100" data-line-index="99,99"><span data-line-number-content="">100</span></div><div data-line-type="context" data-column-number="101" data-line-index="101,100"><span data-line-number-content="">101</span></div><div data-line-type="context" data-column-number="102" data-line-index="102,101"><span data-line-number-content="">102</span></div><div data-line-type="context" data-column-number="103" data-line-index="103,102"><span data-line-number-content="">103</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">100 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="204" data-line-index="204,203"><span data-line-number-content="">204</span></div><div data-line-type="context" data-column-number="205" data-line-index="205,204"><span data-line-number-content="">205</span></div><div data-line-type="context" data-column-number="206" data-line-index="206,205"><span data-line-number-content="">206</span></div><div data-line-type="change-deletion" data-column-number="207" data-line-index="207,206"><span data-line-number-content="">207</span></div><div data-line-type="context" data-column-number="208" data-line-index="209,207"><span data-line-number-content="">208</span></div><div data-line-type="context" data-column-number="209" data-line-index="210,208"><span data-line-number-content="">209</span></div><div data-line-type="context" data-column-number="210" data-line-index="211,209"><span data-line-number-content="">210</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">17 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="228" data-line-index="229,227"><span data-line-number-content="">228</span></div><div data-line-type="context" data-column-number="229" data-line-index="230,228"><span data-line-number-content="">229</span></div><div data-line-type="context" data-column-number="230" data-line-index="231,229"><span data-line-number-content="">230</span></div><div data-gutter-buffer="buffer" data-buffer-size="5" style="grid-row: span 5;min-height:calc(5 * 1lh);"></div><div data-line-type="context" data-column-number="231" data-line-index="237,235"><span data-line-number-content="">231</span></div><div data-line-type="context" data-column-number="232" data-line-index="238,236"><span data-line-number-content="">232</span></div><div data-line-type="context" data-column-number="233" data-line-index="239,237"><span data-line-number-content="">233</span></div><div data-gutter-buffer="buffer" data-buffer-size="18" style="grid-row: span 18;min-height:calc(18 * 1lh);"></div><div data-line-type="context" data-column-number="234" data-line-index="258,256"><span data-line-number-content="">234</span></div><div data-line-type="context" data-column-number="235" data-line-index="259,257"><span data-line-number-content="">235</span></div><div data-line-type="context" data-column-number="236" data-line-index="260,258"><span data-line-number-content="">236</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">7 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="244" data-line-index="268,266"><span data-line-number-content="">244</span></div><div data-line-type="context" data-column-number="245" data-line-index="269,267"><span data-line-number-content="">245</span></div><div data-line-type="context" data-column-number="246" data-line-index="270,268"><span data-line-number-content="">246</span></div><div data-line-type="change-deletion" data-column-number="247" data-line-index="271,269"><span data-line-number-content="">247</span></div><div data-line-type="context" data-column-number="248" data-line-index="273,270"><span data-line-number-content="">248</span></div><div data-line-type="context" data-column-number="249" data-line-index="274,271"><span data-line-number-content="">249</span></div><div data-line-type="context" data-column-number="250" data-line-index="275,272"><span data-line-number-content="">250</span></div><div data-gutter-buffer="buffer" data-buffer-size="11" style="grid-row: span 11;min-height:calc(11 * 1lh);"></div><div data-line-type="context" data-column-number="251" data-line-index="287,284"><span data-line-number-content="">251</span></div><div data-line-type="context" data-column-number="252" data-line-index="288,285"><span data-line-number-content="">252</span></div><div data-line-type="context" data-column-number="253" data-line-index="289,286"><span data-line-number-content="">253</span></div></div><div data-content="" style="grid-row: span 71"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">96 unmodified lines</span></div></div></div><div data-line="97" data-alt-line="97" data-line-type="context" data-line-index="96,96"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="98" data-alt-line="98" data-line-type="context" data-line-index="97,97">
|
|
</div><div data-line="99" data-alt-line="99" data-line-type="context" data-line-index="98,98"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheSubtitleDataIfNeeded</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">original</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="100" data-line-type="change-deletion" data-line-index="99,99"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> subtitleType </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">subtitleType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="101" data-alt-line="101" data-line-type="context" data-line-index="101,100"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="102" data-alt-line="102" data-line-type="context" data-line-index="102,101"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="103" data-alt-line="103" data-line-type="context" data-line-index="103,102">
|
|
</div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">100 unmodified lines</span></div></div></div><div data-line="204" data-alt-line="204" data-line-type="context" data-line-index="204,203"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="205" data-alt-line="205" data-line-type="context" data-line-index="205,204"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="206" data-alt-line="206" data-line-type="context" data-line-index="206,205">
|
|
</div><div data-line="207" data-line-type="change-deletion" data-line-index="207,206"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> subtitleType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitlePayloadType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="208" data-alt-line="208" data-line-type="context" data-line-index="209,207"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">data.isEmpty,</span></div><div data-line="209" data-alt-line="209" data-line-type="context" data-line-index="210,208"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> text </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data.prefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">4096</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, encoding</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)?</span></div><div data-line="210" data-alt-line="210" data-line-type="context" data-line-index="211,209"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">trimmingCharacters</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">whitespacesAndNewlines</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">17 unmodified lines</span></div></div></div><div data-line="228" data-alt-line="228" data-line-type="context" data-line-index="229,227"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> ) </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">!=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="229" data-alt-line="229" data-line-type="context" data-line-index="230,228"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">srt</span></div><div data-line="230" data-alt-line="230" data-line-type="context" data-line-index="231,229"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-content-buffer="" data-buffer-size="5" style="grid-row: span 5;min-height:calc(5 * 1lh)"></div><div data-line="231" data-alt-line="236" data-line-type="context" data-line-index="237,235"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="232" data-alt-line="237" data-line-type="context" data-line-index="238,236"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="233" data-alt-line="238" data-line-type="context" data-line-index="239,237">
|
|
</div><div data-content-buffer="" data-buffer-size="18" style="grid-row: span 18;min-height:calc(18 * 1lh)"></div><div data-line="234" data-alt-line="257" data-line-type="context" data-line-index="258,256"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> logRejected</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidate</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">responseURL</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="235" data-alt-line="258" data-line-type="context" data-line-index="259,257"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="236" data-alt-line="259" data-line-type="context" data-line-index="260,258"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseDescription </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseURL.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">map</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">$0</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ??</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "none"</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">7 unmodified lines</span></div></div></div><div data-line="244" data-alt-line="267" data-line-type="context" data-line-index="268,266"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> } </span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="245" data-alt-line="268" data-line-type="context" data-line-index="269,267"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> bodyKind </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "unreadable"</span></div><div data-line="246" data-alt-line="269" data-line-type="context" data-line-index="270,268"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="247" data-line-type="change-deletion" data-line-index="271,269"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioSubtitles] rejected candidate reason=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">bodyKind</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> url=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> responseURL=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">responseDescription</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="248" data-alt-line="271" data-line-type="context" data-line-index="273,270"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="249" data-alt-line="272" data-line-type="context" data-line-index="274,271"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="250" data-alt-line="273" data-line-type="context" data-line-index="275,272"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-content-buffer="" data-buffer-size="11" style="grid-row: span 11;min-height:calc(11 * 1lh)"></div><div data-line="251" data-alt-line="285" data-line-type="context" data-line-index="287,284"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">}</span></div><div data-line="252" data-alt-line="286" data-line-type="context" data-line-index="288,285">
|
|
</div><div data-line="253" data-alt-line="287" data-line-type="context" data-line-index="289,286"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE">protocol</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> StreamResolving</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div></div></code><code data-code="" data-container-size="" data-additions=""><div data-gutter="" style="grid-row: span 71"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">96 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="97" data-line-index="96,96"><span data-line-number-content="">97</span></div><div data-line-type="context" data-column-number="98" data-line-index="97,97"><span data-line-number-content="">98</span></div><div data-line-type="context" data-column-number="99" data-line-index="98,98"><span data-line-number-content="">99</span></div><div data-line-type="change-addition" data-column-number="100" data-line-index="100,99"><span data-line-number-content="">100</span></div><div data-line-type="context" data-column-number="101" data-line-index="101,100"><span data-line-number-content="">101</span></div><div data-line-type="context" data-column-number="102" data-line-index="102,101"><span data-line-number-content="">102</span></div><div data-line-type="context" data-column-number="103" data-line-index="103,102"><span data-line-number-content="">103</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">100 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="204" data-line-index="204,203"><span data-line-number-content="">204</span></div><div data-line-type="context" data-column-number="205" data-line-index="205,204"><span data-line-number-content="">205</span></div><div data-line-type="context" data-column-number="206" data-line-index="206,205"><span data-line-number-content="">206</span></div><div data-line-type="change-addition" data-column-number="207" data-line-index="208,206"><span data-line-number-content="">207</span></div><div data-line-type="context" data-column-number="208" data-line-index="209,207"><span data-line-number-content="">208</span></div><div data-line-type="context" data-column-number="209" data-line-index="210,208"><span data-line-number-content="">209</span></div><div data-line-type="context" data-column-number="210" data-line-index="211,209"><span data-line-number-content="">210</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">17 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="228" data-line-index="229,227"><span data-line-number-content="">228</span></div><div data-line-type="context" data-column-number="229" data-line-index="230,228"><span data-line-number-content="">229</span></div><div data-line-type="context" data-column-number="230" data-line-index="231,229"><span data-line-number-content="">230</span></div><div data-line-type="change-addition" data-column-number="231" data-line-index="232,230"><span data-line-number-content="">231</span></div><div data-line-type="change-addition" data-column-number="232" data-line-index="233,231"><span data-line-number-content="">232</span></div><div data-line-type="change-addition" data-column-number="233" data-line-index="234,232"><span data-line-number-content="">233</span></div><div data-line-type="change-addition" data-column-number="234" data-line-index="235,233"><span data-line-number-content="">234</span></div><div data-line-type="change-addition" data-column-number="235" data-line-index="236,234"><span data-line-number-content="">235</span></div><div data-line-type="context" data-column-number="236" data-line-index="237,235"><span data-line-number-content="">236</span></div><div data-line-type="context" data-column-number="237" data-line-index="238,236"><span data-line-number-content="">237</span></div><div data-line-type="context" data-column-number="238" data-line-index="239,237"><span data-line-number-content="">238</span></div><div data-line-type="change-addition" data-column-number="239" data-line-index="240,238"><span data-line-number-content="">239</span></div><div data-line-type="change-addition" data-column-number="240" data-line-index="241,239"><span data-line-number-content="">240</span></div><div data-line-type="change-addition" data-column-number="241" data-line-index="242,240"><span data-line-number-content="">241</span></div><div data-line-type="change-addition" data-column-number="242" data-line-index="243,241"><span data-line-number-content="">242</span></div><div data-line-type="change-addition" data-column-number="243" data-line-index="244,242"><span data-line-number-content="">243</span></div><div data-line-type="change-addition" data-column-number="244" data-line-index="245,243"><span data-line-number-content="">244</span></div><div data-line-type="change-addition" data-column-number="245" data-line-index="246,244"><span data-line-number-content="">245</span></div><div data-line-type="change-addition" data-column-number="246" data-line-index="247,245"><span data-line-number-content="">246</span></div><div data-line-type="change-addition" data-column-number="247" data-line-index="248,246"><span data-line-number-content="">247</span></div><div data-line-type="change-addition" data-column-number="248" data-line-index="249,247"><span data-line-number-content="">248</span></div><div data-line-type="change-addition" data-column-number="249" data-line-index="250,248"><span data-line-number-content="">249</span></div><div data-line-type="change-addition" data-column-number="250" data-line-index="251,249"><span data-line-number-content="">250</span></div><div data-line-type="change-addition" data-column-number="251" data-line-index="252,250"><span data-line-number-content="">251</span></div><div data-line-type="change-addition" data-column-number="252" data-line-index="253,251"><span data-line-number-content="">252</span></div><div data-line-type="change-addition" data-column-number="253" data-line-index="254,252"><span data-line-number-content="">253</span></div><div data-line-type="change-addition" data-column-number="254" data-line-index="255,253"><span data-line-number-content="">254</span></div><div data-line-type="change-addition" data-column-number="255" data-line-index="256,254"><span data-line-number-content="">255</span></div><div data-line-type="change-addition" data-column-number="256" data-line-index="257,255"><span data-line-number-content="">256</span></div><div data-line-type="context" data-column-number="257" data-line-index="258,256"><span data-line-number-content="">257</span></div><div data-line-type="context" data-column-number="258" data-line-index="259,257"><span data-line-number-content="">258</span></div><div data-line-type="context" data-column-number="259" data-line-index="260,258"><span data-line-number-content="">259</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">7 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="267" data-line-index="268,266"><span data-line-number-content="">267</span></div><div data-line-type="context" data-column-number="268" data-line-index="269,267"><span data-line-number-content="">268</span></div><div data-line-type="context" data-column-number="269" data-line-index="270,268"><span data-line-number-content="">269</span></div><div data-line-type="change-addition" data-column-number="270" data-line-index="272,269"><span data-line-number-content="">270</span></div><div data-line-type="context" data-column-number="271" data-line-index="273,270"><span data-line-number-content="">271</span></div><div data-line-type="context" data-column-number="272" data-line-index="274,271"><span data-line-number-content="">272</span></div><div data-line-type="context" data-column-number="273" data-line-index="275,272"><span data-line-number-content="">273</span></div><div data-line-type="change-addition" data-column-number="274" data-line-index="276,273"><span data-line-number-content="">274</span></div><div data-line-type="change-addition" data-column-number="275" data-line-index="277,274"><span data-line-number-content="">275</span></div><div data-line-type="change-addition" data-column-number="276" data-line-index="278,275"><span data-line-number-content="">276</span></div><div data-line-type="change-addition" data-column-number="277" data-line-index="279,276"><span data-line-number-content="">277</span></div><div data-line-type="change-addition" data-column-number="278" data-line-index="280,277"><span data-line-number-content="">278</span></div><div data-line-type="change-addition" data-column-number="279" data-line-index="281,278"><span data-line-number-content="">279</span></div><div data-line-type="change-addition" data-column-number="280" data-line-index="282,279"><span data-line-number-content="">280</span></div><div data-line-type="change-addition" data-column-number="281" data-line-index="283,280"><span data-line-number-content="">281</span></div><div data-line-type="change-addition" data-column-number="282" data-line-index="284,281"><span data-line-number-content="">282</span></div><div data-line-type="change-addition" data-column-number="283" data-line-index="285,282"><span data-line-number-content="">283</span></div><div data-line-type="change-addition" data-column-number="284" data-line-index="286,283"><span data-line-number-content="">284</span></div><div data-line-type="context" data-column-number="285" data-line-index="287,284"><span data-line-number-content="">285</span></div><div data-line-type="context" data-column-number="286" data-line-index="288,285"><span data-line-number-content="">286</span></div><div data-line-type="context" data-column-number="287" data-line-index="289,286"><span data-line-number-content="">287</span></div></div><div data-content="" style="grid-row: span 71"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">96 unmodified lines</span></div></div></div><div data-line="97" data-alt-line="97" data-line-type="context" data-line-index="96,96"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="98" data-alt-line="98" data-line-type="context" data-line-index="97,97">
|
|
</div><div data-line="99" data-alt-line="99" data-line-type="context" data-line-index="98,98"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheSubtitleDataIfNeeded</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">original</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="100" data-line-type="change-addition" data-line-index="100,99"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> subtitleType </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Self</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">subtitleType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data</span><span data-diff-span=""><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, sourceURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> original.url</span></span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="101" data-alt-line="101" data-line-type="context" data-line-index="101,100"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="102" data-alt-line="102" data-line-type="context" data-line-index="102,101"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="103" data-alt-line="103" data-line-type="context" data-line-index="103,102">
|
|
</div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">100 unmodified lines</span></div></div></div><div data-line="204" data-alt-line="204" data-line-type="context" data-line-index="204,203"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="205" data-alt-line="205" data-line-type="context" data-line-index="205,204"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="206" data-alt-line="206" data-line-type="context" data-line-index="206,205">
|
|
</div><div data-line="207" data-line-type="change-addition" data-line-index="208,206"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> subtitleType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span data-diff-span=""><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">sourceURL</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#08C0EF;--diffs-token-light:#08C0EF"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitlePayloadType</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="208" data-alt-line="208" data-line-type="context" data-line-index="209,207"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">data.isEmpty,</span></div><div data-line="209" data-alt-line="209" data-line-type="context" data-line-index="210,208"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> text </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data.prefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">4096</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, encoding</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)?</span></div><div data-line="210" data-alt-line="210" data-line-type="context" data-line-index="211,209"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">trimmingCharacters</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">in</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">whitespacesAndNewlines</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">17 unmodified lines</span></div></div></div><div data-line="228" data-alt-line="228" data-line-type="context" data-line-index="229,227"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> ) </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">!=</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="229" data-alt-line="229" data-line-type="context" data-line-index="230,228"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">srt</span></div><div data-line="230" data-alt-line="230" data-line-type="context" data-line-index="231,229"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="231" data-line-type="change-addition" data-line-index="232,230"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> if</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> sourceURL,</span></div><div data-line="232" data-line-type="change-addition" data-line-index="233,231"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> isStremioSubtitleDownloadURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">sourceURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="233" data-line-type="change-addition" data-line-index="234,232"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> isPlausiblePlainSubtitleText</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">text</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="234" data-line-type="change-addition" data-line-index="235,233"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">srt</span></div><div data-line="235" data-line-type="change-addition" data-line-index="236,234"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="236" data-alt-line="231" data-line-type="context" data-line-index="237,235"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="237" data-alt-line="232" data-line-type="context" data-line-index="238,236"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="238" data-alt-line="233" data-line-type="context" data-line-index="239,237">
|
|
</div><div data-line="239" data-line-type="change-addition" data-line-index="240,238"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> isPlausiblePlainSubtitleText</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> text</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: </span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> Bool</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="240" data-line-type="change-addition" data-line-index="241,239"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> text.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">lowercased</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="241" data-line-type="change-addition" data-line-index="242,240"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">hasPrefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"{"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="242" data-line-type="change-addition" data-line-index="243,241"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">hasPrefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"["</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="243" data-line-type="change-addition" data-line-index="244,242"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">hasPrefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"<!doctype"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="244" data-line-type="change-addition" data-line-index="245,243"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">hasPrefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"<html"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="245" data-line-type="change-addition" data-line-index="246,244"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> !</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">hasPrefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"<?xml"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="246" data-line-type="change-addition" data-line-index="247,245"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="247" data-line-type="change-addition" data-line-index="248,246"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> false</span></div><div data-line="248" data-line-type="change-addition" data-line-index="249,247"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="249" data-line-type="change-addition" data-line-index="250,248">
|
|
</div><div data-line="250" data-line-type="change-addition" data-line-index="251,249"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"-->"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="251" data-line-type="change-addition" data-line-index="252,250"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"<font"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="252" data-line-type="change-addition" data-line-index="253,251"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"{</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\\</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="253" data-line-type="change-addition" data-line-index="254,252"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contains</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\\</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">n"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="254" data-line-type="change-addition" data-line-index="255,253"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ||</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> lowercased.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">split</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">whereSeparator</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> \.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">isNewline</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.count </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">></span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 1</span></div><div data-line="255" data-line-type="change-addition" data-line-index="256,254"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="256" data-line-type="change-addition" data-line-index="257,255">
|
|
</div><div data-line="257" data-alt-line="234" data-line-type="context" data-line-index="258,256"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> logRejected</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> candidate</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: SubtitleCandidate, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">responseURL</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">, </span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="258" data-alt-line="235" data-line-type="context" data-line-index="259,257"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="259" data-alt-line="236" data-line-type="context" data-line-index="260,258"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseDescription </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> responseURL.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">map</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C">$0</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ??</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "none"</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">7 unmodified lines</span></div></div></div><div data-line="267" data-alt-line="244" data-line-type="context" data-line-index="268,266"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> } </span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="268" data-alt-line="245" data-line-type="context" data-line-index="269,267"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> bodyKind </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "unreadable"</span></div><div data-line="269" data-alt-line="246" data-line-type="context" data-line-index="270,268"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="270" data-line-type="change-addition" data-line-index="272,269"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> print</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"[DreamioSubtitles] rejected candidate reason=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">bodyKind</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> url=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">URLRedactor.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">redactedURLString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">absoluteString</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> responseURL=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">responseDescription</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span data-diff-span=""><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> preview=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">rejectionPreview</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span></span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="271" data-alt-line="248" data-line-type="context" data-line-index="273,270"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="272" data-alt-line="249" data-line-type="context" data-line-index="274,271"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="273" data-alt-line="250" data-line-type="context" data-line-index="275,272"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="274" data-line-type="change-addition" data-line-index="276,273">
|
|
</div><div data-line="275" data-line-type="change-addition" data-line-index="277,274"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">if</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> DEBUG</span></div><div data-line="276" data-line-type="change-addition" data-line-index="278,275"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> rejectionPreview</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">_</span><span style="--diffs-token-dark:#A3A3A3;--diffs-token-light:#636363"> data</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">: Data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> -></span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="277" data-line-type="change-addition" data-line-index="279,276"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> guard</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> text </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> data.prefix</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">180</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, encoding</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> else</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="278" data-line-type="change-addition" data-line-index="280,277"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "unreadable"</span></div><div data-line="279" data-line-type="change-addition" data-line-index="281,278"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="280" data-line-type="change-addition" data-line-index="282,279"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> return</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> text</span></div><div data-line="281" data-line-type="change-addition" data-line-index="283,280"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">replacingOccurrences</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">of</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\n</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, with</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\\</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">n"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="282" data-line-type="change-addition" data-line-index="284,281"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">replacingOccurrences</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">of</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\r</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, with</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "</span><span style="--diffs-token-dark:#61D5C0;--diffs-token-light:#16A994">\\</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">r"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="283" data-line-type="change-addition" data-line-index="285,282"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="284" data-line-type="change-addition" data-line-index="286,283"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">#</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">endif</span></div><div data-line="285" data-alt-line="251" data-line-type="context" data-line-index="287,284"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">}</span></div><div data-line="286" data-alt-line="252" data-line-type="context" data-line-index="288,285">
|
|
</div><div data-line="287" data-alt-line="253" data-line-type="context" data-line-index="289,286"><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE">protocol</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> StreamResolving</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div></div></code></pre><svg data-icon-sprite aria-hidden="true" width="0" height="0">
|
|
<symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
|
|
<path d="M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-brand-github" viewBox="0 0 16 16">
|
|
<path d="M8 0c4.42 0 8 3.58 8 8a8.01 8.01 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27s-1.36.09-2 .27c-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevron" viewBox="0 0 16 16">
|
|
<path d="M1.47 4.47a.75.75 0 0 1 1.06 0L8 9.94l5.47-5.47a.75.75 0 1 1 1.06 1.06l-6 6a.75.75 0 0 1-1.06 0l-6-6a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-chevrons-narrow" viewBox="0 0 10 16">
|
|
<path d="M4.47 2.22a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1-1.06 1.06L5 3.81 2.28 6.53a.75.75 0 0 1-1.06-1.06zM1.22 9.47a.75.75 0 0 1 1.06 0L5 12.19l2.72-2.72a.75.75 0 0 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0l-3.25-3.25a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-split" viewBox="0 0 16 16">
|
|
<path d="M14 0H8.5v16H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2m-1.5 6.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 1 0"/><path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5.5V0zm.5 7.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1" opacity=".3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-diff-unified" viewBox="0 0 16 16">
|
|
<path fill-rule="evenodd" d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8.5h16zm-8-4a.5.5 0 0 0-.5.5v1h-1a.5.5 0 0 0 0 1h1v1a.5.5 0 0 0 1 0v-1h1a.5.5 0 0 0 0-1h-1v-1A.5.5 0 0 0 8 10" clip-rule="evenodd"/><path fill-rule="evenodd" d="M14 0a2 2 0 0 1 2 2v5.5H0V2a2 2 0 0 1 2-2zM6.5 3.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z" clip-rule="evenodd" opacity=".4"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand" viewBox="0 0 16 16">
|
|
<path d="M3.47 5.47a.75.75 0 0 1 1.06 0L8 8.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-expand-all" viewBox="0 0 16 16">
|
|
<path d="M11.47 9.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06L8 12.94zM7.526 1.418a.75.75 0 0 1 1.004.052l4 4a.75.75 0 1 1-1.06 1.06L8 3.06 4.53 6.53a.75.75 0 1 1-1.06-1.06l4-4z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-file-code" viewBox="0 0 16 16">
|
|
<path d="M10.75 0c.199 0 .39.08.53.22l3.5 3.5c.14.14.22.331.22.53v9A2.75 2.75 0 0 1 12.25 16h-8.5A2.75 2.75 0 0 1 1 13.25V2.75A2.75 2.75 0 0 1 3.75 0zm-7 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h8.5c.69 0 1.25-.56 1.25-1.25V5h-1.25A2.25 2.25 0 0 1 10 2.75V1.5z"/><path d="M7.248 6.19a.75.75 0 0 1 .063 1.058L5.753 9l1.558 1.752a.75.75 0 0 1-1.122.996l-2-2.25a.75.75 0 0 1 0-.996l2-2.25a.75.75 0 0 1 1.06-.063M8.69 7.248a.75.75 0 1 1 1.12-.996l2 2.25a.75.75 0 0 1 0 .996l-2 2.25a.75.75 0 1 1-1.12-.996L10.245 9z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-plus" viewBox="0 0 16 16">
|
|
<path d="M8 3a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 8 3"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-added" viewBox="0 0 16 16">
|
|
<path d="M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-deleted" viewBox="0 0 16 16">
|
|
<path d="M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8"/><path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-diffstat" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ignored" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m11.53-2.47a.75.75 0 0 0-1.06-1.06l-6 6a.75.75 0 1 0 1.06 1.06z"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-modified" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-moved" viewBox="0 0 16 16">
|
|
<path d="M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8"/><path d="M8.495 4.695a.75.75 0 0 0-.05 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.05 1.06l2.044 2.248-1.796 1.995a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05"/>
|
|
</symbol>
|
|
<symbol id="diffs-icon-symbol-ref" viewBox="0 0 16 16">
|
|
<path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"/>
|
|
</symbol>
|
|
</svg><style data-core-css="">@layer base, theme, rendered, unsafe;
|
|
@layer base,theme,rendered,unsafe;@layer base{:host{--diffs-font-fallback:"SF Mono", Monaco, Consolas, "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;--diffs-header-font-fallback:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;--diffs-mixer:light-dark(#000,#fff);--diffs-gap-fallback:8px;--diffs-scrollbar-gutter-fallback:6px;--diffs-scrollbar-gutter:var(--diffs-scrollbar-gutter-override,var(--diffs-scrollbar-gutter-measured,var(--diffs-scrollbar-gutter-fallback)));--diffs-added-light:#0dbe4e;--diffs-added-dark:#5ecc71;--diffs-modified-light:#009fff;--diffs-modified-dark:#69b1ff;--diffs-deleted-light:#ff2e3f;--diffs-deleted-dark:#ff6762;color-scheme:light dark;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);font-feature-settings:var(--diffs-font-features);--diffs-bg:light-dark(var(--diffs-light-bg,#fff),var(--diffs-dark-bg,#000));--diffs-bg-buffer:var(--diffs-bg-buffer-override,light-dark(color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92%, var(--diffs-mixer))));--diffs-bg-context:var(--diffs-bg-context-override,light-dark(color-mix(in lab, var(--diffs-bg) 98.5%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 92.5%, var(--diffs-mixer))));--diffs-bg-context-gutter:var(--diffs-bg-context-gutter-override,light-dark(color-mix(in lab, var(--diffs-bg-context) 90%, var(--diffs-bg)),color-mix(in lab, var(--diffs-bg-context) 45%, var(--diffs-bg))));--diffs-bg-separator:var(--diffs-bg-separator-override,light-dark(color-mix(in lab, var(--diffs-bg) 96%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-bg) 85%, var(--diffs-mixer))));--diffs-fg:light-dark(var(--diffs-light,#000),var(--diffs-dark,#fff));--diffs-fg-number:var(--diffs-fg-number-override,light-dark(color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg)),color-mix(in lab, var(--diffs-fg) 65%, var(--diffs-bg))));--diffs-fg-conflict-marker:var(--diffs-fg-conflict-marker-override,var(--diffs-fg-number));--diffs-deletion-base:var(--diffs-deletion-color-override,light-dark(var(--diffs-light-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-light))),var(--diffs-dark-deletion-color,var(--diffs-deletion-color,var(--diffs-deleted-dark)))));--diffs-addition-base:var(--diffs-addition-color-override,light-dark(var(--diffs-light-addition-color,var(--diffs-addition-color,var(--diffs-added-light))),var(--diffs-dark-addition-color,var(--diffs-addition-color,var(--diffs-added-dark)))));--diffs-modified-base:var(--diffs-modified-color-override,light-dark(var(--diffs-light-modified-color,var(--diffs-modified-color,var(--diffs-modified-light))),var(--diffs-dark-modified-color,var(--diffs-modified-color,var(--diffs-modified-dark)))));--diffs-bg-deletion:var(--diffs-bg-deletion-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-deletion-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-deletion-base))));--diffs-bg-deletion-emphasis:var(--diffs-bg-deletion-emphasis-override,light-dark(rgb(from var(--diffs-deletion-base) r g b / .15),rgb(from var(--diffs-deletion-base) r g b / .2)));--diffs-bg-addition:var(--diffs-bg-addition-override,light-dark(color-mix(in lab, var(--diffs-bg) 88%, var(--diffs-addition-base)),color-mix(in lab, var(--diffs-bg) 80%, var(--diffs-addition-base))));--diffs-bg-addition-emphasis:var(--diffs-bg-addition-emphasis-override,light-dark(rgb(from var(--diffs-addition-base) r g b / .15),rgb(from var(--diffs-addition-base) r g b / .2)));--diffs-selection-base:var(--diffs-modified-base);--diffs-selection-number-fg:light-dark(color-mix(in lab, var(--diffs-selection-base) 65%, var(--diffs-mixer)),color-mix(in lab, var(--diffs-selection-base) 75%, var(--diffs-mixer)));background-color:var(--diffs-bg);color:var(--diffs-fg);display:block}pre,code,[data-error-wrapper]{isolation:isolate;font-family:var(--diffs-font-family,var(--diffs-font-fallback));outline:none;margin:0;padding:0;display:block}pre,code{background-color:var(--diffs-bg)}code{contain:content}*,:before,:after{box-sizing:border-box}[data-icon-sprite]{display:none}[data-diffs-header],[data-separator]{font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback))}[data-diffs-header][data-sticky]{z-index:1;background-color:var(--diffs-bg);position:sticky;top:0}[data-file-info]{color:var(--fg);background-color:color-mix(in lab, var(--bg) 98%, var(--fg));border-block:1px solid color-mix(in lab, var(--bg) 95%, var(--fg));padding:10px;font-weight:700}[data-diff],[data-file]{--diffs-grid-number-column-width:minmax(min-content, max-content);--diffs-code-grid:var(--diffs-grid-number-column-width) 1fr}[data-dehydrated]:is([data-diff],[data-file]){--diffs-code-grid:var(--diffs-grid-number-column-width) minmax(0, 1fr)}:is([data-diff],[data-file]):hover [data-code]::-webkit-scrollbar-thumb{background-color:var(--diffs-bg-context)}@supports (-webkit-touch-callout:none){:host{--diffs-scrollbar-gutter-fallback:0px}}[data-line] span{color:light-dark(var(--diffs-token-light,var(--diffs-light)),var(--diffs-token-dark,var(--diffs-dark)));background-color:light-dark(var(--diffs-token-light-bg,inherit),var(--diffs-token-dark-bg,inherit));font-weight:light-dark(var(--diffs-token-light-font-weight,inherit),var(--diffs-token-dark-font-weight,inherit));font-style:light-dark(var(--diffs-token-light-font-style,inherit),var(--diffs-token-dark-font-style,inherit));-webkit-text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit));text-decoration:light-dark(var(--diffs-token-light-text-decoration,inherit),var(--diffs-token-dark-text-decoration,inherit))}[data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);color:var(--diffs-fg);background-color:var(--diffs-line-bg,var(--diffs-bg))}@media (pointer:fine){:is([data-line],[data-gutter-buffer],[data-column-number],[data-line-annotation],[data-no-newline],[data-merge-conflict],[data-merge-conflict-actions]):where([data-hovered]){--diffs-computed-hovered-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-selected-line-bg) 97%, var(--diffs-bg-hover-override,var(--diffs-mixer))),color-mix(in lab, var(--diffs-computed-selected-line-bg) 91%, var(--diffs-bg-hover-override,var(--diffs-mixer))));--diffs-line-bg:var(--diffs-computed-hovered-line-bg,inherit)}}[data-decoration-bg]:is([data-line],[data-no-newline]){--mix-deco-light:92%;--mix-deco-dark:85%}[data-decoration-bg][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]){--mix-deco-light:88%;--mix-deco-dark:80%}[data-decoration-bg][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]){--mix-deco-light:85%;--mix-deco-dark:78%}@media (pointer:fine){[data-decoration-bg][data-hovered]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:85%;--mix-deco-dark:85%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="2"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:83%;--mix-deco-dark:83%}[data-decoration-bg][data-hovered][data-decoration-bg-depth="3"]:is([data-line],[data-no-newline]):not([data-selected-line]){--mix-deco-light:81%;--mix-deco-dark:81%}}[data-decoration-bg]:is([data-line],[data-no-newline]){--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) var(--mix-deco-light), var(--diffs-decoration-bg)),color-mix(in lab, var(--diffs-bg) var(--mix-deco-dark), var(--diffs-decoration-bg)));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-line-annotation],[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context);--diffs-computed-decoration-bg:var(--diffs-annotation-bg);--diffs-computed-diff-line-bg:var(--diffs-annotation-bg);--diffs-computed-selected-line-bg:var(--diffs-annotation-bg);--diffs-line-bg:var(--diffs-annotation-bg)}[data-merge-conflict-actions],[data-gutter-buffer=merge-conflict-action],[data-gutter-buffer=merge-conflict-marker-base],[data-gutter-buffer=merge-conflict-marker-separator],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator]{--diffs-computed-decoration-bg:var(--diffs-bg-context);--diffs-computed-diff-line-bg:var(--diffs-bg-context);--diffs-computed-selected-line-bg:var(--diffs-bg-context);--diffs-line-bg:var(--diffs-bg-context)}[data-gutter-buffer=merge-conflict-marker-start],[data-merge-conflict=marker-start]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-current-header-override,var(--diffs-addition-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-gutter-buffer=merge-conflict-marker-end],[data-merge-conflict=marker-end]{--diffs-computed-decoration-bg:light-dark(color-mix(in lab, var(--diffs-bg) 78%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))),color-mix(in lab, var(--diffs-bg) 68%, var(--conflict-bg-incoming-header-override,var(--diffs-modified-base))));--diffs-computed-diff-line-bg:var(--diffs-computed-decoration-bg);--diffs-computed-selected-line-bg:var(--diffs-computed-decoration-bg);--diffs-line-bg:var(--diffs-computed-decoration-bg)}[data-has-merge-conflict] [data-line-annotation],[data-has-merge-conflict] [data-gutter-buffer=annotation]{--diffs-computed-decoration-bg:var(--diffs-bg);--diffs-computed-diff-line-bg:var(--diffs-bg);--diffs-computed-selected-line-bg:var(--diffs-bg);--diffs-line-bg:var(--diffs-bg)}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number]{--mix-light:91%;--mix-dark:85%}:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--mix-light:88%;--mix-dark:80%}:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]{--diffs-diff-line-mix-target:var(--diffs-bg)}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-deletion-override,var(--diffs-deletion-base))}@media (pointer:fine){[data-line-type=change-deletion][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:75%}}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-deletion-override,var(--diffs-deletion-base));--diffs-diff-line-mix-target:var(--diffs-bg-deletion-number-override,var(--diffs-deletion-base))}[data-line-type=change-deletion]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--diffs-bg-addition-override,var(--diffs-addition-base))}@media (pointer:fine){[data-line-type=change-addition][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--diffs-bg-addition-number-override,var(--diffs-addition-base))}[data-line-type=change-addition]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-current-override,var(--diffs-addition-base))}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-fg-number-addition-override,var(--diffs-addition-base));--diffs-diff-line-mix-target:var(--conflict-bg-current-number-override,var(--diffs-addition-base))}@media (pointer:fine){[data-merge-conflict=current][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=current]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-diff-line-mix-target:var(--conflict-bg-incoming-override,var(--diffs-modified-base))}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]):where([data-gutter-buffer],[data-column-number]){color:var(--diffs-modified-base);--diffs-diff-line-mix-target:var(--conflict-bg-incoming-number-override,var(--diffs-modified-base))}@media (pointer:fine){[data-merge-conflict=incoming][data-hovered]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--mix-light:80%;--mix-dark:70%}}[data-merge-conflict=incoming]:is(:where([data-background]) [data-gutter-buffer],:where([data-background]) [data-column-number],:where([data-background]) [data-line],:where([data-background]) [data-no-newline]){--diffs-computed-diff-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-light), var(--diffs-diff-line-mix-target)),color-mix(in lab, var(--diffs-computed-decoration-bg) var(--mix-dark), var(--diffs-diff-line-mix-target)));--diffs-computed-selected-line-bg:var(--diffs-computed-diff-line-bg);--diffs-line-bg:var(--diffs-computed-diff-line-bg,inherit)}[data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]{--diffs-selection-mix-target:var(--diffs-bg-selection-override,var(--diffs-selection-base))}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--mix-selection-light:82%;--mix-selection-dark:75%}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:75%;--mix-selection-dark:70%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]){--mix-selection-light:75%;--mix-selection-dark:60%;--diffs-selection-mix-target:var(--diffs-bg-selection-number-override,var(--diffs-selection-base))}@media (pointer:fine){[data-selected-line][data-hovered]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]):where([data-gutter-buffer],[data-column-number]):not([data-merge-conflict],[data-line-type=change-addition],[data-line-type=change-deletion]){--mix-selection-light:70%;--mix-selection-dark:55%}}[data-selected-line]:is([data-gutter-buffer],[data-column-number],[data-line],[data-line-annotation],[data-merge-conflict],[data-merge-conflict-actions],[data-no-newline]){--diffs-computed-selected-line-bg:light-dark(color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-light), var(--diffs-selection-mix-target)),color-mix(in lab, var(--diffs-computed-diff-line-bg) var(--mix-selection-dark), var(--diffs-selection-mix-target)));--diffs-line-bg:var(--diffs-computed-selected-line-bg,inherit)}[data-selected-line]:is([data-gutter-buffer],[data-column-number]){color:var(--diffs-selection-number-fg)}[data-no-newline]{-webkit-user-select:none;user-select:none}[data-no-newline] span{opacity:.6}[data-diff-type=split][data-overflow=scroll]{grid-template-columns:1fr 1fr;display:grid}[data-diff-type=split][data-overflow=scroll] [data-additions]{border-left:1px solid var(--diffs-bg)}[data-diff-type=split][data-overflow=scroll] [data-deletions]{border-right:1px solid var(--diffs-bg)}[data-code]{grid-auto-flow:dense;grid-template-columns:var(--diffs-code-grid);overflow:var(--diffs-overflow-override,scroll) clip;overscroll-behavior-x:none;tab-size:var(--diffs-tab-size,2);padding-top:var(--diffs-gap-block,var(--diffs-gap-fallback));padding-bottom:max(0px, calc(var(--diffs-gap-block,var(--diffs-gap-fallback)) - var(--diffs-scrollbar-gutter)));scrollbar-gutter:stable;align-self:flex-start;display:grid}[data-diffs-scrollbar-measure]{opacity:0;pointer-events:none;scrollbar-gutter:auto;grid-template-columns:none;width:100px;height:100px;padding:0;position:absolute;top:-200px;left:-200px}[data-container-size]{container-type:inline-size}[data-code]::-webkit-scrollbar{width:0;height:var(--diffs-scrollbar-gutter)}[data-code]::-webkit-scrollbar-track{background:0 0}[data-code]::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:1px solid #0000;border-radius:3px}[data-code]::-webkit-scrollbar-corner{background-color:#0000}@supports ((-moz-appearance:none)){[data-code]{scrollbar-width:thin;scrollbar-color:var(--diffs-bg-context) transparent;padding-bottom:var(--diffs-gap-block,var(--diffs-gap-fallback))}}:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]) [data-code],[data-overflow=wrap]:is([data-diffs-header]~[data-diff],[data-diffs-header]~[data-file]){padding-top:0}[data-gutter]{grid-template-rows:subgrid;grid-template-columns:subgrid;z-index:3;background-color:var(--diffs-bg);grid-column:1;display:grid;position:relative}[data-gutter] [data-gutter-buffer],[data-gutter] [data-column-number]{border-right:var(--diffs-gap-style,2px solid var(--diffs-bg))}[data-content]{grid-template-rows:subgrid;grid-template-columns:subgrid;background-color:var(--diffs-bg);grid-column:2;min-width:0;display:grid}[data-diff-type=split][data-overflow=wrap]{grid-auto-flow:dense;grid-template-columns:repeat(2, var(--diffs-code-grid));padding-block:var(--diffs-gap-block,var(--diffs-gap-fallback));display:grid}[data-diff-type=split][data-overflow=wrap] [data-deletions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-gutter]{grid-column:1}:is([data-diff-type=split][data-overflow=wrap] [data-deletions]) [data-content]{border-right:1px solid var(--diffs-bg);grid-column:2}[data-diff-type=split][data-overflow=wrap] [data-additions]{display:contents}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-gutter]{border-left:1px solid var(--diffs-bg);grid-column:3}:is([data-diff-type=split][data-overflow=wrap] [data-additions]) [data-content]{grid-column:4}[data-overflow=scroll] [data-gutter]{position:sticky;left:0}[data-interactive-lines] [data-line]{cursor:pointer}[data-interactive-line-numbers] [data-column-number]{cursor:pointer;touch-action:none}[data-content-buffer],[data-gutter-buffer]{-webkit-user-select:none;user-select:none;min-height:1lh;position:relative}[data-gutter-buffer]{padding-left:2ch;padding-right:1ch}[data-gutter-buffer]:before{content:"";min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));display:block}[data-gutter-buffer=annotation]{--diffs-annotation-bg:var(--diffs-bg-context-gutter);min-height:0}[data-gutter-buffer=buffer]{--diffs-line-bg:var(--diffs-bg-context-gutter)}[data-content-buffer]{background-position:5px 0;background-size:8px 8px;background-origin:border-box;background-image:repeating-linear-gradient(-45deg, transparent, transparent 4.242px, var(--diffs-bg-buffer) 4.242px, var(--diffs-bg-buffer) 5.656px);grid-column:1}[data-separator]{box-sizing:content-box;background-color:var(--diffs-bg)}[data-separator=simple]{min-height:4px}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata],[data-separator=simple]{background-color:var(--diffs-bg-separator)}[data-separator=line-info],[data-separator=line-info-basic],[data-separator=metadata]{height:32px;position:relative}[data-separator-wrapper]{-webkit-user-select:none;user-select:none;fill:currentColor;background-color:var(--diffs-bg);align-items:center;height:100%;display:flex;position:absolute;inset-inline:0}[data-content] [data-separator-wrapper]{display:none}[data-separator=metadata] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;color:var(--diffs-fg-number);white-space:nowrap;text-overflow:ellipsis;min-width:min-content;padding-inline:1ch;inset-inline:100% auto;overflow:hidden}[data-separator=line-info]{margin-block:var(--diffs-gap-block,var(--diffs-gap-fallback))}[data-separator=line-info] [data-separator-wrapper]{min-width:16px}[data-separator=line-info-basic],[data-separator=metadata]{margin-block:0}[data-separator=line-info][data-separator-first]{margin-top:0}[data-separator=line-info][data-separator-last]{margin-bottom:0}[data-expand-index] [data-separator-wrapper]{grid-template-columns:32px auto;display:grid}[data-expand-index] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:32px 32px auto}[data-expand-button],[data-separator-content]{background-color:var(--diffs-bg-separator);flex:none;align-items:center;display:flex}[data-expand-index] [data-separator-content]:hover{cursor:pointer;text-decoration:underline}[data-expand-button]{cursor:pointer;min-width:32px;color:var(--diffs-fg-number);border-right:2px solid var(--diffs-bg);flex-shrink:0;justify-content:center;align-self:stretch}[data-expand-button]:hover{color:var(--diffs-fg)}[data-expand-button][data-expand-all-button]{display:none}[data-expand-down] [data-icon]{transform:scaleY(-1)}[data-separator-content]{height:100%;color:var(--diffs-fg-number);flex:auto;justify-content:flex-start;padding:0 1ch;overflow:hidden}:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-content]{-webkit-user-select:none;user-select:none;height:100%;overflow:clip}[data-unmodified-lines]{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}@supports (width:1cqi){[data-unified] [data-separator=line-info] [data-separator-wrapper]{padding-inline:var(--diffs-gap-inline,var(--diffs-gap-fallback));width:100cqi}:is([data-unified] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content]{border-radius:6px}[data-unified] [data-separator=line-info][data-expand-index] [data-separator-wrapper] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-gutter] [data-separator=line-info] [data-separator-wrapper]{padding-left:var(--diffs-gap-inline,var(--diffs-gap-fallback))}[data-gutter] [data-separator=line-info] [data-separator-content]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-gutter] [data-separator=line-info][data-expand-index] [data-separator-content]{border-top-left-radius:unset;border-bottom-left-radius:unset}[data-additions] [data-content] [data-separator=line-info]{background-color:var(--diffs-bg)}:is([data-additions] [data-content] [data-separator=line-info]) [data-separator-wrapper]{display:none}[data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);border-top-right-radius:6px;border-bottom-right-radius:6px;height:100%;display:block}:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}[data-overflow=scroll] [data-additions] [data-gutter] [data-separator=line-info] [data-separator-wrapper]{width:calc(100cqi - var(--diffs-gap-inline,var(--diffs-gap-fallback)))}[data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]{background-color:var(--diffs-bg-separator);height:100%;margin-right:var(--diffs-gap-inline,var(--diffs-gap-fallback));border-top-right-radius:6px;border-bottom-right-radius:6px;display:block}:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-separator-content],:is([data-overflow=wrap] [data-additions] [data-content] [data-separator=line-info] [data-separator-wrapper]) [data-expand-button]{display:none}:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}@media (pointer:fine){[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:unset}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:6px;border-top-left-radius:unset}}}@media (pointer:coarse){[data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px 34px auto}:is([data-separator=line-info-basic] [data-separator-wrapper][data-separator-multi-button]) [data-separator-content]{grid-column:unset;grid-row:unset}@supports (width:1cqi){:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-both],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down],:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up],[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-up]{border-top-left-radius:6px;border-bottom-left-radius:6px}[data-separator-multi-button]:is([data-separator=line-info] [data-separator-wrapper]) [data-expand-down]{border-bottom-left-radius:unset;border-top-left-radius:unset}}}@media (pointer:fine){[data-separator-wrapper][data-separator-multi-button]{grid-template-rows:50% 50%;display:grid}[data-separator-wrapper][data-separator-multi-button] [data-separator-content]{grid-area:1/2/-1;min-width:min-content}[data-separator-wrapper][data-separator-multi-button] [data-expand-button]{grid-column:1}[data-separator=line-info] [data-separator-wrapper],[data-separator=line-info] [data-separator-wrapper][data-separator-multi-button]{grid-template-columns:34px auto}[data-separator=line-info-basic][data-expand-index] [data-separator-wrapper]{grid-template-columns:100% auto}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-up]{border-bottom:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}:is(:is([data-separator=line-info],[data-separator=line-info-basic]) [data-separator-multi-button]) [data-expand-down]{border-top:1px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg)}}[data-additions] [data-gutter] [data-separator-wrapper],[data-additions] [data-separator=line-info-basic] [data-separator-wrapper],[data-content] [data-separator-wrapper]{display:none}[data-line-annotation]{min-height:var(--diffs-annotation-min-height,0);z-index:2}[data-merge-conflict-actions]{z-index:2}[data-separator=custom]{grid-template-columns:subgrid;display:grid}[data-line],[data-column-number],[data-no-newline]{padding-inline:1ch;position:relative}[data-indicators=classic] [data-line]{padding-inline-start:2ch}:is([data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion]),[data-line]:is([data-indicators=classic] [data-line-type=change-addition],[data-indicators=classic] [data-line-type=change-deletion])):before{-webkit-user-select:none;user-select:none;width:1ch;height:1lh;display:inline-block;position:absolute;top:0;left:0}:is([data-line]:is([data-indicators=classic] [data-line-type=change-addition]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-addition])):before{content:"+";color:var(--diffs-addition-base)}:is([data-line]:is([data-indicators=classic] [data-line-type=change-deletion]),[data-no-newline]:is([data-indicators=classic] [data-line-type=change-deletion])):before{content:"-";color:var(--diffs-deletion-base)}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion],[data-indicators=bars] [data-line-type=change-addition]):before{content:"";-webkit-user-select:none;user-select:none;contain:strict;width:4px;height:100%;display:block;position:absolute;top:0;left:0}[data-column-number]:is([data-indicators=bars] [data-line-type=change-deletion]):before{background-image:linear-gradient(0deg, var(--diffs-bg-deletion) 50%, var(--diffs-deletion-base) 50%);background-repeat:repeat;background-size:2px 2px;background-size:calc(1lh/round(1lh / 2px)) calc(1lh/round(1lh / 2px))}[data-column-number]:is([data-indicators=bars] [data-line-type=change-addition]):before{background-color:var(--diffs-addition-base)}[data-overflow=wrap] [data-line],[data-overflow=wrap] [data-annotation-content]{white-space:pre-wrap;word-break:break-word}[data-overflow=scroll] [data-line]{white-space:pre;min-height:1lh}[data-column-number]{box-sizing:content-box;text-align:right;-webkit-user-select:none;user-select:none;color:var(--diffs-fg-number);padding-left:2ch}[data-line-number-content]{min-width:var(--diffs-min-number-column-width,var(--diffs-min-number-column-width-default,3ch));z-index:1;display:inline-block;position:relative}[data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]{min-width:4px;padding:0}:is([data-disable-line-numbers] [data-gutter-buffer],[data-disable-line-numbers] [data-column-number]):before{min-width:0}[data-disable-line-numbers] [data-line-number-content]{display:none}[data-disable-line-numbers] [data-gutter-utility-slot]{right:unset;justify-content:flex-start;left:0}[data-disable-line-numbers][data-indicators=bars] [data-gutter-utility-slot]{left:6px}[data-file][data-disable-line-numbers] [data-gutter-buffer],[data-file][data-disable-line-numbers] [data-column-number]{border-right:0;min-width:0}[data-diff-span]{-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:3px}[data-line-type=change-addition] [data-diff-span]{background-color:var(--diffs-bg-addition-emphasis)}[data-line-type=change-deletion] [data-diff-span]{background-color:var(--diffs-bg-deletion-emphasis)}[data-merge-conflict=marker-start],[data-merge-conflict=marker-base],[data-merge-conflict=marker-separator],[data-merge-conflict=marker-end]{color:var(--diffs-fg);padding-left:1ch}[data-merge-conflict=marker-start],[data-merge-conflict=marker-end]{align-items:center;display:flex}:is([data-merge-conflict=marker-start],[data-merge-conflict=marker-end]):after{color:var(--diffs-fg-conflict-marker);font-size:.75rem;font-style:normal;line-height:1.25rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));padding-left:1ch}[data-merge-conflict=marker-start]:after{content:"(Current Change)"}[data-merge-conflict=marker-end]:after{content:"(Incoming Change)"}[data-merge-conflict-actions-content]{min-height:1.75rem;font-family:var(--diffs-header-font-family,var(--diffs-header-font-fallback));color:var(--diffs-fg);align-items:center;gap:.25rem;padding-inline:.5rem;font-size:.75rem;line-height:1.2;display:flex}[data-merge-conflict-action]{appearance:none;color:var(--diffs-fg-number);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-style:normal}[data-merge-conflict-action]:hover{color:var(--diffs-fg)}[data-merge-conflict-action=current]:hover{color:var(--diffs-addition-base)}[data-merge-conflict-action=incoming]:hover{color:var(--diffs-modified-base)}[data-merge-conflict-action-separator]{color:var(--diffs-fg-number);opacity:.6;-webkit-user-select:none;user-select:none}[data-diffs-header=default]{background-color:var(--diffs-bg);justify-content:space-between;align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));min-height:calc(1lh + var(--diffs-gap-block,var(--diffs-gap-fallback))*3);z-index:2;flex-direction:row;padding-inline:16px;display:flex;position:relative;top:0}[data-header-content]{align-items:center;gap:var(--diffs-gap-inline,var(--diffs-gap-fallback));white-space:nowrap;flex-direction:row;min-width:0;display:flex}[data-header-content] [data-prev-name],[data-header-content] [data-title]{text-overflow:ellipsis;white-space:nowrap;direction:rtl;min-width:0;overflow:hidden}[data-prev-name]{opacity:.7}[data-rename-icon]{fill:currentColor;flex-grow:0;flex-shrink:0}[data-diffs-header=default] [data-metadata]{white-space:nowrap;align-items:center;gap:1ch;display:flex}[data-diffs-header=default] [data-additions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-addition-base)}[data-diffs-header=default] [data-deletions-count]{font-family:var(--diffs-font-family,var(--diffs-font-fallback));color:var(--diffs-deletion-base)}[data-change-icon]{fill:currentColor;flex-shrink:0}[data-change-icon=change],[data-change-icon=rename-pure],[data-change-icon=rename-changed]{color:var(--diffs-modified-base)}[data-change-icon=new]{color:var(--diffs-addition-base)}[data-change-icon=deleted]{color:var(--diffs-deletion-base)}[data-change-icon=file]{opacity:.6}[data-annotation-content]{z-index:2;isolation:isolate;align-self:flex-start;min-width:0;display:flow-root;position:relative}[data-overflow=scroll] [data-annotation-content],[data-overflow=scroll] [data-merge-conflict-actions-content]{width:var(--diffs-column-content-width,auto);left:var(--diffs-column-number-width,0);position:sticky}[data-annotation-slot]{text-wrap-mode:wrap;word-break:normal;white-space-collapse:collapse}[data-gutter-utility-slot]{touch-action:none;justify-content:flex-end;display:flex;position:absolute;top:0;bottom:0;right:0}[data-utility-button]{appearance:none;cursor:pointer;width:1lh;height:1lh;font-size:var(--diffs-font-size,13px);line-height:var(--diffs-line-height,20px);background-color:var(--diffs-modified-base);color:var(--diffs-bg);fill:currentColor;z-index:4;touch-action:none;border:none;border-radius:4px;justify-content:center;align-items:center;margin-right:calc(1ch - 1lh);padding:0;display:flex;position:relative}[data-utility-button]:before{content:"";display:block;position:absolute;inset:0 0 0 -4px}[data-decoration-bar-stack]{pointer-events:none;isolation:isolate;z-index:1;background-color:var(--diffs-decoration-bar-color,transparent);box-sizing:content-box;border-left:2px solid var(--diffs-bg);border-right:2px solid var(--diffs-bg);width:6px;position:absolute;top:0;bottom:0;right:-2px}[data-decoration-bar-depth="1"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 20%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="2"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 45%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-depth="3"] [data-decoration-bar-stack]{background-color:color-mix(in lab, var(--diffs-bg) 65%, var(--diffs-decoration-bar-color,transparent))}[data-decoration-bar-start] [data-decoration-bar-stack]{border-top-left-radius:5px;border-top-right-radius:5px}[data-decoration-bar-end] [data-decoration-bar-stack]{z-index:3;border-bottom-right-radius:5px;border-bottom-left-radius:5px}[data-placeholder]{contain:strict}[data-error-wrapper]{padding:var(--diffs-gap-block,var(--diffs-gap-fallback)) var(--diffs-gap-inline,var(--diffs-gap-fallback));scrollbar-width:none;max-height:400px;overflow:auto}[data-error-wrapper] [data-error-message]{color:var(--diffs-deletion-base);font-size:18px;font-weight:700}[data-error-wrapper] [data-error-stack]{color:var(--diffs-fg-number)}}@layer theme,rendered,unsafe;
|
|
@layer theme {
|
|
|
|
}</style><style data-theme-css="">@layer base, theme, rendered, unsafe;
|
|
@layer rendered {
|
|
:host {
|
|
--diffs-scrollbar-gutter-measured: var(--diffs-scrollbar-gutter-fallback);
|
|
--diffs-dark:#fafafa;--diffs-dark-bg:#0a0a0a;--diffs-dark-addition-color:#07c480;--diffs-dark-deletion-color:#ff2e3f;--diffs-dark-modified-color:#009fff;--diffs-light:#0a0a0a;--diffs-light-bg:#ffffff;--diffs-light-addition-color:#18a46c;--diffs-light-deletion-color:#d52c36;--diffs-light-modified-color:#009fff;
|
|
}
|
|
}</style><div data-diffs-header="default" data-change-type="change"><div data-header-content=""><slot name="header-prefix"></slot><svg width="16" height="16" viewBox="0 0 16 16" data-change-icon="change"><use href="#diffs-icon-symbol-modified"></use></svg><div data-title=""><bdi>Tests/StreamResolverTests.swift</bdi></div></div><div data-metadata=""><span data-additions-count="">+36</span><slot name="header-metadata"></slot></div></div><pre data-diff="" data-diff-type="split" data-overflow="scroll" data-background="" data-indicators="bars" tabindex="0" style="--diffs-min-number-column-width-default:3ch;" data-dehydrated=""><code data-code="" data-container-size="" data-deletions=""><div data-gutter="" style="grid-row: span 50"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="17" data-line-index="16,16"><span data-line-number-content="">17</span></div><div data-line-type="context" data-column-number="18" data-line-index="17,17"><span data-line-number-content="">18</span></div><div data-line-type="context" data-column-number="19" data-line-index="18,18"><span data-line-number-content="">19</span></div><div data-gutter-buffer="buffer" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh);"></div><div data-line-type="context" data-column-number="20" data-line-index="20,20"><span data-line-number-content="">20</span></div><div data-line-type="context" data-column-number="21" data-line-index="21,21"><span data-line-number-content="">21</span></div><div data-line-type="context" data-column-number="22" data-line-index="22,22"><span data-line-number-content="">22</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">453 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="476" data-line-index="476,476"><span data-line-number-content="">476</span></div><div data-line-type="context" data-column-number="477" data-line-index="477,477"><span data-line-number-content="">477</span></div><div data-line-type="context" data-column-number="478" data-line-index="478,478"><span data-line-number-content="">478</span></div><div data-gutter-buffer="buffer" data-buffer-size="35" style="grid-row: span 35;min-height:calc(35 * 1lh);"></div><div data-line-type="context" data-column-number="479" data-line-index="514,514"><span data-line-number-content="">479</span></div><div data-line-type="context" data-column-number="480" data-line-index="515,515"><span data-line-number-content="">480</span></div><div data-line-type="context" data-column-number="481" data-line-index="516,516"><span data-line-number-content="">481</span></div></div><div data-content="" style="grid-row: span 50"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line="17" data-alt-line="17" data-line-type="context" data-line-index="16,16"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesV3DownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="18" data-alt-line="18" data-line-type="context" data-line-index="17,17"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesNestedDownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="19" data-alt-line="19" data-line-type="context" data-line-index="18,18"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverCachesStremioDownloadBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-content-buffer="" data-buffer-size="1" style="grid-row: span 1;min-height:calc(1 * 1lh)"></div><div data-line="20" data-alt-line="21" data-line-type="context" data-line-index="20,20"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="21" data-alt-line="22" data-line-type="context" data-line-index="21,21"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRedirectToDirectSubtitle</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="22" data-alt-line="23" data-line-type="context" data-line-index="22,22"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRejectsNonSubtitleAPIResponse</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">453 unmodified lines</span></div></div></div><div data-line="476" data-alt-line="477" data-line-type="context" data-line-index="476,476"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">cachedBody, subtitleBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="477" data-alt-line="478" data-line-type="context" data-line-index="477,477"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="478" data-alt-line="479" data-line-type="context" data-line-index="478,478">
|
|
</div><div data-content-buffer="" data-buffer-size="35" style="grid-row: span 35;min-height:calc(35 * 1lh)"></div><div data-line="479" data-alt-line="515" data-line-type="context" data-line-index="514,514"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="480" data-alt-line="516" data-line-type="context" data-line-index="515,515"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handler</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="481" data-alt-line="517" data-line-type="context" data-line-index="516,516"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div></div></code><code data-code="" data-container-size="" data-additions=""><div data-gutter="" style="grid-row: span 50"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="17" data-line-index="16,16"><span data-line-number-content="">17</span></div><div data-line-type="context" data-column-number="18" data-line-index="17,17"><span data-line-number-content="">18</span></div><div data-line-type="context" data-column-number="19" data-line-index="18,18"><span data-line-number-content="">19</span></div><div data-line-type="change-addition" data-column-number="20" data-line-index="19,19"><span data-line-number-content="">20</span></div><div data-line-type="context" data-column-number="21" data-line-index="20,20"><span data-line-number-content="">21</span></div><div data-line-type="context" data-column-number="22" data-line-index="21,21"><span data-line-number-content="">22</span></div><div data-line-type="context" data-column-number="23" data-line-index="22,22"><span data-line-number-content="">23</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">453 unmodified lines</span></div></div></div><div data-line-type="context" data-column-number="477" data-line-index="476,476"><span data-line-number-content="">477</span></div><div data-line-type="context" data-column-number="478" data-line-index="477,477"><span data-line-number-content="">478</span></div><div data-line-type="context" data-column-number="479" data-line-index="478,478"><span data-line-number-content="">479</span></div><div data-line-type="change-addition" data-column-number="480" data-line-index="479,479"><span data-line-number-content="">480</span></div><div data-line-type="change-addition" data-column-number="481" data-line-index="480,480"><span data-line-number-content="">481</span></div><div data-line-type="change-addition" data-column-number="482" data-line-index="481,481"><span data-line-number-content="">482</span></div><div data-line-type="change-addition" data-column-number="483" data-line-index="482,482"><span data-line-number-content="">483</span></div><div data-line-type="change-addition" data-column-number="484" data-line-index="483,483"><span data-line-number-content="">484</span></div><div data-line-type="change-addition" data-column-number="485" data-line-index="484,484"><span data-line-number-content="">485</span></div><div data-line-type="change-addition" data-column-number="486" data-line-index="485,485"><span data-line-number-content="">486</span></div><div data-line-type="change-addition" data-column-number="487" data-line-index="486,486"><span data-line-number-content="">487</span></div><div data-line-type="change-addition" data-column-number="488" data-line-index="487,487"><span data-line-number-content="">488</span></div><div data-line-type="change-addition" data-column-number="489" data-line-index="488,488"><span data-line-number-content="">489</span></div><div data-line-type="change-addition" data-column-number="490" data-line-index="489,489"><span data-line-number-content="">490</span></div><div data-line-type="change-addition" data-column-number="491" data-line-index="490,490"><span data-line-number-content="">491</span></div><div data-line-type="change-addition" data-column-number="492" data-line-index="491,491"><span data-line-number-content="">492</span></div><div data-line-type="change-addition" data-column-number="493" data-line-index="492,492"><span data-line-number-content="">493</span></div><div data-line-type="change-addition" data-column-number="494" data-line-index="493,493"><span data-line-number-content="">494</span></div><div data-line-type="change-addition" data-column-number="495" data-line-index="494,494"><span data-line-number-content="">495</span></div><div data-line-type="change-addition" data-column-number="496" data-line-index="495,495"><span data-line-number-content="">496</span></div><div data-line-type="change-addition" data-column-number="497" data-line-index="496,496"><span data-line-number-content="">497</span></div><div data-line-type="change-addition" data-column-number="498" data-line-index="497,497"><span data-line-number-content="">498</span></div><div data-line-type="change-addition" data-column-number="499" data-line-index="498,498"><span data-line-number-content="">499</span></div><div data-line-type="change-addition" data-column-number="500" data-line-index="499,499"><span data-line-number-content="">500</span></div><div data-line-type="change-addition" data-column-number="501" data-line-index="500,500"><span data-line-number-content="">501</span></div><div data-line-type="change-addition" data-column-number="502" data-line-index="501,501"><span data-line-number-content="">502</span></div><div data-line-type="change-addition" data-column-number="503" data-line-index="502,502"><span data-line-number-content="">503</span></div><div data-line-type="change-addition" data-column-number="504" data-line-index="503,503"><span data-line-number-content="">504</span></div><div data-line-type="change-addition" data-column-number="505" data-line-index="504,504"><span data-line-number-content="">505</span></div><div data-line-type="change-addition" data-column-number="506" data-line-index="505,505"><span data-line-number-content="">506</span></div><div data-line-type="change-addition" data-column-number="507" data-line-index="506,506"><span data-line-number-content="">507</span></div><div data-line-type="change-addition" data-column-number="508" data-line-index="507,507"><span data-line-number-content="">508</span></div><div data-line-type="change-addition" data-column-number="509" data-line-index="508,508"><span data-line-number-content="">509</span></div><div data-line-type="change-addition" data-column-number="510" data-line-index="509,509"><span data-line-number-content="">510</span></div><div data-line-type="change-addition" data-column-number="511" data-line-index="510,510"><span data-line-number-content="">511</span></div><div data-line-type="change-addition" data-column-number="512" data-line-index="511,511"><span data-line-number-content="">512</span></div><div data-line-type="change-addition" data-column-number="513" data-line-index="512,512"><span data-line-number-content="">513</span></div><div data-line-type="change-addition" data-column-number="514" data-line-index="513,513"><span data-line-number-content="">514</span></div><div data-line-type="context" data-column-number="515" data-line-index="514,514"><span data-line-number-content="">515</span></div><div data-line-type="context" data-column-number="516" data-line-index="515,515"><span data-line-number-content="">516</span></div><div data-line-type="context" data-column-number="517" data-line-index="516,516"><span data-line-number-content="">517</span></div></div><div data-content="" style="grid-row: span 50"><div data-separator="line-info" data-separator-first=""><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">16 unmodified lines</span></div></div></div><div data-line="17" data-alt-line="17" data-line-type="context" data-line-index="16,16"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesV3DownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="18" data-alt-line="18" data-line-type="context" data-line-index="17,17"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testOpenSubtitlesNestedDownloadResponseResolution</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="19" data-alt-line="19" data-line-type="context" data-line-index="18,18"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverCachesStremioDownloadBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="20" data-line-type="change-addition" data-line-index="19,19"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverCachesPlainStremioDownloadBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="21" data-alt-line="20" data-line-type="context" data-line-index="20,20"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="22" data-alt-line="21" data-line-type="context" data-line-index="21,21"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRedirectToDirectSubtitle</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-line="23" data-alt-line="22" data-line-type="context" data-line-index="22,22"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverRejectsNonSubtitleAPIResponse</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span></div><div data-separator="line-info"><div data-separator-wrapper=""><div data-separator-content=""><span data-unmodified-lines="">453 unmodified lines</span></div></div></div><div data-line="477" data-alt-line="476" data-line-type="context" data-line-index="476,476"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">cachedBody, subtitleBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="478" data-alt-line="477" data-line-type="context" data-line-index="477,477"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> }</span></div><div data-line="479" data-alt-line="478" data-line-type="context" data-line-index="478,478">
|
|
</div><div data-line="480" data-line-type="change-addition" data-line-index="479,479"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverCachesPlainStremioDownloadBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="481" data-line-type="change-addition" data-line-index="480,480"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> sourceURL </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "https://subs5.strem.io/en/download/subencoding-stremio-utf8/src-api/file/1952341942"</span></div><div data-line="482" data-line-type="change-addition" data-line-index="481,481"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> subtitleBody </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> """</span></div><div data-line="483" data-line-type="change-addition" data-line-index="482,482"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> 00:01.000 --> 00:02.000</span></div><div data-line="484" data-line-type="change-addition" data-line-index="483,483"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> Plain cue text without an index</span></div><div data-line="485" data-line-type="change-addition" data-line-index="484,484">
|
|
</div><div data-line="486" data-line-type="change-addition" data-line-index="485,485"><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> """</span></div><div data-line="487" data-line-type="change-addition" data-line-index="486,486"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handler</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="488" data-line-type="change-addition" data-line-index="487,487"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div><div data-line="489" data-line-type="change-addition" data-line-index="488,488"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> sourceURL</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">:</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> (</span></div><div data-line="490" data-line-type="change-addition" data-line-index="489,489"><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> 200</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="491" data-line-type="change-addition" data-line-index="490,490"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">string</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> sourceURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)!</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">,</span></div><div data-line="492" data-line-type="change-addition" data-line-index="491,491"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> subtitleBody.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">data</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">using</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)!</span></div><div data-line="493" data-line-type="change-addition" data-line-index="492,492"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> )</span></div><div data-line="494" data-line-type="change-addition" data-line-index="493,493"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> ]</span></div><div data-line="495" data-line-type="change-addition" data-line-index="494,494">
|
|
</div><div data-line="496" data-line-type="change-addition" data-line-index="495,495"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cacheDirectory </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> FileManager.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">default</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">temporaryDirectory</span></div><div data-line="497" data-line-type="change-addition" data-line-index="496,496"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> .</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">appendingPathComponent</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"DreamioSubtitleResolverTests-</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">\(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">UUID</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">uuidString</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61">)</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, isDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> true</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="498" data-line-type="change-addition" data-line-index="497,497"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> defer</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="499" data-line-type="change-addition" data-line-index="498,498"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> try</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> FileManager.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">default</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A">.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">removeItem</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">at</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="500" data-line-type="change-addition" data-line-index="499,499"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="501" data-line-type="change-addition" data-line-index="500,500">
|
|
</div><div data-line="502" data-line-type="change-addition" data-line-index="501,501"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> resolver </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> SubtitleResolver</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">session</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> mockSession</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, cacheDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> cacheDirectory</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="503" data-line-type="change-addition" data-line-index="502,502"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> candidate </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> await</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> resolver.</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">resolve</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">SubtitleCandidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span></div><div data-line="504" data-line-type="change-addition" data-line-index="503,503"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> url</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> URL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">string</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> sourceURL</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)!</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">,</span></div><div data-line="505" data-line-type="change-addition" data-line-index="504,504"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> label</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "English"</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">,</span></div><div data-line="506" data-line-type="change-addition" data-line-index="505,505"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> language</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43"> "eng"</span></div><div data-line="507" data-line-type="change-addition" data-line-index="506,506"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> ))</span></div><div data-line="508" data-line-type="change-addition" data-line-index="507,507">
|
|
</div><div data-line="509" data-line-type="change-addition" data-line-index="508,508"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">isFileURL</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7">true</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="510" data-line-type="change-addition" data-line-index="509,509"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">pathExtension</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">, </span><span style="--diffs-token-dark:#5ECC71;--diffs-token-light:#199F43">"srt"</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="511" data-line-type="change-addition" data-line-index="510,510"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> let</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> cachedBody </span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">=</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> try</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">?</span><span style="--diffs-token-dark:#FFAB16;--diffs-token-light:#D5901C"> String</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">contentsOf</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> candidate</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">!</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">.url, encoding</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">:</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> .utf8</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="512" data-line-type="change-addition" data-line-index="511,511"><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> assertEqual</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">(</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF">cachedBody, subtitleBody</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">)</span></div><div data-line="513" data-line-type="change-addition" data-line-index="512,512"><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> }</span></div><div data-line="514" data-line-type="change-addition" data-line-index="513,513">
|
|
</div><div data-line="515" data-alt-line="479" data-line-type="context" data-line-index="514,514"><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> private</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> static</span><span style="--diffs-token-dark:#D568EA;--diffs-token-light:#A631BE"> func</span><span style="--diffs-token-dark:#9D6AFB;--diffs-token-light:#693ACF"> testSubtitleResolverDownloadJSONReturningLink</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363">()</span><span style="--diffs-token-dark:#FF678D;--diffs-token-light:#D32A61"> async</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> {</span></div><div data-line="516" data-alt-line="480" data-line-type="context" data-line-index="515,515"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handler</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#68CDF2;--diffs-token-light:#1CA1C7"> nil</span></div><div data-line="517" data-alt-line="481" data-line-type="context" data-line-index="516,516"><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> MockURLProtocol.</span><span style="--diffs-token-dark:#FFA359;--diffs-token-light:#D47628">handlers</span><span style="--diffs-token-dark:#636363;--diffs-token-light:#636363"> =</span><span style="--diffs-token-dark:#FAFAFA;--diffs-token-light:#0A0A0A"> [</span></div></div></code></pre></div>
|
|
<h3>Related issues or PRs</h3>
|
|
<p>Related Beads issue: <code>dreamio-8oe</code>.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Expected Impact for End-Users</h2>
|
|
<p>When an MKV stream opens through the real local range buffer, subtitles discovered before playback should still appear in the captions menu and be eligible for auto-selection once VLC exposes the track list. Stremio subtitle downloads should now reach VLC as local subtitle files rather than extensionless provider URLs, including plain cue-text payloads that do not match classic indexed SRT.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Validation</h2>
|
|
<ul>
|
|
<li>Ran <code>git diff --check</code>: passed.</li>
|
|
<li>Ran <code>pod install</code> to restore missing local CocoaPods support files in this worktree.</li>
|
|
<li>Ran <code>xcodebuild -workspace Dreamio.xcworkspace -scheme Dreamio -destination 'generic/platform=iOS Simulator' -quiet build</code>: passed.</li>
|
|
<li>Ran <code>swiftc -parse-as-library -D DEBUG Dreamio/StreamCandidate.swift Dreamio/StreamResolver.swift Dreamio/ProgressiveHTTPRangeCache.swift Tests/StreamResolverTests.swift -o /tmp/StreamResolverTests && /tmp/StreamResolverTests</code>: passed, including the Stremio subtitle cache tests for strict SRT and plain cue text.</li>
|
|
<li>The build still reports existing MobileVLCKit warnings about simulator deployment target and a run-script phase, but compilation succeeded.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Issues, Limitations, and Mitigations</h2>
|
|
<p>This addresses the pre-media attachment race shown in the logs and the follow-on issue where extensionless Stremio subtitle download URLs were accepted by VLC without visible tracks. If a provider returns a compressed archive, a non-UTF-8 payload, HTML/XML, JSON without a direct subtitle link, or a format VLC cannot parse after local caching, that would still need a separate resolver enhancement.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Follow-up Work</h2>
|
|
<ul>
|
|
<li>Re-test on device with the South Park stream and confirm the log order changes to queued subtitles followed by <code>flushing queued subtitles</code> after <code>opening mode=local-cache</code>.</li>
|
|
<li>Re-test on device and look for <code>[DreamioSubtitles] cached subtitle</code> followed by VLC attachment logs with <code>ext=srt</code>, <code>ext=vtt</code>, or <code>ext=ass</code>. If rejection still occurs, inspect the new <code>preview=</code> field in the rejection log.</li>
|
|
<li>If tracks still do not appear after local caching, capture whether VLC receives file URLs and whether MobileVLCKit reports any subtitle import errors.</li>
|
|
</ul>
|
|
</section>
|
|
</main>
|
|
</body>
|
|
</html>
|