From 69d71365d4d1afb0ac568398b79677f27a505cd2 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 15:48:44 +1000 Subject: [PATCH 01/73] Fix the five bugs from the review: new snapshots, re-runs, and documents that stopped being read The five items under Bugs in todo.md, each with tests that fail without the fix. - The viewer no longer asks for a verified file. It was declared RequiresTarget, so for a snapshot with no verified file EmptyFiles wrote a placeholder before the viewer heard of the pair, and the viewer compared against it as though it were the expected file: a blank page, or a 212 byte PDF it could not open, which also hid the received text. EmptyFiles has no file for .geojson, .gpx, .kml, .topojson, .wkt, .wkb, .fgb or .geoparquet, so for those the launch ended at NoEmptyFileForExtension and nothing was raised at all. The viewer reads a missing target as the empty side of a new snapshot, which is what it now gets. - A pair that arrives again saying what the queued one says leaves the reader where they are, as an inline patch already did. A test that keeps failing the same way sends its pair on every run, and each one opened the entry again: back at its first change and first page, fitted, with the menu closed. The entry is replaced by one that reads the same and carries the new stamps, never kept as the same object, because TrackedWatch applies what a pass found by reference and a pass that looked while the run had cleared its received file found it gone. A document is compared by its bytes, since its text is read after it arrives and the arrival may not have it yet. - DocumentWatch's loop no longer ends on a fault. A copy that could not be written into the cache, because something held the file or the disk was full, threw out of the pass, the loop said so once and returned, and no document was read or drawn again until the viewer was restarted. A turn that fails now says why, once for as long as that stays the reason, and is tried again, and the status line is given back when it gets through. Nothing is marked as started before everything that can fail has been done, so a drawing whose copy could not be written is not left as a spinner. A file that could not be read for a moment is tried again too, rather than recorded as changed. - A PDF left behind after the timeout no longer disables PDFs for the life of the window. The flag is cleared when the call that was left behind returns, and a PDF opened meanwhile waits for it and is then read, with nothing recorded against it. The timeout is counted from the last page to land rather than from the start, so a long document that keeps landing pages is not given up on part way through. - A setting one viewer put back to its default is no longer restored by another viewer's next write. A default is stored as no line at all, and each write laid everything this viewer held back over the file wherever the file had no value, so the projection one window reset came back with the other's window position. A write is now the file as it stands with the one key changed, plus any of this viewer's own whose earlier write failed. --- claude.md | 8 +- docs/diff-tool.md | 2 + docs/mdsource/diff-tool.source.md | 2 + docs/mdsource/viewer.source.md | 2 +- docs/viewer.md | 2 +- src/DiffEngine.Tests/DefinitionsTest.cs | 13 + .../Implementation/DiffEngineViewer.cs | 7 +- .../DocumentWatchTests.cs | 224 +++++++++++++++++- src/DiffEngineViewer.Tests/EngineDiffTests.cs | 66 +++++- .../FileTypeLaunchTests.cs | 51 ++++ src/DiffEngineViewer.Tests/ReEnqueueTests.cs | 139 +++++++++++ .../ViewerPreferencesTests.cs | 82 +++++++ .../Documents/DocumentWatch.cs | 222 +++++++++++++---- src/DiffEngineViewer/ViewerPreferences.cs | 81 +++++-- src/DiffEngineViewer/ViewerSession.cs | 84 +++++++ todo.md | 44 +--- 16 files changed, 910 insertions(+), 119 deletions(-) diff --git a/claude.md b/claude.md index 0df077359..8d2a856c9 100644 --- a/claude.md +++ b/claude.md @@ -204,7 +204,13 @@ apart. documents)`, `TrackedEntry`, `TrackedWatch`, `OwnerLink`, `MessageHandler` - never found by each, so a test process does not read with whatever folder sits beside it. - In process, by choice: a native fault in PDFium or Skia ends the window. A hang is given up on - after `DocumentWatch.Timeout`, and a PDF left behind holds PDFium's lock, so PDFs then fail at once. + once `DocumentWatch.Timeout` passes with nothing coming of it - counted from the last page to + land, not from the start, so a long document that keeps landing pages is never left behind. A + PDF left behind holds PDFium's lock until its call returns, so PDFs wait for that + (`AwaitPdfium`) rather than failing: nothing is recorded against a document for a reason that + is not about it. The same goes for a copy that could not be written. Both throw out of `Pump` + before anything is marked as started, and `Turn` says why, once, and tries again - the loop + never ends on a fault, which used to stop every document until the viewer was restarted. - `FileSide.Read` only hashes a document, because it runs on the listener thread a test process waits on. `DocumentWatch` (owned, attached and file modes) does the slow part, for the entry on screen only - never the next one ahead of time, because a call into Morph or PDFium cannot be diff --git a/docs/diff-tool.md b/docs/diff-tool.md index 74de560a9..86cc74e14 100644 --- a/docs/diff-tool.md +++ b/docs/diff-tool.md @@ -17,6 +17,8 @@ Behavior depends on if an [EmptyFiles](https://github.com/SimonCropp/EmptyFiles) * If an EmptyFiles can be found matching the current extension, then the tool will be launched to compare the input to that empty file. * If no EmptyFiles can be found no tool will be launched. +The bundled [DiffEngineViewer](/docs/viewer.md) is the exception. It needs no file to compare against, so none is written: the input is shown against an empty side, and stays that way until it is accepted. That holds for every extension, including those with no EmptyFiles. + ## Detected difference behavior diff --git a/docs/mdsource/diff-tool.source.md b/docs/mdsource/diff-tool.source.md index 7b00f11d2..99f4fc032 100644 --- a/docs/mdsource/diff-tool.source.md +++ b/docs/mdsource/diff-tool.source.md @@ -10,6 +10,8 @@ Behavior depends on if an [EmptyFiles](https://github.com/SimonCropp/EmptyFiles) * If an EmptyFiles can be found matching the current extension, then the tool will be launched to compare the input to that empty file. * If no EmptyFiles can be found no tool will be launched. +The bundled [DiffEngineViewer](/docs/viewer.md) is the exception. It needs no file to compare against, so none is written: the input is shown against an empty side, and stays that way until it is accepted. That holds for every extension, including those with no EmptyFiles. + ## Detected difference behavior diff --git a/docs/mdsource/viewer.source.md b/docs/mdsource/viewer.source.md index 65a6c2e71..75ea4a2b5 100644 --- a/docs/mdsource/viewer.source.md +++ b/docs/mdsource/viewer.source.md @@ -294,7 +294,7 @@ A document opens at its first page that differs, the way a text comparison opens The status line says what is known about the pair as it becomes known: `reading text` and `drawing` while that happens, which page is showing and which differ, `every page draws the same` when the files differ only where nothing shows, and `documents are identical` when the bytes match. Each pane's header names the page it shows, `received.pdf (page 2 of 5)`, or `(no page 6)` when that side has fewer. -Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: a document that hangs is given up on after two minutes, but one that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. +Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: a document is given up on once two minutes pass with nothing coming of it, neither its text nor another page, and a PDF opened while that one is still being read waits for it rather than failing. A copy that could not be taken, because the disk was full or something held the file, is said in the status line and tried again. One that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. A file that is not the document its extension says is ordinary — a test that failed part way through writing its snapshot, an empty file, an error page saved as a PDF — and is reported rather than drawn. The status line says so once, about the file: `could not read report.received.docx: Not a readable Word document: it is not a zip archive, or was cut short`, or `The file is empty`. Its pane shows what the file is and how large instead of text, its header says `(not drawn)`, and the other side, if it is whole, is still read and drawn. Nothing about it carries over to the next document. diff --git a/docs/viewer.md b/docs/viewer.md index 59bd23dea..1496a187d 100644 --- a/docs/viewer.md +++ b/docs/viewer.md @@ -301,7 +301,7 @@ A document opens at its first page that differs, the way a text comparison opens The status line says what is known about the pair as it becomes known: `reading text` and `drawing` while that happens, which page is showing and which differ, `every page draws the same` when the files differ only where nothing shows, and `documents are identical` when the bytes match. Each pane's header names the page it shows, `received.pdf (page 2 of 5)`, or `(no page 6)` when that side has fewer. -Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: a document that hangs is given up on after two minutes, but one that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. +Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: a document is given up on once two minutes pass with nothing coming of it, neither its text nor another page, and a PDF opened while that one is still being read waits for it rather than failing. A copy that could not be taken, because the disk was full or something held the file, is said in the status line and tried again. One that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. A file that is not the document its extension says is ordinary — a test that failed part way through writing its snapshot, an empty file, an error page saved as a PDF — and is reported rather than drawn. The status line says so once, about the file: `could not read report.received.docx: Not a readable Word document: it is not a zip archive, or was cut short`, or `The file is empty`. Its pane shows what the file is and how large instead of text, its header says `(not drawn)`, and the other side, if it is whole, is still read and drawn. Nothing about it carries over to the next document. diff --git a/src/DiffEngine.Tests/DefinitionsTest.cs b/src/DiffEngine.Tests/DefinitionsTest.cs index b32079cda..40bb4fe92 100644 --- a/src/DiffEngine.Tests/DefinitionsTest.cs +++ b/src/DiffEngine.Tests/DefinitionsTest.cs @@ -92,6 +92,19 @@ public async Task ToolOrderMatchesEnumOrder() await Assert.That(definitionsOrder).IsEqualTo(enumOrder); } + /// + /// The viewer reads a missing target as the empty side of a new snapshot, so it is the one + /// tool here that must not be handed a placeholder: it compares against whatever is written, + /// and EmptyFiles has nothing to write for most of the map formats the viewer is the only + /// tool for, which ended the launch. + /// + [Test] + public async Task TheViewerDoesNotNeedATarget() + { + var viewer = Definitions.Tools.Single(_ => _.Tool == DiffTool.DiffEngineViewer); + await Assert.That(viewer.RequiresTarget).IsFalse(); + } + [Test] public void WriteDefaultOrder() { diff --git a/src/DiffEngine/Implementation/DiffEngineViewer.cs b/src/DiffEngine/Implementation/DiffEngineViewer.cs index 2e05ce8d2..bd064f5de 100644 --- a/src/DiffEngine/Implementation/DiffEngineViewer.cs +++ b/src/DiffEngine/Implementation/DiffEngineViewer.cs @@ -12,7 +12,12 @@ public static Definition DiffEngineViewer() AutoRefresh: false, IsMdi: false, SupportsText: true, - RequiresTarget: true, + // A new snapshot has no verified file, and the viewer says so: it reads a missing + // target as an empty side. Asking for one meant EmptyFiles wrote a placeholder first, + // which the viewer then compared against as though it were the expected file - an + // empty PDF it could not open, a blank page - and for the maps, which EmptyFiles has + // no file for, that the pair never reached the viewer at all. + RequiresTarget: false, BinaryExtensions: ImageExtensions.All, Cost: "Free", OsSupport: new( diff --git a/src/DiffEngineViewer.Tests/DocumentWatchTests.cs b/src/DiffEngineViewer.Tests/DocumentWatchTests.cs index ece3a1cbe..114215c64 100644 --- a/src/DiffEngineViewer.Tests/DocumentWatchTests.cs +++ b/src/DiffEngineViewer.Tests/DocumentWatchTests.cs @@ -247,6 +247,224 @@ public async Task ACallThatNeverReturnsIsLeftBehind() } } + /// + /// A long document lands a page every so often for longer than the timeout, which is how long + /// it may go with nothing coming of it, not how long it may take. Counted from its start, it + /// was given up on part way through with pages still arriving. + /// + [Test] + public async Task ADocumentThatKeepsLandingPagesIsNotGivenUpOn() + { + var (host, documents) = Owned("alpha\nbravo\ncharlie", "alpha"); + var watch = new DocumentWatch(host, documents.Plugin) + { + Timeout = TimeSpan.FromSeconds(2) + }; + watch.Pump(); + // Three pages at 0.8 seconds each: longer than the timeout in all, well inside it apiece + documents.Landing = () => Thread.Sleep(800); + + watch.Pump(); + + var rendering = DocumentPages.Of(host.State, host.State.Current!.LeftDocument)!; + await Assert.That(rendering.Failure).IsNull(); + await Assert.That(rendering.Pages.Count).IsEqualTo(3); + } + + /// + /// PDFium reads one document at a time, so while a PDF that was left behind is still inside it + /// the next one waits, and is read when that call returns. It used to fail at once, and so did + /// every PDF after it until the viewer was restarted, however long PDFium had been free. + /// + [Test] + public async Task APdfWaitsForTheOneLeftBehindAndIsThenRead() + { + var release = new ManualResetEventSlim(); + try + { + var (host, documents) = Owned("alpha", "bravo"); + var watch = new DocumentWatch(host, documents.Plugin) + { + Timeout = TimeSpan.FromMilliseconds(200) + }; + watch.Pump(); + documents.Landing = release.Wait; + watch.Pump(); + documents.Landing = null; + var right = host.State.Current!.RightDocument; + + var wait = watch.Turn(); + + // Not a job done and not a failure of this document: nothing is recorded against it + await Assert.That(wait).IsNotNull(); + await Assert.That(host.State.Message!).Contains("sample.verified.pdf is waiting for an earlier PDF"); + await Assert.That(DocumentPages.Of(host.State, right)).IsNull(); + + release.Set(); + await Until(() => + { + watch.Turn(); + return DocumentPages.Of(host.State, right) is { Complete: true }; + }); + + var rendering = DocumentPages.Of(host.State, right)!; + await Assert.That(rendering.Failure).IsNull(); + await Assert.That(rendering.Pages.Count).IsEqualTo(1); + await Assert.That(host.State.Message).IsNull(); + } + finally + { + release.Set(); + } + } + + /// + /// The viewer's own copy of a document could not be written: something had the file, the disk + /// was full. That says nothing about the document, so nothing is recorded against it. The + /// reason is said, and the next turn tries again. + /// + [Test] + public async Task ACopyThatCannotBeWrittenIsSaidAndTriedAgain() + { + var (host, documents) = Owned("alpha", "bravo"); + var watch = new DocumentWatch(host, documents.Plugin); + var blocked = Block(documents, host.State.Current!.LeftDocument); + + var wait = watch.Turn(); + + await Assert.That(wait).IsNotNull(); + await Assert.That(host.State.Message!).StartsWith("Could not read the documents: "); + await Assert.That(host.State.Current!.LeftDocument!.Value.Reading).IsTrue(); + await Assert.That(documents.Texts).IsEqualTo(0); + + Directory.Delete(blocked); + while (watch.Turn() is null) + { + } + + var entry = host.State.Current!; + await Assert.That(entry.LeftText).IsEqualTo("alpha"); + await Assert.That(entry.LeftDocument!.Value.Unreadable).IsNull(); + var rendering = DocumentPages.Of(host.State, entry.LeftDocument)!; + await Assert.That(rendering.Failure).IsNull(); + await Assert.That(rendering.Pages.Count).IsEqualTo(1); + // And the status line stops giving a reason for a document that has now been read + await Assert.That(host.State.Message).IsNull(); + } + + /// + /// A drawing is marked as started so that it is never started twice, which made one whose copy + /// then could not be written a spinner for as long as its entry stayed in the queue. An SVG's + /// text is the file itself, so drawing it is the first thing to want the copy. + /// + [Test] + public async Task ADrawingWhoseCopyCouldNotBeWrittenIsNotLeftAsStarted() + { + var (host, documents) = Owned("alpha", "bravo", ".svg"); + var watch = new DocumentWatch(host, documents.Plugin); + var left = host.State.Current!.LeftDocument; + var blocked = Block(documents, left); + + watch.Turn(); + + await Assert.That(host.State.Message!).StartsWith("Could not read the documents: "); + await Assert.That(DocumentPages.Of(host.State, left)).IsNull(); + + Directory.Delete(blocked); + while (watch.Turn() is null) + { + } + + var rendering = DocumentPages.Of(host.State, left)!; + await Assert.That(rendering.Complete).IsTrue(); + await Assert.That(rendering.Pages.Count).IsEqualTo(1); + } + + /// + /// The turn comes round again for as long as the copy cannot be written, and says why once: + /// said on each, it took the status line back from whatever the reader did in between. + /// + [Test] + public async Task WhatIsInTheWayIsSaidOnce() + { + var (host, documents) = Owned("alpha", "bravo"); + var watch = new DocumentWatch(host, documents.Plugin); + var blocked = Block(documents, host.State.Current!.LeftDocument); + watch.Turn(); + host.Mutate(_ => _ with { Message = "Copied 3 lines" }); + + watch.Turn(); + + await Assert.That(host.State.Message).IsEqualTo("Copied 3 lines"); + + // Nor does it take the line back as what was in the way goes: that clears only its own + Directory.Delete(blocked); + while (watch.Turn() is null) + { + } + + await Assert.That(host.State.Current!.HasText).IsTrue(); + await Assert.That(host.State.Message).IsEqualTo("Copied 3 lines"); + } + + /// + /// The loop itself, on its own thread as the viewer runs it. A turn that failed used to be its + /// last: the reason was said and the loop returned, and no document was read or drawn again + /// until the viewer was restarted. + /// + [Test] + public async Task TheLoopOutlivesATurnThatFailed() + { + var (host, documents) = Owned("alpha", "bravo"); + var blocked = Block(documents, host.State.Current!.LeftDocument); + using var cancel = new CancelSource(); + var watch = new DocumentWatch(host, documents.Plugin); + var loop = Task.Run(() => watch.Run(cancel.Token)); + try + { + await Until(() => host.State.Message is not null); + await Assert.That(host.State.Message!).StartsWith("Could not read the documents: "); + + Directory.Delete(blocked); + await Until(() => + host.State.Current!.HasText && + DocumentPages.Of(host.State, host.State.Current.RightDocument) is { Complete: true }); + + await Assert.That(loop.IsCompleted).IsFalse(); + } + finally + { + cancel.Cancel(); + await loop; + } + } + + /// + /// A directory where a side's copy is written aside before it is moved into place, which is + /// what a file that cannot be written looks like on every platform. Returned to be deleted, + /// which is whatever was in the way going. + /// + static string Block(FakeDocuments documents, DocumentFile? side) + { + var extension = Path.GetExtension(side!.Value.Path); + var partial = Path.Combine(documents.Cache.For(side.Value.Hash!), $"source{extension}.partial"); + return Directory.CreateDirectory(partial).FullName; + } + + static async Task Until(Func condition) + { + var timer = Stopwatch.StartNew(); + while (!condition()) + { + if (timer.Elapsed > TimeSpan.FromSeconds(30)) + { + throw new("Still waiting after 30 seconds."); + } + + await Task.Delay(20); + } + } + /// /// Replacing an entry an accept-all has claimed would lose what it records about it, so the /// text waits for the batch to finish. @@ -262,12 +480,12 @@ public async Task TextWaitsForAnAcceptAll() await Assert.That(host.State.Current!.LeftDocument!.Value.Reading).IsTrue(); } - (SessionHost Host, FakeDocuments Documents) Owned(string left, string right) + (SessionHost Host, FakeDocuments Documents) Owned(string left, string right, string extension = ".pdf") { var documents = new FakeDocuments(); disposables.Add(documents); - var leftFile = Write("sample.received.pdf", left); - var rightFile = Write("sample.verified.pdf", right); + var leftFile = Write($"sample.received{extension}", left); + var rightFile = Write($"sample.verified{extension}", right); var entry = QueueEntry.ForFiles( leftFile, rightFile, diff --git a/src/DiffEngineViewer.Tests/EngineDiffTests.cs b/src/DiffEngineViewer.Tests/EngineDiffTests.cs index 4c723f1fb..90b412891 100644 --- a/src/DiffEngineViewer.Tests/EngineDiffTests.cs +++ b/src/DiffEngineViewer.Tests/EngineDiffTests.cs @@ -77,6 +77,33 @@ public async Task ARepeatOfThePairReplacesIt() await Assert.That(entry.LeftText).IsEqualTo("changed"); } + /// + /// And one that says what the last said, which is what a test that keeps failing the same way + /// sends on every run, leaves the reader where they are. It used to open the entry again, at + /// its first change, under whoever was half way down it. + /// + [Test] + public async Task ARepeatOfAnUnchangedPairLeavesTheReaderWhereTheyAre() + { + using var scope = new EngineScope(); + var received = Path.Combine(directory, "Deep.Test.received.txt"); + var target = Path.Combine(directory, "Deep.Test.verified.txt"); + await File.WriteAllTextAsync(received, Fixtures.Deep(true)); + await File.WriteAllTextAsync(target, Fixtures.Deep(false)); + await EngineRunner.LaunchAsync(Viewer(), received, target); + var host = scope.Fixture.Host; + var opened = host.State.ScrollTop; + var scrolled = host.Mutate(_ => ViewerSession.Apply(_, CommandKind.PageDown)).ScrollTop; + await Assert.That(scrolled).IsNotEqualTo(opened); + + // The next run writes what the last one wrote + await File.WriteAllTextAsync(received, Fixtures.Deep(true)); + await EngineRunner.LaunchAsync(Viewer(), received, target); + + await Assert.That(host.State.ScrollTop).IsEqualTo(scrolled); + await Assert.That(host.State.Queue).HasSingleItem(); + } + /// /// Settling is what replaces killing the window for a tool that had one per pair, and it names /// one entry: the pair beside it stays. @@ -97,6 +124,39 @@ await Assert.That(scope.Fixture.Host.State.Queue.Single().Key) .IsEqualTo(TrackedKeys.ForMove(second.Received)); } + /// + /// The first run of a snapshot has no verified file, and the pair reaches the viewer as that. + /// + /// The viewer was declared as needing a target, so EmptyFiles wrote a placeholder before the + /// viewer heard of the pair, and the viewer compared against it as though it were the expected + /// file: a blank page, or an empty PDF it could not open. An extension EmptyFiles has no file + /// for stopped the launch there, which is every map but one, so nothing was raised over a new + /// map snapshot at all. + /// + /// + [Test] + [Arguments(".txt")] + [Arguments(".png")] + [Arguments(".pdf")] + [Arguments(".geojson")] + public async Task ANewSnapshotArrivesWithNoPlaceholderWritten(string extension) + { + using var scope = new EngineScope(); + var received = Path.Combine(directory, $"New.Test.received{extension}"); + var target = Path.Combine(directory, $"New.Test.verified{extension}"); + await File.WriteAllTextAsync(received, "received"); + + var result = await EngineRunner.LaunchAsync(Viewer(), received, target); + + await Assert.That(result).IsEqualTo(EngineLaunchResult.AlreadyRunningAndSupportsRefresh); + await Assert.That(File.Exists(target)).IsFalse(); + var entry = scope.Fixture.Host.State.Queue.Single(); + await Assert.That(entry.Key).IsEqualTo(TrackedKeys.ForMove(received)); + // Nothing on the expected side, rather than a file that happens to be empty + await Assert.That(entry.RightStamp).IsNull(); + await Assert.That(scope.Fixture.Windows).IsEquivalentTo([WindowCommand.Focus]); + } + static EngineResolvedTool Viewer() => new( nameof(EngineTool.DiffEngineViewer), @@ -109,7 +169,11 @@ static EngineResolvedTool Viewer() => isMdi: false, autoRefresh: false, binaryExtensions: [], - requiresTarget: true, + // As the viewer that ships is declared, since whether a target is written first is + // part of the route being covered + requiresTarget: engine::DiffEngine.Definitions.Tools + .Single(_ => _.Tool == EngineTool.DiffEngineViewer) + .RequiresTarget, supportsText: true, useShellExecute: false); diff --git a/src/DiffEngineViewer.Tests/FileTypeLaunchTests.cs b/src/DiffEngineViewer.Tests/FileTypeLaunchTests.cs index bb263eb9d..7e49eb379 100644 --- a/src/DiffEngineViewer.Tests/FileTypeLaunchTests.cs +++ b/src/DiffEngineViewer.Tests/FileTypeLaunchTests.cs @@ -267,6 +267,57 @@ public async Task DamagedDocuments() await ManualViewer.WaitForClose(); } + /// + /// The first run of a snapshot: a received file and nothing verified beside it, for every type + /// the viewer is offered. What DiffEngine does about the missing file is decided per extension + /// before the viewer hears of the pair, and it used to write a placeholder there, or give up + /// where it had none to write, which was most of the maps. + /// + [Test] + [Explicit] + [Arguments(".png")] + [Arguments(".jpg")] + [Arguments(".pdf")] + [Arguments(".docx")] + [Arguments(".xlsx")] + [Arguments(".pptx")] + [Arguments(".svg")] + [Arguments(".geojson")] + [Arguments(".topojson")] + [Arguments(".kml")] + [Arguments(".gpx")] + [Arguments(".wkt")] + [Arguments(".kmz")] + [Arguments(".wkb")] + [Arguments(".fgb")] + [Arguments(".geoparquet")] + public async Task NewSnapshot(string extension) + { + await Assert.That(EngineTools.IsDetectedForExtension(EngineTool.DiffEngineViewer, extension)).IsTrue(); + + var directory = ManualViewer.TempDirectory(); + var temp = Path.Combine(directory.FullName, $"Sample.received{extension}"); + var target = Path.Combine(directory.FullName, $"Sample.verified{extension}"); + var image = extension is ".png" or ".jpg"; + await File.WriteAllBytesAsync(temp, image ? SampleImages.Build(extension, 220, 40, 40) : Whole(extension)); + + ManualViewer.Expect( + $"New snapshot {extension}", + $"Headers Sample.received{extension} and Sample.verified{extension}", + "The right pane is empty, with no picture, no page and no spinner left turning", + image + ? "The left pane has the picture's rows, each marked added, and the picture under them" + : "The left pane has the document's text, every line marked added, and its drawing under it", + $"The status line says only Sample.received{extension} exists, and nothing about a file that could not be read", + $"No Sample.verified{extension} is written beside the received file until Accept is pressed"); + + var result = await EngineRunner.LaunchAsync(EngineTool.DiffEngineViewer, temp, target); + + await Assert.That(result).IsEqualTo(EngineLaunch.StartedNewInstance); + await Assert.That(File.Exists(target)).IsFalse(); + await ManualViewer.WaitForClose(); + } + static byte[] Whole(string extension) => extension switch { diff --git a/src/DiffEngineViewer.Tests/ReEnqueueTests.cs b/src/DiffEngineViewer.Tests/ReEnqueueTests.cs index 345e5b7e3..31b49120d 100644 --- a/src/DiffEngineViewer.Tests/ReEnqueueTests.cs +++ b/src/DiffEngineViewer.Tests/ReEnqueueTests.cs @@ -45,6 +45,145 @@ static SessionState Scrolled() return state; } + /// + /// The same for a pair of files. A test that keeps failing the same way sends its pair on every + /// run, built again from files that hold what they held, and each one used to open the entry + /// afresh: back at its first change, with the menu closed. + /// + [Test] + public async Task An_identical_pair_arriving_again_leaves_the_reader_alone() + { + var state = ViewerSession.OpenMenu(ScrolledPair(), 0); + await Assert.That(state.Menu).IsNotNull(); + + var again = ViewerSession.EnqueueTracked(state, Pair(Fixtures.Deep(true), written: 2)); + + await Assert.That(again.ScrollTop).IsEqualTo(state.ScrollTop); + await Assert.That(again.Menu).IsSameReferenceAs(state.Menu); + await Assert.That(again.Queue).HasSingleItem(); + // The run rewrote the file, and the entry has to say so or the watch reads it a third time + await Assert.That(again.Queue[0].LeftStamp).IsEqualTo(new FileStamp(2, 1)); + } + + [Test] + public async Task A_pair_arriving_again_with_different_content_starts_at_its_first_change() + { + var state = ViewerSession.OpenMenu(ScrolledPair(), 0); + + var again = ViewerSession.EnqueueTracked(state, Pair($"{Fixtures.Deep(true)}\nand one more line", written: 2)); + + await Assert.That(again.ScrollTop).IsEqualTo(26); + // Opened over the entry that was there, which this one is not + await Assert.That(again.Menu).IsNull(); + } + + /// + /// Kept as it reads, but not as the object it was. applies what a + /// pass found by reference, and a pass that looked while the run had cleared its received file + /// found it gone: applied to the pair the run then staged again, that dropped an entry whose + /// file was there. + /// + [Test] + public async Task A_pass_that_found_the_file_gone_does_not_take_the_pair_staged_again() + { + var state = ScrolledPair(); + var seen = state.Queue[0]; + + var again = ViewerSession.EnqueueTracked(state, Pair(Fixtures.Deep(true), written: 2)); + var refreshed = ViewerSession.Refresh(again, [seen], []); + + await Assert.That(refreshed.Queue).HasSingleItem(); + await Assert.That(refreshed.ScrollTop).IsEqualTo(state.ScrollTop); + } + + /// + /// A document's text is read after it arrives, so a pair arriving again has less in it than the + /// entry already read. That entry stays, on the page and at the zoom it was being looked at. + /// + [Test] + public async Task A_document_arriving_again_keeps_its_text_its_page_and_its_zoom() + { + var state = ViewerSession.EnqueueTracked( + SessionState.Start(ViewerMode.Inline, 210, Fixtures.Rows), + Document(read: true)); + state = DocumentScreenTests.Drawn(state); + state = ViewerSession.Apply(state, CommandKind.NextPage); + state = ViewerSession.Apply(state, CommandKind.ZoomIn); + await Assert.That(state.Page).IsEqualTo(2); + await Assert.That(state.Zoom).IsEqualTo(1); + + var again = ViewerSession.EnqueueTracked(state, Document(read: false)); + + await Assert.That(again.Current!.HasText).IsTrue(); + await Assert.That(again.Current.LeftText).IsEqualTo(DocumentScreenTests.LeftText); + await Assert.That(again.Page).IsEqualTo(2); + await Assert.That(again.Zoom).IsEqualTo(1); + } + + /// + /// The same file holding other bytes is another document, however far along the old one was. + /// + [Test] + public async Task A_document_rewritten_with_other_bytes_is_opened_afresh() + { + var state = ViewerSession.EnqueueTracked( + SessionState.Start(ViewerMode.Inline, 210, Fixtures.Rows), + Document(read: true)); + state = ViewerSession.Apply(DocumentScreenTests.Drawn(state), CommandKind.NextPage); + + var again = ViewerSession.EnqueueTracked(state, Document(read: false, leftHash: "CC")); + + await Assert.That(again.Current!.HasText).IsFalse(); + await Assert.That(again.Page).IsNull(); + } + + /// + /// A tracked pair of sixty lines, scrolled away from where it opened, as + /// is for a patch. + /// + static SessionState ScrolledPair() + { + var opened = ViewerSession.EnqueueTracked( + SessionState.Start(ViewerMode.Inline, Fixtures.Columns, Fixtures.Rows), + Pair(Fixtures.Deep(true), written: 1)); + var state = ViewerSession.Apply(opened, CommandKind.PageDown); + if (opened.ScrollTop != 26 || + state.ScrollTop == 26) + { + throw new("The entry did not open at its first change and then scroll, so nothing below asserts anything."); + } + + return state; + } + + static QueueEntry Pair(string received, long written) => + QueueEntry.ForMove( + "move:temp/sample.received.txt", + "Sample.Test (txt)", + null, + "temp/sample.received.txt", + "code/sample.verified.txt", + new(received, new FileStamp(written, 1), null, null), + new(Fixtures.Deep(false), new FileStamp(1, 1), null, null)); + + /// + /// A PDF pair as it arrives, hashed and with its text still to read, or as it is once + /// has read it. + /// + static QueueEntry Document(bool read, string leftHash = "AA") + { + var left = DocumentScreenTests.Left with { Hash = leftHash, Reading = !read }; + var right = DocumentScreenTests.Right with { Reading = !read }; + return QueueEntry.ForMove( + "move:temp/sample.received.pdf", + "Sample.Test (pdf)", + null, + "temp/sample.received.pdf", + "code/sample.verified.pdf", + new(read ? DocumentScreenTests.LeftText : "", new FileStamp(1, 1), null, null, left), + new(read ? DocumentScreenTests.RightText : "", new FileStamp(1, 1), null, null, right)); + } + static InlinePatch Patch(string content) => Fixtures.Patch("A.cs", 1, Fixtures.Literal(Fixtures.Deep(false)), content); diff --git a/src/DiffEngineViewer.Tests/ViewerPreferencesTests.cs b/src/DiffEngineViewer.Tests/ViewerPreferencesTests.cs index 069e3aec9..554283a97 100644 --- a/src/DiffEngineViewer.Tests/ViewerPreferencesTests.cs +++ b/src/DiffEngineViewer.Tests/ViewerPreferencesTests.cs @@ -96,6 +96,88 @@ public async Task AWriteKeepsWhatAnotherViewerWroteSince() await Assert.That(read.Window).IsEqualTo(new WindowPlacement(5, 6, 700, 500, false)); } + /// + /// A setting at its default is kept as no line at all, so putting one back takes a line out of + /// the file. The other viewer read that line when it started, and used to write it back with + /// the next thing it remembered, since the file no longer had a value of its own to keep. + /// + [Test] + public async Task ASettingAnotherViewerPutBackToItsDefaultStaysThere() + { + using var directory = new TempDirectory(); + var path = directory.File("viewer.settings"); + var before = new ViewerPreferences(path) + { + Projection = MapProjection.Goode, + Drawings = new Dictionary + { + [DocumentFormat.Pdf] = DrawingView.Picture + } + }; + await Assert.That(before.Projection).IsEqualTo(MapProjection.Goode); + var first = new ViewerPreferences(path); + + // A second viewer, started after the first, puts both back + var second = new ViewerPreferences(path) + { + Projection = MapProjection.Auto, + Drawings = new Dictionary() + }; + await Assert.That(second.Get("projection")).IsNull(); + first.Window = new(5, 6, 700, 500, false); + + var read = new ViewerPreferences(path); + await Assert.That(read.Projection).IsEqualTo(MapProjection.Auto); + await Assert.That(read.Drawings).IsEmpty(); + await Assert.That(read.Window).IsEqualTo(new WindowPlacement(5, 6, 700, 500, false)); + } + + /// + /// The viewer still showing the old setting is asked what it shows after every frame that did + /// something. That is not a change of its own, so it writes nothing: what it holds is its own + /// view, never brought up to date with a file it then looks different from. + /// + [Test] + public async Task SayingWhatIsOnScreenDoesNotUndoAnotherViewersChange() + { + using var directory = new TempDirectory(); + var path = directory.File("viewer.settings"); + new ViewerPreferences(path).Projection = MapProjection.Goode; + var first = new ViewerPreferences(path); + var state = first.Apply(SessionState.Start(ViewerMode.Inline)); + await Assert.That(state.Projection).IsEqualTo(MapProjection.Goode); + + new ViewerPreferences(path).Projection = MapProjection.Auto; + first.Window = new(5, 6, 700, 500, false); + first.Remember(state); + + await Assert.That(new ViewerPreferences(path).Projection).IsEqualTo(MapProjection.Auto); + await Assert.That(first.Projection).IsEqualTo(MapProjection.Goode); + } + + /// + /// A setting whose write failed is still this viewer's to write, and goes with the next one + /// that can be: here a directory was in the way of the file, then was not. + /// + [Test] + public async Task ASettingThatCouldNotBeWrittenGoesWithTheNextThatCan() + { + using var directory = new TempDirectory(); + var path = directory.File("viewer.settings"); + Directory.CreateDirectory(path); + var preferences = new ViewerPreferences(path) + { + Projection = MapProjection.Lambert + }; + Directory.Delete(path); + + preferences.Window = new(1, 2, 300, 400, false); + + var read = new ViewerPreferences(path); + await Assert.That(read.Projection).IsEqualTo(MapProjection.Lambert); + await Assert.That(read.Window).IsEqualTo(new WindowPlacement(1, 2, 300, 400, false)); + } + [Test] public async Task NullForgetsAKey() { diff --git a/src/DiffEngineViewer/Documents/DocumentWatch.cs b/src/DiffEngineViewer/Documents/DocumentWatch.cs index 75568dee8..dca4f3561 100644 --- a/src/DiffEngineViewer/Documents/DocumentWatch.cs +++ b/src/DiffEngineViewer/Documents/DocumentWatch.cs @@ -28,9 +28,14 @@ sealed class DocumentWatch(SessionHost host, DocumentPlugin documents) public static TimeSpan Interval { get; set; } = TimeSpan.FromMilliseconds(200); /// - /// How long one document may take to read or draw before it is reported as failed and left - /// behind. Code in this process cannot be stopped, so this does not stop it: it only keeps the - /// documents after it moving. + /// How long a document may go with nothing coming of it - its text, or its next page - before it + /// is reported as failed and left behind. Code in this process cannot be stopped, so this does + /// not stop it: it only keeps the documents after it moving. + /// + /// Not how long the whole document may take. A long one lands a page every so often for longer + /// than any one limit, and counted from its start it was given up on part way through, with + /// pages still arriving. + /// /// public TimeSpan Timeout { get; init; } = TimeSpan.FromMinutes(2); @@ -47,39 +52,108 @@ sealed class DocumentWatch(SessionHost host, DocumentPlugin documents) int generation; /// - /// Set once a PDF has been left behind. PDFium is serialized behind one lock, which the call left - /// behind still holds, so every later PDF would wait on it: they fail at once instead. + /// Set while a PDF that was left behind is still inside PDFium, which is serialized behind one + /// lock: a PDF started now would wait on that call with nothing to bound it. Written from the + /// pool when that call returns. + /// + volatile bool pdfiumHeld; + + /// + /// When something last came of the job in hand: when it started, then as each page landed. /// - bool pdfiumHeld; + long progressed; + + /// + /// What the last turn that could do nothing said, so that it is said once. + /// + string? said; public void Run(Cancel cancel) { while (!cancel.IsCancellationRequested) { - bool worked; - try + // Straight on while there is work, back to waiting once there is none. + if (Turn() is { } wait) { - worked = !Hidden && Pump(); - } - catch (Exception exception) - { - // As TrackedWatch: on a task nothing awaits, so a fault is said out loud rather than - // leaving documents silently never read. - host.Mutate(_ => _ with - { - Message = $"Could not read the documents: {exception.Message}" - }); - return; + cancel.WaitHandle.WaitOne(wait); } + } + } - // Straight on while there is work, back to the interval once there is none. - if (!worked) - { - cancel.WaitHandle.WaitOne(Interval); - } + /// + /// One turn of the loop: a job, and how long to wait before the next, or null to go straight + /// on. Never throws, whatever the job did. Public for the tests, as is. + /// + /// A turn that fails says why and is tried again. It used to end the loop, since this runs on a + /// task nothing awaits and a fault there has to be said out loud - which it was, once, in a + /// status line the next message replaced, and after it no document was read or drawn until the + /// viewer was restarted. What fails a turn is mostly nothing to do with the document: a copy + /// that could not be written because a scanner had the file or the disk was full, a cache + /// directory something cleared away. + /// + /// + public TimeSpan? Turn() + { + try + { + var worked = !Hidden && Pump(); + Unsay(); + return worked ? null : Interval; + } + catch (NotYetException exception) + { + Say(exception.Message); + } + catch (Exception exception) + { + Say($"Could not read the documents: {exception.Message}"); } + + // Longer than an idle pass waits: what was in the way is usually still there a moment + // later, and trying again reads and hashes the document before it finds that out. + return Interval * 5; } + /// + /// Why a turn could do nothing, in the status line. Once for as long as it stays the reason: the + /// turn comes round again every second, and a message set on each would take the status line + /// from everything else that has something to say there. + /// + void Say(string message) + { + if (message == said) + { + return; + } + + said = message; + host.Mutate(_ => _ with { Message = message }); + } + + /// + /// A turn got through, so whatever was in the way has gone and what was said about it goes + /// too: left there, the status line went on giving a reason for a document that had since been + /// read. Only when it is still what the status line says, since anything the reader has done + /// in between has had its own to say. + /// + void Unsay() + { + if (said is not { } message) + { + return; + } + + said = null; + host.Mutate(_ => _.Message == message ? _ with { Message = null } : _); + } + + /// + /// A job that cannot be started yet, as opposed to one that failed: nothing is recorded against + /// the document, and the next turn tries it again. + /// + sealed class NotYetException(string message) : + Exception(message); + /// /// One job: the first thing the entry on screen wants that is not there yet. True when there was /// one, so the loop goes again without waiting. Public for the tests, which drive it directly @@ -140,6 +214,7 @@ bool ReadText(SessionState state, QueueEntry entry) Extraction Extract(DocumentFile side) { + AwaitPdfium(side); if (Copy(side) is not { } source) { return new(null, "the file changed while it was being read."); @@ -176,6 +251,25 @@ bool Draw(SessionState state, QueueEntry entry) /// void Render(DocumentFile side, string key, MapProjection projection) { + // Everything that can say "not now" comes before anything is recorded. A rendering marked + // as started is never started again, so one that then could not be - its copy not written, + // PDFium not free - was a spinner turning for as long as its entry stayed in the queue. + AwaitPdfium(side); + if (Copy(side) is not { } source) + { + host.Mutate(_ => ViewerSession.Rendered(_, key, new([], true, "the file changed while it was being drawn."))); + return; + } + + var directory = Path.GetDirectoryName(source)!; + // A folder per projection the reader chose, under the document's own. A page is a path to + // the heads, which keep what they decoded from one, so the same map drawn another way has + // to be another file rather than the same one rewritten. + if (key != side.Hash) + { + directory = Directory.CreateDirectory(Path.Combine(directory, projection.ToString())).FullName; + } + host.Mutate(_ => ViewerSession.Rendered(_, key, Rendering.Started)); var token = Volatile.Read(ref generation); var pages = new List(); @@ -195,27 +289,12 @@ void Landed(string file) landed = pages.ToArray(); } + // Something came of it, so the wait for the next page starts over + Volatile.Write(ref progressed, Stopwatch.GetTimestamp()); host.Mutate(_ => ViewerSession.Rendered(_, key, new(landed, false))); } - string? failure; - if (Copy(side) is not { } source) - { - failure = "the file changed while it was being drawn."; - } - else - { - var directory = Path.GetDirectoryName(source)!; - // A folder per projection the reader chose, under the document's own. A page is a - // path to the heads, which keep what they decoded from one, so the same map drawn - // another way has to be another file rather than the same one rewritten. - if (key != side.Hash) - { - directory = Directory.CreateDirectory(Path.Combine(directory, projection.ToString())).FullName; - } - - failure = Run(side.Format, () => documents.Render(source, directory, Landed, projection)); - } + var failure = Run(side.Format, () => documents.Render(source, directory, Landed, projection)); RenderedPage[] complete; lock (pages) @@ -246,6 +325,12 @@ static RenderedPage Page(string file) /// The viewer's own copy of a side, made once per content hash, and only when the file still /// holds the bytes the side describes: what is read and drawn is then exactly what the hash /// keys. Null when the file has changed or gone since, which the next read of it will show. + /// + /// Throws when the copy could not be made for any other reason: the file held by something + /// else for a moment, or the cache not written to because a scanner had the new file, the disk + /// was full or the directory had been cleared away. None of those is about the document, so + /// none is recorded against it. says what was thrown and tries again. + /// /// string? Copy(DocumentFile side) { @@ -262,7 +347,7 @@ static RenderedPage Page(string file) bytes = FileSide.ReadBytes(side.Path); } catch (Exception exception) - when (exception is IOException or UnauthorizedAccessException) + when (exception is FileNotFoundException or DirectoryNotFoundException) { return null; } @@ -280,25 +365,50 @@ static RenderedPage Page(string file) } /// - /// One call into the documents assembly, bounded by . Null when it - /// finished, otherwise why it did not. + /// A PDF waits while one that was left behind is still inside PDFium, here, where the reader + /// can be told why, rather than on PDFium's lock with nothing to bound it. It is read once that + /// call has returned. + /// + /// Not a failure of this document, so nothing is recorded against it. It used to be one: every + /// PDF after a slow one failed at once, for the life of the window, PDFium long since free. + /// /// - string? Run(DocumentFormat format, Action job) + void AwaitPdfium(DocumentFile side) { - if (format == DocumentFormat.Pdf && + if (side.Format == DocumentFormat.Pdf && pdfiumHeld) { - return "an earlier PDF is still being read, and PDFium reads one at a time. Restart the viewer to read PDFs again."; + throw new NotYetException($"{Path.GetFileName(side.Path)} is waiting for an earlier PDF that is still being read, since PDFium reads one at a time. Restart the viewer if that one never finishes."); } + } + + /// + /// One call into the documents assembly, left behind once has passed with + /// nothing coming of it. Null when it finished, otherwise why it did not. + /// + string? Run(DocumentFormat format, Action job) + { + Volatile.Write(ref progressed, Stopwatch.GetTimestamp()); // On the pool, whose threads are background ones, so a call left behind cannot keep the // process alive once the window has closed. var task = Task.Run(job); try { - if (task.Wait(Timeout)) + while (true) { - return null; + // Counted from the last page to land. Reading text lands nothing, so for that it + // is counted from the start. + var remaining = Timeout - Stopwatch.GetElapsedTime(Volatile.Read(ref progressed)); + if (remaining <= TimeSpan.Zero) + { + break; + } + + if (task.Wait(remaining)) + { + return null; + } } } catch (AggregateException exception) @@ -309,12 +419,24 @@ static RenderedPage Page(string file) Interlocked.Increment(ref generation); if (format == DocumentFormat.Pdf) { + // Set first, so a call that returns in between is one the continuation still clears pdfiumHeld = true; + task.ContinueWith(Released, TaskScheduler.Default); } return $"gave up after {Timeout.TotalSeconds.ToString("0.#", CultureInfo.InvariantCulture)} seconds."; } + /// + /// The call that was left behind has returned, so PDFium is free and PDFs can be read again. + /// + void Released(Task abandoned) + { + // Read, so a call that ended by throwing is not left as a fault nothing observed + _ = abandoned.Exception; + pdfiumHeld = false; + } + /// /// The entry built again from its files, now that its text has been read. By kind, with the same /// key, name and group, the way rebuilds one a re-run rewrote. diff --git a/src/DiffEngineViewer/ViewerPreferences.cs b/src/DiffEngineViewer/ViewerPreferences.cs index a76b29a1d..68db014f7 100644 --- a/src/DiffEngineViewer/ViewerPreferences.cs +++ b/src/DiffEngineViewer/ViewerPreferences.cs @@ -17,13 +17,24 @@ sealed class ViewerPreferences { readonly string? path; readonly Lock gate = new(); - Dictionary values; + + /// + /// What this viewer holds: what the file said when it started, and what it has set since. Its + /// own view rather than the file's, which another viewer can have changed. + /// + readonly Dictionary values; + + /// + /// The keys set here that are not in the file yet, because the write that would have put them + /// there failed. Empty whenever the file can be written. + /// + readonly HashSet unsaved = new(StringComparer.Ordinal); /// The file to keep them in, or null to keep them for this process only. public ViewerPreferences(string? path = null) { this.path = path; - values = Read(); + values = Read() ?? new(StringComparer.Ordinal); } /// @@ -53,6 +64,14 @@ public static ViewerPreferences ForUser() /// /// Null forgets the key. Nothing is written when the value is the one already held, which is /// every close of a window nobody moved. + /// + /// What is written is the file as it is now with this one key changed, since two viewers can + /// be open at once and each knows only what the file said when it started. Everything held + /// here used to be laid back over the file as well, wherever the file had no value for it - + /// and a setting at its default is stored as no value. So one viewer putting the projection + /// back to automatic was undone by the next thing the other remembered, its window's position + /// say, which wrote back the projection it had read hours before. + /// /// public void Set(string key, string? value) { @@ -63,25 +82,33 @@ public void Set(string key, string? value) return; } - // Read again first, so what another viewer wrote since this one started is kept: two - // can be open at once, and each writes only the keys it changed. - var merged = Read(); - foreach (var (held, heldValue) in values) - { - merged.TryAdd(held, heldValue); - } + Store(values, key, value); + unsaved.Add(key); - if (value is null) + // With no file to read - none kept, or one that cannot be read just now - what is + // held here is all there is to go on + var merged = Read() ?? new(values, StringComparer.Ordinal); + foreach (var name in unsaved) { - merged.Remove(key); + Store(merged, name, values.GetValueOrDefault(name)); } - else + + if (Write(merged)) { - merged[key] = value; + unsaved.Clear(); } + } + } - values = merged; - Write(); + static void Store(Dictionary target, string key, string? value) + { + if (value is null) + { + target.Remove(key); + } + else + { + target[key] = value; } } @@ -196,14 +223,19 @@ public void Remember(SessionState state) return null; } - Dictionary Read() + /// + /// The file as it is now. Empty when there is no file, which is nothing remembered. Null when + /// there is nowhere to keep one, or when it could not be read, which says nothing about what + /// it holds. + /// + Dictionary? Read() { - var read = new Dictionary(StringComparer.Ordinal); if (path is null) { - return read; + return null; } + var read = new Dictionary(StringComparer.Ordinal); string[] lines; try { @@ -217,7 +249,7 @@ Dictionary Read() catch (Exception exception) when (exception is IOException or UnauthorizedAccessException) { - return read; + return null; } foreach (var line in lines) @@ -234,13 +266,13 @@ Dictionary Read() /// /// Beside the file and moved over it, so a viewer killed part way through leaves the last - /// whole file rather than half of this one. + /// whole file rather than half of this one. False when it could not be written. /// - void Write() + bool Write(Dictionary content) { if (path is null) { - return; + return true; } // Named for the process, so two viewers writing at once do not write the same one @@ -250,10 +282,11 @@ void Write() Directory.CreateDirectory(Path.GetDirectoryName(path)!); File.WriteAllLines( temp, - values + content .OrderBy(_ => _.Key, StringComparer.Ordinal) .Select(_ => $"{_.Key}={_.Value}")); File.Move(temp, path, overwrite: true); + return true; } catch (Exception exception) when (exception is IOException or UnauthorizedAccessException) @@ -266,6 +299,8 @@ void Write() when (cleanup is IOException or UnauthorizedAccessException) { } + + return false; } } } diff --git a/src/DiffEngineViewer/ViewerSession.cs b/src/DiffEngineViewer/ViewerSession.cs index 6f1b58647..883f2bb49 100644 --- a/src/DiffEngineViewer/ViewerSession.cs +++ b/src/DiffEngineViewer/ViewerSession.cs @@ -140,6 +140,12 @@ public static SessionState Settle(SessionState state, string key, string? origin /// does that on the listener thread, which is the same seam /// takes the tray's through. /// + /// + /// A re-send of what is already queued leaves the reader where they are, as + /// does. A test that keeps failing the same way sends its pair on + /// every run, and each one used to open the entry again: back to its first change and its + /// first page, fitted, with the menu closed. + /// /// public static SessionState EnqueueTracked(SessionState state, QueueEntry entry) { @@ -149,6 +155,13 @@ public static SessionState EnqueueTracked(SessionState state, QueueEntry entry) return state; } + var existing = IndexOf(state.Queue, entry.Key); + if (existing >= 0 && + SameContent(state.Queue[existing], entry)) + { + return Restaged(state, existing, entry); + } + var replacedCurrent = state.Current?.Key == entry.Key; var kept = state.Queue.Where(_ => _.Key != entry.Key); var queue = QueueProjection.Order([..kept, entry]); @@ -172,6 +185,77 @@ public static SessionState EnqueueTracked(SessionState state, QueueEntry entry) return Clamp(next); } + /// + /// The entry already queued for a pair that arrived again saying the same thing, with the + /// files' new stamps and nothing else about the window changed. + /// + /// A new entry all the same, never the one that was there. applies + /// what a pass found by reference, and a pass that looked while the run had cleared its + /// received file found it gone: that must not take the pair the run has since staged again. + /// + /// + /// The queued entry's content rather than the arrival's, because it can be further along: a + /// document's text is read after it arrives, and the arrival may not have it yet. + /// + /// + static SessionState Restaged(SessionState state, int index, QueueEntry entry) + { + var queue = new List(state.Queue); + queue[index] = queue[index] with + { + LeftStamp = entry.LeftStamp, + RightStamp = entry.RightStamp + }; + return Clamp(state with + { + Queue = queue, + // As any arrival: a reason to stay + Exit = false + }); + } + + /// + /// Whether two entries for one key show the same thing: the same files, holding the same + /// text, pictures or documents. Stamps are left out, since a run that rewrites a file with + /// what it already held changes those and nothing a reader can see. + /// + static bool SameContent(QueueEntry queued, QueueEntry arrived) => + queued.Kind == arrived.Kind && + queued.Name == arrived.Name && + queued.Solution == arrived.Solution && + queued.LeftFile == arrived.LeftFile && + queued.TargetFile == arrived.TargetFile && + queued.LeftHeader == arrived.LeftHeader && + queued.RightHeader == arrived.RightHeader && + queued.Warning == arrived.Warning && + SameSide(queued.LeftText, queued.LeftImage, queued.LeftDocument, arrived.LeftText, arrived.LeftImage, arrived.LeftDocument) && + SameSide(queued.RightText, queued.RightImage, queued.RightDocument, arrived.RightText, arrived.RightImage, arrived.RightDocument); + + static bool SameSide( + string text, + ImageFile? image, + DocumentFile? document, + string arrivedText, + ImageFile? arrivedImage, + DocumentFile? arrivedDocument) + { + if (document is { } held && + arrivedDocument is { } sent) + { + // By its bytes. Its text follows from them, and is read after the entry arrives, so + // one of the two may hold it while the other is still waiting for it. + return held.Path == sent.Path && + held.Format == sent.Format && + held.Length == sent.Length && + held.Hash == sent.Hash; + } + + return document is null && + arrivedDocument is null && + image == arrivedImage && + text == arrivedText; + } + /// /// Replaces the queue with what its owner reports, for a viewer that is displaying rather /// than owning: the inline entries plus the owner's tracked moves and deletes, already diff --git a/todo.md b/todo.md index bba7cab55..7a60e7acd 100644 --- a/todo.md +++ b/todo.md @@ -10,40 +10,7 @@ Findings from a review of `main` at 991bc480 (2026-10-03). The list from the rev ## Bugs -- [ ] **A new snapshot of a document or a map never gets a real comparison** (reproduced) - - `src/DiffEngine/Implementation/DiffEngineViewer.cs:15` declares the viewer `RequiresTarget: true`, so for a snapshot with no verified file `DiffRunner.TryCreate` (`src/DiffEngine/DiffRunner.cs:357`) asks EmptyFiles for a placeholder before the viewer is told anything. The viewer does not need one: `FileSide.Read` gives a missing target an empty side (`src/DiffEngineViewer/FileSide.cs:30`), and `TrackedWatch` already treats "no target" as a new snapshot. - - EmptyFiles 8.19.0 has no template for `.geojson`, `.gpx`, `.kml`, `.topojson`, `.wkt`, `.wkb`, `.fgb` or `.geoparquet` (`AllFiles.TryCreateFile` returns false for all eight). `ShouldExitLaunch` (`DiffRunner.cs:347`) then returns `NoEmptyFileForExtension`: no window, and only a plain `AddMove`. Every map format except `.kmz` cannot be reviewed the first time it is verified. - - Where a placeholder is created, it is then read as the expected document: - - `.pdf`: the 212 byte template is refused by PDFium ("Not a readable PDF: file is not a PDF or is corrupt"). The right side is `Unreadable`, so `QueueEntry.HasText` is false and both panes show the two property rows instead of the received text (`src/DiffEngineViewer/QueueEntry.cs:89`). The header says `verified.pdf (not drawn)`. With the target deleted, the same entry shows every received line as added. - - `.svg`: three bytes, a BOM. "Not a readable SVG: Root element is missing." - - `.kmz`: "The map has no features to draw." - - `.docx`, `.xlsx`, `.pptx` draw one blank page, and an image gets a tiny valid one, so those read "differ" where "only the received file exists" is the truth. - - `FileTypeLaunchTests` writes a verified file in every case (`:220`, `:285`, `:344`), so nothing launches the viewer on a pair with no target. - - Fix: `RequiresTarget: false` for the viewer. Then add a no-target case per extension to `FileTypeLaunchTests`. - -- [ ] **A failing file snapshot that runs again throws the reader back to its first change** (reproduced) - - `src/DiffEngineViewer/ViewerSession.cs:152-170` (`EnqueueTracked`): an entry replacing the one on screen always goes through `Open`, which resets the scroll, the page and the zoom, and the menu is cleared either way. `MessageHandler.TrackMove` (`src/DiffEngineViewer/Ipc/MessageHandler.cs:54`) builds a fresh entry for every `Diff` or `Move`, whether or not anything changed. - - Reader scrolled to row 0 of a pair that opens at row 147, with its menu open. The same pair arrives again, byte for byte: row 147, menu closed. The selection goes too, since it is tied to the entry's view. - - `EnqueueInline` avoids exactly this (`ViewerSession.cs:48-55`, "a continuous runner re-sending the same failing snapshot every few seconds used to bounce the reader to the top on every run"), and the same inline patch sent twice keeps the reader at row 179. A watch runner, or re-running one failing test while reading its diff, does this for file snapshots. - - `TrackedWatch` already follows a rewritten file without moving the reader (`Refresh` clamps), so the re-send adds nothing but the reset, plus a second read and diff of both files. - - Fix: when the key is already queued and both texts (or image and document hashes) are equal, keep the existing entry with the new stamps, and open only when the content changed. - -- [ ] **One failed write to the document cache ends document reading for the life of the window** (read) - - `src/DiffEngineViewer/Documents/DocumentWatch.cs:64-72`: any exception out of `Pump` sets a message and returns from `Run`. Nothing restarts it, and the message is replaced by the next thing the status line says. - - `Copy` guards only the read (`:260-268`). `File.WriteAllBytes(partial)` and `File.Move(partial, source)` (`:276-278`) are bare, as are `Cache.For` and, in `Prune`, `RenderCache.Hashes`. A scanner holding the file just written, a full temp drive, or a cleaner that removed the cache directory under a viewer hidden for days all throw there. - - After that every document stepped to shows "reading text" and a spinner until the viewer is restarted. - - Fix: catch inside the loop, say it, wait `Interval` and carry on. For the copy, treat a failed write as "not copied this pass" the way a failed read is. - -- [ ] **A PDF that takes longer than two minutes disables PDFs until restart, even once it finishes** (read) - - `DocumentWatch.cs:286-316` (`Run`): the timeout is on the whole document, and `pdfiumHeld` is set when it passes and never cleared. The reason given is that the call left behind still holds PDFium's lock, which stops being true when that call returns. - - A page of one line of text takes 43 ms to draw here (measured, 100 A4 pages in 4.3 s), so the limit is a few hundred dense pages on a slow machine. The render was making progress the whole time; pages had been landing. - - Fix: clear the flag in a continuation on the abandoned task, and measure the timeout from the last page that landed rather than from the start. - -- [ ] **A setting one viewer put back to its default is restored by another viewer's next write** (reproduced) - - `src/DiffEngineViewer/ViewerPreferences.cs:68-72`: `Set` merges what this process holds over a fresh read with `TryAdd`. `Auto` and `Both` are stored as the key being absent, so a key another viewer removed is one this viewer adds back. - - Two `ViewerPreferences` on one file holding `projection=Goode`. The second sets `Auto`: the file is empty. The first remembers its window: the file is `projection=Goode; window=...`. - - Needs two viewers alive at once, which a viewer hidden behind the tray plus a `DiffEngineViewer left right` is. - - Fix: keep the set of keys this instance has changed, and lay only those over the fresh read. +Nothing open. The five this review found are fixed, each with tests that fail without the fix: a new snapshot reaching the viewer with no placeholder written, a re-sent pair leaving the reader where they are, document reading surviving a copy that could not be written, PDFs read again once a slow one returns, and a setting put back to its default staying there. ## Performance @@ -65,14 +32,14 @@ Findings from a review of `main` at 991bc480 (2026-10-03). The list from the rev - Answer the pair before diffing it: queue the entry with its sides unread and fill it in on `TrackedWatch`'s thread, the way a document arrives `Reading`. - [ ] **"Accept all in" a group still applies the whole group in one transition on the render thread** (read) - - `src/DiffEngineViewer/ViewerProgram.cs:700-711`: only `AcceptAll` is handed to `AcceptAllRunner`. `AcceptGroup` goes to `ViewerSession.Apply` inside `host.Mutate`, where `AcceptGroup` (`src/DiffEngineViewer/ViewerSession.cs:705-764`) runs `InlineApplier` for every member and `SweepTracked` (`:1193`) moves or deletes every file, each move retrying for up to a second when the target is held (`src/DiffEngineViewer/ViewerActions.cs:71-87`). + - `src/DiffEngineViewer/ViewerProgram.cs:700-711`: only `AcceptAll` is handed to `AcceptAllRunner`. `AcceptGroup` goes to `ViewerSession.Apply` inside `host.Mutate`, where `AcceptGroup` (`src/DiffEngineViewer/ViewerSession.cs:789`) runs `InlineApplier` for every member and `SweepTracked` (`:1277`) moves or deletes every file, each move retrying for up to a second when the target is held (`src/DiffEngineViewer/ViewerActions.cs:71-87`). - In a queue with one solution, that header's "Accept all in" is the whole queue: the freeze `AcceptBatch` was written to remove, with the lock held so every arriving `Inline`, `Diff` and listing waits behind it. - Fix: let `BeginAcceptAll` take the keys to sweep, and send a group through the same runner. - [ ] **The right side of a document waits for every page of the left** (measured) - - `src/DiffEngineViewer/Documents/DocumentWatch.cs:160-168`: `Draw` renders the first side without pages to completion and returns. The right side starts on the next pass. + - `src/DiffEngineViewer/Documents/DocumentWatch.cs:218-226`: `Draw` renders the first side without pages to completion and returns. The right side starts on the next pass. - 100 A4 pages take 4.3 s here and the first lands after 87 ms. So the left page is on screen at once, and the right pane spins for 4.3 s, and which pages differ is unknown until both are done. - - Fix: draw both sides at once on two tasks. Two PDFs then take turns at PDFium's lock a page at a time, and two Office files use two cores. The timeout and `generation` become per job. + - Fix: draw both sides at once on two tasks. Two PDFs then take turns at PDFium's lock a page at a time, and two Office files use two cores. The timeout, its `progressed` clock and `generation` become per job. - [ ] **Every pending file is statted five times a second, and the owning watch never slows down** (measured) - `src/DiffEngineViewer/TrackedWatch.cs:27-55` and `src/DiffEngineViewer/Ipc/OwnerLink.cs:344-432`. One pass over 1,000 pending moves is 2,000 stats and takes 25 ms here, so 125 ms of every second. The class doc's "a queue is small enough that the difference is not measurable" holds to about a hundred. @@ -82,6 +49,7 @@ Findings from a review of `main` at 991bc480 (2026-10-03). The list from the rev ## Smaller -- [ ] `QueueProjection.Order` runs twice per transition: `Project` orders (`ViewerSession.cs:1446`) and `Rebuild` (`:1406`) and `Sync` (`:195`) order its result again. (read) +- [ ] A pair sent again unchanged is still read and diffed before it is found to be unchanged: `MessageHandler.TrackMove` builds the whole entry, and `ViewerSession.EnqueueTracked` compares after. The reader is no longer moved, but a large pair pays the diff on every run. Fix: read the two sides, compare them with the queued entry's, and build an entry only when they differ. (read) +- [ ] `QueueProjection.Order` runs twice per transition: `Project` orders (`ViewerSession.cs:1530`) and `Rebuild` (`:1490`) and `Sync` (`:279`) order its result again. (read) - [ ] Opening a context menu builds each side's whole text to ask whether it is empty: `SelectionText.All(entry, side).Length > 0` in `src/DiffEngineViewer/MenuState.cs:98` and `:117`. Megabytes per right-click on a large file. (read) - [ ] `FileSide.ReadBytes` copies every file twice, through a growing `MemoryStream` and then `ToArray` (`src/DiffEngineViewer/FileSide.cs:105`). The length is known. (read) From a01dfc1d0a6871bab642d73b032c4368439f3e32 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 15:55:36 +1000 Subject: [PATCH 02/73] Add the findings of the six per-area reviews to todo.md The review this list came from was run with six others beside it, one each for the library, the inline patcher, the tray, and the Windows, Linux and macOS heads. Their findings arrived after the first list was written and are added here, unfixed, by area. Each says how far it was taken. Four inline patcher findings were reproduced by running the patcher, and the F# one by compiling what it writes with dotnet fsi. Five more were confirmed by reading the code they rest on. The rest are marked as reported, with the reviewer's own evidence, after checking that the code each one quotes is in the tree as quoted. Nothing under a Linux or macOS heading has been run. --- todo.md | 263 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 256 insertions(+), 7 deletions(-) diff --git a/todo.md b/todo.md index 7a60e7acd..9c3e713a7 100644 --- a/todo.md +++ b/todo.md @@ -1,20 +1,165 @@ # Review todo -Findings from a review of `main` at 991bc480 (2026-10-03). The list from the review at 4244ebe6 is closed, so this one weights what has landed since: documents and maps, the text diff, zoom and pan, the remembered window and views, and pictures decoded off the UI thread. +Findings from a review of `main` at 991bc480 (2026-10-03). The list from the review at 4244ebe6 is closed, so this one weights what has landed since: documents and maps, the text diff, zoom and pan, the remembered window and views, and pictures decoded off the UI thread. The five bugs that review found in the viewer's model are fixed and gone from this list. -- **reproduced**: run and seen. Either the API involved, or the repo's own sources compiled into a scratch console project outside the repo (the same files `DiffEngineViewer.csproj` links, plus a `Program.cs`). No test in the repo yet. -- **measured**: timed in that same project. Release, net10.0, this machine. -- **read**: confirmed by reading the code path end to end, not run. -- **cannot verify here**: needs macOS or Linux; the item says what would settle it. +Most of what follows came from six reviews run alongside it, one per area: the library, the inline patcher, the tray, and the Windows, Linux and macOS heads. The word after each title says how far the item was taken. + +- **reproduced**: run and seen by me. Either the API involved, or the repo's own sources compiled into a scratch console project outside the repo. No test in the repo yet. +- **measured**: timed by me in that same project. Release, net10.0, this machine. +- **read**: confirmed by me reading the code path, not run. +- **reported**: found by one of the six reviews and not rerun by me. What follows the word is the reviewer's own evidence: *ran* is a probe of theirs outside the repo, *measured* a timing of theirs, *read* a trace through the code, and *plausible* a reading that rests on something they could not run, with what would settle it. For each of these I checked that the code it quotes is in the tree as quoted, and nothing more. +- Nothing under a Linux or macOS heading has been run by anyone: the C++ and Swift cannot be built from Windows. ## Bugs -Nothing open. The five this review found are fixed, each with tests that fail without the fix: a new snapshot reaching the viewer with no placeholder written, a re-sent pair leaving the reader where they are, document reading surviving a copy that could not be written, PDFs read again once a slow one returns, and a setting put back to its default staying there. +### Library + +- [ ] **A viewer that cannot start is reported as launched, so an inline snapshot is neither queued nor staged** (read; both triggers reported: ran) + - `src/DiffEngine/Viewer/ViewerLaunchGate.cs:119-135` and `:172-188`: `WaitForBind` returns nothing, so a launch that never bound the port is still `Launched`, which `DiffRunner_Inline.cs:104-109` turns into `InlineResult.Queued`. Verify then stages nothing. + - A resolved copy older than the library. The search order is the global tool, the tray's copy, then the bundled one, and a 20.3.1 copy exits 2 on `--payload` ("Unknown argument"), which first shipped in 20.5.0. With no tray running, every failing inline snapshot starts a process that exits at once, waits out the five second `BindWait` holding the gate, and reports `Queued`, until `MaxInstance` is used up. The temp `.inlinepatch` is never deleted. + - No .NET 10 Desktop runtime: the apphost exits 131, or shows a dialog and never exits, with the same result. + - `ViewerLaunchGateTests.AViewerThatNeverAnswersDoesNotHoldTheGateForever` pins `Launched` for a viewer that never binds, on the reasoning that the work went over on the command line. Neither case here reaches code that could stage. + - The NuGet fallback picks the most recently written version folder, not the highest (`FallbackViewerDirectories.cs:94-103`, `WildcardFileFinder.cs:75-77`), so it can also choose a copy from before 20.5. + - Fix: have `ViewerLauncher` return the `Process`, and stop `WaitForBind` as soon as it has exited without the port being owned, reporting `Failed` so the caller stages. Do not resolve a copy older than the launch contract, or try the bundled copy first for launches the library makes itself. + +- [ ] **`DiffRunner.LaunchProcess` hands the test host's handles to tools declared `UseShellExecute: false`** (read; the effect reported: ran, with a stand-in child) + - `src/DiffEngine/DiffRunner.cs:371-380` starts the tool with `UseShellExecute = tool.UseShellExecute` and nothing redirected. `MsWordDiff`, `MsExcelDiff` and `Cursor` are declared `false`, so they inherit the host's stdout pipe, which is what `ViewerLauncher` was rewritten to avoid. + - A host that starts an 8 second child this way and exits has its redirected stdout reach EOF after 8.3 s, against 0.1 s with ShellExecute. `diffword` waits until Word is closed, so `dotnet test` with a failing `.docx` would not return until then. On macOS and Linux every long lived tool is in the same position, ShellExecute or not. + - What would settle it end to end: `dotnet test` with a failing docx while Word stays open. + - Fix: on Windows start these through ShellExecute with `WindowStyle = Hidden`. On Unix reuse `ViewerLauncher.StartInfo`'s redirect and close for GUI tools, not terminal ones such as nvim. + +- [ ] **A launched viewer pins the test host's working directory** (reported: ran) + - `src/DiffEngine/Viewer/ViewerLauncher.cs:151-169` sets no `WorkingDirectory`, so the viewer inherits the host's, commonly the test project's `bin//`. That directory cannot be deleted while the viewer lives, and a viewer can sit hidden behind the tray for the session: `git clean -xdf`, or removing a worktree, fails with no visible culprit. `DiffRunner.cs:373-380` has the same shape. + - Fix: set `WorkingDirectory` to the viewer's own folder or temp. The paths it is handed are absolute. + +### Inline snapshots + +- [ ] **F#: accepting into a call that does not start its line writes source the compiler rejects** (reproduced) + - `src/DiffEngine/Inline/InlinePatcher.cs:498-507` (`TryAppend`), `:1382-1392` (`RenderArgument`), `:1617-1638` (`IndentForSpan`): both indents are measured from the line's leading whitespace, and F#'s offside rule needs the continuation right of the column the expression starts at. + - Append onto `do! Verifier.Verify("findPerson", person).ToTask()`, which is the shape of Verify's own Expecto sample, writes `.Snapshot("c").ToTask()` on the next line at the column of `Verifier`: `error FS0010: Unexpected symbol '.' in expression`. Set to a value of two lines after `let! _ =` fails the same way, at `.ToTask()`. + - By the reviewer's runs under `dotnet fsi`: after `do!`, Append fails and Set compiles. After `let! x =`, `let x =` and a one line `let f () =`, both fail. A call that starts its line, and one after `return!`, compile. `FsCompilerRoundTripTests` only uses calls that start their line. + - Fix: for F#, when the call is not the first token on its line, measure from the column the call expression starts at. Add the `do!`, `let!`, `let` and one line shapes to `FsCompilerRoundTripTests`. + +- [ ] **C#: Append lands after `ConfigureAwait`, `ToTask` or `GetAwaiter`, and `CanAnchor` says the site can host it** (reproduced) + - `InlinePatcher.cs:478` and `:689-740` (`WalkChain`): `SourceLanguage.ChainTerminator` is null for C#, and only F# has `"ToTask"` (`FsLanguage.cs:31`), so the end of the chain is always where it is inserted. + - `await Verify(value).ConfigureAwait(false);` becomes `await Verify(value).ConfigureAwait(false)` then `.Snapshot("new");`, which is CS1061: a `ConfiguredTaskAwaitable` has no `Snapshot`. `anchorOnly` returns Applied before the chain is walked (`:473-476`), so Verify's `InlineAnchor.CanHost` declares the verification inline. + - Fix: treat `ToTask`, `ConfigureAwait` and `GetAwaiter` as terminators in both languages, and insert in front of the first. + +- [ ] **Queue identity is the line alone: a partial accept then a re-run duplicates entries, and a settle can take another test's** (reported: read) + - `InlineQueue.cs:44-59` (`Enqueue`), `:241-248` (`Settle`), and `InlineStaging.cs:125-127` for staged trios. + - Entries for A, B and C at lines 10, 20 and 30 of one file. Accepting A adds five lines, and the re-run sends B and C at 25 and 35. No key matches, so the queue holds B|20, C|30, B|25 and C|35. If B's content changed, accept-all applies the stale B|20 and then refuses the fresh one. + - After the same accept, a passing call that moved from line 15 to line 20 settles `file|20`, which is B's stale key. A direct hit is not checked against the member or the value. + - Fix: on a direct hit where both members are known and differ, treat it as a miss unless `IsSettledBy(value)` holds. In `Enqueue`, when the key misses, fold into the single entry with the same file, member and anchor. Longer term, have `InlineApplier` report the line delta and rebase the hints of what is left for that file. + +- [ ] **Clearing staged trios is never scoped to a framework in practice** (reported: plausible) + - `InlineStaging.cs:142-151`, `InlinePatchFile.cs:9-18` and `:31`, `RuntimeMoniker.cs:5`. Verify calls `InlineStaging.Clear` with no origin, and cannot supply one because `RuntimeMoniker` is internal. It also stages through `InlinePatchFile.Write` with `patch.Framework` null, which any origin clears. + - A multi-targeted project, no viewer, and a snapshot that differs per framework: net8 fails and stages a trio, net9 passes and its settle deletes it. + - What would settle it: a two framework run with `DiffEngine_InlineViewer=false`. + - Fix: stamp `RuntimeMoniker.Current` in `InlinePatchFile.Write` when the patch has no framework, and expose a clear that uses the current moniker. + +- [ ] **Append takes the first entry point in the member, even one that already has a Snapshot** (reproduced) + - `InlinePatcher.cs:456`, `:864-884` (`TryFindCall`), `:487-496`. + - `await Verify(a).Snapshot("A");` then `await Verify(b);` in one member, with a hint that an accept higher in the file made stale. The walk restarts at the member and yields `Verify(a)` first, and the answer is NotFound, "The call near line 12 already has a Snapshot call. Re-run the test.", with `Verify(b)` plainly there. A single accept drops the entry. + - Fix: in `TryAppend`, take the first entry point with no chained Snapshot, and give today's answer only when every candidate has one. + +- [ ] **Remove on `settings.Snapshot(...)` leaves `settings;`** (reproduced) + - `InlinePatcher.cs:574-614`: the only shape check is `source[start - 1] != '.'`, and the splice removes `.Snapshot("old")` and keeps the receiver. `settings.Snapshot("old");` becomes `settings;`, which is CS0201. `VerifySettings.Snapshot` is public API, and Verify sends a Remove for it under `NotInline()`. + - Fix: when the receiver starts the statement and the call is followed by `;`, remove the statement's line. Otherwise report NotFound. + +### Tray + +- [ ] **"Accept all" deletes the verified file a move in the same sweep just wrote** (read; reported: ran) + - `src/DiffEngineTray/Tracker.cs:873-889`: `AcceptAll` accepts every move and then every delete, and `AddMove` (`:165-227`) drops no tracked delete for its target. The wire sweep at `:1004-1040` is the same. + - A delete for `Foo.verified.png` is tracked and not accepted. A later run fails on that target, and a move onto it is tracked beside it. Accept all moves the received file into place and then deletes it: both files gone, with no warning. + - The stale delete is still there with any library before 20.4.0, which has no `SettleDelete`, when a viewer owns the queue, and when the settle was skipped by the ten minute unowned-port memory. + - Fix: in `AddMove`, drop a tracked delete whose file is the move's target. As a second guard, have both delete sweeps skip a file that a tracked or just accepted move targets. + +- [ ] **Accept-all lists the deletes after the snapshot sweep, so one that arrived mid-batch is carried out without its patch** (reported: read) + - `Tracker.cs:411-436`, `:447-465`, `:880-889`, `:1022-1037` and `OwnedInlineHost.cs:427-441`, `:598-613`: the snapshot keys are taken when the batch starts, and the deletes are read when their turn comes. + - A "snapshot moving inline" pair lands while a batch is applying. Its patch is not in the batch, but its delete is in the list taken afterwards, so the verified file goes while the patch is only pending. + - Fix: take the delete keys when the batch begins and carry out only those, as the viewer's own batch does (`src/DiffEngineViewer/ViewerSession.cs:994`). + +- [ ] **An owner that cannot be asked reads as "nothing pending", so the tray's deletes go ahead** (reported: ran) + - `Tracker.cs:447-457`: `if (inline.List().Count == 0) { return false; }`, and `RemoteInlineHost.List` is `TryList(out var pending) ? pending : []` (`RemoteInlineHost.cs:51-72`). + - A viewer owns the queue and holds a patch, the tray holds the paired delete, and the viewer does not answer `List` within 500 ms: cold starting, or wedged. Accept all deletes the verified file with the patch never tried. + - Fix: let the host tell "port not held" from "held but no answer", and treat the second as refused: deletes held, user told. + +- [ ] **The tray's UI thread is MTA, so Debug view's Copy always throws** (reported: ran) + - `src/DiffEngineTray/Program.cs:5` is `static async Task Main()` with no `[STAThread]`. `Clipboard.SetText` (`DebugForm.cs:92-109`) throws `ThreadStateException`, which `catch (ExternalException)` does not catch, so it reaches WinForms' Continue or Quit dialog and nothing is copied. + - Fix: `[STAThread] static void Main()` that calls `Inner().GetAwaiter().GetResult()`, or `content.SelectAll(); content.Copy();`. + +- [ ] **A tray that owns the queue does not stage it at logoff or shutdown** (reported: plausible) + - `OwnedInlineHost.cs:746-782`, `Program.cs:129-139`: `Persist()` only runs when `Inner` unwinds after `Application.Run()` returns. Nothing in the tray handles the session ending, which the viewer does. For a tray started at login, that is how its life usually ends. + - What would settle it: log off with one pending inline snapshot, then look for the staged `.inlinepatch`. + - Fix: a hidden `NativeWindow`, or `SystemEvents.SessionEnding`, that calls `Persist()` on `WM_ENDSESSION`. + +- [ ] **A `Move` or `Diff` over 3493 for a pair already tracked replaces its tool with the tray's own choice for the extension** (reported: ran) + - `Tracker.cs:198-226`, `:234-246`: the update always rebuilds with the incoming `exe`, and null falls to `DiffTools.TryFindByExtension`. "Open diff tool" on a viewer pair starts `DiffEngineViewer --diff`, which cannot bind and forwards `Diff` to the tray. + - Before: `DiffEngineViewer.exe CanKill=False IsViewer=True IsOpen=True`. After: `BCompare.exe CanKill=True IsViewer=False IsOpen=False`. The "Accept open" hot key then skips a pair that is on screen in the viewer. + - Fix: when the incoming `exe` is null, keep the tracked `Exe`, `Arguments`, `CanKill`, `KillLockingProcess` and `IsViewer`, and refresh only the target. + +### Viewer, Windows head + +- [ ] **A decode dropped because its picture left the screen is never retried: a spinner for good** (read; reported: ran) + - `src/DiffEngineViewer.Windows/ImageCache.cs:240-257` (`Loaded`): a decode that lands for a path no longer wanted is disposed, and the method returns before `pending.Remove(path)`. `Get` (`:194-198`) then reads the entry in `pending` as already on its way and starts nothing, and `Loading` stays true. + - Step past an image entry or a document page before its decode lands, then come back: Tab twice, hold Tab, `]` `]`. Both panes show a spinner until the file's stamp changes, repainted 25 times a second. A decode takes 23 ms for a 1920x1080 png and 89 ms for a 2550x3300 page against a 16 ms frame, so holding Tab through a queue of pictures sticks nearly every one. + - `ADecodeForAPictureNoLongerOnScreenIsDropped` pins the drop and never comes back to the path. + - Fix: in `Loaded`, remove the pending entry once the stamp matches and before the `wanted` test, or have `Keep` remove pending entries for paths it no longer wants. + +- [ ] **The first window is centred for its unscaled size and then scaled in place** (reported: ran) + - `ViewerForm.cs:140-141`, `:234-241`, `:374-392`: WinForms centres before `OnHandleCreated` assigns `ClientSize = InitialClientSize(...)`. At 125% on a 3440x1380 working area the margins are left 1161, right 886, top 316, bottom 142. On 1920x1080 at 150% the same arithmetic puts the footer under the taskbar, and `Placement` then remembers those bounds for every later run. + - Fix: `CenterToScreen()` straight after the `ClientSize` assignment in the `!sized` branch. + +- [ ] **`Raise()` un-maximises a window that was minimised from maximised, and that is then remembered** (reported: ran) + - `ViewerForm.cs:482-492`: `if (WindowState == Minimized) { WindowState = Normal; }`. Maximise, minimise, a snapshot arrives: the window comes back at its normal size, and the next hide or close saves it that way. + - Fix: `WindowState = maximized ? FormWindowState.Maximized : FormWindowState.Normal;` + +- [ ] **One picture path on both sides, panes a pixel apart: the composite is rebuilt forever** (reported: ran) + - `ImageCache.cs:297-338`, `:340-365` keep one composite per path. Identical documents share their page pngs, and with an odd panes width the two sides ask for sizes a pixel apart (`ViewerCanvas.cs:517-518`, `:581-583`): 14,609 composites in 2 s with a trivial builder, one side always the stretched copy. + - Fix: give both panes' picture space the same width, or keep the composite by size. + +### Viewer, Linux head + +- [ ] **Caps Lock turns `a` (accept) into accept-all** (read) + - `native/src/deview.cpp:950-974`: letters are decided by the character typed, `'a'` accept and `'A'` accept-all. Caps Lock produces `'A'` without Shift, and `ViewerSession.BeginAcceptAll` starts with no confirmation. The other heads decide by the Shift modifier. With Caps Lock on, d, v, q, n, p, m, r and j also do nothing. + - Fix: lower-case the character before the switch, and choose accept-all from `IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT)`. + +- [ ] **The footer has no overflow handling** (reported: read, by arithmetic against the Linux baselines) + - `deview.cpp:1987-2027`: every button is `SameLine()`d, and the status is drawn after the last when nothing is left. A paged document in the queue needs 1199 px of buttons in a 1084 px content width: "Zoom in" starts at x=1128, off the window, and the status at 1213. In file mode the status gets 54 px. The status line is where page numbers, draw failures, the selection, accept-all progress and accept failures are said. + - Fix: give the status its own line, and wrap buttons that would pass the content edge. The title row (`:1617-1624`) has the same shape. + +- [ ] **No fallback font: every character JetBrains Mono lacks draws as the replacement glyph** (reported: read) + - `deview.cpp:2128-2138` is the only `AddFont` call. CJK, Hangul, Arabic, Hebrew, Thai and emoji in a snapshot cannot be reviewed on Linux. Windows and macOS fall back to system fonts. + - Fix: merge system fonts with `MergeMode`, found by fontconfig or well known Noto and DejaVu paths, and clip each segment that is not simple to its own cells. + +- [ ] **Text cannot be selected in the right pane while the left pane's visible rows are all filler** (reported: read) + - `deview.cpp:1244-1260` (line 1253): the start test rejects on `leftHit.textLeft < 0.0f` before looking at which pane was pressed, and `textLeft` is only set by a row that is not filler. That is every pending delete, whose left side is empty, and any scroll position inside a long removed block. + - Fix: test `leftHit.textLeft` only when the press is in the left pane, or derive it from the gutter width. + +### Viewer, macOS head + +- [ ] **Keys and clicks share one slot per kind, so a slow frame drops or reorders them** (reported: read) + - `native/swift/Sources/Deview/ViewerView.swift:130,143,283,296,361`, `MainMenu.swift:15,26,37`, `Runtime.swift:350-355`: `pump()` dispatches every queued event before returning, and each handler overwrites one field. With the loop busy, Tab then `a` accepts the entry the reader meant to skip, and `d` then a click on another row discards the clicked row, because `Apply` runs the click before the key. The Windows head fixed this with a queue (`ViewerForm.cs:95-116`). + - Fix: queue discrete events in `Runtime` and hand over one per `deview_poll_input`. No ABI change. + +- [ ] **The footer has no overflow handling: the status is drawn over the buttons, and a document's buttons fall off the window** (reported: read, by arithmetic against the OSX baselines) + - `Renderer.swift:346-371`. At the default 1100 pt an image pair in queue mode has buttons ending at x=1015 and "images differ" starting at 977. A paged document's eleven buttons need 1405 pt in queue mode, so "Zoom out" and "Zoom in" cannot be clicked. + - Fix: clip the status to the space right of the last button, and give the buttons a second row or less padding when they overflow. + +- [ ] **AppKit's nested tracking loops starve the managed loop** (reported: read; what it looks like needs a Mac) + - `Runtime.swift:269-270`, `:279-298`, `:350-355`: the scroller knob is tracked inside `NSApp.sendEvent`, so `deview_present` does not return and no frame is presented. Dragging the knob moves it without scrolling the panes until release, and a live resize draws the old slice into the new size. `ILoopHooks` says the native heads have no modal loops. + - Fix: track the knob without the modal loop, or add a frame callback to the ABI that Swift calls from `scrolled` and during a live resize. + +- [ ] **macOS draws JetBrains Mono's code ligatures** (reported: read, from a committed baseline) + - `Renderer.swift:217-233`, `:919-929`: Core Text applies `calt` by default. In `PixelTests.Images.OSX.verified.png` the title's `<>` is one glyph. `!=`, `<=`, `=>`, `->` and `==` in snapshot text are drawn as ligatures, in a tool whose job is to show which characters a snapshot holds. + - Fix: create the `CTFont` with `calt` and `liga` off through `kCTFontFeatureSettingsAttribute`, then re-approve the OSX baselines. ## Performance +### Viewer model + - [ ] **The screen is rebuilt every frame, including frames where the state is the same object** (measured) - `src/DiffEngineViewer/ViewerProgram.cs:464-465` (and `ModalFrame`, `:380`): `ScreenBuilder.Build(host.State)` runs sixty times a second, ten when hidden. `SessionState` is immutable and only replaced by `SessionHost.Mutate`, so an unchanged reference is an unchanged screen. - `QueueProjection.Rows` builds a label, a group key and a tooltip for every entry in the queue before `Visible` slices out the few on screen (`src/DiffEngineViewer/QueueProjection.cs:102-199`, `:237`). Per call: 100 entries 0.1 ms and 123 KB, 500 entries 0.57 ms and 618 KB, 2,000 entries 0.72 ms and 2.3 MB. At sixty frames that is 7, 36 and 136 MB of garbage a second from a window nobody is touching. @@ -37,7 +182,7 @@ Nothing open. The five this review found are fixed, each with tests that fail wi - Fix: let `BeginAcceptAll` take the keys to sweep, and send a group through the same runner. - [ ] **The right side of a document waits for every page of the left** (measured) - - `src/DiffEngineViewer/Documents/DocumentWatch.cs:218-226`: `Draw` renders the first side without pages to completion and returns. The right side starts on the next pass. + - `src/DiffEngineViewer/Documents/DocumentWatch.cs:235-243`: `Draw` renders the first side without pages to completion and returns. The right side starts on the next pass. - 100 A4 pages take 4.3 s here and the first lands after 87 ms. So the left page is on screen at once, and the right pane spins for 4.3 s, and which pages differ is unknown until both are done. - Fix: draw both sides at once on two tasks. Two PDFs then take turns at PDFium's lock a page at a time, and two Office files use two cores. The timeout, its `progressed` clock and `generation` become per job. @@ -46,10 +191,114 @@ Nothing open. The five this review found are fixed, each with tests that fail wi - `OwnerLink` drops to one pass a second when the window is hidden and `DocumentWatch` stops. `TrackedWatch` has no `Hidden`, and an owning viewer hidden behind a tray keeps its 200 ms for days. - Fix: give `TrackedWatch` the hidden interval. If large queues matter, stat the entry on screen every pass and the rest in turn. +### Library + +- [ ] **The refused connect is still paid once per test process, and half a second per gated call while nothing can be launched** (reported: measured) + - `src/DiffEngine/Protocol/ViewerClient.cs:211-228`, `:257-281`, `:455-469` and `ViewerLaunchGate.cs:111`, `:164`, `:199-226`. A refused loopback connect is 2,029 ms on Windows. `IPGlobalProperties.GetActiveTcpListeners()` is 0.2 to 0.4 ms and reports a loopback listener correctly. + - The unowned memory is per process and starts empty, so with no tray or viewer the first telling send of every test process blocks its thread for 2 s: 2 s on a one test inner loop that otherwise takes one, per framework, and again every ten minutes. `IsOwned` always connects and waits `ShortTimeout`, so a gated call with nothing owning the queue and nothing launchable costs 0.5 s under the gate, as does each `WaitForBind` poll. + - Fix: ask the listener table before connecting, as `PiperClient.PortIsHeld` does for 3492, falling back to the connect when the table cannot be read. + +### Inline snapshots + +- [ ] **Every accept re-reads, re-lexes and rewrites the whole file** (reported: measured, in a simulation of the applier's IO and allocations) + - `InlineApplier.cs:139-231`, `:327-375`, `SourceScan.cs:20`, `InlinePatcher.cs:127-130,137`. 500 applies to one 10,000 line, 633 KB file took 3.8 s with 499 gen2 collections, about 4 MB on the large object heap each. It bites on accept-all over a large test file, and once per new call site per run through `CanAnchor`. + - Fix: a batch apply per file that reads once, applies in memory and writes once, still reporting each outcome. Short of that, pool the scan arrays. + +- [ ] **`InlineStaging.Clear` walks the whole `obj` tree for every passing inline verification** (reported: measured) + - `InlineStaging.cs:104-113`, `:288-360`. Per Clear, warm: 2.8 ms for Verify.Tests' obj (151 directories), 0.95 ms for DiffEngine.Tests', so one to three seconds per thousand passing inline verifications. + - Fix: cache the directory list per `obj`, invalidated in process from `InlinePatchFile.Write` and `Persist` and with a short life for other processes. The comment at `:506-516` says why "nothing staged" is not cached, and a fix has to respect it. + +### Viewer, Windows head + +- [ ] **Rows are clipped to the pane's width in pixels, counted as characters** (reported: measured) + - `src/DiffEngineViewer.Windows/ViewerCanvas.cs:917-933`: `RowText.Clip(..., bounds.Right - left)` keeps as many characters as the pane has pixels, and GDI+ lays out every one. 72 rows of 400 character lines cost 11.0 ms a paint against 2.2 ms clipped to the 54 that show, and at 1600 px a pane 48.2 ms against 8.7 ms. Every wheel notch and every frame of a selection drag is one such paint, so files with long lines scroll at 20 frames a second or worse. + - Segmenting runs over the whole line before anything is clipped: a 1 MB line holding one non-ASCII character costs 52 ms a row a paint. + - Fix: clip to `ceil((bounds.Right - left) / Advance) + 1` characters, and cut the flattened text at `CellGrid.Index(text, visibleCells)` before calling `Segments`. + +- [ ] **An enlarged picture below its own size is rescaled from full resolution on every paint** (reported: measured) + - `ViewerCanvas.cs:614-656`: a 4000x3000 pair costs 44.5 ms a paint at 150% and 30.5 ms at 200%, on every frame of a pan and every wheel notch over a document's text. `HighQualityBilinear` prefilters, so it costs by source pixels. + - Fix: when the placement is narrower than the picture, compose and cache it as the fitted one is. Cheaper: plain `Bilinear` when the reduction is under two times. + +### Viewer, Linux head + +- [ ] **The checkerboard behind a picture is tessellated again as thousands of quads every frame** (reported: read; the cost is an estimate) + - `deview.cpp:1334-1355`, drawn through `RenderTriangles` (`:817-851`): one dark quad per 128 square pixels, about 4,400 for two panes at the default window and about 53,000 maximised at 4K, sixty times a second, for opaque pictures too. + - Fix: one quad with a small two tone texture set to repeat, skipped when the decoded image has no alpha. + +- [ ] **Everything is rebuilt, marshalled and redrawn at 60 Hz when nothing changed** (reported: read; the managed part measured) + - `deview.cpp:2114` (`SetTargetFPS(60)`), `:2146-2191`, with `ViewerProgram.cs:464-470` and `ScreenPayload.cs:171-237`. Under llvmpipe or a remote session each swap is a full window software raster. + - `ScreenPayload.AddSegments` recounts the bytes before each segment with `Encoding.UTF8.GetByteCount(text.AsSpan(0, segment.Start))`, which is quadratic in a row's segments: rows of CJK cost 6.5 ms a frame at 4K, 2 ms of it that scan. This one is shared with the macOS head. + - Fix: skip `ScreenBuilder.Build` and `payload.Build` when the state is the one last presented, which the first item under Viewer model does. In `deview_present`, skip the frame when its bytes match the last, no input arrived and nothing is pending. Carry a running byte offset in `AddSegments`. + +### Viewer, macOS head + +- [ ] **A spinner tick runs the whole draw again, and text outside Latin costs one CTLine per character** (reported: read; the cost is an estimate) + - `Runtime.swift:227-237`, `ViewerView.swift:54-65`, `Renderer.swift:443-455`, `:914-931`, `:952-963`: only the spinner's rectangle is repainted, but `renderer.draw` still builds about 150 attributed strings and lines roughly twenty times a second while a page is being drawn. `CellGrid.Simple` leaves out box drawing, arrows, typographic punctuation and CJK, so each such character is its own segment and its own line. + - Fix: skip work outside the context's clip, cache the lines of single clusters, and widen `Simple` to ranges the embedded font draws one cell wide. + +- [ ] **An enlarged picture below its own size is resampled at `.high` on every pan frame** (reported: plausible) + - `Renderer.swift:598-605`: `context.draw(picture, in: all)` with no cached copy. A 2880 wide screenshot at 150% is resampled for both panes on each frame of a drag. + - What would settle it: Instruments on a Mac. + - Fix: below its own size, build a scaled copy on the work queue as the fitted one is, or draw at `.low` while dragging. + ## Smaller +### Viewer model + - [ ] A pair sent again unchanged is still read and diffed before it is found to be unchanged: `MessageHandler.TrackMove` builds the whole entry, and `ViewerSession.EnqueueTracked` compares after. The reader is no longer moved, but a large pair pays the diff on every run. Fix: read the two sides, compare them with the queued entry's, and build an entry only when they differ. (read) - [ ] `QueueProjection.Order` runs twice per transition: `Project` orders (`ViewerSession.cs:1530`) and `Rebuild` (`:1490`) and `Sync` (`:279`) order its result again. (read) - [ ] Opening a context menu builds each side's whole text to ask whether it is empty: `SelectionText.All(entry, side).Length > 0` in `src/DiffEngineViewer/MenuState.cs:98` and `:117`. Megabytes per right-click on a large file. (read) - [ ] `FileSide.ReadBytes` copies every file twice, through a growing `MemoryStream` and then `ToArray` (`src/DiffEngineViewer/FileSide.cs:105`). The length is known. (read) + +### Library + +- [ ] Linux: an exported `COLUMNS` truncates every command line `ProcessCleanup` reads. `LinuxOsxProcess.cs:92` runs `ps -o pid,command -x`, and procps lets `COLUMNS` override the unlimited width it uses when stdout is not a terminal, so with `COLUMNS=80` a running tool is never detected or killed. Fix: add `-ww`, which procps and Apple's `ps` both accept. (reported: read, against the procps source) +- [ ] A `SendAsync` the caller cancelled is recorded as "port unowned": `ViewerClient.cs:372-384`, `:433-444`. `token.Register(() => Abort(client))` closes the client, the exception that follows is not an `OperationCanceledException`, and `Found(endpointPort, false)` silences settles and moves against a live owner for ten minutes. Not reachable from Verify today, which passes no token. Fix: `cancel.ThrowIfCancellationRequested()` on entry, and no `Found(false)` when the token is cancelled. (reported: plausible) +- [ ] With an owner present, every passing inline verification is a TCP connection that leaves a port in TIME_WAIT for two minutes (`DiffRunner_Inline.cs:136-145`, `ViewerClient.cs:276-292`): 0.284 ms each, but about 16,000 settles in two minutes across test processes exhaust the dynamic range, and the failed connect is then remembered as unowned. Fix, only if suites that size matter: list once and skip settles while the owner holds nothing for this framework, or keep one connection open. (reported: measured) +- [ ] `ViewerServer.Listen` (`ViewerServer.cs:89-97`) has `catch (SocketException) { continue; }` with no delay, so an accept failure that persisted would spin a core. Whether one can persist was not established. (reported: plausible) + +### Inline snapshots + +- [ ] A Remove applied twice can take a sibling's literal: `InlinePatcher.cs:652-656`. With `await Verify(a)` over `.Snapshot("dup");` and `await Verify(b).Snapshot("dup");` under it, the first apply pulls the next line up, and the second, from another framework or another case of an `IgnoreParameters` test, finds a Snapshot call on the hint line, so `RemovedAtHint` is false and `Verify(b)` loses its literal. Fix: do not pull the following text up, or have Verify skip the Remove when the source file is newer than the test assembly. (reported: read) +- [ ] The F# lexer disagrees with the compiler inside block comments: `FsLanguage.cs:183-229`. `(* returns "*)" when closed *)`, `(* see "(*" *)` and `(* the (*) operator *)` are each one comment to F#, and the scanner closes or nests on what is inside the string. The usual result is NotFound for calls below. Fix: inside a comment step over string literals and `(*)`, and step over a double backticked identifier whole. (reported: read; what F# does was run under `dotnet fsi`) +- [ ] An F# snapshot whose value is the empty string loses its anchor over the wire: `InlinePatchFile.Build` writes `OriginalValue == ""` as an empty field (`:53-55`), and `TryParse` reads an empty field back as null (`:148-152`). The viewer then heads the pane "expected (new snapshot)", and the patcher falls back to the hint alone. Fix: write a marker for "present and empty", or a separate line saying a value is present. (read) +- [ ] Keys are recomputed per comparison: `PendingInline.Key` lowercases the path and formats a string on every `FindIndex` step (`PendingInline.cs:70`, `InlineQueue.cs:48,244,453,565`, `InlineStaging.cs:366-367`). A few hundred milliseconds across a run with hundreds pending. Fix: compute the key once per entry. (reported: read) + +### Tray + +- [ ] `Process` objects are never disposed for moves that cannot be killed: `Tracker.cs:799-806`, `:945-950`, `ProcessEx.cs:19-32`. `DiffRunner` sends a process id for MDI tools too, `TryGet` forces a handle open, and `KillProcesses` returns at `if (!move.CanKill)` without disposing. One handle per tracked move until a gen2 finaliser. Fix: dispose, without killing, wherever a move finally leaves the dictionary. (reported: read) +- [ ] The scan can drop the wrong move, and one unexpected exception stalls it: `Tracker.cs:66-72`, `:97-114`, `AsyncTimer.cs:25-43`. `moves.TryRemove(tacked.Temp, out var removed)` removes by key, so a re-run that replaced the move between the scan's check and the removal loses its fresh entry and has its tool killed. Only `IOException` is caught around `FilesAreEqual`, and the handler shows a `MessageBox` on the timer thread. Fix: remove by key and value, and catch `UnauthorizedAccessException` beside it. (reported: plausible) +- [ ] "Discard (n)" waits up to 15 s on the UI thread when a viewer owns the queue: `Tracker.cs:836-851` calls `inline.DiscardAll(out var message)` inline, where `Discard` was moved to a worker for this reason. (reported: read) +- [ ] An exception thrown by a hot key action ends the tray: `HotKey/KeyRegister.cs:70-92`. One thrown from `IMessageFilter.PreFilterMessage` comes out of `Application.Run()` rather than reaching `Application.ThreadException`. Fix: try and catch around `action()`, and a catch in `LinkLauncher`. (reported: ran for the mechanism; no trigger found) +- [ ] The process id in a piper payload is trusted as the diff tool: `Tracker.cs:179-183`, `:205-211`. Libraries from before the `ProcessCleanup.StillRunning` fix can send a reused id, and the tray kills whatever holds it now on accept. Fix: compare the process image against the payload's `Exe` first. (reported: plausible) +- [ ] `ListingTag`'s `Fingerprint` (`OwnedInlineHost.cs:317-331`) rebuilds and hashes every tracked move per poll, about 0.5 MB of garbage five times a second while a viewer is attached. (reported: read) + +### Viewer, Windows head + +- [ ] Holding the scroll bar's arrow or its trough freezes the panes until release: `ViewerForm.cs:176-191` enters the modal frame only for `ThumbTrack`, and user32 tracks every part of the bar in the same loop. Fix: `EnterModal()` for any type other than `EndScroll` and `ThumbPosition`. (reported: ran) +- [ ] Alt chords fall through to the plain key commands: `ViewerForm.Map` (`:703-770`) gives Alt+A accept, Alt+D discard and Alt+Q quit. The same leak was closed for Control. Fix: return `CommandKind.None` when `Keys.Alt` is held, ahead of the Control branch. (reported: ran) +- [ ] Accept and Discard auto-repeat, and the repeats are queued: `ViewerForm.cs:703-721`, `:96-105`. Holding `a` past the repeat delay accepts entries the reader has not seen. Fix: drop repeats (bit 30 of `LParam`) for the commands `ViewerSession.ChangesQueue` names. (reported: plausible) +- [ ] The status label shows the middle of a status that does not fit: `ViewerForm.cs:21-32`, `:582-607`. A pdf in a queue leaves it 151 px, and a status of 344 px wraps to three lines in a 30 px label centred vertically. Fix: `AutoEllipsis = true`, with an alignment that keeps the start. (reported: measured) +- [ ] A minimised window still runs the loop at sixty frames a second: `FormsViewerWindow.cs:92` tests `form.Visible`, which stays true when minimised. Fix: `form.Visible && form.WindowState != FormWindowState.Minimized`. (reported: plausible) + +### Viewer, Linux head + +- [ ] Input is sampled as state once a frame, so a press and release that arrive together are never seen and several wheel events collapse into one: `deview.cpp:909-923`, `:2217-2220`. A touchpad two finger tap would never open a context menu. What would settle it: raylib 6.0's callbacks, and a tap on a real touchpad. Fix: chain GLFW's mouse button and scroll callbacks and feed ImGui from them. (reported: plausible) +- [ ] Ctrl+A and Ctrl+C are still by US key position, arrows and paging do not repeat when held, and no letter shortcut matches on a non-Latin layout: `deview.cpp:929-944`, `:976-985`. Fix: `IsKeyPressedRepeat` for navigation, and resolve the chords through `GetKeyName`. (reported: read) +- [ ] No display scale handling: no `FLAG_WINDOW_HIGHDPI` and no `GetWindowScaleDPI()`, so on a HiDPI X11 display everything is about half size (`deview.cpp:2075-2091`, `:2137`). What would settle it: a display with `Xft.dpi` 192. (reported: plausible) +- [ ] A queue row's context menu is not kept inside the window: the clamp at `deview.cpp:1929-1944` is inside `if (paneMenu)`, so the last row's menu is cut off at the default size. (reported: read) +- [ ] Hover never ends when the pointer leaves the window: `io.AddMousePosEvent(mouse.x, mouse.y)` is unconditional (`deview.cpp:915-916`), so a row stays highlighted and its tooltip appears with the pointer elsewhere. (reported: plausible) +- [ ] A picture larger than `GL_MAX_TEXTURE_SIZE` draws as a black box rather than as nothing (`deview.cpp:613-621`, `:706-712`), and pictures shrunk more than two times are sampled bilinear with no mipmaps (`:464-469`, `:1457-1464`), so thin lines and small text drop out. (reported: plausible, and read) +- [ ] Labels containing `##` are cut short, since ImGui hides everything from there on: pane headers, queue rows, menu items and buttons (`deview.cpp:1687-1688`, `:1716`, `:1738`, `:1961`, `:2003`). (reported: read) +- [ ] `GetWindowPosition()` every frame is a synchronous X round trip (`deview.cpp:299-320`), one network round trip a frame over forwarded X. (reported: plausible) + +### Viewer, macOS head + +- [ ] A picture landing during a repaint of the spinner alone is drawn clipped to the spinner's rectangle and never completed: `Renderer.swift:245`, `Runtime.swift:223-239`. A few in a thousand large images. Fix: have `draw` report that something landed, and turn that into a full redraw. (reported: read) +- [ ] `[` and `]` never match on layouts where they need Option, since `charactersIgnoringModifiers` yields the digit (`ViewerView.swift:412-433`): German, French, Nordic, Spanish and Italian layouts cannot turn pages by key. Fix: match symbols on `event.characters` first. (reported: read) +- [ ] A pan drag in a pane that cannot move on an axis resets that axis for the other pane: the report is clamped with the dragged pane's own extents (`Renderer.swift:164-174`, `ViewerView.swift:180-187`, and `deview.cpp:1587-1591` on Linux). Fix: report the frame's own centre unchanged on an axis the pane cannot move on. (reported: read) +- [ ] `picturesChanged` never settles when a picture has no room, so a window shorter than about 176 pt redraws at sixty frames a second (`Renderer.swift:485-489`, `:846-848`). Fix: a `contentMinSize`, or record the stamp when nothing is drawn. (reported: read) +- [ ] A notched mouse wheel may do nothing until ten slow clicks add up (`ViewerView.swift:310-322`), and control-click never opens a context menu (`:124-170`). What would settle them: a Mac with a wheel mouse. (reported: plausible) +- [ ] The pump waits out its full 16.7 ms after input, and nothing slows the loop when the window is occluded or miniaturised (`Runtime.swift:209-249`, `:257-276`). (reported: read) +- [ ] `Runtime.open` cannot fail (`Runtime.swift:57-91` always returns true), so with no console session, as over SSH, AppKit aborts the process after the port was bound and the patch is lost. What would settle it: a failing inline snapshot over SSH with nobody logged in. (reported: plausible) From b15c4e7ddf80abfce13986885acafecadd73d496 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:28:06 +1000 Subject: [PATCH 03/73] Fix four bugs in the Windows head: a spinner for good, the first window's place, and a picture composed for ever - A decode that lands for a picture no longer on screen is thrown away, and it left the path marked as on its way. A reader who came back to that picture had nothing started for it, and a spinner in each pane until the file changed: stepping past a picture before it had decoded, which holding Tab through a queue of them does to nearly every one. The mark now goes when the decode lands, whatever is done with the result. - The first window was centred for its unscaled size and then scaled in place. WinForms centres as it creates the window, before OnHandleCreated sizes it for the display, so it grew down and to the right from there: at 150% on a 1080p display the footer was under the taskbar, and that was the placement remembered for every run after. It is centred again for the size it has. - Raise put a minimised window back to normal whatever it had been minimised from, so a maximised window came back at its restored size and was then remembered as not maximised. It goes back to what it was. - The right pane's picture space was the pixel wider an odd width leaves that pane. One picture on both sides, which a page two identical documents share is, was then asked for at two sizes, and the cache keeps one composite per picture: each paint composed both, each landing throwing the other away, for as long as the entry was on screen. Both pictures are now given the same width, which also fits two pictures of one size to one size. Five pixel baselines move with it, the right hand picture one pixel to the left. --- .../FormsHeadTests.cs | 38 ++++++++++++ .../ImageCacheTests.cs | 57 ++++++++++++++++++ .../ViewerFormRaiseTests.cs | 25 ++++++++ .../WindowPlacementTests.cs | 36 +++++++++++ ...indowsPixelTests.DocumentPage.verified.png | Bin 52975 -> 52980 bytes ...lTests.DocumentPageBeingDrawn.verified.png | Bin 42478 -> 42482 bytes ...xelTests.DocumentPageEnlarged.verified.png | Bin 55236 -> 55070 bytes .../WindowsPixelTests.Images.verified.png | Bin 25382 -> 25381 bytes ...dowsPixelTests.ImagesEnlarged.verified.png | Bin 57582 -> 60520 bytes src/DiffEngineViewer.Windows/ImageCache.cs | 14 ++++- src/DiffEngineViewer.Windows/ViewerCanvas.cs | 7 ++- src/DiffEngineViewer.Windows/ViewerForm.cs | 31 +++++++++- 12 files changed, 202 insertions(+), 6 deletions(-) diff --git a/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs b/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs index 79f006ff9..4f8c9e304 100644 --- a/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs @@ -179,6 +179,44 @@ public async Task RepaintingAPictureComposesItOnce() await Assert.That(Bounds(first, _ => _ is {R: 198, G: 64, B: 64})).IsEqualTo(red); } + /// + /// One picture on both sides, which a page that two identical documents share is, on a canvas + /// an odd number of pixels wide. The right pane is then a pixel wider than the left, and a + /// picture fitted to each was asked for at two sizes. The cache keeps one composite per + /// picture, so every paint composed it twice over, each landing throwing the other away, for + /// as long as the entry was on screen. + /// + [Test] + [Arguments(1100)] + [Arguments(1101)] + public async Task OnePictureOnBothSidesIsComposedOnce(int width) + { + var directory = Directory.CreateTempSubdirectory("deview-one-picture-").FullName; + try + { + // Wide, so it is the pane's width that it is fitted to + var path = Path.Combine(directory, "page.png"); + await File.WriteAllBytesAsync(path, SamplePng.Build(2000, 500, 198, 64, 64)); + var entry = QueueEntry.ForFiles(path, path, FileSide.Read(path), FileSide.Read(path)); + var screen = ScreenBuilder.Build( + ViewerSession.Resize( + ViewerSession.EnqueueFile(SessionState.Start(ViewerMode.File, columns, rows), entry), + columns, + rows)); + using var host = new CanvasHost(width); + host.Canvas.Synchronous = true; + + host.Draw(screen); + host.Draw(screen); + + await Assert.That(host.Canvas.Composed()).IsEqualTo(1); + } + finally + { + Directory.Delete(directory, true); + } + } + /// /// Through the real canvas, loading its pictures the way the window does, on the pool: a /// spinner where each picture goes until it lands, and the pictures once they have, with nothing diff --git a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs index 4e0afe148..05e590f02 100644 --- a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs @@ -111,6 +111,63 @@ public async Task ADecodeForAPictureNoLongerOnScreenIsDropped() await Assert.That(cache.Composite(path, new(8, 6), (_, size) => new(size.Width, size.Height))).IsNull(); } + /// + /// And a picture that comes back after its decode was dropped is decoded again. The dropped + /// decode used to leave the path marked as on its way, so nothing was started for it and both + /// panes showed a spinner until the file changed: stepping past a picture before it had + /// decoded, which holding Tab through a queue of them does to nearly every one. + /// + [Test] + public async Task APictureThatComesBackAfterItsDecodeWasDroppedIsDecodedAgain() + { + var path = Write("came-back.png", SamplePng.Build(8, 6, 200, 40, 40)); + using var posted = new BlockingCollection(); + using var cache = new ImageCache(posted.Add); + var loaded = 0; + cache.Keep([path]); + cache.Get(path, null, () => loaded++); + await Assert.That(posted.TryTake(out var dropped, TimeSpan.FromSeconds(10))).IsTrue(); + cache.Keep([]); + dropped!(); + await Assert.That(cache.Loading(path)).IsFalse(); + + cache.Keep([path]); + await Assert.That(cache.Get(path, null, () => loaded++)).IsNull(); + await Assert.That(cache.Loading(path)).IsTrue(); + await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); + handBack!(); + + await Assert.That(loaded).IsEqualTo(1); + await Assert.That(cache.Loading(path)).IsFalse(); + await Assert.That(cache.Get(path, null, () => loaded++)!.Width).IsEqualTo(8); + } + + /// + /// Back on screen before its decode has landed, the picture is still the one on its way: that + /// decode is kept when it lands, not thrown away and started over. + /// + [Test] + public async Task APictureBackOnScreenBeforeItsDecodeLandsKeepsThatDecode() + { + var path = Write("back-in-time.png", SamplePng.Build(8, 6, 200, 40, 40)); + using var posted = new BlockingCollection(); + using var cache = new ImageCache(posted.Add); + var loaded = 0; + cache.Keep([path]); + cache.Get(path, null, () => loaded++); + await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); + cache.Keep([]); + cache.Keep([path]); + + // Nothing new is started for it + await Assert.That(cache.Get(path, null, () => loaded++)).IsNull(); + handBack!(); + + await Assert.That(loaded).IsEqualTo(1); + await Assert.That(posted.Count).IsEqualTo(0); + await Assert.That(cache.Get(path, null, () => loaded++)!.Width).IsEqualTo(8); + } + /// /// A pane paints the picture over its checkerboard, scaled, once per size, and copies that on /// every paint after. Scaling it on every paint cost 46 to 66 ms a paint for a pair of 2000 by diff --git a/src/DiffEngineViewer.Windows.Tests/ViewerFormRaiseTests.cs b/src/DiffEngineViewer.Windows.Tests/ViewerFormRaiseTests.cs index d02bd99d4..bfde1efa6 100644 --- a/src/DiffEngineViewer.Windows.Tests/ViewerFormRaiseTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/ViewerFormRaiseTests.cs @@ -37,6 +37,31 @@ public async Task Leaves_a_maximised_window_maximised() await Assert.That(form.WindowState).IsEqualTo(FormWindowState.Maximized); } + /// + /// Minimised from maximised, it comes back maximised, as it would from the taskbar. Put back to + /// normal instead, it was also remembered that way: the next hide or close saved a window the + /// reader had maximised as one they had not. + /// + [Test] + public async Task Restores_a_window_minimised_from_maximised_as_maximised() + { + // Shown, since what it was minimised from is learnt from the window as it resizes, and + // transparent, so a maximised window does not flash over whoever is running the tests + using var form = new ViewerForm("title", 800, 600) + { + Opacity = 0, + ShowInTaskbar = false + }; + form.Show(); + form.WindowState = FormWindowState.Maximized; + form.WindowState = FormWindowState.Minimized; + + form.Raise(); + + await Assert.That(form.WindowState).IsEqualTo(FormWindowState.Maximized); + await Assert.That(form.Placement!.Value.Maximized).IsTrue(); + } + [Test] public async Task Shows_a_hidden_window() { diff --git a/src/DiffEngineViewer.Windows.Tests/WindowPlacementTests.cs b/src/DiffEngineViewer.Windows.Tests/WindowPlacementTests.cs index 499069abb..522ab00c4 100644 --- a/src/DiffEngineViewer.Windows.Tests/WindowPlacementTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/WindowPlacementTests.cs @@ -89,6 +89,42 @@ public async Task AWindowTooSmallToHaveBeenLeftIsNotUsed() await Assert.That(restored).IsNull(); } + /// + /// A first window, with nothing remembered, is scaled to its display once its handle exists, + /// and WinForms has centred it by then for the size it was before. It grew down and to the + /// right from there: at 125% the margins came out left 1161 and right 886, and at 150% on a + /// 1080p display the footer was under the taskbar. That placement was then the one remembered. + /// + [Test] + public async Task AFirstWindowIsCentredForTheSizeItOpensAt() + { + // Asked for larger than any display, so the size it opens at is not the size it was + // centred for whatever this machine's scaling is: a test host that is not DPI aware + // scales nothing, and a window of 1100 by 700 would be left exactly as it was made + using var form = new ViewerForm("title", 9000, 6000); + _ = form.Handle; + + var area = System.Windows.Forms.Screen.FromControl(form).WorkingArea; + await Assert.That(form.Width).IsLessThan(area.Width); + await Assert.That(form.Location).IsEqualTo(ViewerForm.Centred(area, form.Size)); + await Assert.That(form.Left).IsGreaterThan(area.Left); + } + + [Test] + public async Task CentredIsTheMiddleOfTheDisplayItIsOn() + { + await Assert.That(ViewerForm.Centred(display, new(1100, 700))).IsEqualTo(new Point(410, 170)); + await Assert.That(ViewerForm.Centred(second, new(1500, 900))).IsEqualTo(new Point(2450, 250)); + } + + /// + /// Too large for the display, it starts at the top left rather than hanging off it evenly: the + /// title bar is what it is moved by. + /// + [Test] + public async Task AWindowLargerThanTheDisplayIsCentredFromItsTopLeft() => + await Assert.That(ViewerForm.Centred(second, new(3000, 1600))).IsEqualTo(new Point(1920, 0)); + [Test] public async Task AFormOpensAtTheBoundsItIsGiven() { diff --git a/src/DiffEngineViewer.Windows.Tests/WindowsPixelTests.DocumentPage.verified.png b/src/DiffEngineViewer.Windows.Tests/WindowsPixelTests.DocumentPage.verified.png index cf8d28542989ccf30f5171ab16fb65172bc55238..6ea1788e456c02a39455acbd9e0bf24524bf67cc 100644 GIT binary patch literal 52980 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πTyet4 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 literal 52975 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 Fe*h-xt&;!% diff --git a/src/DiffEngineViewer.Windows.Tests/WindowsPixelTests.DocumentPageBeingDrawn.verified.png b/src/DiffEngineViewer.Windows.Tests/WindowsPixelTests.DocumentPageBeingDrawn.verified.png index fe9e1357386e2d380544056fe6fedb0de55d742b..54bf1595ddea9fca9599dfbac6a102202f92b9e2 100644 GIT binary patch literal 42482 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 literal 42478 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 literal 55236 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 delta 7870 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 diff --git a/src/DiffEngineViewer.Windows.Tests/WindowsPixelTests.ImagesEnlarged.verified.png b/src/DiffEngineViewer.Windows.Tests/WindowsPixelTests.ImagesEnlarged.verified.png index 7bb9eb97521f0c45b1c8462fa20af6586468feff..b723300fd1d0d52d6c9612e205debc48fda0fea9 100644 GIT binary patch literal 60520 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 diff --git a/src/DiffEngineViewer.Windows/ImageCache.cs b/src/DiffEngineViewer.Windows/ImageCache.cs index 5fc660cf3..a3b2f2c79 100644 --- a/src/DiffEngineViewer.Windows/ImageCache.cs +++ b/src/DiffEngineViewer.Windows/ImageCache.cs @@ -243,14 +243,24 @@ void Loaded(string path, Stamp stamp, Image? image, Action loaded) // since moved past, would put back the picture the newer decode is replacing if (disposed || !pending.TryGetValue(path, out var started) || - started != stamp || - (wanted is not null && !wanted.Contains(path))) + started != stamp) { image?.Dispose(); return; } + // The decode the path was waiting on has landed, so it is waiting no longer, whatever is + // done with the result. Thrown away for a picture that had left the screen, it used to + // leave the path marked as on its way: a reader who came back to it had nothing started + // for it again, and a spinner in each pane until the file changed. pending.Remove(path); + if (wanted is not null && + !wanted.Contains(path)) + { + image?.Dispose(); + return; + } + Forget(path); entries.Add(path, new(stamp, image)); loaded(); diff --git a/src/DiffEngineViewer.Windows/ViewerCanvas.cs b/src/DiffEngineViewer.Windows/ViewerCanvas.cs index e8c12cb6c..7f6a3927b 100644 --- a/src/DiffEngineViewer.Windows/ViewerCanvas.cs +++ b/src/DiffEngineViewer.Windows/ViewerCanvas.cs @@ -514,8 +514,13 @@ protected override void OnPaint(PaintEventArgs e) // Under the rows rather than instead of them. The rows are what every head draws — format, // size and byte count, coloured against the other side — and this head can afford to also // show the thing they describe. + // Both in the same width, not the pixel more an odd width leaves the right pane. Two + // pictures of one size are then fitted to one size, rather than a pixel apart. And one + // picture on both sides, which a page two identical documents share is, is composed once: + // the cache keeps a composite per picture, so asked for at two sizes it composed each in + // turn for as long as the entry was on screen, every landing throwing the other away. DrawImage(graphics, screen.Left, panesLeft, half, bodyTop, bodyBottom, lineHeight); - DrawImage(graphics, screen.Right, panesLeft + half, panesWidth - half, bodyTop, bodyBottom, lineHeight); + DrawImage(graphics, screen.Right, panesLeft + half, half, bodyTop, bodyBottom, lineHeight); if (hasQueue) { diff --git a/src/DiffEngineViewer.Windows/ViewerForm.cs b/src/DiffEngineViewer.Windows/ViewerForm.cs index 11ca0f71f..680ef59a7 100644 --- a/src/DiffEngineViewer.Windows/ViewerForm.cs +++ b/src/DiffEngineViewer.Windows/ViewerForm.cs @@ -237,7 +237,18 @@ protected override void OnHandleCreated(EventArgs e) if (!sized) { sized = true; - ClientSize = InitialClientSize(ClientSize, DeviceDpi, System.Windows.Forms.Screen.FromControl(this).WorkingArea.Size); + var area = System.Windows.Forms.Screen.FromControl(this).WorkingArea; + ClientSize = InitialClientSize(ClientSize, DeviceDpi, area.Size); + + // Centred again, for the size it has now. WinForms centres a window as it creates it, + // which is before this, so it was centred for the size asked for in logical pixels and + // then grew down and to the right from there: at 150% on a 1080p display the footer + // was under the taskbar, and that was the placement remembered for every run after. + if (StartPosition == FormStartPosition.CenterScreen && + WindowState == FormWindowState.Normal) + { + Location = Centred(area, Size); + } } else if (restored is { } bounds && WindowState == FormWindowState.Normal && @@ -373,7 +384,8 @@ static List WorkingAreas() => /// /// The size asked for is in logical pixels, and the window is per monitor aware, so it is - /// scaled to the display it opens on - once, before it is shown and centred. Unscaled, it was + /// scaled to the display it opens on - once, before it is shown, and centred again for the + /// size that comes to, since WinForms had already centred it for the other. Unscaled, it was /// 1100 by 700 device pixels while the text grew with the display: at 200% each pane had room /// for four characters. Moving to another display afterwards is Windows' to scale. /// @@ -391,6 +403,16 @@ internal static Size InitialClientSize(Size logical, int dpi, Size workingArea) return new(Math.Min(width, maxWidth), Math.Min(height, maxHeight)); } + /// + /// Where a window of sits to be in the middle of + /// . One too large for it starts at the area's top left, so its title + /// bar is still in reach. + /// + internal static Point Centred(Rectangle area, Size size) => + new( + Math.Max(area.X, area.X + (area.Width - size.Width) / 2), + Math.Max(area.Y, area.Y + (area.Height - size.Height) / 2)); + protected override void OnDpiChanged(DpiChangedEventArgs e) { base.OnDpiChanged(e); @@ -484,7 +506,10 @@ public void Raise() Visible = true; if (WindowState == FormWindowState.Minimized) { - WindowState = FormWindowState.Normal; + // Back to what it was minimised from, as the taskbar would put it. Always to normal, + // a window the reader had maximised came back at its restored size, and was then + // remembered as one they had not maximised. + WindowState = maximized ? FormWindowState.Maximized : FormWindowState.Normal; } BringToFront(); From 4df5e337f8c8d8fb109bea45e2c531955e5e1c78 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:46:36 +1000 Subject: [PATCH 04/73] Queue the macOS viewer's keys and clicks, and hand one over per poll Each handler wrote its event into one field of the input the next poll reads, and the pump dispatches everything AppKit has queued before it returns. So whenever a frame was slow, the loop waiting behind an accept on InlineApplier's mutex, two presses of Down scrolled once, Tab then a accepted the entry the reader meant to skip, and d then a click on another row discarded the clicked row, which the reader had never looked at: the managed side applies a frame's click before its key. Keys, clicks and menu events now go into a queue in Runtime, and deview_poll_input hands over the one that is next, as the WinForms head does. What adds up or says where it is now, the wheel, a drag, the scroller and a close, is still whole per poll. The ABI is as it was. Two things follow from handing over one a poll. The pump does not wait out its frame while more are queued, or a fast key repeat would be handed over more slowly than it arrives. And a context menu is not popped until the queue is empty: popping holds the managed loop for as long as the menu is up, so a key pressed straight after the right-click would be applied when the menu closed, however much later that was. Not compiled or run here. There is no Mac on this machine, so the macos-14 job is the first to build it, and nothing in a capture exercises input. --- native/swift/Sources/Deview/Exports.swift | 3 +- native/swift/Sources/Deview/MainMenu.swift | 6 +- native/swift/Sources/Deview/Runtime.swift | 74 +++++++++++++++++++- native/swift/Sources/Deview/ViewerView.swift | 10 +-- 4 files changed, 80 insertions(+), 13 deletions(-) diff --git a/native/swift/Sources/Deview/Exports.swift b/native/swift/Sources/Deview/Exports.swift index 3cf629e30..d56df0f53 100644 --- a/native/swift/Sources/Deview/Exports.swift +++ b/native/swift/Sources/Deview/Exports.swift @@ -85,8 +85,7 @@ public func deviewPollInput(_ input: UnsafeMutablePointer?) { } } - input.pointee = runtime.input - runtime.resetInput() + input.pointee = runtime.takeInput() } @_cdecl("deview_set_hidden") diff --git a/native/swift/Sources/Deview/MainMenu.swift b/native/swift/Sources/Deview/MainMenu.swift index 79e86a7d3..a8c1425de 100644 --- a/native/swift/Sources/Deview/MainMenu.swift +++ b/native/swift/Sources/Deview/MainMenu.swift @@ -12,7 +12,7 @@ final class ControlTarget: NSObject { /// loop answer it. @objc func quit(_ sender: Any?) { - Runtime.shared.input.key = DEVIEW_KEY_QUIT.value + Runtime.shared.post(.key(DEVIEW_KEY_QUIT.value)) } /// A menu bar command. The item's tag is the `DeviewKey`, so the menu carries no mapping of @@ -23,7 +23,7 @@ final class ControlTarget: NSObject { return } - Runtime.shared.input.key = Int32(item.tag) + Runtime.shared.post(.key(Int32(item.tag))) } /// A context menu item. The tag is its index in the frame's menu, which is the whole payload: @@ -34,7 +34,7 @@ final class ControlTarget: NSObject { return } - Runtime.shared.input.clickedMenuItem = Int32(item.tag) + Runtime.shared.post(.menuItem(Int32(item.tag))) } @objc diff --git a/native/swift/Sources/Deview/Runtime.swift b/native/swift/Sources/Deview/Runtime.swift index eca021a13..1d2f5731f 100644 --- a/native/swift/Sources/Deview/Runtime.swift +++ b/native/swift/Sources/Deview/Runtime.swift @@ -40,6 +40,29 @@ final class Runtime { var input = DeviewInput() var initialised = false + /// Keys, clicks and menu events, in the order they happened, one handed over per poll. + /// + /// A slot per kind used to hold them, in `input`, and each handler overwrote its slot. `pump` + /// dispatches everything AppKit has queued before it returns, so with a slow frame - the loop + /// waiting behind an accept on InlineApplier's mutex - two presses of Down scrolled once, Tab + /// then a accepted the entry the reader meant to skip, and d then a click on another row + /// discarded the clicked one, which the reader had never looked at: the managed side applies + /// a frame's click before its key. The WinForms head queues them for the same reason. + /// + /// Only these. The wheel adds up, a drag and the scroller say where they are now and a close + /// is a flag, so each of those is whole however many events made it, and stays in `input`. + private var discrete: [Discrete] = [] + + enum Discrete { + case key(Int32) + case button(Int32) + case queueItem(Int32) + case rightClickedQueueItem(Int32) + case rightClickedPane(Int32) + case menuItem(Int32) + case menuClosed + } + /// Keeps App Nap off for as long as the runtime is open: see `open`. private var activity: NSObjectProtocol? @@ -306,7 +329,12 @@ final class Runtime { return } - guard !menuShown, let view else { + // Not while anything is waiting to be handed over. It happened before this menu could be + // shown, and popping holds the managed loop for as long as the menu is up: a key pressed + // straight after the right-click would be applied when the menu closed, however much later + // that was. Handed over first, it is applied now, and a menu that outlives it is popped on + // the frame after. + guard !menuShown, discrete.isEmpty, let view else { return } @@ -340,15 +368,19 @@ final class Runtime { if !menu.popUp(positioning: nil, at: at, in: view) { // Escape, a click elsewhere, or focus lost. The click that did it was swallowed by the // tracking loop, so this is the only way the managed side can hear about it. - input.menuClosed = 1 + post(.menuClosed) } } /// Drains what is queued and then blocks until the deadline, which is both the pump and the /// frame throttle. Without the second part this would spin a core, since the managed loop /// calls straight back in. + /// + /// Not blocked while input is still waiting to be handed over, which is the next frame's, + /// now. It goes one event a poll, and a frame's wait between two of them would hand a held + /// key's repeats over more slowly than a fast repeat rate makes them. private func pump() { - let deadline = Date(timeIntervalSinceNow: 1.0 / 60.0) + let deadline = discrete.isEmpty ? Date(timeIntervalSinceNow: 1.0 / 60.0) : Date.distantPast while let event = NSApp.nextEvent(matching: .any, until: deadline, inMode: .default, dequeue: true) { NSApp.sendEvent(event) } @@ -394,9 +426,45 @@ final class Runtime { delegate = nil scroller = nil menuShown = false + discrete = [] initialised = false } + /// Records a key, a click or a menu event, behind whatever is already waiting. + func post(_ event: Discrete) { + discrete.append(event) + } + + /// What one poll hands over: everything in `input`, and the discrete event that is next in + /// line when there is one. Only the one, so the managed side applies them in the order they + /// happened rather than in the order it reads a frame's fields. + func takeInput() -> DeviewInput { + var taken = input + resetInput() + guard !discrete.isEmpty else { + return taken + } + + switch discrete.removeFirst() { + case let .key(key): + taken.key = key + case let .button(index): + taken.clickedButton = index + case let .queueItem(index): + taken.clickedQueueItem = index + case let .rightClickedQueueItem(index): + taken.rightClickedQueueItem = index + case let .rightClickedPane(side): + taken.rightClickedPane = side + case let .menuItem(index): + taken.clickedMenuItem = index + case .menuClosed: + taken.menuClosed = 1 + } + + return taken + } + /// Each event is delivered exactly once, so the poll that read them clears them. The grid is /// left alone: it is a state, not an event. func resetInput() { diff --git a/native/swift/Sources/Deview/ViewerView.swift b/native/swift/Sources/Deview/ViewerView.swift index bff32f82d..3afd7770c 100644 --- a/native/swift/Sources/Deview/ViewerView.swift +++ b/native/swift/Sources/Deview/ViewerView.swift @@ -127,7 +127,7 @@ final class ViewerView: NSView, NSViewToolTipOwner { // reason the first click after a menu no longer also selects a row. let point = convert(event.locationInWindow, from: nil) if let index = layout.buttons.firstIndex(where: { $0.contains(point) }) { - Runtime.shared.input.clickedButton = Int32(index) + Runtime.shared.post(.button(Int32(index))) return } @@ -140,7 +140,7 @@ final class ViewerView: NSView, NSViewToolTipOwner { if let index = layout.queueItems.firstIndex(where: { $0.contains(point) }), index < model.queue.count { - Runtime.shared.input.clickedQueueItem = Int32(index) + Runtime.shared.post(.queueItem(Int32(index))) return } @@ -280,7 +280,7 @@ final class ViewerView: NSView, NSViewToolTipOwner { let point = convert(event.locationInWindow, from: nil) if let index = layout.queueItems.firstIndex(where: { $0.contains(point) }), index < model.queue.count { - Runtime.shared.input.rightClickedQueueItem = Int32(index) + Runtime.shared.post(.rightClickedQueueItem(Int32(index))) return } @@ -293,7 +293,7 @@ final class ViewerView: NSView, NSViewToolTipOwner { point.y <= layout.body.maxY, point.x >= layout.panes[0].cellLeft, point.x <= layout.body.maxX { - Runtime.shared.input.rightClickedPane = point.x >= layout.panes[1].cellLeft ? 1 : 0 + Runtime.shared.post(.rightClickedPane(point.x >= layout.panes[1].cellLeft ? 1 : 0)) Runtime.shared.paneMenuPoint = point return } @@ -358,7 +358,7 @@ final class ViewerView: NSView, NSViewToolTipOwner { return } - Runtime.shared.input.key = key + Runtime.shared.post(.key(key)) } /// Matches ReadKey in deview.cpp and the WinForms head's Map, which is the keymap the docs From 97dd53e60cd866491b3d53cf7c9dda0ea96e12eb Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:49:58 +1000 Subject: [PATCH 05/73] Wrap the macOS footer's buttons onto more rows, and keep the status off them The footer was one row whatever was in it. The buttons were laid out left to right with nothing to stop them at the window's edge, and the status was drawn from the right edge whatever was already there. At the 1100 points the window opens at, an image pair in a queue had "images differ" drawn over its last button, and a paged document's eleven buttons needed 1405, so Zoom out and Zoom in were off the window and could not be clicked. A button that would pass the edge now starts another row, and the body gives up the height. The status is drawn beside the last row when there is room right of the last button, as before, and otherwise on a line of its own above the buttons, losing its end if it is wider than the window. Above rather than below, and with the buttons placed from their labels and the width alone, so they stay where they are as the status comes and goes: a click is resolved by position, and the status changes while the pointer is on its way. A footer whose buttons fit one row with room for the status beside them is laid out exactly as it was. That is every scene PixelTests captures, so no macOS baseline is expected to move. The managed side still slices the body as if the footer were one row. This head's own chrome leaves it 64 points to spare, which is three rows of buttons, or two and a status line. A paged document's buttons pass that in a window under about 600 points wide, or about 740 with a status too long for the last row, and the last one or two rows of the body are then not drawn. Not compiled or run here. There is no Mac on this machine, so the macos-14 job is the first to build it. --- native/swift/Sources/Deview/Renderer.swift | 111 ++++++++++++++++++--- 1 file changed, 97 insertions(+), 14 deletions(-) diff --git a/native/swift/Sources/Deview/Renderer.swift b/native/swift/Sources/Deview/Renderer.swift index 265c1c610..6452ab669 100644 --- a/native/swift/Sources/Deview/Renderer.swift +++ b/native/swift/Sources/Deview/Renderer.swift @@ -279,8 +279,10 @@ final class Renderer { rule(top: headerTop + line + Renderer.gap, width: size.width, in: context, size) let bodyTop = Renderer.padding + (line + Renderer.gap) * 2 + Renderer.gap * 2 - let footerHeight = line + Renderer.gap * 2 - let capacity = max(1, Int((size.height - bodyTop - footerHeight - Renderer.padding) / line)) + // Before the body, which ends where the footer begins. The footer is as tall as its + // buttons take, and that is more than one row of them once they are wider than the window. + let placed = place(frame, width: size.width, line: line) + let capacity = max(1, Int((size.height - bodyTop - placed.height - Renderer.padding) / line)) let rows = min(capacity, max(frame.queue.count, max(frame.left.rows.count, frame.right.rows.count))) for index in 0 ..< rows { @@ -339,34 +341,115 @@ final class Renderer { textLeft: panesLeft + half + gutter, width: panesWidth - half) ] - layout.buttons = footer(frame, size: size, height: footerHeight, line: line, in: context) + layout.buttons = footer(frame, placed, size: size, line: line, in: context) return layout } - private func footer(_ frame: Frame, size: CGSize, height: CGFloat, line: CGFloat, in context: CGContext) -> [CGRect] { - let top = size.height - height - Renderer.padding - rule(top: top - Renderer.gap, width: size.width, in: context, size) + /// Where the footer's buttons go and how tall that makes it. Worked out before anything is + /// drawn, because the body ends where the footer begins. + private struct Footer { + /// One for each of the frame's buttons, in their order. + var slots: [Slot] = [] - var rects: [CGRect] = [] + /// How many rows the buttons take: one, unless they are wider than the window. + var rows = 1 + + /// The status has a line of its own above the buttons, for want of room beside them. + var statusAbove = false + + var height: CGFloat = 0 + + struct Slot { + var row = 0 + var left: CGFloat = 0 + var width: CGFloat = 0 + } + } + + /// Lays the footer out: the buttons left to right, onto another row where the next would pass + /// the window's edge, and the status right of the last of them where there is room for it. + /// + /// One row used to be all there was. A paged document has eleven buttons, wider together than + /// the window opens, so the last of them were off it and could not be clicked. And the status + /// was drawn from the right edge whatever was already there, which for an image pair in a + /// queue was the last button. A status with no room beside the buttons has a line of its own + /// instead, because it is where the page, the zoom, a selection and a failed accept are said. + /// + /// Where a button goes turns on the buttons and the window's width and nothing else. Not on + /// the status, which changes while the pointer is on its way to a button: its line is above + /// the buttons for that reason, so they stay where they are as it comes and goes. + private func place(_ frame: Frame, width: CGFloat, line: CGFloat) -> Footer { + var placed = Footer() + let edge = width - Renderer.padding var left = Renderer.padding + var end = Renderer.padding for button in frame.buttons { - let width = CGFloat(button.label.count + 4) * cell.width - let bounds = rect(top: top, left: left, width: width, height: height, size) + let span = CGFloat(button.label.count + 4) * cell.width + // Never the first of its row, which has nowhere better to go however wide it is + if left > Renderer.padding, left + span > edge { + placed.rows += 1 + left = Renderer.padding + } + + placed.slots.append(Footer.Slot(row: placed.rows - 1, left: left, width: span)) + end = left + span + left = end + Renderer.gap + } + + // Room is room right up to the last button, with no gap asked for: a conflicted entry's + // line count has always sat two points off its variant button, and reads. + let statusWidth = CGFloat(frame.status.count) * cell.width + placed.statusAbove = !frame.status.isEmpty && edge - statusWidth < end + let row = line + Renderer.gap * 2 + placed.height = row * CGFloat(placed.rows) + Renderer.gap * CGFloat(placed.rows - 1) + if placed.statusAbove { + placed.height += line + Renderer.gap + } + + return placed + } + + private func footer(_ frame: Frame, _ placed: Footer, size: CGSize, line: CGFloat, in context: CGContext) -> [CGRect] { + let top = size.height - placed.height - Renderer.padding + rule(top: top - Renderer.gap, width: size.width, in: context, size) + + let height = line + Renderer.gap * 2 + let first = placed.statusAbove ? top + line + Renderer.gap : top + var rects: [CGRect] = [] + for (button, slot) in zip(frame.buttons, placed.slots) { + let bounds = rect( + top: first + CGFloat(slot.row) * (height + Renderer.gap), + left: slot.left, + width: slot.width, + height: height, + size) rects.append(bounds) context.setFillColor(button.enabled ? Palette.buttonFace : Palette.buttonDisabled) context.fill(bounds) let label = bounds.insetBy(dx: cell.width * 2, dy: (height - line) / 2) text(button.label, in: label, button.enabled ? Palette.text : Palette.dim, context) - left += width + Renderer.gap } - if !frame.status.isEmpty { - let width = CGFloat(frame.status.count) * cell.width - let bounds = rect(top: top + (height - line) / 2, left: size.width - Renderer.padding - width, width: width, height: line, size) - text(frame.status, in: bounds, Palette.dim, context) + guard !frame.status.isEmpty else { + return rects + } + + let edge = size.width - Renderer.padding + let width = CGFloat(frame.status.count) * cell.width + if placed.statusAbove { + // From the left edge once it is wider than the window, so that what is cut off is its + // end, which is the end the text renderer loses. + let left = max(Renderer.padding, edge - width) + let above = rect(top: top, left: left, width: edge - left, height: line, size) + text(frame.status, in: above, Palette.dim, context) + return rects } + // Beside the last row of buttons, against the right edge + let last = first + CGFloat(placed.rows - 1) * (height + Renderer.gap) + let beside = rect(top: last + (height - line) / 2, left: edge - width, width: width, height: line, size) + text(frame.status, in: beside, Palette.dim, context) return rects } From d71988a5e2ea58b9cdfbf3cb889fc8556879e1d7 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:52:47 +1000 Subject: [PATCH 06/73] Follow the macOS scroller's knob without AppKit's tracking loop NSScroller tracks a press on its knob in a loop of its own, inside mouseDown, until the button comes up. That is inside the pump, so deview_present did not return for the length of the drag: the knob moved, every move was reported, and the managed loop that scrolls the panes in answer ran once, at the release. The scroller is now a subclass that takes a press on the knob as three ordinary events, the way the view takes a selection, so there is a frame between one move and the next and the panes scroll as the knob is dragged. It reports where the drag has got to and leaves the knob to the frame that answers, which puts it on the row the panes show. A press in the slot is still AppKit's: what it does is the reader's setting, and it is over in a click. When the knob's own rectangle cannot be read, the press goes to AppKit as before. A window being resized is the same kind of loop, and that one cannot be stepped around. The scroller is kept against the right edge and stretched by its autoresizing mask while it runs, where it used to stay wherever the last frame had put it. The panes still keep the rows they were sliced for until the mouse comes up, drawn into the new size. Doing better takes a way to ask the managed side for a frame from inside the loop, which is a change to the ABI, and the readme now says so. Not compiled or run here. There is no Mac on this machine, so the macos-14 job is the first to build it, and a capture makes no window, so nothing there exercises a scroller. --- native/swift/Sources/Deview/Runtime.swift | 28 +++++++-- native/swift/Sources/Deview/ViewerView.swift | 62 ++++++++++++++++++++ native/swift/readme.md | 8 +++ 3 files changed, 94 insertions(+), 4 deletions(-) diff --git a/native/swift/Sources/Deview/Runtime.swift b/native/swift/Sources/Deview/Runtime.swift index 1d2f5731f..30a2ecb9c 100644 --- a/native/swift/Sources/Deview/Runtime.swift +++ b/native/swift/Sources/Deview/Runtime.swift @@ -217,9 +217,15 @@ final class Runtime { /// which has no window and so no scroller — is not left with a gap where one would be. private func makeScroller(in view: ViewerView, _ renderer: Renderer) { let width = NSScroller.scrollerWidth(for: .regular, scrollerStyle: .legacy) - let scroller = NSScroller(frame: NSRect(x: 0, y: 0, width: width, height: view.bounds.height)) + let scroller = PaneScroller( + frame: NSRect(x: view.bounds.maxX - width, y: 0, width: width, height: view.bounds.height)) scroller.scrollerStyle = .legacy scroller.knobStyle = .light + // Kept against the right edge and as tall as the window leaves it by AppKit, as well as by + // `position`. A window being resized is a loop of AppKit's own, inside the pump, so + // `position` does not run until the mouse comes up, and until then the scroller stayed + // where the last frame had put it: out in the right hand pane of a window being widened. + scroller.autoresizingMask = [.minXMargin, .height] scroller.target = target scroller.action = #selector(ControlTarget.scrolled(_:)) view.addSubview(scroller) @@ -289,8 +295,9 @@ final class Runtime { width: scrollerWidth, height: max(1, body.height)) - // Assigned rather than guarded against a drag in progress, because there cannot be one: - // a legacy scroller tracks in a loop of its own, inside the pump this runs before. + // Assigned during a drag of the knob as at any other time. `PaneScroller` reports where a + // drag has got to without moving the knob, so this is what moves it: to the row the panes + // are showing, which is where the WinForms bar's thumb sits too. let visible = max(1, frame.left.rows.count) let total = max(Int(frame.left.totalRows), visible) let maximum = total - visible @@ -298,7 +305,20 @@ final class Runtime { scroller.doubleValue = maximum <= 0 ? 0 : Double(frame.left.scrollTop) / Double(maximum) } - /// Translates wherever the scroller was grabbed into a first visible row. + /// The knob dragged to `value` of the way along its travel, as a first visible row. From + /// `PaneScroller`, which follows that drag itself. + func knobDragged(to value: Double) { + guard let frame = view?.model else { + return + } + + let visible = max(1, frame.left.rows.count) + let maximum = max(0, Int(frame.left.totalRows) - visible) + input.scrollTo = Int32((value * Double(maximum)).rounded()) + } + + /// Translates wherever the scroller was grabbed into a first visible row. What reaches here is + /// what AppKit tracked itself, which is a press in the slot. func scrolled(_ scroller: NSScroller) { guard let frame = view?.model else { return diff --git a/native/swift/Sources/Deview/ViewerView.swift b/native/swift/Sources/Deview/ViewerView.swift index 3afd7770c..24559dd1b 100644 --- a/native/swift/Sources/Deview/ViewerView.swift +++ b/native/swift/Sources/Deview/ViewerView.swift @@ -445,6 +445,68 @@ final class ViewerView: NSView, NSViewToolTipOwner { } } +/// The pane scrollbar, with a drag of its knob followed here rather than in AppKit's own loop. +/// +/// `NSScroller` tracks a press on its knob in a loop of its own, inside `mouseDown`, and returns +/// when the button comes up. That is inside `Runtime.pump`, so `deview_present` did not return +/// for the length of the drag: the knob moved under the pointer, every move was reported, and the +/// managed loop that scrolls the panes in answer ran once, at the release. The WinForms head has +/// the same loop under its scroll bar and is handed frames from inside it, which this ABI has no +/// way to ask for. +/// +/// So the drag is three ordinary events instead, as a selection is in `ViewerView`. The window +/// sends the moves and the release to the view that took the press, each comes through the pump +/// on its own, and there is a frame between one and the next. +/// +/// Only a press on the knob. One in the slot is still AppKit's: what it means is the reader's +/// setting, a page or the place that was pressed, and it is over in a click. +final class PaneScroller: NSScroller { + /// A knob being dragged: where in the window the pointer took hold of it, where the knob was + /// then, as the fraction of its travel `doubleValue` is, and how long that travel is. + private var dragging = false + private var heldAt: CGFloat = 0 + private var heldValue = 0.0 + private var travel: CGFloat = 0 + + override func mouseDown(with event: NSEvent) { + let knob = rect(for: .knob) + let room = rect(for: .knobSlot).height - knob.height + guard room > 0, knob.contains(convert(event.locationInWindow, from: nil)) else { + super.mouseDown(with: event) + return + } + + dragging = true + heldAt = event.locationInWindow.y + heldValue = doubleValue + travel = room + } + + override func mouseDragged(with event: NSEvent) { + guard dragging else { + super.mouseDragged(with: event) + return + } + + // Measured from the press rather than from the last move, as a picture's drag is, and in + // the window's coordinates, which count up the screen while the document runs down it. + // The knob is not moved here. It goes where the frame that answers this puts it, which + // is the row the panes are showing. + let moved = Double((heldAt - event.locationInWindow.y) / travel) + Runtime.shared.knobDragged(to: min(max(heldValue + moved, 0), 1)) + } + + override func mouseUp(with event: NSEvent) { + guard dragging else { + super.mouseUp(with: event) + return + } + + // Nothing to report: the last move already said where it is. + dragging = false + } +} + /// Closing is the managed side's decision: with a tray to reopen from it hides, without one it /// exits. So the request is recorded and the close refused, and the answer comes back as either /// `deview_set_hidden` or `deview_shutdown`. diff --git a/native/swift/readme.md b/native/swift/readme.md index da840dab9..1240a0192 100644 --- a/native/swift/readme.md +++ b/native/swift/readme.md @@ -28,6 +28,14 @@ rather than handing control to `NSApplication.run`. That is what keeps the scrol the button lookup and the close-means-hide rule in `ViewerProgram` for every platform. It also means the deadline is the frame throttle: without it the managed loop would spin a core. +**AppKit keeps loops of its own**, and each runs inside that pump, so the managed loop waits it +out. A menu while it is open, which is deliberate: that loop is what buys the keyboard, Escape and +VoiceOver. A window while it is being resized, which is not: the panes keep the rows they were +sliced for until the mouse comes up, drawn into the new size, and it takes a way to ask the managed +side for a frame from inside the loop to do better, which the ABI does not have. The scroller's +knob used to be a third. `PaneScroller` follows a drag of it as three ordinary events instead, so +the panes scroll as it moves. + **No app bundle.** `setActivationPolicy(.regular)` plus `finishLaunching()` is enough to get a window that takes focus and appears in the dock, which is the same thing GLFW does for the Linux build. From 86c947fb51febc57bd6574c1725e2db6f17e051a Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:54:09 +1000 Subject: [PATCH 07/73] Draw the macOS viewer's text without JetBrains Mono's ligatures Core Text applies a font's calt feature unless told not to, and JetBrains Mono does its code ligatures through calt. So macOS drew <>, !=, <=, =>, -> and == as one glyph each, where the Windows and Linux heads draw a glyph a character: the title of a file comparison read <> there and as one diamond here. In a tool whose job is to show which characters a snapshot holds, that is the wrong answer, and most of all for the snapshot's own text. The font is now a copy with calt and liga off, through kCTFontFeatureSettingsAttribute. This moves the macOS pixel baselines whose text holds a sequence calt substitutes, and those have to be accepted again from the macos-14 job, since they cannot be made here. Worked out from the embedded font's own GSUB table, they are the five file mode scenes, for the <> in their title: FileDiff, Images, ImagesEnlarged, Selection and Minimal, which also has ... at each end of its folded rows. The five inline scenes hold no such sequence and should come out as they were. Not compiled or run here. There is no Mac on this machine, so the macos-14 job is the first to build it. --- native/swift/Sources/Deview/Renderer.swift | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/native/swift/Sources/Deview/Renderer.swift b/native/swift/Sources/Deview/Renderer.swift index 6452ab669..1ea5ce0f5 100644 --- a/native/swift/Sources/Deview/Renderer.swift +++ b/native/swift/Sources/Deview/Renderer.swift @@ -182,7 +182,7 @@ final class Renderer { } init(fontData: Data?, size: CGFloat) { - font = Renderer.load(fontData, size) + font = Renderer.withoutLigatures(Renderer.load(fontData, size), size) ascent = CTFontGetAscent(font) descent = CTFontGetDescent(font) @@ -232,6 +232,26 @@ final class Renderer { return CTFontCreateWithGraphicsFont(cgFont, size, nil, nil) } + /// `font` with its ligatures off, so every character of a snapshot is drawn as itself. + /// + /// JetBrains Mono draws `<>`, `!=`, `<=`, `=>`, `->`, `==` and a good many more as one glyph + /// each, and closes up `...`, all through its `calt` feature, which Core Text applies unless + /// told not to. The other two heads draw a glyph a character, so the same title read `<>` on + /// Windows and Linux and as one diamond here, in a tool whose whole job is to show which + /// characters a snapshot holds. + /// + /// `liga` goes off with it. The embedded font has no such feature, but the face taken when + /// nothing is embedded might, and the answer should not turn on which font is in use. + private static func withoutLigatures(_ font: CTFont, _ size: CGFloat) -> CTFont { + let features: [[CFString: Any]] = [ + [kCTFontOpenTypeFeatureTag: "calt", kCTFontOpenTypeFeatureValue: 0], + [kCTFontOpenTypeFeatureTag: "liga", kCTFontOpenTypeFeatureValue: 0] + ] + let attributes: [CFString: Any] = [kCTFontFeatureSettingsAttribute: features] + let descriptor = CTFontDescriptorCreateWithAttributes(attributes as CFDictionary) + return CTFontCreateCopyWithAttributes(font, size, nil, descriptor) + } + /// The window size in character cells, which is what version 2 of the ABI reports. Net of the /// scroller, because a column the scroller is sitting on is not a column the diff can use. func grid(for size: CGSize) -> (columns: Int32, rows: Int32) { From 8e011c0c48b3e56d9a1038b11269ce87375b9750 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:07:43 +1000 Subject: [PATCH 08/73] Enable the macOS pane scroller explicitly Following a drag of the knob only does anything if the scroller has a knob. A scroll view enables and disables its own scrollers, and this one is placed by hand with no scroll view around it, so nothing here ever said it was enabled: it was whatever an NSScroller starts as, and one that is not enabled draws its slot with nothing in it. Which that is could not be checked here. If a scroller starts enabled, this changes nothing. If it does not, the pane scroller has been an empty strip since it was added, and this is what gives it a knob. A commit of its own, so it can be dropped alone. Not compiled or run: there is no Mac here, and a capture makes no window. --- native/swift/Sources/Deview/Runtime.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/native/swift/Sources/Deview/Runtime.swift b/native/swift/Sources/Deview/Runtime.swift index 30a2ecb9c..39e0ee45d 100644 --- a/native/swift/Sources/Deview/Runtime.swift +++ b/native/swift/Sources/Deview/Runtime.swift @@ -228,6 +228,10 @@ final class Runtime { scroller.autoresizingMask = [.minXMargin, .height] scroller.target = target scroller.action = #selector(ControlTarget.scrolled(_:)) + // Said rather than left to whatever a scroller starts as. A scroll view sees to this for + // its own scrollers and there is none here, and a scroller that is not enabled draws its + // slot with no knob in it to take hold of. + scroller.isEnabled = true view.addSubview(scroller) self.scroller = scroller From bbe98d4096a4fb78ed09292002d4a2628af57fe4 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:40:26 +1000 Subject: [PATCH 09/73] Stop the tray's Accept all deleting the verified file a move in the same sweep just wrote A delete for a verified file stayed tracked when a later run failed against that file and a move onto it arrived. Accept all carries out the moves and then the deletes, so the received file was moved into place and then deleted: both gone, with nothing said. DiffRunner.SettleDelete withdraws such a delete, but not from a library that predates it, not while a viewer holds the queue the settle is sent to, and not while that port is remembered as unowned. A move now withdraws the delete it finds waiting for its target, whichever port it arrives on, since a run that verified against a file is what makes its delete stale. That leaves the delete that arrived after the move, where which of the two is stale cannot be known. Both sweeps, the menu's and the one a displaying viewer asks for, now leave a delete pending when a move in the same sweep wrote its file or a move still pending is going to. It is decided by what was written rather than by what was swept, so a move whose received file has gone, which is dropped without writing anything, holds nothing back. --- .../TrackerMoveOntoDeleteTest.cs | 165 ++++++++++++++++++ .../TrayViewerSyncTest.cs | 22 +++ src/DiffEngineTray/Tracker.cs | 87 +++++++-- 3 files changed, 260 insertions(+), 14 deletions(-) create mode 100644 src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs diff --git a/src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs b/src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs new file mode 100644 index 000000000..722d532c8 --- /dev/null +++ b/src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs @@ -0,0 +1,165 @@ +/// +/// A pending delete and a pending move that name the same verified file. +/// +/// The delete says no test produces the file any more, and the move says a later run verified +/// against it and failed, so the delete is the stale one. Nothing withdrew it, and "Accept all" +/// carries out the moves and then the deletes: the received file was moved into place and then +/// deleted, and both were gone with nothing said. +/// +/// +/// DiffRunner.SettleDelete withdraws such a delete, which is why this takes an arrangement to +/// reach: a library from before that existed, a viewer holding the queue the settle is sent to, or +/// a settle skipped because the port was remembered as unowned. +/// +/// +public class TrackerMoveOntoDeleteTest : + IDisposable +{ + [Test] + public async Task AMoveOntoAFileWithdrawsItsPendingDelete() + { + await using var tracker = new RecordingTracker(); + tracker.AddDelete(verified); + + tracker.AddMove(received, verified, "theExe", "theArguments", true, null); + + await Assert.That(tracker.Deletes).IsEmpty(); + await Assert.That(tracker.Moves).HasSingleItem(); + } + + /// + /// The same pair arriving over the viewer port, which is how a move reaches a tray that started + /// after the test process did. + /// + [Test] + public async Task AMoveArrivingOverTheViewerPortWithdrawsItToo() + { + await using var tracker = new RecordingTracker(); + tracker.AddDelete(verified); + + ((ITrackedFiles) tracker).AddMove(received, verified); + + await Assert.That(tracker.Deletes).IsEmpty(); + } + + [Test] + public async Task AcceptAllKeepsTheFileItsMoveJustWrote() + { + await using var tracker = new RecordingTracker(); + tracker.AddDelete(verified); + tracker.AddMove(received, verified, "theExe", "theArguments", true, null); + + await tracker.AcceptAll(); + + await Assert.That(await File.ReadAllTextAsync(verified)).IsEqualTo("received"); + await Assert.That(File.Exists(received)).IsFalse(); + await tracker.AssertEmpty(); + } + + /// + /// The other order, which nothing withdraws: the delete arrived after the move, so it may be + /// the newer of the two. Neither is guessed at. The move is what was asked for, and a delete is + /// never carried out on a file the same sweep has just written, so it stays pending for + /// whoever knows the file is redundant. + /// + [Test] + public async Task AcceptAllHoldsADeleteOfTheFileItsMoveJustWrote() + { + await using var tracker = new RecordingTracker(); + tracker.AddMove(received, verified, "theExe", "theArguments", true, null); + tracker.AddDelete(verified); + + await tracker.AcceptAll(); + + await Assert.That(await File.ReadAllTextAsync(verified)).IsEqualTo("received"); + await Assert.That(tracker.Moves).IsEmpty(); + await Assert.That(tracker.Deletes.Select(_ => _.File)).IsEquivalentTo([verified]); + } + + /// + /// The sweep a viewer displaying the tray's queue asks for, which has the same two halves in + /// the same order. + /// + [Test] + public async Task TheWireSweepHoldsADeleteOfTheFileItsMoveJustWrote() + { + await using var tracker = new RecordingTracker(); + ITrackedFiles tracked = tracker; + tracker.AddMove(received, verified, "theExe", "theArguments", true, null); + tracker.AddDelete(verified); + + var (accepted, kept) = tracked.AcceptAll(holdDeletes: false); + + await Assert.That(accepted).IsEqualTo(1); + await Assert.That(kept).IsEqualTo(1); + await Assert.That(await File.ReadAllTextAsync(verified)).IsEqualTo("received"); + await Assert.That(tracker.Deletes.Select(_ => _.File)).IsEquivalentTo([verified]); + } + + /// + /// A move that could not be carried out is still going to write the file, so the delete waits + /// for it as well. Deleting here left the old snapshot gone and the new one not yet in place. + /// + [Test] + public async Task TheWireSweepHoldsADeleteOfAFileAMoveStillPendingTargets() + { + await using var tracker = new RecordingTracker(); + ITrackedFiles tracked = tracker; + tracker.AddMove(received, verified, "theExe", "theArguments", true, null); + tracker.AddDelete(verified); + + int accepted; + int kept; + // The received file held open, so the move fails and stays pending while nothing stops + // the verified file from being deleted + await using (new FileStream(received, FileMode.Open, FileAccess.Read, FileShare.None)) + { + (accepted, kept) = tracked.AcceptAll(holdDeletes: false); + } + + await Assert.That(accepted).IsEqualTo(0); + await Assert.That(kept).IsEqualTo(2); + await Assert.That(await File.ReadAllTextAsync(verified)).IsEqualTo("verified"); + await Assert.That(tracker.Moves).HasSingleItem(); + await Assert.That(tracker.Deletes).HasSingleItem(); + } + + /// + /// What holds a delete is a move that wrote the file or is still going to, not a move having + /// named it. One whose received file has gone is dropped without writing anything - the test + /// re-ran and cleared it - and the delete beside it is the newer statement about that file. + /// + [Test] + public async Task AMoveWithNothingLeftToMoveDoesNotHoldTheDelete() + { + await using var tracker = new RecordingTracker(); + tracker.AddMove(received, verified, "theExe", "theArguments", true, null); + tracker.AddDelete(verified); + File.Delete(received); + + await tracker.AcceptAll(); + + await Assert.That(File.Exists(verified)).IsFalse(); + await tracker.AssertEmpty(); + } + + public TrackerMoveOntoDeleteTest() + { + // The received file sits in its own directory, the way DiffEngine stages one, because + // accepting a move deletes that directory. + directory = Path.Combine(Path.GetTempPath(), $"MoveOntoDelete_{Guid.NewGuid():N}"); + var staged = Path.Combine(directory, "staged"); + Directory.CreateDirectory(staged); + received = Path.Combine(staged, "Sample.Test.received.txt"); + verified = Path.Combine(directory, "Sample.Test.verified.txt"); + File.WriteAllText(received, "received"); + File.WriteAllText(verified, "verified"); + } + + public void Dispose() => + Directory.Delete(directory, true); + + string directory; + string received; + string verified; +} diff --git a/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs b/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs index ad0aa3d2e..165cb2433 100644 --- a/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs +++ b/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs @@ -188,6 +188,28 @@ public async Task ViewerAcceptAllEmptiesTheTray() await Assert.That(File.Exists(delete.File)).IsFalse(); } + /// + /// A move and a delete pending on the same verified file, swept from the attached viewer. The + /// tray carries out its moves and then its deletes, so the received file was moved into place + /// and then deleted. The delete stays pending instead, and the window goes on showing it. + /// + [Test] + public async Task ViewerAcceptAllKeepsTheFileATrackedMoveJustWrote() + { + await using var pair = new TrayOwned(); + var move = pair.AddMove(); + await File.WriteAllTextAsync(move.Target, "verified"); + pair.Tracker.AddDelete(move.Target); + pair.Pump(); + + pair.Link.Post(ViewerSideVerb.AcceptAll, null); + + var viewer = pair.Pump(); + await Assert.That(await File.ReadAllTextAsync(move.Target)).IsEqualTo("received"); + await Assert.That(pair.Tracker.Moves).IsEmpty(); + await Assert.That(viewer.Keys()).IsEquivalentTo([TrackedKeys.ForDelete(move.Target)]); + } + /// /// The arrangement the tray sets up at login: it owns the queue and a viewer displays it. An /// accept-all clicked in that viewer runs in the tray, and the window follows it there - each diff --git a/src/DiffEngineTray/Tracker.cs b/src/DiffEngineTray/Tracker.cs index 46b86d5ec..0ab8cc638 100644 --- a/src/DiffEngineTray/Tracker.cs +++ b/src/DiffEngineTray/Tracker.cs @@ -172,6 +172,17 @@ public TrackedMove AddMove( { var exeFile = Path.GetFileName(exe); var targetFile = Path.GetFileName(target); + + // A move onto a file is a run that verified against it, so a delete an earlier run raised + // for that file no longer describes a stale one. DiffRunner.SettleDelete says the same + // thing, but not from a library that predates it, not while a viewer holds the queue the + // settle is sent to, and not while that port is remembered as unowned. The delete stayed, + // and "Accept all" moved the received file into place and then deleted it + if (deletes.TryRemove(target, out _)) + { + Log.Information("DeleteWithdrawn. A move now targets the file. File:{file}", target); + } + return moves.AddOrUpdate( temp, addValueFactory: temp => @@ -408,14 +419,17 @@ public Task AcceptAllSnapshots() => /// way, for the same reason. /// /// - Task AcceptSnapshotsThenDeletes() => + /// + /// The files the moves accepted ahead of this were moved onto, which no delete here may remove. + /// + Task AcceptSnapshotsThenDeletes(HashSet written) => Task.Run(() => { try { if (!SweepSnapshots(out var failure)) { - AcceptAllDeletes(); + AcceptAllDeletes(written); } else if (!deletes.IsEmpty) { @@ -569,9 +583,14 @@ class AcceptBatch // Wire-driven accepts run on a listener thread with no user attached, so the locked-files // dialog must never be raised for them. public bool NeverPrompt; + + // The files this batch moved a received file onto, for the deletes swept after it: see + // WrittenOrAwaited. + public readonly HashSet Written = new(StringComparer.OrdinalIgnoreCase); } - void AcceptMoves(IEnumerable toAccept) + /// The files a received file was moved onto. + HashSet AcceptMoves(IEnumerable toAccept) { var batch = new AcceptBatch(); foreach (var move in toAccept) @@ -586,6 +605,8 @@ void AcceptMoves(IEnumerable toAccept) AcceptMove(move, batch); } } + + return batch.Written; } void AcceptMove(TrackedMove move, AcceptBatch batch) @@ -646,6 +667,7 @@ bool InnerMove(TrackedMove move, AcceptBatch batch) if (FileEx.SafeMove(move.Temp, move.Target)) { + batch.Written.Add(move.Target); DeleteTempDirectory(move); return true; } @@ -859,35 +881,61 @@ public void Clear() /// public Task AcceptOpen() { - AcceptMoves( + var written = AcceptMoves( moves.Values .Where(_ => _.IsOpen) .ToList()); // Every pending snapshot is open by definition: the viewer only stays running while it // has something to show. - return AcceptSnapshotsThenDeletes(); + return AcceptSnapshotsThenDeletes(written); } /// public Task AcceptAll() { - AcceptMoves(moves.Values); + var written = AcceptMoves(moves.Values); - return AcceptSnapshotsThenDeletes(); + return AcceptSnapshotsThenDeletes(written); } - void AcceptAllDeletes() + void AcceptAllDeletes(HashSet written) { // One at a time, and no Clear afterwards: a delete that fails re-tracks itself, and // clearing would throw that away. Unguarded, the first bad one also took the rest of the // sweep with it, so "Accept all" stopped at the first read-only file foreach (var delete in deletes.Values.ToList()) { + if (WrittenOrAwaited(delete, written)) + { + Log.Information("Kept the pending delete of `{Name}`: a move wrote that file, or is still pending onto it", delete.Name); + continue; + } + Accept(delete); } } + /// + /// Whether a sweep must leave this delete pending, because the file it would remove is one a + /// move in the same sweep has just written or one a move still pending is going to write. + /// + /// withdraws the delete a move finds waiting for its target, so the two + /// are only pending together when the delete arrived second, and which of them is the stale + /// one is then not knowable from here. The move is the snapshot arriving and the delete is the + /// last copy leaving, so the move goes ahead and the delete waits to be accepted on its own: + /// carried out, it removed the received file a moment after that file had been moved into + /// place, and neither was left. + /// + /// + /// By what was written rather than by what was swept. A move whose received file has gone is + /// dropped without writing anything, and the delete beside that one is the newer statement. + /// + /// + bool WrittenOrAwaited(TrackedDelete delete, HashSet written) => + written.Contains(delete.File) || + moves.Values.Any(_ => string.Equals(_.Target, delete.File, StringComparison.OrdinalIgnoreCase)); + public ICollection Deletes => deletes.Values; public ICollection Moves => moves.Values; @@ -1005,9 +1053,14 @@ bool ITrackedFiles.Untrack(string key) { var accepted = 0; var kept = 0; + // One batch for the whole sweep, so the deletes below know what its moves wrote + var batch = new AcceptBatch + { + NeverPrompt = true + }; foreach (var move in moves.Values.ToList()) { - if (AcceptWithoutPrompting(move).ok) + if (AcceptWithoutPrompting(move, batch).ok) { accepted++; } @@ -1024,6 +1077,7 @@ bool ITrackedFiles.Untrack(string key) // Held rather than tried, and left tracked, so it can still be accepted on its own by // anyone who knows the file is redundant if (!holdDeletes && + !WrittenOrAwaited(delete, batch.Written) && AcceptTracked(delete).ok) { accepted++; @@ -1083,17 +1137,22 @@ int ITrackedFiles.DiscardAll() return (true, $"Deleted {removed.Name}"); } - (bool ok, string? message) AcceptWithoutPrompting(TrackedMove move) + (bool ok, string? message) AcceptWithoutPrompting(TrackedMove move) => + AcceptWithoutPrompting( + move, + new() + { + NeverPrompt = true + }); + + (bool ok, string? message) AcceptWithoutPrompting(TrackedMove move, AcceptBatch batch) { if (!moves.TryRemove(move.Temp, out var removed)) { return (false, null); } - if (InnerMove(removed, new() - { - NeverPrompt = true - })) + if (InnerMove(removed, batch)) { return (true, $"Accepted {removed.Name}"); } From 2e939b075567c212bbb0985a65f624333d20b3f4 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:46:24 +1000 Subject: [PATCH 10/73] List the tray's deletes as an accept-all begins, and carry out only those An accept-all takes its snapshots when it starts and read the deletes when their turn came, after the snapshots had been applied. A snapshot moving inline arrives as a patch plus a delete of the verified file the patch replaces, so a pair landing while a batch was applying had its delete swept by a batch its patch was never in: the verified file went while the patch was only pending. Both sweeps now list the deletes before anything is accepted, as the viewer's own batch does. The menu's lists them at the click, and the one a displaying viewer asks for lists them ahead of its snapshots and hands the keys to ITrackedFiles.AcceptAll. A delete that arrived during the batch stays pending and is counted as neither accepted nor kept. One that was listed and has gone since is passed over. Ahead of the snapshots rather than beside them, because Verify raises the delete and then queues the patch. What is left is a batch that begins between those two sends. --- .../OwnedInlineHostTest.cs | 39 ++++++++++++- .../TrackedFilesExtensions.cs | 15 +++++ .../TrackerMoveOntoDeleteTest.cs | 4 +- .../TrackerTrackedFilesTest.cs | 57 ++++++++++++++++++- .../TrayViewerSyncTest.cs | 56 ++++++++++++++++++ src/DiffEngineTray/ITrackedFiles.cs | 13 ++++- src/DiffEngineTray/OwnedInlineHost.cs | 16 ++++-- src/DiffEngineTray/Tracker.cs | 48 +++++++++++++--- 8 files changed, 226 insertions(+), 22 deletions(-) create mode 100644 src/DiffEngineTray.Tests/TrackedFilesExtensions.cs diff --git a/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs b/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs index 18f1851f3..a5c4f7bc6 100644 --- a/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs +++ b/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs @@ -638,8 +638,14 @@ public bool Has(string key) => /// public bool? HeldDeletes { get; private set; } - public (int accepted, int kept) AcceptAll(bool holdDeletes, Action? advanced = null) + /// + /// The deletes the last sweep was told it may carry out, null before there was one. + /// + public IReadOnlyCollection? SweptDeletes { get; private set; } + + public (int accepted, int kept) AcceptAll(IReadOnlyCollection deleteKeys, bool holdDeletes, Action? advanced = null) { + SweptDeletes = deleteKeys; HeldDeletes = holdDeletes; // One step per file the sweep reports, which is what the real tracker calls it for for (var file = 0; file < SweepResult.accepted + SweepResult.kept; file++) @@ -861,6 +867,37 @@ public async Task AnAcceptAllWhosePatchesAllLandCarriesOutTheDeletes() await Assert.That(response.Message).IsEqualTo("Accepted 1, plus 1 files"); } + /// + /// The deletes are listed as the batch begins and those are what the sweep is handed once the + /// snapshots are done. They were read at that point instead, so a delete that arrived while a + /// snapshot was applying was swept with a batch its patch was never in. + /// + [Test] + public async Task AnAcceptAllSweepsOnlyTheDeletesPendingWhenItBegan() + { + using var held = new HeldApply(1); + using var owner = new Owner(held.Apply); + var tracked = new FakeTracked + { + DeleteList = [new(@"delete:c:\code\early.verified.txt", "early.verified.txt", null, @"c:\code\early.verified.txt")], + SweepResult = (1, 0) + }; + owner.Host.TrackedFiles = tracked; + owner.Queue(); + + var accepting = Task.Run(() => owner.Send(new(ViewerVerb.AcceptAll), TimeSpan.FromSeconds(30))); + held.WaitUntilHeld(); + tracked.DeleteList = + [ + ..tracked.DeleteList, + new(@"delete:c:\code\late.verified.txt", "late.verified.txt", null, @"c:\code\late.verified.txt") + ]; + held.Release(); + await accepting; + + await Assert.That(tracked.SweptDeletes!).IsEquivalentTo([@"delete:c:\code\early.verified.txt"]); + } + /// /// An accept-all runs for as long as the queue is long, and the queue moves meanwhile. It /// applied from a copy taken at the start, so an entry discarded while an earlier one was diff --git a/src/DiffEngineTray.Tests/TrackedFilesExtensions.cs b/src/DiffEngineTray.Tests/TrackedFilesExtensions.cs new file mode 100644 index 000000000..95c387a1a --- /dev/null +++ b/src/DiffEngineTray.Tests/TrackedFilesExtensions.cs @@ -0,0 +1,15 @@ +static class TrackedFilesExtensions +{ + /// + /// An accept-all over everything tracked as it is called, for the tests that are about what a + /// sweep does rather than about when its deletes were listed. The queue owner lists them as its + /// batch begins and sweeps once its snapshots are done; nothing arrives in between here. + /// + public static (int accepted, int kept) AcceptAllTracked(this ITrackedFiles tracked, bool holdDeletes) => + tracked.AcceptAll( + tracked + .Deletes() + .Select(_ => _.Key) + .ToList(), + holdDeletes); +} diff --git a/src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs b/src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs index 722d532c8..b7054513f 100644 --- a/src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs +++ b/src/DiffEngineTray.Tests/TrackerMoveOntoDeleteTest.cs @@ -88,7 +88,7 @@ public async Task TheWireSweepHoldsADeleteOfTheFileItsMoveJustWrote() tracker.AddMove(received, verified, "theExe", "theArguments", true, null); tracker.AddDelete(verified); - var (accepted, kept) = tracked.AcceptAll(holdDeletes: false); + var (accepted, kept) = tracked.AcceptAllTracked(holdDeletes: false); await Assert.That(accepted).IsEqualTo(1); await Assert.That(kept).IsEqualTo(1); @@ -114,7 +114,7 @@ public async Task TheWireSweepHoldsADeleteOfAFileAMoveStillPendingTargets() // the verified file from being deleted await using (new FileStream(received, FileMode.Open, FileAccess.Read, FileShare.None)) { - (accepted, kept) = tracked.AcceptAll(holdDeletes: false); + (accepted, kept) = tracked.AcceptAllTracked(holdDeletes: false); } await Assert.That(accepted).IsEqualTo(0); diff --git a/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs b/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs index e7af352de..0f2163940 100644 --- a/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs +++ b/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs @@ -153,7 +153,7 @@ public async Task AcceptAllSweepsAndCountsWhatStayed() await File.WriteAllTextAsync(temp, "content"); tracker.AddMove(temp, target, null, null, false, null); - var (accepted, kept) = tracked.AcceptAll(holdDeletes: false); + var (accepted, kept) = tracked.AcceptAllTracked(holdDeletes: false); await Assert.That(accepted).IsEqualTo(2); await Assert.That(kept).IsEqualTo(0); @@ -161,6 +161,57 @@ public async Task AcceptAllSweepsAndCountsWhatStayed() await Assert.That(await File.ReadAllTextAsync(target)).IsEqualTo("content"); } + /// + /// The owner lists the deletes as its batch begins and hands them back once its snapshots are + /// done. One that arrived in between is not in the batch: it belongs to a patch the batch never + /// had, so it is left pending and counted as neither accepted nor kept. + /// + [Test] + public async Task AcceptAllCarriesOutOnlyTheDeletesListedWhenTheBatchBegan() + { + await using var tracker = new RecordingTracker(); + ITrackedFiles tracked = tracker; + tracker.AddDelete(file); + var listed = tracked + .Deletes() + .Select(_ => _.Key) + .ToList(); + tracker.AddDelete(lateFile); + + var (accepted, kept) = tracked.AcceptAll(listed, holdDeletes: false); + + await Assert.That(accepted).IsEqualTo(1); + await Assert.That(kept).IsEqualTo(0); + await Assert.That(File.Exists(file)).IsFalse(); + await Assert.That(File.Exists(lateFile)).IsTrue(); + await Assert.That(tracker.Deletes.Select(_ => _.File)).IsEquivalentTo([lateFile]); + } + + /// + /// A delete that was listed and then settled while the snapshots were applying. There is + /// nothing left to carry out, and the progress it was counted into still moves past it. + /// + [Test] + public async Task AcceptAllPassesOverADeleteThatWentWhileTheBatchRan() + { + await using var tracker = new RecordingTracker(); + ITrackedFiles tracked = tracker; + tracker.AddDelete(file); + var listed = tracked + .Deletes() + .Select(_ => _.Key) + .ToList(); + tracked.Untrack(TrackedKeys.ForDelete(file)); + var steps = 0; + + var (accepted, kept) = tracked.AcceptAll(listed, holdDeletes: false, () => steps++); + + await Assert.That(accepted).IsEqualTo(0); + await Assert.That(kept).IsEqualTo(0); + await Assert.That(steps).IsEqualTo(1); + await Assert.That(File.Exists(file)).IsTrue(); + } + /// /// A snapshot swept alongside was not written, so the file a delete would remove may be the /// only copy of it left. The delete stays pending, and the file stays where it is; a move is @@ -175,7 +226,7 @@ public async Task AcceptAllHoldingDeletesLeavesThemPending() await File.WriteAllTextAsync(temp, "content"); tracker.AddMove(temp, target, null, null, false, null); - var (accepted, kept) = tracked.AcceptAll(holdDeletes: true); + var (accepted, kept) = tracked.AcceptAllTracked(holdDeletes: true); await Assert.That(accepted).IsEqualTo(1); await Assert.That(kept).IsEqualTo(1); @@ -203,6 +254,7 @@ public async Task DiscardAllUntracksDeletesAndDropsMoveTemps() public void Dispose() { File.Delete(file); + File.Delete(lateFile); if (File.Exists(temp)) { File.Delete(temp); @@ -217,6 +269,7 @@ public void Dispose() } string file = Path.GetTempFileName(); + string lateFile = Path.GetTempFileName(); string tempDirectory; string temp; string target; diff --git a/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs b/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs index 165cb2433..908b16b14 100644 --- a/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs +++ b/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs @@ -210,6 +210,62 @@ public async Task ViewerAcceptAllKeepsTheFileATrackedMoveJustWrote() await Assert.That(viewer.Keys()).IsEquivalentTo([TrackedKeys.ForDelete(move.Target)]); } + /// + /// A snapshot moving inline lands while an accept-all is applying: its patch, and the delete of + /// the verified file that patch replaces. The batch takes its snapshots as it begins, so the + /// patch is not in it, and it used to read the deletes when their turn came, so the delete was. + /// The verified file went while the patch replacing it was only pending. + /// + [Test] + public async Task TrayAcceptAllLeavesADeleteThatArrivedWhileItWasApplying() + { + using var held = new HeldApply(1); + await using var pair = new TrayOwned(held.Apply); + pair.Queue(sample, 1); + var early = pair.AddDelete(); + + var accepting = pair.Tracker.AcceptAll(); + held.WaitUntilHeld(); + pair.Queue(other, 7); + var late = pair.AddDelete(); + held.Release(); + await accepting; + + // What was pending when the batch began went, and what arrived during it is still there + await Assert.That(File.Exists(early.File)).IsFalse(); + await Assert.That(File.Exists(late.File)).IsTrue(); + await Assert.That(pair.Tracker.Deletes.Select(_ => _.File)).IsEquivalentTo([late.File]); + await Assert.That(pair.Listing.Select(_ => _.Key)).IsEquivalentTo([Key(other, 7)]); + } + + /// + /// The same arrival during the accept-all a displaying viewer asks for. What came in during + /// the batch is not part of it either way, so it is not counted as kept: it is still in the + /// window, as the patch beside it is. + /// + [Test] + public async Task ViewerAcceptAllLeavesADeleteThatArrivedWhileItWasApplying() + { + using var held = new HeldApply(1); + await using var pair = new TrayOwned(held.Apply); + pair.Queue(sample, 1); + var early = pair.AddDelete(); + pair.Pump(); + + pair.Link.Post(ViewerSideVerb.AcceptAll, null); + var pumping = Task.Run(pair.Pump); + held.WaitUntilHeld(); + pair.Queue(other, 7); + var late = pair.AddDelete(); + held.Release(); + var viewer = await pumping; + + await Assert.That(File.Exists(early.File)).IsFalse(); + await Assert.That(File.Exists(late.File)).IsTrue(); + await Assert.That(viewer.Keys()).IsEquivalentTo([Key(other, 7), late.Key]); + await Assert.That(viewer.Message).IsEqualTo("Accepted 1, plus 1 files"); + } + /// /// The arrangement the tray sets up at login: it owns the queue and a viewer displays it. An /// accept-all clicked in that viewer runs in the tray, and the window follows it there - each diff --git a/src/DiffEngineTray/ITrackedFiles.cs b/src/DiffEngineTray/ITrackedFiles.cs index a7ae565e4..792280c91 100644 --- a/src/DiffEngineTray/ITrackedFiles.cs +++ b/src/DiffEngineTray/ITrackedFiles.cs @@ -26,9 +26,16 @@ interface ITrackedFiles (bool ok, string? message) Discard(string key); /// - /// Accept every tracked move and delete without prompting. Kept is what stayed pending — - /// locked moves, undeletable files, and deletes held back. + /// Accept every tracked move, and the deletes named, without prompting. Kept is what stayed + /// pending — locked moves, undeletable files, and deletes held back. /// + /// + /// The deletes that were pending when the accept-all began, from , which + /// are the only ones it may carry out. The owner lists them before it takes its snapshots, + /// because one that arrives while they are applying belongs to a patch that is not in the + /// batch, and the file it removes may be the only copy of that snapshot. One that has gone + /// since is passed over, and neither accepted nor kept. + /// /// /// Leave every delete pending rather than carrying it out, because a snapshot swept alongside /// was not written, and the file a delete removes may be the only copy of it left. @@ -37,7 +44,7 @@ interface ITrackedFiles /// Called as each file is dealt with, whichever way it went, so the owner can say how far an /// accept-all has got while a locked move is still being retried. /// - (int accepted, int kept) AcceptAll(bool holdDeletes, Action? advanced = null); + (int accepted, int kept) AcceptAll(IReadOnlyCollection deleteKeys, bool holdDeletes, Action? advanced = null); /// /// Track a pending move or delete that arrived over the viewer port rather than the piper one. diff --git a/src/DiffEngineTray/OwnedInlineHost.cs b/src/DiffEngineTray/OwnedInlineHost.cs index 2436ae88e..d9811de4f 100644 --- a/src/DiffEngineTray/OwnedInlineHost.cs +++ b/src/DiffEngineTray/OwnedInlineHost.cs @@ -415,6 +415,12 @@ bool IQueueOwner.Has(string key) /// same rule for the arrangement where the tray holds the queue, which is the usual one. /// /// + /// The deletes are listed as the batch begins, ahead of the snapshots, and only those are + /// carried out. Read when their turn came, they included the delete of a snapshot that moved + /// inline while the batch was applying, whose patch the batch never had: the verified file + /// went with the patch replacing it still pending. + /// + /// /// The files count towards the progress a listing reports, since a move that is being retried /// while a diff tool lets go of it is as much of the wait as any snapshot. /// @@ -427,13 +433,13 @@ string IQueueOwner.AcceptAll() lock (accepting) { var moves = TrackedFiles?.Moves().Count ?? 0; - var deletes = TrackedFiles?.Deletes().Count ?? 0; - StartProgress(moves + deletes); + var deletes = TrackedFiles?.Deletes().Select(_ => _.Key).ToList() ?? []; + StartProgress(moves + deletes.Count); try { - message = AcceptEvery(moves + deletes, out var refused); - tracked = TrackedFiles?.AcceptAll(refused, Advance); - held = refused && deletes > 0; + message = AcceptEvery(moves + deletes.Count, out var refused); + tracked = TrackedFiles?.AcceptAll(deletes, refused, Advance); + held = refused && deletes.Count > 0; } finally { diff --git a/src/DiffEngineTray/Tracker.cs b/src/DiffEngineTray/Tracker.cs index 0ab8cc638..d73c31cc6 100644 --- a/src/DiffEngineTray/Tracker.cs +++ b/src/DiffEngineTray/Tracker.cs @@ -419,19 +419,23 @@ public Task AcceptAllSnapshots() => /// way, for the same reason. /// /// + /// + /// The deletes that were pending when the accept-all began, which are the only ones it carries + /// out: see . + /// /// /// The files the moves accepted ahead of this were moved onto, which no delete here may remove. /// - Task AcceptSnapshotsThenDeletes(HashSet written) => + Task AcceptSnapshotsThenDeletes(List pending, HashSet written) => Task.Run(() => { try { if (!SweepSnapshots(out var failure)) { - AcceptAllDeletes(written); + AcceptDeletes(pending, written); } - else if (!deletes.IsEmpty) + else if (pending.Any(_ => deletes.ContainsKey(_.File))) { failure = failure is null ? DeletesHeld : $"{failure} {DeletesHeld}"; } @@ -878,9 +882,19 @@ public void Clear() /// on a worker for the reason gives. The menu and the /// hot keys discard it; tests await it so what the other surface should now be showing is /// settled rather than in flight. + /// + /// The deletes are listed here, before anything is accepted, and only those are carried out. A + /// snapshot moving inline can land while a batch is applying. Whoever owns the queue took its + /// snapshots as the sweep began, so that patch is not in the batch, and the deletes were read + /// when their turn came, so its delete was: the verified file went while the patch replacing + /// it was only pending. Ahead of the snapshots rather than beside them, because Verify raises + /// the delete and then queues the patch, so a delete listed this early has a patch that was + /// there to be taken unless the batch began between the two. + /// /// public Task AcceptOpen() { + var pending = deletes.Values.ToList(); var written = AcceptMoves( moves.Values .Where(_ => _.IsOpen) @@ -888,24 +902,31 @@ public Task AcceptOpen() // Every pending snapshot is open by definition: the viewer only stays running while it // has something to show. - return AcceptSnapshotsThenDeletes(written); + return AcceptSnapshotsThenDeletes(pending, written); } /// public Task AcceptAll() { + var pending = deletes.Values.ToList(); var written = AcceptMoves(moves.Values); - return AcceptSnapshotsThenDeletes(written); + return AcceptSnapshotsThenDeletes(pending, written); } - void AcceptAllDeletes(HashSet written) + void AcceptDeletes(List pending, HashSet written) { // One at a time, and no Clear afterwards: a delete that fails re-tracks itself, and // clearing would throw that away. Unguarded, the first bad one also took the rest of the // sweep with it, so "Accept all" stopped at the first read-only file - foreach (var delete in deletes.Values.ToList()) + foreach (var delete in pending) { + // Settled, withdrawn or accepted on its own since the batch began + if (!deletes.ContainsKey(delete.File)) + { + continue; + } + if (WrittenOrAwaited(delete, written)) { Log.Information("Kept the pending delete of `{Name}`: a move wrote that file, or is still pending onto it", delete.Name); @@ -1049,7 +1070,7 @@ bool ITrackedFiles.Untrack(string key) return (false, null); } - (int accepted, int kept) ITrackedFiles.AcceptAll(bool holdDeletes, Action? advanced) + (int accepted, int kept) ITrackedFiles.AcceptAll(IReadOnlyCollection deleteKeys, bool holdDeletes, Action? advanced) { var accepted = 0; var kept = 0; @@ -1072,8 +1093,17 @@ bool ITrackedFiles.Untrack(string key) advanced?.Invoke(); } - foreach (var delete in deletes.Values.ToList()) + foreach (var key in deleteKeys) { + // Settled, withdrawn or accepted on its own since the batch began. Nothing to carry + // out, and one fewer to wait for + if (!TrackedKeys.TryStrip(key, TrackedKeys.DeletePrefix, out var file) || + !deletes.TryGetValue(file, out var delete)) + { + advanced?.Invoke(); + continue; + } + // Held rather than tried, and left tracked, so it can still be accepted on its own by // anyone who knows the file is redundant if (!holdDeletes && From 915ece2fc3359c60afd139f95da85c44f22581b8 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:54:10 +1000 Subject: [PATCH 11/73] Hold the tray's deletes when the viewer that owns the queue does not answer Accept all asked the queue what was pending and read no answer as nothing pending: RemoteInlineHost.List flattens an owner that could not be asked to an empty list, which is right for a menu. So with a viewer holding the port and a patch, cold starting or wedged, and the tray holding the paired delete, the snapshot sweep was skipped and the delete was carried out. The verified file went with the patch that replaces it never tried. IInlineHost.TryList tells the three answers apart. Nothing holding the port is still nothing pending. An owner that is there and did not say what it holds is treated as a snapshot that was not written: the deletes are held and the user is told the viewer did not answer. A program that is not a viewer holding the port is no owner either, as it is for every send DiffEngine makes, so a tray that could not bind 3493 over one still carries out its deletes. ViewerClient already records that when a reply is not this protocol, and FoundUnowned lets the host read it. --- src/DiffEngine/Protocol/ViewerClient.cs | 9 ++ src/DiffEngineTray.Tests/FakeViewer.cs | 11 ++ src/DiffEngineTray.Tests/SilentOwner.cs | 31 ++++ src/DiffEngineTray.Tests/StubInlineHost.cs | 12 ++ src/DiffEngineTray.Tests/TrackerDeleteTest.cs | 28 ++++ .../TrackerSnapshotTest.cs | 141 ++++++++++++++++++ src/DiffEngineTray/IInlineHost.cs | 8 + src/DiffEngineTray/OwnedInlineHost.cs | 9 ++ src/DiffEngineTray/RemoteInlineHost.cs | 54 ++++++- src/DiffEngineTray/Tracker.cs | 15 +- 10 files changed, 309 insertions(+), 9 deletions(-) create mode 100644 src/DiffEngineTray.Tests/SilentOwner.cs diff --git a/src/DiffEngine/Protocol/ViewerClient.cs b/src/DiffEngine/Protocol/ViewerClient.cs index 80dc66b1d..aec26203a 100644 --- a/src/DiffEngine/Protocol/ViewerClient.cs +++ b/src/DiffEngine/Protocol/ViewerClient.cs @@ -141,6 +141,15 @@ static void Found(int port, bool owned) } } + /// + /// Whether the port stands as unowned: nothing was listening at the last connect, or what + /// answered was not a viewer. For a caller whose exchange has just failed and has to tell an + /// owner that did not answer from there being none, which a failed exchange reports the same + /// way. The exchange is what makes this current, since every connect records what it found. + /// + public static bool FoundUnowned(int? port = null) => + RecentlyUnowned(port ?? Port); + /// /// For tests, which share this process and its memory with every other test's ports. /// diff --git a/src/DiffEngineTray.Tests/FakeViewer.cs b/src/DiffEngineTray.Tests/FakeViewer.cs index 2439f0eae..b6ca3bd2c 100644 --- a/src/DiffEngineTray.Tests/FakeViewer.cs +++ b/src/DiffEngineTray.Tests/FakeViewer.cs @@ -49,6 +49,13 @@ public FakeViewer(params string[] names) /// public bool ListingFails { get; set; } + /// + /// When true, every request is answered in some other protocol, which stands in for a program + /// that is not a viewer holding the port. 3493 is registered to Network UPS Tools, whose + /// daemon answers whatever it does not understand with a line like this one. + /// + public bool AnotherProgram { get; set; } + async Task Listen() { while (!cancel.IsCancellationRequested) @@ -76,6 +83,10 @@ string Respond(string request) var verb = Read(request, "verb"); var key = Decode(Read(request, "key")); Verbs.Add(key == null ? verb : $"{verb}:{key}"); + if (AnotherProgram) + { + return "ERR UNKNOWN-COMMAND\n"; + } var builder = new StringBuilder("version: 1\n"); if (verb == "list" && diff --git a/src/DiffEngineTray.Tests/SilentOwner.cs b/src/DiffEngineTray.Tests/SilentOwner.cs new file mode 100644 index 000000000..29174d97a --- /dev/null +++ b/src/DiffEngineTray.Tests/SilentOwner.cs @@ -0,0 +1,31 @@ +/// +/// Holds the viewer port and never answers: a queue owner that is cold starting, or wedged. +/// is the owner that does answer. +/// +/// Listening is all it takes. The system completes a connection to a listening port on its own, so +/// a client connects, sends, and waits out its timeout for a reply nothing here will ever write, +/// which is what a process that is not getting round to its accept loop looks like from outside. +/// +/// +/// Points DiffEngine_ViewerPort at itself, as does. +/// +/// +sealed class SilentOwner : IDisposable +{ + readonly TcpListener listener = new(IPAddress.Loopback, 0); + readonly string? previousPort; + + public SilentOwner() + { + listener.Start(); + var port = ((IPEndPoint) listener.LocalEndpoint).Port; + previousPort = Environment.GetEnvironmentVariable(ViewerClient.PortVariable); + Environment.SetEnvironmentVariable(ViewerClient.PortVariable, port.ToString()); + } + + public void Dispose() + { + listener.Stop(); + Environment.SetEnvironmentVariable(ViewerClient.PortVariable, previousPort); + } +} diff --git a/src/DiffEngineTray.Tests/StubInlineHost.cs b/src/DiffEngineTray.Tests/StubInlineHost.cs index d8793ec4a..215281aae 100644 --- a/src/DiffEngineTray.Tests/StubInlineHost.cs +++ b/src/DiffEngineTray.Tests/StubInlineHost.cs @@ -15,6 +15,18 @@ class StubInlineHost(params PendingSnapshot[] snapshots) : public IReadOnlyList List() => snapshots; + /// + /// Whether the queue says what it holds when asked. False stands in for a viewer that holds + /// the port and does not answer, without the half second a real one takes to time out. + /// + public bool Answers { get; init; } = true; + + public bool TryList(out IReadOnlyList pending) + { + pending = Answers ? snapshots : []; + return Answers; + } + #pragma warning disable CA1822 public IReadOnlyList? Queued() => #pragma warning restore CA1822 diff --git a/src/DiffEngineTray.Tests/TrackerDeleteTest.cs b/src/DiffEngineTray.Tests/TrackerDeleteTest.cs index 8e98ab29b..038f90ded 100644 --- a/src/DiffEngineTray.Tests/TrackerDeleteTest.cs +++ b/src/DiffEngineTray.Tests/TrackerDeleteTest.cs @@ -170,6 +170,34 @@ await Assert.That(warnings).IsEquivalentTo( [$"Could not accept the pending snapshots. Accepted 0, 1 not written {Tracker.DeletesHeld}"]); } + /// + /// A queue that could not be asked what it holds is treated as one with a snapshot it could + /// not write: nothing is sent to it, and the deletes wait. It used to read as an empty queue, + /// and the deletes went ahead. + /// + [Test] + public async Task AcceptAllHoldsTheDeletesWhenTheQueueCouldNotBeAsked() + { + var swept = false; + var warnings = new List(); + await using var tracker = new RecordingTracker( + inlineFailed: warnings.Add, + inline: new StubInlineHost(new PendingSnapshot(@"c:\repo\sample.cs|12", "Sample.cs:12", null)) + { + Answers = false, + AcceptingAll = () => swept = true + }); + tracker.AddDelete(file1); + + await tracker.AcceptAll(); + + await Assert.That(swept).IsFalse(); + await Assert.That(File.Exists(file1)).IsTrue(); + await Assert.That(tracker.Deletes).HasSingleItem(); + await Assert.That(warnings).IsEquivalentTo( + [$"Could not accept the pending snapshots. The snapshot viewer did not answer. {Tracker.DeletesHeld}"]); + } + public void Dispose() { File.Delete(file1); diff --git a/src/DiffEngineTray.Tests/TrackerSnapshotTest.cs b/src/DiffEngineTray.Tests/TrackerSnapshotTest.cs index 7e0e96734..cf17226b0 100644 --- a/src/DiffEngineTray.Tests/TrackerSnapshotTest.cs +++ b/src/DiffEngineTray.Tests/TrackerSnapshotTest.cs @@ -132,6 +132,147 @@ await Assert.That(warnings).IsEquivalentTo( ["Could not accept the pending snapshots. Accepted 0, 13 not written"]); } + /// + /// A viewer that holds the queue and does not answer is not a viewer with nothing queued. The + /// listing flattens the two, which is right for a menu, and "Accept all" read it the same way: + /// nothing to accept, so the deletes went ahead. One of them may belong to a patch that viewer + /// is holding, and its verified file was deleted with the patch never tried. + /// + [Test] + public async Task AnOwnerThatDoesNotAnswerHoldsTheDeletes() + { + var verified = Path.GetTempFileName(); + try + { + using var owner = new SilentOwner(); + var warnings = new List(); + await using var tracker = new RecordingTracker(inlineFailed: warnings.Add); + tracker.AddDelete(verified); + + await tracker.AcceptAll(); + + await Assert.That(File.Exists(verified)).IsTrue(); + await Assert.That(tracker.Deletes).HasSingleItem(); + await Assert.That(warnings).IsEquivalentTo( + [$"Could not accept the pending snapshots. The snapshot viewer did not answer. {Tracker.DeletesHeld}"]); + } + finally + { + File.Delete(verified); + } + } + + /// + /// The three answers a listing can come back with, which the menu's flattened one cannot tell + /// apart. Nothing holding the port is a viewer that has gone, and its queue went with it. + /// + [Test] + public async Task NoOwnerIsNothingPending() + { + var host = new RemoteInlineHost(); + + var answered = host.TryList(out var pending); + + await Assert.That(answered).IsTrue(); + await Assert.That(pending).IsEmpty(); + } + + /// + [Test] + public async Task AnOwnerThatAnswersIsAskedWhatItHolds() + { + using var viewer = new FakeViewer("Sample.cs:1"); + var host = new RemoteInlineHost(); + + var answered = host.TryList(out var pending); + + await Assert.That(answered).IsTrue(); + await Assert.That(pending.Select(_ => _.Name)).IsEquivalentTo(["Sample.cs:1"]); + } + + /// + [Test] + public async Task AnOwnerThatDoesNotAnswerIsNotAnEmptyQueue() + { + using var owner = new SilentOwner(); + var host = new RemoteInlineHost(); + + var answered = host.TryList(out _); + + await Assert.That(answered).IsFalse(); + // The menu keeps the flattened answer it was written against + await Assert.That(host.List()).IsEmpty(); + } + + /// + /// Answering with an error is not saying what is pending either. + /// + [Test] + public async Task AnOwnerThatRefusesTheListingIsNotAnEmptyQueue() + { + using var viewer = new FakeViewer("Sample.cs:1") + { + ListingFails = true + }; + var host = new RemoteInlineHost(); + + var answered = host.TryList(out _); + + await Assert.That(answered).IsFalse(); + } + + /// + /// The port held by a program that is not a viewer at all, which a tray that could not bind it + /// lives with for good. That is no owner, as it is for every send DiffEngine makes, and not an + /// owner that failed to answer: nothing on that port will ever hold a snapshot, so the deletes + /// go ahead as they do with nothing there. + /// + [Test] + public async Task AnotherProgramOnThePortIsNoOwner() + { + var verified = Path.GetTempFileName(); + try + { + using var program = new FakeViewer + { + AnotherProgram = true + }; + var warnings = new List(); + await using var tracker = new RecordingTracker(inlineFailed: warnings.Add); + tracker.AddDelete(verified); + + await tracker.AcceptAll(); + + await Assert.That(File.Exists(verified)).IsFalse(); + await Assert.That(warnings).IsEmpty(); + await Assert.That(program.Verbs).DoesNotContain("acceptall"); + } + finally + { + File.Delete(verified); + // The port is remembered as unowned for ten minutes, and the system may hand the same + // one to a later test + ViewerClient.ForgetUnowned(); + } + } + + /// + /// And said even with no delete waiting on it: the click asked for that viewer's snapshots to + /// be accepted, and none of them were. + /// + [Test] + public async Task ABulkAcceptAgainstAnOwnerThatDoesNotAnswerIsReported() + { + using var owner = new SilentOwner(); + var warnings = new List(); + await using var tracker = new RecordingTracker(inlineFailed: warnings.Add); + + await tracker.AcceptAllSnapshots(); + + await Assert.That(warnings).IsEquivalentTo( + ["Could not accept the pending snapshots. The snapshot viewer did not answer."]); + } + [Test] public async Task AcceptAllWithNothingPendingDoesNotCallTheViewer() { diff --git a/src/DiffEngineTray/IInlineHost.cs b/src/DiffEngineTray/IInlineHost.cs index 735813589..ec51e3f49 100644 --- a/src/DiffEngineTray/IInlineHost.cs +++ b/src/DiffEngineTray/IInlineHost.cs @@ -15,6 +15,14 @@ interface IInlineHost IReadOnlyList List(); + /// + /// The listing, for a caller that acts on the answer rather than showing it. False when + /// something holds the queue and could not be asked what is in it, which + /// flattens to nothing pending. Nothing holding the queue at all is nothing + /// pending, and true. + /// + bool TryList(out IReadOnlyList pending); + /// /// The queued patches themselves, for the debug view, and null when the queue is not in this /// process. What the tray holds then is the listing and nothing more: the patch is in the diff --git a/src/DiffEngineTray/OwnedInlineHost.cs b/src/DiffEngineTray/OwnedInlineHost.cs index d9811de4f..8b5ef8c70 100644 --- a/src/DiffEngineTray/OwnedInlineHost.cs +++ b/src/DiffEngineTray/OwnedInlineHost.cs @@ -127,6 +127,15 @@ public IReadOnlyList List() } } + /// + /// Held in this process, so there is nobody to fail to reach. + /// + public bool TryList(out IReadOnlyList pending) + { + pending = List(); + return true; + } + /// /// The queue is immutable, so the list can be handed out under the gate without copying it. /// diff --git a/src/DiffEngineTray/RemoteInlineHost.cs b/src/DiffEngineTray/RemoteInlineHost.cs index 092d0757f..70ab24593 100644 --- a/src/DiffEngineTray/RemoteInlineHost.cs +++ b/src/DiffEngineTray/RemoteInlineHost.cs @@ -49,14 +49,33 @@ class RemoteInlineHost : IInlineHost public string Description => $"owned by another process on port {ViewerClient.Port}"; public IReadOnlyList List() => - TryList(out var pending) ? pending : []; + TryAsk(out var pending) ? pending : []; + + /// + /// No owner is nothing pending here as well: the viewer has gone, and its queue went with it. + /// An owner that holds the port and did not answer is another matter. It is cold starting, or + /// wedged, and may be holding a patch whose delete this tray has. "Accept all" read that + /// silence as an empty queue and carried its deletes out, so the verified file went with the + /// patch that replaces it never tried. + /// + public bool TryList(out IReadOnlyList pending) + { + if (TryAsk(out pending)) + { + return true; + } + + // Decided now rather than from what was known going in, so an owner that exited while it + // was being asked reads as the absent one it has become + return !OwnerPresent(); + } /// /// False when the owner could not be asked, which flattens to nothing /// pending — right for a menu, and wrong for anything reading the answer as a statement about /// a particular entry. /// - static bool TryList(out IReadOnlyList pending) + static bool TryAsk(out IReadOnlyList pending) { if (!Exchange(new(ViewerVerb.List), ViewerClient.ShortTimeout, out var response) || !response.Ok) @@ -99,7 +118,7 @@ public AcceptOutcome Accept(PendingSnapshot snapshot, out string? message) return AcceptOutcome.Failed; } - if (!TryList(out var pending)) + if (!TryAsk(out var pending)) { // The owner took the accept and then could not be asked what became of it. Applied is // a guess, and the one that tells the user a snapshot landed that may not have @@ -192,7 +211,9 @@ static bool Send(ViewerVerb verb, string? key, TimeSpan wait, out string? messag static bool Exchange(ViewerMessage message, TimeSpan wait, [NotNullWhen(true)] out ViewerResponse? response) { - if (!PortIsHeld()) + // Only a table that says nothing holds the port skips the round trip. With no table to + // read, the connect decides as it always did + if (PortIsHeld() == false) { response = null; return false; @@ -201,6 +222,23 @@ static bool Exchange(ViewerMessage message, TimeSpan wait, [NotNullWhen(true)] o return ViewerClient.TrySend(message, out response, wait: wait); } + /// + /// Whether an owner is there to be asked, for telling one that did not answer from there being + /// none. Asked once an exchange has failed, which reports the same way + /// for both. + /// + /// The table says when nothing holds the port. When something does, or there is no table to + /// read, the exchange got as far as connecting and recorded what it + /// found: a refused connection, or a reply that is not this protocol, is no owner. The second + /// matters because the default port is registered to another program. A tray that could not + /// bind the port over one drives it remotely for good, and taking that program for a viewer + /// that does not answer would hold every delete on that machine. + /// + /// + static bool OwnerPresent() => + PortIsHeld() != false && + !ViewerClient.FoundUnowned(); + /// /// Whether anything holds the port, asked of the OS rather than found out by connecting to it. /// @@ -220,8 +258,11 @@ static bool Exchange(ViewerMessage message, TimeSpan wait, [NotNullWhen(true)] o /// found by the next call, and one that exits just after it costs the timeout exactly as /// before. /// + /// + /// Null when there is no table to read. + /// /// - static bool PortIsHeld() + static bool? PortIsHeld() { var port = ViewerClient.Port; try @@ -232,8 +273,7 @@ static bool PortIsHeld() } catch (NetworkInformationException) { - // No table to read, so let the connect decide as it always did - return true; + return null; } } } diff --git a/src/DiffEngineTray/Tracker.cs b/src/DiffEngineTray/Tracker.cs index d73c31cc6..f786527c8 100644 --- a/src/DiffEngineTray/Tracker.cs +++ b/src/DiffEngineTray/Tracker.cs @@ -459,7 +459,8 @@ Task AcceptSnapshotsThenDeletes(List pending, HashSet wri public const string DeletesHeld = "Pending deletes were kept, since a snapshot in this batch was not written and a file being deleted may be the only copy of it left. Accept them on their own to delete them anyway."; /// - /// Accepts every pending snapshot, and returns whether one it tried was not written. + /// Accepts every pending snapshot, and returns whether one it tried was not written, or the + /// queue could not be asked whether it holds any. /// /// What to tell the user, when something is still pending afterwards. bool SweepSnapshots(out string? failure) @@ -469,7 +470,17 @@ bool SweepSnapshots(out string? failure) // a stale empty cache would silently do nothing. Inside the worker rather than in front of // it, because the caller is a menu click or a hot key and the read is a round trip // whenever a viewer owns the queue. - if (inline.List().Count == 0) + if (!inline.TryList(out var pending)) + { + // Something holds the queue and did not say what is in it, which is not the queue + // being empty. Reported the way a snapshot that was not written is, because the same + // thing waits on the answer: a patch held over there may be the one a delete here + // belongs to, and reading silence as nothing pending carried that delete out + failure = "Could not accept the pending snapshots. The snapshot viewer did not answer."; + return true; + } + + if (pending.Count == 0) { return false; } From 38facd54da868b97613088a27c922c4747c666e5 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:58:21 +1000 Subject: [PATCH 12/73] Start the tray on an STA thread, so the debug view's Copy copies Program.Main was async Task. The entry point the runtime starts for one of those is a method the compiler writes, which carries no attribute, so the thread every tray window lives on was MTA. Clipboard.SetText throws ThreadStateException there, which the debug view's catch for a busy clipboard does not match, so every click on Copy threw and nothing was copied. Main is now a synchronous [STAThread] method that blocks on Inner, which is what the compiler written entry point did. Nothing in Inner awaits until Application.Run() has returned, and WinForms has taken its synchronization context back off the thread by then, so the awaits that follow continue on the pool instead of waiting on a loop that is no longer pumping. --- .../ProgramEntryPointTest.cs | 25 +++++++++++++++++++ src/DiffEngineTray/Program.cs | 17 +++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/DiffEngineTray.Tests/ProgramEntryPointTest.cs diff --git a/src/DiffEngineTray.Tests/ProgramEntryPointTest.cs b/src/DiffEngineTray.Tests/ProgramEntryPointTest.cs new file mode 100644 index 000000000..607a8e30c --- /dev/null +++ b/src/DiffEngineTray.Tests/ProgramEntryPointTest.cs @@ -0,0 +1,25 @@ +/// +/// The thread the tray starts on is the one its windows live on, and WinForms needs that to be a +/// single threaded apartment for everything it does through OLE: the clipboard, drag and drop, the +/// common dialogs. +/// +/// It was not. Main was async Task, and the entry point the runtime starts for one of those +/// is a method the compiler writes, which carries no attribute. So the thread was MTA, and "Copy" +/// in the debug view threw ThreadStateException out of Clipboard.SetText on every click. +/// +/// +/// Asserted on the assembly's entry point rather than on Program.Main, because that is the method +/// the apartment is read from: an attribute on an async Main would sit on a method the runtime +/// never starts with, and pass a test that looked for it there. +/// +/// +public class ProgramEntryPointTest +{ + [Test] + public async Task TheEntryPointStartsOnAnStaThread() + { + var entryPoint = typeof(Tracker).Assembly.EntryPoint!; + + await Assert.That(entryPoint.GetCustomAttribute()).IsNotNull(); + } +} diff --git a/src/DiffEngineTray/Program.cs b/src/DiffEngineTray/Program.cs index bdb7b9519..edf096b25 100644 --- a/src/DiffEngineTray/Program.cs +++ b/src/DiffEngineTray/Program.cs @@ -2,7 +2,20 @@ static class Program { - static async Task Main() + /// + /// Synchronous, so that the attribute is on the method the runtime starts. For an + /// async Task Main that is a method the compiler writes, which carries none, and the + /// thread every window here lives on came up MTA: Clipboard.SetText throws ThreadStateException + /// there, so "Copy" in the debug view never copied anything. + /// + /// Blocking on is what that compiler written method did as well. Nothing + /// in it awaits until Application.Run() has returned, by which time WinForms has taken + /// its synchronization context back off this thread, so what follows continues on the pool + /// rather than waiting on a loop that is no longer pumping. + /// + /// + [STAThread] + static void Main() { TrayViewerDirectory.Register(); Logging.Init(); @@ -12,7 +25,7 @@ static async Task Main() try { - await Inner(); + Inner().GetAwaiter().GetResult(); } catch (Exception exception) { From 8f590097dacb298b3d878bdfd9cf530bb99ca70d Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:03:04 +1000 Subject: [PATCH 13/73] Stage the tray's inline queue when the Windows session ends A tray that owns the queue stages what is pending as it exits, but only from the unwind after Application.Run() returns. A logoff or a shutdown never gets there. Windows sends each top level window WM_QUERYENDSESSION and then WM_ENDSESSION and may end the process once they are answered. The tray has no Form to turn those into a close, only the notify icon's window, so the loop kept running until the process was ended and the queue went with it. For a tray started at login that is how it usually stops. SessionEndWindow is a hidden top level window that hears WM_ENDSESSION and calls OwnedInlineHost.SessionEnding inside the message, which stages the queue before the message is answered. Patches arriving after that are refused, as an owning viewer refuses them once it is closing, so the sender stages what a process on its way out would otherwise have acknowledged and lost. Nothing is done for the query, or for an end that was called off, since a session that carries on would then have its queue both staged and held. Confirmed outside the repo with a tray shaped process: a notify icon window and no Form answers the query and Application.Run() has not returned two seconds after WM_ENDSESSION, while a hidden window made this way is sent both messages on the UI thread. A real logoff was not run. --- .../OwnedInlineHostTest.cs | 19 +++ .../SessionEndWindowTest.cs | 112 ++++++++++++++++++ src/DiffEngineTray/OwnedInlineHost.cs | 43 ++++++- src/DiffEngineTray/Program.cs | 5 + src/DiffEngineTray/SessionEndWindow.cs | 63 ++++++++++ 5 files changed, 240 insertions(+), 2 deletions(-) create mode 100644 src/DiffEngineTray.Tests/SessionEndWindowTest.cs create mode 100644 src/DiffEngineTray/SessionEndWindow.cs diff --git a/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs b/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs index a5c4f7bc6..06f4b11ed 100644 --- a/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs +++ b/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs @@ -98,6 +98,25 @@ public async Task DisposalSkipsPatchesWhoseSourceIsGone() // an exception out of Dispose is the point. } + /// + /// What is staged as the session ends is the last of the queue anything will see, so a patch + /// taken after it would be acknowledged to its sender and in neither place. It is refused + /// instead, which is what makes the sender stage it, and everything else still answers. + /// + [Test] + public async Task APatchArrivingOnceTheSessionIsEndingIsRefused() + { + using var owner = new Owner(); + owner.Queue(); + + owner.Host.SessionEnding(); + var response = owner.Queue(@"c:\repo\OtherTests.cs", 7); + + await Assert.That(response.Ok).IsFalse(); + await Assert.That(response.Message).IsEqualTo("This tray is going with the session and can take nothing more."); + await Assert.That(owner.Send(new(ViewerVerb.List)).Items.Select(_ => _.Name)).IsEquivalentTo(["SampleTests.cs:42"]); + } + [Test] public async Task AQueuedPatchIsHeldHereAndShown() { diff --git a/src/DiffEngineTray.Tests/SessionEndWindowTest.cs b/src/DiffEngineTray.Tests/SessionEndWindowTest.cs new file mode 100644 index 000000000..bee893b62 --- /dev/null +++ b/src/DiffEngineTray.Tests/SessionEndWindowTest.cs @@ -0,0 +1,112 @@ +/// +/// The two messages a logoff or a shutdown sends every top level window, sent to the one the tray +/// keeps for hearing them. +/// +/// Sent from the thread that made the window, which calls its procedure directly, so no message +/// loop is needed and nothing here awaits between making the window and destroying it. +/// +/// +public class SessionEndWindowTest +{ + [Test] + public async Task TheSessionEndingIsHeard() + { + var heard = 0; + IntPtr query; + using (var window = new SessionEndWindow(() => heard++)) + { + query = SendMessage(window.Handle, queryEndSession, IntPtr.Zero, logoff); + SendMessage(window.Handle, endSession, new(1), logoff); + } + + // Agreed to. Refusing would hold up the logoff, and there is nothing here worth that + await Assert.That(query).IsEqualTo(new IntPtr(1)); + await Assert.That(heard).IsEqualTo(1); + } + + /// + /// Another application refused the query, so everything that agreed is told the session goes + /// on. A tray that staged its queue for that would have it both on disk and in memory. + /// + [Test] + public async Task ASessionThatDidNotEndAfterAllIsNotHeard() + { + var heard = 0; + using (var window = new SessionEndWindow(() => heard++)) + { + SendMessage(window.Handle, queryEndSession, IntPtr.Zero, logoff); + SendMessage(window.Handle, endSession, IntPtr.Zero, logoff); + } + + await Assert.That(heard).IsEqualTo(0); + } + + /// + /// Wired the way Program wires it, over a queue this process holds. The session ending never + /// reaches the disposal that stages a queue on a clean exit: the message loop does not return + /// for it, and the process may be ended once the message is answered. So what was pending has + /// to be on disk by then, and it was not - the queue went with the process. + /// + [Test] + public async Task AnOwningTrayStagesItsQueueAsTheSessionEnds() + { + var directory = Path.Combine(Path.GetTempPath(), $"tray-session-end-{Guid.NewGuid():N}"); + Directory.CreateDirectory(directory); + var host = OwnedInlineHost.TryOwn(_ => { }, new FakeLauncher(), 0) ?? + throw new("Could not bind an ephemeral port."); + try + { + await File.WriteAllTextAsync(Path.Combine(directory, "Sample.csproj"), ""); + var source = Path.Combine(directory, "SampleTests.cs"); + await File.WriteAllTextAsync(source, "// sample"); + host.Start(); + await Assert.That(Send(host, source).Ok).IsTrue(); + + EndSession(host); + + // Read before the host is disposed, which would stage it too + var staging = Path.Combine(directory, "obj", InlineStaging.DirectoryName); + var patchFile = Directory.GetFiles(staging).Single(_ => _.EndsWith(".inlinepatch")); + await Assert.That(InlinePatchFile.TryRead(patchFile, out var read)).IsTrue(); + await Assert.That(read!.SourceFile).IsEqualTo(source); + await Assert.That(read.NewContent).IsEqualTo("new"); + } + finally + { + await host.DisposeAsync(); + Directory.Delete(directory, recursive: true); + } + } + + static void EndSession(OwnedInlineHost host) + { + using var window = new SessionEndWindow(host.SessionEnding); + SendMessage(window.Handle, queryEndSession, IntPtr.Zero, logoff); + SendMessage(window.Handle, endSession, new(1), logoff); + } + + static ViewerResponse Send(OwnedInlineHost host, string source) + { + var message = new ViewerMessage( + ViewerVerb.Inline, + Body: InlinePatchFile.Build( + new(source, 42, "\"old\"", "new") + { + Framework = "net10.0", + TestName = null + })); + if (!ViewerClient.TrySend(message, out var response, host.Port)) + { + throw new("The owner did not answer."); + } + + return response; + } + + [DllImport("user32.dll")] + static extern IntPtr SendMessage(IntPtr window, int message, IntPtr wParam, IntPtr lParam); + + const int queryEndSession = 0x0011; + const int endSession = 0x0016; + static readonly IntPtr logoff = new(unchecked((int) 0x80000000)); +} diff --git a/src/DiffEngineTray/OwnedInlineHost.cs b/src/DiffEngineTray/OwnedInlineHost.cs index 8b5ef8c70..ae09b2667 100644 --- a/src/DiffEngineTray/OwnedInlineHost.cs +++ b/src/DiffEngineTray/OwnedInlineHost.cs @@ -15,8 +15,9 @@ /// /// /// A clean tray exit stages what is still pending back to disk (), so -/// a restart no longer silently discards the queue. A kill or a crash still loses it, exactly as -/// it loses tracked moves and deletes, and the recovery is the same: re-run the tests. +/// a restart no longer silently discards the queue. So does the session ending, which never gets +/// as far as a clean exit: see . A kill or a crash still loses it, +/// exactly as it loses tracked moves and deletes, and the recovery is the same: re-run the tests. /// /// sealed class OwnedInlineHost : @@ -208,6 +209,15 @@ int IQueueOwner.Enqueue(InlinePatch patch) int count; lock (gate) { + if (sessionEnding) + { + // Thrown rather than returned, as an owning viewer's is once it is closing: the + // interface has no refusal for this verb, and a handler that throws is answered + // with an error, so the sender stages the patch itself instead of believing a + // process on its way out took it + throw new InvalidOperationException("This tray is going with the session and can take nothing more."); + } + queue = queue.Enqueue(patch); count = queue.Count; } @@ -795,4 +805,33 @@ public async ValueTask DisposeAsync() /// void Persist() => InlineStaging.Persist(queue.Items); + + /// + /// The session is ending: take nothing more, and stage what the queue holds, before returning. + /// + /// A logoff or a shutdown never reaches . The message loop does not + /// return for one, and Windows may end the process as soon as its windows have answered, so + /// the queue was lost every time the session ended with something pending - which, for a tray + /// started at login, is how it usually stops. See , which calls + /// this from inside the message. + /// + /// + /// Refusing first, under the gate, is what makes the staged queue the final one, the way + /// stopping the listener does for a clean exit: a patch acknowledged after this would be in + /// neither place. + /// + /// + public void SessionEnding() + { + IReadOnlyList pending; + lock (gate) + { + sessionEnding = true; + pending = queue.Items; + } + + InlineStaging.Persist(pending); + } + + bool sessionEnding; } diff --git a/src/DiffEngineTray/Program.cs b/src/DiffEngineTray/Program.cs index edf096b25..90be35e43 100644 --- a/src/DiffEngineTray/Program.cs +++ b/src/DiffEngineTray/Program.cs @@ -105,6 +105,11 @@ void Warn(string message) => owned.Start(); } + // A logoff or a shutdown does not come back through Application.Run(), so the staging the + // unwind below performs never happens for one. Only for a queue held here: a viewer that + // owns it stages its own + using var sessionEnd = owned is null ? null : new SessionEndWindow(owned.SessionEnding); + // Not a using. Anything throwing between here and the await below would dispose a task // that is still running, and Task.Dispose throws for one that has not completed - which // would replace whatever actually went wrong with an InvalidOperationException. A task diff --git a/src/DiffEngineTray/SessionEndWindow.cs b/src/DiffEngineTray/SessionEndWindow.cs new file mode 100644 index 000000000..e3500067d --- /dev/null +++ b/src/DiffEngineTray/SessionEndWindow.cs @@ -0,0 +1,63 @@ +/// +/// Hears that the Windows session is ending, which is how a tray started at login usually stops. +/// +/// Nothing else here would. A logoff or a shutdown sends every top level window +/// WM_QUERYENDSESSION and then WM_ENDSESSION, and Windows may end the process as soon as those are +/// answered. A Form turns them into a close, which is how the viewer hears of it. The tray has no +/// Form, only the notify icon's window, which agrees to the query and does nothing more: so +/// Application.Run() never returns, nothing after it in Program runs, and the queue an +/// owning tray holds in memory went with the process where a clean exit stages it. +/// +/// +/// A window of its own, because the two messages are sent rather than posted, which a message +/// filter never sees. Top level, because a message only window is not sent them. Never shown. +/// +/// +/// On WM_ENDSESSION rather than on the query before it. Another application can still refuse the +/// query, and a session that then carries on would have a queue both staged on disk and held here. +/// +/// +sealed class SessionEndWindow : + NativeWindow, + IDisposable +{ + const int endSession = 0x0016; + + readonly Action ending; + + /// + /// Run inside the message, on the thread this is created on, so whatever it does is done by + /// the time the message is answered: there may be no time after that. + /// + public SessionEndWindow(Action ending) + { + this.ending = ending; + CreateHandle(new()); + } + + protected override void WndProc(ref Message message) + { + // WParam is zero when the session is not ending after all, which everything that agreed + // to the query is told once something else has refused it + if (message.Msg == endSession && + message.WParam != IntPtr.Zero) + { + try + { + ending(); + } + catch (Exception exception) + { + // Logged and nothing more. Thrown out of here it reaches WinForms' exception + // dialog, which during a logoff is a window holding the session open with nobody + // left to answer it + Log.Error(exception, "Failed while the session was ending"); + } + } + + base.WndProc(ref message); + } + + public void Dispose() => + DestroyHandle(); +} From 6c63f6cf2c496e574ec418270ceefa185ded942e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:07:27 +1000 Subject: [PATCH 14/73] Keep a tracked pair's diff tool when it arrives again without one A move for a pair the tray already tracks was always rebuilt from what the message carried. A Move or a Diff over the viewer port carries the two paths and nothing about the tool, so the tray filled the gap as it does for a pair seen for the first time, with its own choice for the extension, over a move that had already said which tool was showing the pair. "Open diff tool" on a viewer pair does this by hand: it starts DiffEngineViewer --diff, which cannot bind the port and forwards the pair to the tray as a Diff. The pair went from the viewer, not killable and open, to whatever the tray would pick, killable and with no window, so the "Accept open" hot key passed over a pair that was on screen in the viewer. A move that names no tool now changes nothing about the one recorded: the exe, its arguments, whether it may be killed, whether it kills what locks it and whether it is the viewer all stay, and only the target is taken. The focus race test told a focus from a Diff by the exe surviving, which a Diff now leaves alone as well, so it asserts on the entry not having been replaced. --- .../DiffRunnerViewerFocusRaceTest.cs | 15 ++-- .../TrackerTrackedFilesTest.cs | 86 +++++++++++++++++++ .../TrayViewerSyncTest.cs | 27 ++++++ src/DiffEngineTray/Tracker.cs | 30 ++++++- 4 files changed, 151 insertions(+), 7 deletions(-) diff --git a/src/DiffEngineTray.Tests/DiffRunnerViewerFocusRaceTest.cs b/src/DiffEngineTray.Tests/DiffRunnerViewerFocusRaceTest.cs index 03fa76b0f..b80e4e25c 100644 --- a/src/DiffEngineTray.Tests/DiffRunnerViewerFocusRaceTest.cs +++ b/src/DiffEngineTray.Tests/DiffRunnerViewerFocusRaceTest.cs @@ -69,9 +69,10 @@ public async Task A_move_the_tray_has_tracked_is_a_focus_and_nothing_more() await Assert.That(result).IsEqualTo(LaunchResult.AlreadyRunningAndSupportsRefresh); await Assert.That(fixture.Launches).IsEqualTo(1); - // Focus raised the window over the entry that was already there, so nothing re-tracked it: - // a Diff would have replaced the move, losing the exe and arguments the piper send carries. - await Assert.That(fixture.TrackedExe()).IsEqualTo(exe); + // Focus raised the window over the entry that was already there, so nothing re-tracked it. + // A Diff would have: it keeps the exe and arguments the piper send carried, but every + // arrival for a tracked pair replaces its entry. + await Assert.That(fixture.IsStillTheMoveTracked()).IsTrue(); } sealed class Fixture : @@ -124,13 +125,15 @@ public Fixture() /// that always worked. /// public void Track() => - tracker.AddMove(Temp, Target, exe, "--diff", false, null); + tracked = tracker.AddMove(Temp, Target, exe, "--diff", false, null); + + TrackedMove? tracked; public bool Tracks(string key) => ((ITrackedFiles) tracker).Has(key); - public string? TrackedExe() => - tracker.Moves.Single().Exe; + public bool IsStillTheMoveTracked() => + ReferenceEquals(tracker.Moves.Single(), tracked); public Task PiperMove() => move.Task.WaitAsync(TimeSpan.FromSeconds(10), piperCancel.Token); diff --git a/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs b/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs index 0f2163940..d665f1a06 100644 --- a/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs +++ b/src/DiffEngineTray.Tests/TrackerTrackedFilesTest.cs @@ -251,6 +251,92 @@ public async Task DiscardAllUntracksDeletesAndDropsMoveTemps() await Assert.That(File.Exists(temp)).IsFalse(); } + /// + /// A pair the tray already tracks, arriving again over the viewer port. That message carries + /// the two paths and nothing about the tool, and the tray filled the gap with its own choice + /// for the extension - over a move that already said which tool was showing the pair. "Open + /// diff tool" on a viewer pair does exactly this: it starts DiffEngineViewer --diff, which + /// cannot bind the port and forwards the pair to the tray. The pair then read as some other + /// tool's with no window open, and "Accept open" skipped it while it sat on screen. + /// + [Test] + public async Task AMoveArrivingAgainOverTheViewerPortKeepsItsTool() + { + await using var tracker = new RecordingTracker(); + await File.WriteAllTextAsync(temp, "content"); + var arguments = $"--diff \"{temp}\" \"{target}\""; + tracker.AddMove(temp, target, viewerExe, arguments, false, null); + + ((ITrackedFiles) tracker).AddMove(temp, target); + + var move = tracker.Moves.Single(); + await Assert.That(move.Exe).IsEqualTo(viewerExe); + await Assert.That(move.Arguments).IsEqualTo(arguments); + await Assert.That(move.CanKill).IsFalse(); + await Assert.That(move.IsViewer).IsTrue(); + await Assert.That(move.IsOpen).IsTrue(); + } + + /// + /// The same for any other tool: what the sender said about it, and the process it started, + /// are still the tool showing the pair. + /// + [Test] + public async Task AMoveArrivingAgainOverTheViewerPortKeepsAnotherToolAndItsProcess() + { + await using var tracker = new RecordingTracker(); + await File.WriteAllTextAsync(temp, "content"); + // Stands in for the diff tool the sender started for the pair. A process of its own, + // since the tray kills the tool of a move it may kill + var tool = FileLockUtils.StartFileLockProcess(file); + try + { + tracker.AddMove(temp, target, "theExe", "theArguments", true, tool.Id); + + ((ITrackedFiles) tracker).AddMove(temp, target); + + var move = tracker.Moves.Single(); + await Assert.That(move.Exe).IsEqualTo("theExe"); + await Assert.That(move.Arguments).IsEqualTo("theArguments"); + await Assert.That(move.CanKill).IsTrue(); + await Assert.That(move.IsViewer).IsFalse(); + await Assert.That(move.Process!.Id).IsEqualTo(tool.Id); + await Assert.That(move.IsOpen).IsTrue(); + } + finally + { + FileLockUtils.Cleanup(tool); + } + } + + /// + /// What that message does say is taken: the target, and what is derived from it. + /// + [Test] + public async Task AMoveArrivingAgainOverTheViewerPortTakesItsTarget() + { + await using var tracker = new RecordingTracker(); + await File.WriteAllTextAsync(temp, "content"); + tracker.AddMove(temp, target, viewerExe, "--diff", false, null); + var moved = Path.Combine(Path.GetTempPath(), $"TrackedFilesTest_{Guid.NewGuid():N}.Other.verified.bin"); + + ((ITrackedFiles) tracker).AddMove(temp, moved); + + var move = tracker.Moves.Single(); + await Assert.That(move.Target).IsEqualTo(moved); + await Assert.That(move.Extension).IsEqualTo("bin"); + await Assert.That(move.Exe).IsEqualTo(viewerExe); + await Assert.That(move.IsViewer).IsTrue(); + } + + // The copy bundled in some other project's DiffEngine package, which is where a sender's + // viewer is and a path this process has never resolved + static readonly string viewerExe = Path.Combine( + Path.GetTempPath(), + "some-other-package", + "viewer", + "DiffEngineViewer.exe"); + public void Dispose() { File.Delete(file); diff --git a/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs b/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs index 908b16b14..71775da77 100644 --- a/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs +++ b/src/DiffEngineTray.Tests/TrayViewerSyncTest.cs @@ -438,6 +438,33 @@ public async Task ViewerAcceptOfATrackedMoveReachesTheTray() await Assert.That(await File.ReadAllTextAsync(move.Target)).IsEqualTo("received"); } + /// + /// A pair whose diff tool is the viewer, sent to the tray again as a Diff: what "Open diff tool" + /// on it does, since the viewer that starts cannot bind the port and forwards the pair here. + /// The verb carries no tool, and the tray replaced the one it had recorded with its own choice + /// for the extension, so the pair stopped counting as open and "Accept open" passed over it + /// while it was on screen in the viewer. + /// + [Test] + public async Task ADiffForAPairTheTrayTracksLeavesItOpenInTheViewer() + { + await using var pair = new TrayOwned(); + var move = pair.AddMove(); + var viewerExe = Path.Combine(Path.GetTempPath(), "some-other-package", "viewer", "DiffEngineViewer.exe"); + // The piper move DiffEngine sends for a pair it resolved the viewer for + pair.Tracker.AddMove(move.Temp, move.Target, viewerExe, $"--diff \"{move.Temp}\" \"{move.Target}\"", false, null); + + var response = pair.Send(new(ViewerVerb.Diff, move.Temp, move.Target)); + + await Assert.That(response.Ok).IsTrue(); + await Assert.That(pair.Tracker.Moves.Single().Exe).IsEqualTo(viewerExe); + + await pair.Tracker.AcceptOpen(); + + await Assert.That(pair.Tracker.Moves).IsEmpty(); + await Assert.That(await File.ReadAllTextAsync(move.Target)).IsEqualTo("received"); + } + /// /// The tray menu is built from the last scan, so an item can outlive its entry: the test /// re-ran and passed, or the viewer accepted it first. Clicking it accepts nothing, and there diff --git a/src/DiffEngineTray/Tracker.cs b/src/DiffEngineTray/Tracker.cs index f786527c8..6328d0555 100644 --- a/src/DiffEngineTray/Tracker.cs +++ b/src/DiffEngineTray/Tracker.cs @@ -222,7 +222,9 @@ public TrackedMove AddMove( ProcessEx.TryGet(processId.Value, out process); } - var move = BuildTrackedMove(temp, exe, arguments, canKill, target, process); + var move = exe == null + ? Retarget(existing, target, process) + : BuildTrackedMove(temp, exe, arguments, canKill, target, process); if (exeFile == null) { @@ -237,6 +239,32 @@ public TrackedMove AddMove( }); } + /// + /// A move that arrives for a pair already tracked and names no tool: what it says is the + /// target, and everything recorded about the tool stays as it was. + /// + /// A move with no tool is one over the viewer port, which carries the two paths and nothing + /// else, or one from a run that launched nothing. Neither says anything about the tool the + /// pair was first tracked with, and filling the gap from the extension, as a move seen for the + /// first time has to, replaced that tool with this tray's own choice. "Open diff tool" on a + /// viewer pair is how it happened by hand: the viewer it starts cannot bind the port and + /// forwards the pair here as a Diff. The pair then read as another tool's with no window, so + /// "Accept open" passed over it while it was on screen, and it had become killable. + /// + /// + static TrackedMove Retarget(TrackedMove existing, string target, Process? process) => + new( + existing.Temp, + target, + existing.Exe, + existing.Arguments, + existing.CanKill, + process, + SolutionDirectoryFinder.Find(target), + Path.GetExtension(target).TrimStart('.'), + existing.KillLockingProcess, + existing.IsViewer); + static TrackedMove BuildTrackedMove(string temp, string? exe, string? arguments, bool? canKill, string target, Process? process) { var solution = SolutionDirectoryFinder.Find(target); From 508e04c75e57af7e09a2cb74198574595c049f3b Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:47:41 +1000 Subject: [PATCH 15/73] Append an inline Snapshot call in front of ConfigureAwait, ToTask and GetAwaiter An append always went on the end of the chain in C#, so await Verify(value).ConfigureAwait(false) was given a Snapshot call on a ConfiguredTaskAwaitable, which has none (CS1061), at a call site CanAnchor had already said could host a snapshot. Only F# stopped short of the end, and only at ToTask. The three members that hand back something other than a SettingsTask now end a chain in both languages, and the call goes in front of the first of them. --- src/DiffEngine.Tests/InlinePatcherFsTests.cs | 18 ++++++ src/DiffEngine.Tests/InlinePatcherTests.cs | 65 ++++++++++++++++++++ src/DiffEngine/Inline/FsLanguage.cs | 7 --- src/DiffEngine/Inline/InlinePatcher.cs | 43 ++++++++++--- src/DiffEngine/Inline/SourceLanguage.cs | 6 -- 5 files changed, 118 insertions(+), 21 deletions(-) diff --git a/src/DiffEngine.Tests/InlinePatcherFsTests.cs b/src/DiffEngine.Tests/InlinePatcherFsTests.cs index acfd6948f..9b80d7105 100644 --- a/src/DiffEngine.Tests/InlinePatcherFsTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherFsTests.cs @@ -408,6 +408,24 @@ await Assert.That(newSource).IsEqualTo( """)); } + // ToTask is not the only way off a SettingsTask, and a test that blocks instead of awaiting + // leaves by another: the Snapshot call goes in front of whichever comes first + [Test] + public async Task AppendGoesInFrontOfGetAwaiter() + { + var source = Test(" Verifier.Verify(15).GetAwaiter().GetResult() |> ignore"); + + var status = TryApply(source, 5, InlinePatchMode.Append, null, "new", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Test( + """ + Verifier.Verify(15) + .Snapshot("new").GetAwaiter().GetResult() |> ignore + """)); + } + [Test] public async Task AppendToAMultiLineChain() { diff --git a/src/DiffEngine.Tests/InlinePatcherTests.cs b/src/DiffEngine.Tests/InlinePatcherTests.cs index 7ca3c1cd2..fe4d158e8 100644 --- a/src/DiffEngine.Tests/InlinePatcherTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherTests.cs @@ -786,6 +786,71 @@ await Assert.That(newSource).Contains( """); } + /// + /// The three calls that hand back something other than a SettingsTask. A Snapshot call after + /// one of them is a call on a ConfiguredTaskAwaitable, a Task or a TaskAwaiter, none of which + /// has one, so the append goes in front. The end of the chain used to be the only place C# + /// appended, which wrote source that did not compile into a call site the anchor probe had + /// already said could host a snapshot. + /// + [Test] + [Arguments(".ConfigureAwait(false)")] + [Arguments(".ToTask()")] + [Arguments(".GetAwaiter().GetResult()")] + public async Task AppendGoesInFrontOfWhatEndsTheChain(string ending) + { + var source = Method($" await Verify(value){ending};"); + + var status = TryApply(source, 5, InlinePatchMode.Append, null, "new", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Method( + $""" + await Verify(value) + .Snapshot("new"){ending}; + """)); + } + + // A chain already across lines keeps its shape: the call takes a line of its own, in front of + // the one that ends the chain + [Test] + public async Task AppendToAMultiLineChainGoesInFrontOfWhatEndsIt() + { + var source = Method( + """ + await Verify(value) + .UseDirectory("snapshots") + .ConfigureAwait(false); + """); + + var status = TryApply(source, 5, InlinePatchMode.Append, null, "new", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Method( + """ + await Verify(value) + .UseDirectory("snapshots") + .Snapshot("new") + .ConfigureAwait(false); + """)); + } + + // What the append wrote is what the second framework's identical append then finds, in front + // of the call that ends the chain rather than at the end of it + [Test] + public async Task AppendingTwiceInFrontOfWhatEndsTheChainIsAlreadyApplied() + { + var source = Method(" await Verify(value).ConfigureAwait(false);"); + + TryApply(source, 5, InlinePatchMode.Append, null, "a\nb", out var applied, out _); + var status = TryApply(applied, 5, InlinePatchMode.Append, null, "a\nb", out _, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.AlreadyApplied); + await Assert.That(applied).Contains("\"\"\").ConfigureAwait(false);"); + } + [Test] public async Task AppendToAnEntryPointOverload() { diff --git a/src/DiffEngine/Inline/FsLanguage.cs b/src/DiffEngine/Inline/FsLanguage.cs index c30adbe69..ecd00e95c 100644 --- a/src/DiffEngine/Inline/FsLanguage.cs +++ b/src/DiffEngine/Inline/FsLanguage.cs @@ -23,13 +23,6 @@ public override bool TryParse(string expression, [NotNullWhen(true)] out string? internal override char NameSeparator => '='; - /// - /// F# does not apply the implicit conversion that lets a SettingsTask be awaited, so an F# - /// test ends the chain with ToTask. Snapshot returns the SettingsTask and ToTask does not, so - /// an appended call goes in front of it rather than after it. - /// - internal override string ChainTerminator => "ToTask"; - /// /// The F# compiler does not implement - it /// warns FS0202 and leaves the parameter at its default - so an F# patch never carries the diff --git a/src/DiffEngine/Inline/InlinePatcher.cs b/src/DiffEngine/Inline/InlinePatcher.cs index 398e1bd45..af74ec2ab 100644 --- a/src/DiffEngine/Inline/InlinePatcher.cs +++ b/src/DiffEngine/Inline/InlinePatcher.cs @@ -436,8 +436,8 @@ static bool TryReadArguments(string source, SourceScan scan, int openParen, out /// Appends a Snapshot call to the verify invocation, for a snapshot that has never been /// accepted. Snapshot terminates the chain, so the insertion point is the end of any calls /// already chained onto the invocation rather than the invocation's own closing paren - except - /// where the language ends its chain with something Snapshot has to precede, which - /// answers. + /// where the chain ends in something Snapshot has to precede, which + /// answers. /// static PatchStatus TryAppend( string source, @@ -678,10 +678,26 @@ static bool RemovedAtHint(string source, SourceScan scan, List lineStarts, return false; } + /// + /// The calls a Snapshot call has to be appended in front of rather than after: each hands back + /// something other than the SettingsTask a Snapshot call is made on, so the chain cannot be + /// carried on past one. + /// + /// The same three in both languages. This used to be ToTask alone, and F#'s alone, because an + /// F# test ends its chain that way: F# does not apply the conversion that lets a SettingsTask + /// be awaited. C# reaches for all three as readily - a library that configures every await, a + /// synchronous test blocking on GetAwaiter - and with nothing to stop at there, an append onto + /// await Verify(value).ConfigureAwait(false) went after the ConfigureAwait, where a + /// ConfiguredTaskAwaitable has no Snapshot to call (CS1061). The anchor probe had already said + /// the call site could host a snapshot, so the verification was inline with nowhere to put one. + /// + /// + static string[] chainTerminators = ["ToTask", "ConfigureAwait", "GetAwaiter"]; + /// /// Walks the calls chained onto an invocation and returns where a call should be appended: - /// the end of the chain, or the point in front of the language's - /// when the chain ends in one. + /// the end of the chain, or the point in front of the first of the + /// when the chain holds one. /// is the open paren of the first call to /// among them, or -1 where there is none. The position rather than the fact of it, because a /// caller deciding what to do about one has to read its argument. @@ -689,7 +705,6 @@ static bool RemovedAtHint(string source, SourceScan scan, List lineStarts, static int WalkChain(string source, SourceScan scan, int index, string name, out int found) { found = -1; - var terminator = scan.Language.ChainTerminator; // Where the chain was before the terminating call, which is where an appended one goes: // in front of the terminator, and behind the whitespace and line break that introduced it var beforeTerminator = -1; @@ -726,9 +741,8 @@ static int WalkChain(string source, SourceScan scan, int index, string name, out found = paren; } - if (terminator != null && - beforeTerminator < 0 && - IsCall(source, nameStart, cursor, terminator)) + if (beforeTerminator < 0 && + IsCall(source, nameStart, cursor, chainTerminators)) { beforeTerminator = index; } @@ -743,6 +757,19 @@ static bool IsCall(string source, int nameStart, int nameEnd, string name) => nameEnd - nameStart == name.Length && string.CompareOrdinal(source, nameStart, name, 0, name.Length) == 0; + static bool IsCall(string source, int nameStart, int nameEnd, string[] names) + { + foreach (var name in names) + { + if (IsCall(source, nameStart, nameEnd, name)) + { + return true; + } + } + + return false; + } + static string LeadingWhitespace(string source, List lineStarts, int offset) { var lineStart = lineStarts[LineOf(lineStarts, offset) - 1]; diff --git a/src/DiffEngine/Inline/SourceLanguage.cs b/src/DiffEngine/Inline/SourceLanguage.cs index 207a52328..9ad5b4369 100644 --- a/src/DiffEngine/Inline/SourceLanguage.cs +++ b/src/DiffEngine/Inline/SourceLanguage.cs @@ -85,12 +85,6 @@ public static SourceLanguage ForFile(string path) /// internal abstract char NameSeparator { get; } - /// - /// A chained call that a Snapshot call has to be appended in front of rather than after, or - /// null when the end of the chain is always the insertion point. - /// - internal virtual string? ChainTerminator => null; - /// /// Whether a patch from this language carries the source text of the expected argument, which /// is to say whether the compiler honours . From 839ed818dd71f46a539a959d96b38a2b71fbe217 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:50:37 +1000 Subject: [PATCH 16/73] Append to the first entry point in the member that has no Snapshot call An append took the first entry point the search yielded. Once an accept higher in the file leaves the hint stale, the walk starts over from the member's declaration, and the first call it meets is the one most likely to have been accepted already: the patch was refused with 'already has a Snapshot call' while the call it was for sat two lines below, and a single accept dropped the entry. A call that has one is now passed over, along with any entry point inside its arguments. The call on the recorded line still decides, since a hint that lands on a call names it, and so does the nearest call when the patch names no member to bound the walk. --- src/DiffEngine.Tests/InlinePatcherFsTests.cs | 25 ++++ src/DiffEngine.Tests/InlinePatcherTests.cs | 146 +++++++++++++++++++ src/DiffEngine/Inline/InlinePatcher.cs | 116 +++++++++++---- 3 files changed, 255 insertions(+), 32 deletions(-) diff --git a/src/DiffEngine.Tests/InlinePatcherFsTests.cs b/src/DiffEngine.Tests/InlinePatcherFsTests.cs index 9b80d7105..e3146051f 100644 --- a/src/DiffEngine.Tests/InlinePatcherFsTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherFsTests.cs @@ -543,6 +543,31 @@ public async Task AppendOntoTheSameContentIsAlreadyApplied() await Assert.That(status).IsEqualTo(PatchStatus.AlreadyApplied); } + // The first call in the test was accepted, which is what left the hint stale, so the walk from + // the member's declaration meets it before the call the patch is for + [Test] + public async Task AppendPassesOverACallThatAlreadyHasASnapshot() + { + var source = Test( + """ + Verifier.Verify(a).Snapshot("A").ToTask() |> ignore + Verifier.Verify(b).ToTask() |> ignore + printfn "done" + """); + + var status = TryApply(source, 7, InlinePatchMode.Append, null, "B", out var newSource, out var reason, memberName: "MyTest"); + + await Assert.That((status, reason)).IsEqualTo((PatchStatus.Applied, "")); + await Assert.That(newSource).IsEqualTo( + Test( + """ + Verifier.Verify(a).Snapshot("A").ToTask() |> ignore + Verifier.Verify(b) + .Snapshot("B").ToTask() |> ignore + printfn "done" + """)); + } + [Test] public async Task AppendingTheSameContentTwiceIsAlreadyApplied() { diff --git a/src/DiffEngine.Tests/InlinePatcherTests.cs b/src/DiffEngine.Tests/InlinePatcherTests.cs index fe4d158e8..13e2b5ed3 100644 --- a/src/DiffEngine.Tests/InlinePatcherTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherTests.cs @@ -933,6 +933,152 @@ public async Task AppendingTheSameContentTwiceIsAlreadyApplied() await Assert.That(status).IsEqualTo(PatchStatus.AlreadyApplied); } + const string acceptedThenNew = + """ + class Tests + { + async Task Test() + { + await Verify(a) + .Snapshot("A"); + await Verify(b); + } + } + + """; + + /// + /// Two verify calls in one test, the first already accepted, and a hint an accept higher in + /// the file left pointing past the member. The walk starts over from the declaration and meets + /// the accepted call first. Stopping there refused the patch over a Snapshot call that was + /// never in its way, with the call it was for two lines below. + /// + [Test] + public async Task AppendPassesOverACallThatAlreadyHasASnapshot() + { + var status = TryApply(Source(acceptedThenNew), 12, InlinePatchMode.Append, null, "B", out var newSource, out var reason, memberName: "Test"); + + await Assert.That((status, reason)).IsEqualTo((PatchStatus.Applied, "")); + await Assert.That(newSource).IsEqualTo( + Source( + """ + class Tests + { + async Task Test() + { + await Verify(a) + .Snapshot("A"); + await Verify(b) + .Snapshot("B"); + } + } + + """)); + } + + /// + /// The hint lands on the accepted call this time, which is what a second framework's patch for + /// that same call site looks like once the first has been accepted. It names that call, so the + /// call after it is not somewhere else to put the snapshot. + /// + [Test] + public async Task AppendStopsAtACallOnTheRecordedLineThatAlreadyHasASnapshot() + { + var status = TryApply(Source(acceptedThenNew), 5, InlinePatchMode.Append, null, "B", out _, out var reason, memberName: "Test"); + + await Assert.That(status).IsEqualTo(PatchStatus.NotFound); + await Assert.That(reason).Contains("already has a Snapshot call"); + } + + /// + /// With no member there is nothing to say where the test ends, so the call nearest the hint + /// still decides: the next one without a Snapshot call could be anybody's. + /// + [Test] + public async Task AppendWithNoMemberStopsAtTheNearestCall() + { + var status = TryApply(Source(acceptedThenNew), 4, InlinePatchMode.Append, null, "B", out _, out var reason); + + await Assert.That(status).IsEqualTo(PatchStatus.NotFound); + await Assert.That(reason).Contains("already has a Snapshot call"); + } + + // Nothing left to take it, and nothing holding it either + [Test] + public async Task AppendIsRefusedWhenEveryCallInTheMemberHasASnapshot() + { + var source = Source( + """ + class Tests + { + async Task Test() + { + await Verify(a).Snapshot("A"); + await Verify(b).Snapshot("other"); + } + } + + """); + + var status = TryApply(source, 12, InlinePatchMode.Append, null, "B", out _, out var reason, memberName: "Test"); + + await Assert.That(status).IsEqualTo(PatchStatus.NotFound); + await Assert.That(reason).Contains("already has a Snapshot call"); + } + + /// + /// The second framework's append again, but with a hint gone stale: the call that holds the + /// content is no longer the first one the walk meets, and the first one holding something + /// else used to make this a refusal over source that was already right. + /// + [Test] + public async Task AppendFindsItsContentAlreadyOnACallPastTheFirst() + { + var source = Source( + """ + class Tests + { + async Task Test() + { + await Verify(a).Snapshot("A"); + await Verify(b).Snapshot("B"); + } + } + + """); + + var status = TryApply(source, 12, InlinePatchMode.Append, null, "B", out _, out _, memberName: "Test"); + + await Assert.That(status).IsEqualTo(PatchStatus.AlreadyApplied); + } + + /// + /// An entry point inside the arguments of the call that was passed over. It has no Snapshot + /// call chained onto it, and reads as the next candidate, but it is part of a call that has. + /// + [Test] + public async Task AppendDoesNotLandInsideACallItPassedOver() + { + var source = Source( + """ + class Tests + { + async Task Test() + { + await Throws(() => Verify(a)).Snapshot("A"); + await Verify(b); + } + } + + """); + + var status = TryApply(source, 12, InlinePatchMode.Append, null, "B", out var newSource, out _, memberName: "Test"); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).Contains("await Throws(() => Verify(a)).Snapshot(\"A\");\n"); + await Assert.That(newSource).Contains("await Verify(b)\n .Snapshot(\"B\");"); + } + [Test] public async Task AppendWithNoVerifyCall() { diff --git a/src/DiffEngine/Inline/InlinePatcher.cs b/src/DiffEngine/Inline/InlinePatcher.cs index af74ec2ab..3e1450e28 100644 --- a/src/DiffEngine/Inline/InlinePatcher.cs +++ b/src/DiffEngine/Inline/InlinePatcher.cs @@ -438,6 +438,14 @@ static bool TryReadArguments(string source, SourceScan scan, int openParen, out /// already chained onto the invocation rather than the invocation's own closing paren - except /// where the chain ends in something Snapshot has to precede, which /// answers. + /// + /// The call is the first entry point the search yields that has no Snapshot call chained onto + /// it, not the first it yields. A hint goes stale the moment an accept higher in the file + /// inserts a literal, and the walk then starts over from the member's declaration - so the + /// first call it meets is the first in the test, which is the one most likely to have been + /// accepted already. Stopping there answered "already has a Snapshot call" for a patch whose + /// own call sat two lines further down, and a single accept dropped the entry. + /// /// static PatchStatus TryAppend( string source, @@ -453,7 +461,60 @@ static PatchStatus TryAppend( ref string newSource, ref string failReason) { - if (!TryFindCall(source, scan, lineStarts, lineHint, memberLine, entryPoints, true, out var nameStart, out var openParen)) + var found = false; + // Whether a call passed over for having a Snapshot call was holding this very content + var held = false; + List<(int Open, int Close)>? passedOver = null; + foreach (var (nameStart, openParen) in FindCalls(source, scan, lineStarts, lineHint, memberLine, entryPoints, true)) + { + // An entry point in the argument list of a call that was passed over is part of that + // call. Throws(() => Verify(value)).Snapshot(...) has its Snapshot, and the Verify + // inside it is not a second place to hang one + if (passedOver is not null && + passedOver.Any(_ => nameStart > _.Open && nameStart < _.Close)) + { + continue; + } + + found = true; + if (!TryScanArguments(source, scan, openParen, out var closeParen, out _)) + { + failReason = $"Could not parse the argument list of the {entryPointDescription} call near line {lineHint}."; + return PatchStatus.NotFound; + } + + // Everything a call site needs to host a snapshot has now been established, which is + // all an anchor probe asked + if (anchorOnly) + { + return PatchStatus.Applied; + } + + var insertAt = WalkChain(source, scan, closeParen + 1, methodName, out var chained); + if (chained < 0) + { + newSource = AppendCall(source, scan, lineStarts, nameStart, insertAt, newContent, eol, fileUnit); + return PatchStatus.Applied; + } + + held |= HoldsContent(source, scan, chained, newContent); + + // Two things end the search at a call that has one. The recorded line: a hint that + // lands on a call names it, and a Snapshot call already there holding other content is + // another framework's accept of the same call site, so carrying on would hang this + // snapshot on the test's next verify call instead. And having no member: nothing bounds + // the walk then, and the next call without one is as likely to be in another test + if (memberLine is null || + IsOnHint(lineStarts, nameStart, lineHint)) + { + break; + } + + passedOver ??= []; + passedOver.Add((openParen, closeParen)); + } + + if (!found) { // Short, because every surface that shows it is one line: a status bar, a balloon, a // menu tooltip. Both clauses earn their place there because they are the two causes a @@ -462,39 +523,31 @@ static PatchStatus TryAppend( return PatchStatus.NotFound; } - if (!TryScanArguments(source, scan, openParen, out var closeParen, out _)) - { - failReason = $"Could not parse the argument list of the {entryPointDescription} call near line {lineHint}."; - return PatchStatus.NotFound; - } - - // Everything a call site needs to host a snapshot has now been established, which is all - // an anchor probe asked - if (anchorOnly) + // Every call that could have taken it has a Snapshot call. Another process may have + // appended one between the run and the accept, and two frameworks failing the same call + // site is the ordinary way that happens: each queues an append, and accepting the first + // leaves the second with nowhere to put a literal that is already there. Only the content + // tells the two apart. The same snapshot is done, and saying so matters - a refusal reads + // as a failure, and the reader who sent two identical snapshots and got one applied and + // one rejected has no way to see that their source is already right. A different one is a + // call site that cannot say what it wants until it has been re-run against the literal it + // now has. + if (held) { - return PatchStatus.Applied; + return PatchStatus.AlreadyApplied; } - var insertAt = WalkChain(source, scan, closeParen + 1, methodName, out var chained); - // Another process may have appended one between the run and the accept, and two - // frameworks failing the same call site is the ordinary way that happens: each queues an - // append, and accepting the first leaves the second with nowhere to put a literal that is - // already there. Only the content tells the two apart. The same snapshot is done, and - // saying so matters - a refusal reads as a failure, and the reader who sent two identical - // snapshots and got one applied and one rejected has no way to see that their source is - // already right. A different one is a call site that cannot say what it wants until it has - // been re-run against the literal it now has. - if (chained >= 0) - { - if (HoldsContent(source, scan, chained, newContent)) - { - return PatchStatus.AlreadyApplied; - } - - failReason = $"The call near line {lineHint} already has a {methodName} call. Re-run the test."; - return PatchStatus.NotFound; - } + failReason = $"The call near line {lineHint} already has a {methodName} call. Re-run the test."; + return PatchStatus.NotFound; + } + /// + /// The source with a Snapshot call holding spliced in at + /// , on a line of its own under the call at + /// . + /// + static string AppendCall(string source, SourceScan scan, List lineStarts, int nameStart, int insertAt, string newContent, string eol, string fileUnit) + { var statementIndent = LeadingWhitespace(source, lineStarts, nameStart); var unit = UnitFor(fileUnit, statementIndent); // Line up with the existing chain when there is one, otherwise start it one level in @@ -504,8 +557,7 @@ static PatchStatus TryAppend( var contentIndent = callIndent + unit; var rendered = scan.Language.Render(newContent, contentIndent, eol); var argument = OnOwnLine(rendered, contentIndent, eol); - newSource = Splice(source, insertAt, insertAt, $"{eol}{callIndent}.{methodName}({argument})"); - return PatchStatus.Applied; + return Splice(source, insertAt, insertAt, $"{eol}{callIndent}.{methodName}({argument})"); } /// From 8c91fbf6bf4127f4c021d79890f997ffd3cbe6ed Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:56:59 +1000 Subject: [PATCH 17/73] Indent an F# accept from the column the call's expression starts at The appended call and a literal on its own line were both indented one level in from the line's leading whitespace. F#'s offside rule needs them to clear the column the expression starts at, and after do!, let! x =, let x = or a binding written on one line that column is further along the line: the appended call was read as the start of the next statement and the literal as offside, FS0010 either way, in source that compiled until it was accepted into. A chain ending on a closing paren or an argument at that column did the same to a call that does start its line. Both are now measured from where the expression starts, found by walking back over the call's receivers, and FsCompilerRoundTripTests compiles the shapes with dotnet fsi. --- .../FsCompilerRoundTripTests.cs | 46 +++ src/DiffEngine.Tests/InlinePatcherFsTests.cs | 198 ++++++++++++- src/DiffEngine/Inline/FsLanguage.cs | 9 + src/DiffEngine/Inline/InlinePatcher.cs | 275 ++++++++++++++++-- src/DiffEngine/Inline/SourceLanguage.cs | 6 + src/DiffEngine/Inline/SourceScan.cs | 7 + 6 files changed, 521 insertions(+), 20 deletions(-) diff --git a/src/DiffEngine.Tests/FsCompilerRoundTripTests.cs b/src/DiffEngine.Tests/FsCompilerRoundTripTests.cs index 07e031670..969180c39 100644 --- a/src/DiffEngine.Tests/FsCompilerRoundTripTests.cs +++ b/src/DiffEngine.Tests/FsCompilerRoundTripTests.cs @@ -60,6 +60,15 @@ public class FsCompilerRoundTripTests "a\nb" + (char) 0x2028 + "c" ]; + /// + /// The call as each mode meets it: with a Snapshot call to put the literal in, and with none. + /// + static readonly (InlinePatchMode Mode, string Call)[] midLineCalls = + [ + (InlinePatchMode.Set, "Verify(\"x\").Snapshot().ToTask()"), + (InlinePatchMode.Append, "Verify(\"x\").ToTask()") + ]; + [Test] [RequiresDotnet] public async Task PatchedSourceCompilesAndReadsBack() @@ -92,6 +101,17 @@ member _.ToTask() = value let Verify (value: string) = Chain(value) + // Somewhere for do!, let! and return! to be written. Where the offside line falls is + // decided by those keywords and not by the builder behind them, so this one hands back + // what was bound, and the literal can be read out of a computation expression by the + // same check as out of anything else + type Capture() = + member _.Bind(value: string, continuation: unit -> string) = value + continuation () + member _.Zero() = "" + member _.ReturnFrom(value: string) = value + + let capture = Capture() + let mutable failures = 0 // The reader's half of the convention, written out in F# rather than called into @@ -183,6 +203,32 @@ let inner () = InlinePatchMode.Set, content)); builder.Append($"check \"formatted{index}\" (formatted{index} ()) \"{expected}\"\n\n"); + + // A call with something in front of it on its line. The column its expression starts + // at is then past the line's indentation, and that column is what a new line has to + // clear: the appended call, and a literal given a line of its own. Measured from the + // line instead, only the return! survived both, and the do! a literal alone + foreach (var (mode, call) in midLineCalls) + { + Add($"doBang{mode}", $"let doBang{mode}{index} () =\n capture {{\n do! {call}\n }}\n", 3, mode); + Add($"letBang{mode}", $"let letBang{mode}{index} () =\n capture {{\n let! _ = {call}\n return! \"\"\n }}\n", 3, mode); + Add($"returnBang{mode}", $"let returnBang{mode}{index} () =\n capture {{\n return! {call}\n }}\n", 3, mode); + Add($"local{mode}", $"let local{mode}{index} () =\n let result = {call}\n result\n", 2, mode); + Add($"oneLine{mode}", $"let oneLine{mode}{index} () = {call}\n", 1, mode); + } + + // The line the chain ends on is not one of its calls here, and sits at the column the + // expression starts at: a closing paren where a formatter puts it, and an argument + // that starts its own line. An appended call lined up with either is on the offside + // line, whether or not the call starts its line + Add("underParen", $"let underParen{index} () =\n Verify(\n \"x\"\n ).ToTask()\n", 2, InlinePatchMode.Append); + Add("underArgument", $"let underArgument{index} () =\n capture {{\n do! Verify(\n \"x\").ToTask()\n }}\n", 3, InlinePatchMode.Append); + + void Add(string name, string snippet, int lineHint, InlinePatchMode mode) + { + builder.Append(Patch(snippet, lineHint, mode, content)); + builder.Append($"check \"{name}{index}\" ({name}{index} ()) \"{expected}\"\n\n"); + } } builder.Append( diff --git a/src/DiffEngine.Tests/InlinePatcherFsTests.cs b/src/DiffEngine.Tests/InlinePatcherFsTests.cs index e3146051f..4a89bdf51 100644 --- a/src/DiffEngine.Tests/InlinePatcherFsTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherFsTests.cs @@ -477,7 +477,9 @@ await Assert.That(newSource).IsEqualTo( } // Awaited in a task expression instead, so there is no ToTask and the chain end is the - // insertion point + // insertion point. One level in from where the expression starts, which after do! is not where + // the line does: this used to expect the call under Verifier, and F# reads that as the next + // statement [Test] public async Task AppendWithNoToTask() { @@ -496,11 +498,203 @@ await Assert.That(newSource).IsEqualTo( """ task { do! Verifier.Verify(15) - .Snapshot("new") + .Snapshot("new") } """)); } + /// + /// The shape of Verify's own Expecto sample. The offside line is the column the expression + /// starts at, and after do! that is four past the line's indentation, so one level in + /// from the line put the call exactly on it: FS0010, unexpected symbol '.' in expression. + /// + [Test] + public async Task AppendAfterDoBangClearsTheExpression() + { + var source = Test( + """ + testTask "findPerson" { + do! Verifier.Verify("findPerson", person).ToTask() + } + """); + + var status = TryApply(source, 6, InlinePatchMode.Append, null, "a\nb", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Test( + " testTask \"findPerson\" {\n" + + " do! Verifier.Verify(\"findPerson\", person)\n" + + " .Snapshot(\n" + + " \"\"\"\n" + + " a\n" + + " b\n" + + " \"\"\").ToTask()\n" + + " }")); + } + + /// + /// A literal on its own line has the same line to clear. After let! _ = the expression + /// starts nine columns past the indentation, and the literal one level in from the line was + /// left of it. + /// + [Test] + public async Task SetAfterLetBangClearsTheExpression() + { + var source = Test( + """ + testTask "findPerson" { + let! _ = Verifier.Verify(x).Snapshot("old").ToTask() + return () + } + """); + + var status = TryApply(source, 6, InlinePatchMode.Set, null, "a\nb", out var newSource, out _, originalValue: "old"); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Test( + " testTask \"findPerson\" {\n" + + " let! _ = Verifier.Verify(x).Snapshot(\n" + + " \"\"\"\n" + + " a\n" + + " b\n" + + " \"\"\").ToTask()\n" + + " return ()\n" + + " }")); + } + + // A binding written on one line: the expression starts after the equals sign + [Test] + public async Task AppendToABindingOnOneLineClearsTheExpression() + { + var source = Source( + """ + module Tests + + let MyTest () = Verifier.Verify(15).ToTask() + + """); + + var status = TryApply(source, 3, InlinePatchMode.Append, null, "new", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Source( + """ + module Tests + + let MyTest () = Verifier.Verify(15) + .Snapshot("new").ToTask() + + """)); + } + + // The receiver is part of the expression, however long: the column is where the first name + // of it is, with a namespace in front of the class as much as without + [Test] + public async Task TheExpressionStartsAtItsOutermostReceiver() + { + var source = Test(" let result = VerifyXunit.Verifier.Verify(person).UseDirectory(\"x\").Snapshot(\"old\").ToTask()"); + + var status = TryApply(source, 5, InlinePatchMode.Set, null, "a\nb", out var newSource, out _, originalValue: "old"); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Test( + " let result = VerifyXunit.Verifier.Verify(person).UseDirectory(\"x\").Snapshot(\n" + + " \"\"\"\n" + + " a\n" + + " b\n" + + " \"\"\").ToTask()")); + } + + /// + /// A closing paren on a line of its own, where a formatter puts it: at the column the call + /// starts at. Lining the appended call up with the line the chain ended on was right for a + /// chain and put this one on the offside line, in a call that does start its line. + /// + [Test] + public async Task AppendUnderAClosingParenClearsTheExpression() + { + var source = Test( + """ + Verifier.Verify( + value + ).ToTask() + """); + + var status = TryApply(source, 5, InlinePatchMode.Append, null, "new", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Test( + """ + Verifier.Verify( + value + ) + .Snapshot("new").ToTask() + """)); + } + + // A chain already across lines is somewhere the compiler accepted, so the call joins it + [Test] + public async Task AppendAfterDoBangLinesUpWithAnExistingChain() + { + var source = Test( + """ + task { + do! Verifier.Verify(15) + .UseMethodName("customName") + .ToTask() + } + """); + + var status = TryApply(source, 6, InlinePatchMode.Append, null, "new", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Test( + """ + task { + do! Verifier.Verify(15) + .UseMethodName("customName") + .Snapshot("new") + .ToTask() + } + """)); + } + + // Where the Snapshot call is on a line of the chain's own, that line is what the literal is + // one level in from, as it always was + [Test] + public async Task SetOnAChainedLineIsMeasuredFromThatLine() + { + var source = Test( + """ + task { + do! Verifier.Verify(15) + .Snapshot("old") + .ToTask() + } + """); + + var status = TryApply(source, 7, InlinePatchMode.Set, null, "a\nb", out var newSource, out _, originalValue: "old"); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Test( + " task {\n" + + " do! Verifier.Verify(15)\n" + + " .Snapshot(\n" + + " \"\"\"\n" + + " a\n" + + " b\n" + + " \"\"\")\n" + + " .ToTask()\n" + + " }")); + } + [Test] public async Task AppendMultiLineContent() { diff --git a/src/DiffEngine/Inline/FsLanguage.cs b/src/DiffEngine/Inline/FsLanguage.cs index ecd00e95c..c2de1bbb4 100644 --- a/src/DiffEngine/Inline/FsLanguage.cs +++ b/src/DiffEngine/Inline/FsLanguage.cs @@ -23,6 +23,15 @@ public override bool TryParse(string expression, [NotNullWhen(true)] out string? internal override char NameSeparator => '='; + /// + /// The offside rule. A token that starts a line carries on the expression above it only when + /// it sits right of the column that expression started at; at that column it is read as the + /// next statement, and left of it as the end of the block. And that column is where the + /// expression's first token is, which is not the line's own indentation once something comes + /// before it: do!, let! x =, let x =, or a binding written on one line. + /// + internal override bool IndentationIsSyntax => true; + /// /// The F# compiler does not implement - it /// warns FS0202 and leaves the parameter at its default - so an F# patch never carries the diff --git a/src/DiffEngine/Inline/InlinePatcher.cs b/src/DiffEngine/Inline/InlinePatcher.cs index 3e1450e28..d92f28e3f 100644 --- a/src/DiffEngine/Inline/InlinePatcher.cs +++ b/src/DiffEngine/Inline/InlinePatcher.cs @@ -174,7 +174,7 @@ public static PatchStatus TryApply( return PatchStatus.AlreadyApplied; } - var rendered = RenderArgument(language, source, lineStarts, expected.Start, newContent, eol, fileUnit); + var rendered = RenderArgument(source, scan, lineStarts, nameStart, expected.Start, newContent, eol, fileUnit); newSource = Splice(source, expected.Start, expected.End, rendered); return PatchStatus.Applied; } @@ -220,7 +220,7 @@ public static PatchStatus TryApply( return PatchStatus.AlreadyApplied; } - var rendered = RenderArgument(language, source, lineStarts, expected.Start, newContent, eol, fileUnit); + var rendered = RenderArgument(source, scan, lineStarts, nameStart, expected.Start, newContent, eol, fileUnit); newSource = Splice(source, expected.Start, expected.End, rendered); return PatchStatus.Applied; } @@ -261,7 +261,7 @@ static PatchStatus InsertOrCheck( ref string newSource, ref string failReason) { - if (!TryFindCall(source, scan, lineStarts, lineHint, memberLine, out var openParen)) + if (!TryFindCall(source, scan, lineStarts, lineHint, memberLine, snapshotName, false, out var nameStart, out var openParen)) { failReason = $"Could not find a {methodName} call near line {lineHint}. The source may have changed since the test run. Re-run the test."; return PatchStatus.NotFound; @@ -282,7 +282,7 @@ static PatchStatus InsertOrCheck( return PatchStatus.NotFound; } - var emptyRendered = RenderArgument(scan.Language, source, lineStarts, expected.Start, newContent, eol, fileUnit); + var emptyRendered = RenderArgument(source, scan, lineStarts, nameStart, expected.Start, newContent, eol, fileUnit); newSource = Splice(source, expected.Start, expected.Start, emptyRendered); return PatchStatus.Applied; } @@ -297,7 +297,7 @@ static PatchStatus InsertOrCheck( return PatchStatus.NotFound; } - var namedIndent = IndentForSpan(source, lineStarts, expected.ListStart, fileUnit); + var namedIndent = IndentForSpan(source, scan, lineStarts, nameStart, expected.ListStart, fileUnit); var namedRendered = scan.Language.Render(newContent, namedIndent, eol); newSource = Splice(source, expected.ListStart, expected.ListStart, $"{scan.Language.NamePrefix(parameterName)}{namedRendered}, "); return PatchStatus.Applied; @@ -315,7 +315,7 @@ static PatchStatus InsertOrCheck( return PatchStatus.NotFound; } - var rendered = RenderArgument(scan.Language, source, lineStarts, expected.Start, newContent, eol, fileUnit); + var rendered = RenderArgument(source, scan, lineStarts, nameStart, expected.Start, newContent, eol, fileUnit); newSource = Splice(source, expected.Start, expected.End, rendered); return PatchStatus.Applied; } @@ -333,7 +333,7 @@ static PatchStatus InsertOrCheck( // A differing literal is a snapshot that changed, and this is the only shape a // changed one arrives in from a language with no expression to anchor on. Refusing // it there would mean an inline snapshot could be accepted once and never updated - var rendered = RenderArgument(scan.Language, source, lineStarts, expected.Start, newContent, eol, fileUnit); + var rendered = RenderArgument(source, scan, lineStarts, nameStart, expected.Start, newContent, eol, fileUnit); newSource = Splice(source, expected.Start, expected.End, rendered); return PatchStatus.Applied; } @@ -548,12 +548,25 @@ static PatchStatus TryAppend( /// static string AppendCall(string source, SourceScan scan, List lineStarts, int nameStart, int insertAt, string newContent, string eol, string fileUnit) { - var statementIndent = LeadingWhitespace(source, lineStarts, nameStart); + var statementIndent = StatementIndent(source, scan, lineStarts, nameStart); var unit = UnitFor(fileUnit, statementIndent); // Line up with the existing chain when there is one, otherwise start it one level in var callIndent = LineOf(lineStarts, insertAt - 1) == LineOf(lineStarts, nameStart) ? statementIndent + unit : LeadingWhitespace(source, lineStarts, insertAt - 1); + if (scan.Language.IndentationIsSyntax) + { + // The line a chain ends on is not always one of its calls. A closing paren on a line + // of its own sits at the column the expression started at, which is where a formatter + // puts it, and an argument's last line may too. Lined up with either, the call is + // read as the start of the next statement rather than as more of this one + var expressionIndent = IndentTo(source, lineStarts, ExpressionStart(source, scan, nameStart)); + if (IndentWidth(callIndent) <= IndentWidth(expressionIndent)) + { + callIndent = expressionIndent + unit; + } + } + var contentIndent = callIndent + unit; var rendered = scan.Language.Render(newContent, contentIndent, eol); var argument = OnOwnLine(rendered, contentIndent, eol); @@ -835,6 +848,228 @@ static string LeadingWhitespace(string source, List lineStarts, int offset) return source.Substring(lineStart, index - lineStart); } + /// + /// The indentation a splice at a call measures one level in from: the leading whitespace of + /// the line the call's name is on, unless the language reads indentation as syntax and the + /// call's expression starts further along that line. + /// + /// One level in from the line is right for C#, where it is only a convention. In F# a new + /// line has to clear the column the expression starts at + /// (): a chained call right of it, and a + /// literal no further left than it. After do! that column is already a level past the + /// line's indentation, and after let! x = it is further. So an appended call landed on + /// the column or left of it, and after anything longer than do! a literal given a line + /// of its own did too: FS0010 either way, in source that compiled until it was accepted into. + /// + /// + /// A call whose expression starts its line, or started on a line above, is measured from the + /// line as before. The line it is on was already somewhere the compiler accepts, and one level + /// further in than that is too. + /// + /// + static string StatementIndent(string source, SourceScan scan, List lineStarts, int nameStart) + { + if (scan.Language.IndentationIsSyntax) + { + var start = ExpressionStart(source, scan, nameStart); + if (LineOf(lineStarts, start) == LineOf(lineStarts, nameStart)) + { + return IndentTo(source, lineStarts, start); + } + } + + return LeadingWhitespace(source, lineStarts, nameStart); + } + + /// + /// Whitespace as wide as the column is at: its line's own + /// indentation, then spaces for whatever stands between that and the offset. The same string + /// as the line's indentation for the first thing on a line. + /// + static string IndentTo(string source, List lineStarts, int offset) + { + var lead = LeadingWhitespace(source, lineStarts, offset); + var lineStart = lineStarts[LineOf(lineStarts, offset) - 1]; + return lead + new string(' ', offset - lineStart - lead.Length); + } + + /// + /// Where the expression a call belongs to starts: back from the call's name over everything it + /// is reached through, one receiver at a time. For the Snapshot call in + /// Verifier.Verify(value).UseDirectory("x").Snapshot() that is Verifier. + /// + /// Whatever cannot be read as a name or a call ends the walk where it has got to, which is + /// right of where the expression really starts. The answer is used as a column to stay clear + /// of, so one too far right costs an indent deeper than it had to be, where one too far left + /// would cost source that does not compile. + /// + /// + static int ExpressionStart(string source, SourceScan scan, int nameStart) + { + var start = nameStart; + while (true) + { + var dot = PreviousToken(source, scan, start); + if (dot < 0 || + source[dot] != '.') + { + return start; + } + + var end = PreviousToken(source, scan, dot); + // A literal is a receiver too, and not one this reads + if (end < 0 || + !scan.IsCode(end)) + { + return start; + } + + if (source[end] == ')') + { + if (!TryFindOpenParen(source, scan, end, out var openParen)) + { + return start; + } + + // The name an argument list belongs to sits against it. With anything between + // them the parens are an expression of their own, and that is where this starts + end = openParen - 1; + if (end >= 0 && + source[end] == '>' && + !TrySkipTypeArgumentsBack(source, scan, ref end)) + { + return start; + } + + if (end < 0 || + !scan.IsIdentifierChar(source[end])) + { + return openParen; + } + } + else if (!scan.IsIdentifierChar(source[end])) + { + return start; + } + + start = scan.WordStart(end); + } + } + + /// + /// The offset of the last character before that is not whitespace and + /// not in a comment, or -1 when there is none. + /// + /// A literal counts, where steps over one. That + /// suits a caller asking what kind of thing precedes a name, and not one asking what a call + /// hangs off: looking past "text" in "text".Verify(value) finds whatever came + /// before the literal and takes it for the receiver. + /// + /// + static int PreviousToken(string source, SourceScan scan, int index) + { + while (index > 0) + { + if (scan.TryGetCommentEndingAt(index, out var commentStart)) + { + index = commentStart; + continue; + } + + if (!char.IsWhiteSpace(source[index - 1])) + { + return index - 1; + } + + index--; + } + + return -1; + } + + /// + /// The open paren that the close paren at closes: the scan + /// does, run backwards, with comments and literals stepped over + /// whole in the same way. + /// + static bool TryFindOpenParen(string source, SourceScan scan, int closeParen, out int openParen) + { + openParen = -1; + var depth = 1; + // Just past what is still to be read, so the character at closeParen itself is not + var index = closeParen; + while (index > 0) + { + if (scan.TryGetSkipEndingAt(index, out var skipStart)) + { + index = skipStart; + continue; + } + + index--; + switch (source[index]) + { + case ')': + case ']': + case '}': + depth++; + continue; + case '(': + case '[': + case '{': + depth--; + if (depth == 0) + { + openParen = index; + return source[index] == '('; + } + + continue; + } + } + + return false; + } + + /// + /// Steps back over the type argument list that ends at , leaving it on + /// the character in front of the list: run + /// backwards, accepting only what a type argument list can hold for the same reason. + /// + static bool TrySkipTypeArgumentsBack(string source, SourceScan scan, ref int end) + { + var depth = 0; + for (var index = end; index >= 0; index--) + { + var ch = source[index]; + if (ch == '>') + { + depth++; + continue; + } + + if (ch == '<') + { + depth--; + if (depth == 0) + { + end = index - 1; + return true; + } + + continue; + } + + if (!scan.IsIdentifierChar(ch) && + !scan.Language.IsTypeArgumentChar(ch)) + { + return false; + } + } + + return false; + } + /// /// The column indentation reaches, with a tab advancing to the next multiple of four. Four /// rather than eight because that is what the tab indented C# this has to measure is written @@ -937,9 +1172,6 @@ static bool TryFindAnchoredCall( return false; } - static bool TryFindCall(string source, SourceScan scan, List lineStarts, int lineHint, int? memberLine, out int openParen) => - TryFindCall(source, scan, lineStarts, lineHint, memberLine, snapshotName, false, out _, out openParen); - static bool TryFindCall( string source, SourceScan scan, @@ -1455,13 +1687,13 @@ static void TrimSpan(string source, SourceScan scan, ref int start, ref int end) } /// - /// Renders the literal for a splice at , indented to suit where it - /// lands. + /// Renders the literal for a splice at , in the argument list of + /// the call at , indented to suit where it lands. /// - static string RenderArgument(SourceLanguage language, string source, List lineStarts, int spanStart, string newContent, string eol, string fileUnit) + static string RenderArgument(string source, SourceScan scan, List lineStarts, int nameStart, int spanStart, string newContent, string eol, string fileUnit) { - var indent = IndentForSpan(source, lineStarts, spanStart, fileUnit); - var rendered = language.Render(newContent, indent, eol); + var indent = IndentForSpan(source, scan, lineStarts, nameStart, spanStart, fileUnit); + var rendered = scan.Language.Render(newContent, indent, eol); if (StartsLine(source, lineStarts, spanStart)) { return rendered; @@ -1692,8 +1924,13 @@ static int LineOf(List lineStarts, int offset) /// /// The indentation a literal taking a line of its own would sit at: one level in from the /// span's line, or the span's own column when it already starts a line. + /// + /// is the call the span is an argument of. Where the span is on + /// that call's own line, the level is counted from what says the + /// call is measured from rather than from the line. + /// /// - static string IndentForSpan(string source, List lineStarts, int spanStart, string fileUnit) + static string IndentForSpan(string source, SourceScan scan, List lineStarts, int nameStart, int spanStart, string fileUnit) { var line = LineOf(lineStarts, spanStart); var lineStart = lineStarts[line - 1]; @@ -1712,7 +1949,9 @@ static string IndentForSpan(string source, List lineStarts, int spanStart, return source.Substring(lineStart, spanStart - lineStart); } - var leadText = lead.ToString(); + var leadText = LineOf(lineStarts, nameStart) == line + ? StatementIndent(source, scan, lineStarts, nameStart) + : lead.ToString(); return leadText + UnitFor(fileUnit, leadText); } } diff --git a/src/DiffEngine/Inline/SourceLanguage.cs b/src/DiffEngine/Inline/SourceLanguage.cs index 9ad5b4369..1ea83a0e2 100644 --- a/src/DiffEngine/Inline/SourceLanguage.cs +++ b/src/DiffEngine/Inline/SourceLanguage.cs @@ -85,6 +85,12 @@ public static SourceLanguage ForFile(string path) /// internal abstract char NameSeparator { get; } + /// + /// Whether the column a line starts at is part of the syntax, so that a splice which starts a + /// new line has to choose its indentation for the compiler as well as for the reader. + /// + internal virtual bool IndentationIsSyntax => false; + /// /// Whether a patch from this language carries the source text of the expected argument, which /// is to say whether the compiler honours . diff --git a/src/DiffEngine/Inline/SourceScan.cs b/src/DiffEngine/Inline/SourceScan.cs index b1b15050e..19814ad1c 100644 --- a/src/DiffEngine/Inline/SourceScan.cs +++ b/src/DiffEngine/Inline/SourceScan.cs @@ -71,6 +71,13 @@ public bool IsCode(int index) => public bool TryGetSkip(int index, out int end) => skips.TryGetValue(index, out end); + /// + /// for a scan working backwards: when a comment or literal ends at + /// , is where it began. + /// + public bool TryGetSkipEndingAt(int end, out int start) => + skipEnds.TryGetValue(end, out start); + /// /// As , but only for comments. /// From 43fa8828d823def63f2d79e76c21b71458b94b34 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:00:10 +1000 Subject: [PATCH 18/73] Remove the statement when a Snapshot call is all that is called on a variable A Remove took the call off the end of whatever it hung off and kept the receiver. That is right for a verify call and wrong for a variable: settings.Snapshot("old"); became settings; (CS0201), and VerifySettings.Snapshot is public API that Verify sends a Remove for under NotInline. Where the call hangs off a name and nothing is chained after it, the statement's lines go instead, but only where that cannot change what is around them: alone on its lines, in a block and ending in its own semicolon in C#, and followed by another statement of the same block in F#. Anything else is reported rather than left as a bare receiver. --- src/DiffEngine.Tests/InlinePatcherFsTests.cs | 46 +++++++ src/DiffEngine.Tests/InlinePatcherTests.cs | 124 ++++++++++++++++++ src/DiffEngine/Inline/InlinePatcher.cs | 130 +++++++++++++++++++ 3 files changed, 300 insertions(+) diff --git a/src/DiffEngine.Tests/InlinePatcherFsTests.cs b/src/DiffEngine.Tests/InlinePatcherFsTests.cs index 4a89bdf51..cd3ef6d1e 100644 --- a/src/DiffEngine.Tests/InlinePatcherFsTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherFsTests.cs @@ -814,6 +814,52 @@ public async Task RemoveFromASingleLineChain() await Assert.That(newSource).IsEqualTo(Test(" Verifier.Verify(15).ToTask()")); } + /// + /// The call on a VerifySettings rather than on a verify call. Taken off the end it left the + /// variable standing as an expression of its own, which F# warns about (FS0020) and a project + /// that treats warnings as errors refuses. There is no semicolon to say where the statement + /// ends, so it is the line, and the statement under it is what says the block still has one. + /// + [Test] + public async Task RemoveOfACallOnAVariableTakesItsLine() + { + var source = Test( + """ + let settings = VerifySettings() + settings.Snapshot("old") + Verifier.Verify(15, settings).ToTask() + """); + + var status = TryApply(source, 6, InlinePatchMode.Remove, null, "", out var newSource, out var reason, originalValue: "old"); + + await Assert.That((status, reason)).IsEqualTo((PatchStatus.Applied, "")); + await Assert.That(newSource).IsEqualTo( + Test( + """ + let settings = VerifySettings() + Verifier.Verify(15, settings).ToTask() + """)); + } + + /// + /// The last line of its block is the block's value, and taking it away leaves a binding with + /// nothing under it. So is a line the next one carries on, or one something else shares. + /// + [Test] + [Arguments(" let settings = VerifySettings()\n settings.Snapshot(\"old\")")] + [Arguments(" task.Snapshot(\"old\")\n |> ignore")] + [Arguments(" if flag then\n settings.Snapshot(\"old\")\n Verifier.Verify(15, settings).ToTask()")] + [Arguments(" settings.Snapshot(\"old\"); Verifier.Verify(15, settings).ToTask()")] + public async Task RemoveReportsACallItCannotTakeWithItsLine(string body) + { + var source = Test(body); + + var status = TryApply(source, 5, InlinePatchMode.Remove, null, "", out _, out var reason, originalValue: "old"); + + await Assert.That(status).IsEqualTo(PatchStatus.NotFound); + await Assert.That(reason).Contains("Remove the statement by hand"); + } + [Test] public async Task LineCommentedOutCallIsSkipped() { diff --git a/src/DiffEngine.Tests/InlinePatcherTests.cs b/src/DiffEngine.Tests/InlinePatcherTests.cs index 13e2b5ed3..793e22a97 100644 --- a/src/DiffEngine.Tests/InlinePatcherTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherTests.cs @@ -1393,6 +1393,130 @@ public async Task RemoveWhenTheCallIsNotChained() await Assert.That(reason).Contains("not a chained call"); } + /// + /// Snapshot is public on VerifySettings, so the call can hang off a variable rather than off a + /// verify call. Taking it off the end left settings;, which is no statement at all + /// (CS0201). The whole statement is what has stopped being wanted, so its line goes. + /// + [Test] + public async Task RemoveOfACallOnAVariableTakesItsStatement() + { + var source = Method( + """ + var settings = new VerifySettings(); + settings.Snapshot("old"); + await Verify(value, settings); + """); + + var status = TryApply(source, 6, InlinePatchMode.Remove, "\"old\"", "", out var newSource, out var reason, memberName: "Test"); + + await Assert.That((status, reason)).IsEqualTo((PatchStatus.Applied, "")); + await Assert.That(newSource).IsEqualTo( + Method( + """ + var settings = new VerifySettings(); + await Verify(value, settings); + """)); + } + + // Every line of it, and the comment that trailed it + [Test] + public async Task RemoveOfAStatementTakesAllOfItsLines() + { + var source = Method( + " var settings = new VerifySettings();\n" + + " fixture.Settings\n" + + " .Snapshot(\n" + + " \"\"\"\n" + + " old\n" + + " \"\"\"); // inline for now\n" + + " await Verify(value, settings);"); + + var status = TryApply(source, 7, InlinePatchMode.Remove, null, "", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo( + Method( + """ + var settings = new VerifySettings(); + await Verify(value, settings); + """)); + } + + [Test] + public async Task RemoveOfAStatementWithCrlf() + { + var source = Method( + """ + var settings = new VerifySettings(); + settings.Snapshot("old"); + await Verify(value, settings); + """); + var expected = Method( + """ + var settings = new VerifySettings(); + await Verify(value, settings); + """); + + var status = TryApply(source.Replace("\n", "\r\n"), 6, InlinePatchMode.Remove, null, "", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo(expected.Replace("\n", "\r\n")); + } + + /// + /// The second framework's Remove, which finds the line it named holding the verify call that + /// used to follow the statement, with nothing chained onto it. + /// + [Test] + public async Task ReapplyingARemoveOfAStatementIsAlreadyApplied() + { + var source = Method( + """ + var settings = new VerifySettings(); + settings.Snapshot("old"); + await Verify(value, settings); + """); + + TryApply(source, 6, InlinePatchMode.Remove, "\"old\"", "", out var removed, out _, memberName: "Test"); + var status = TryApply(removed, 6, InlinePatchMode.Remove, "\"old\"", "", out _, out _, memberName: "Test"); + + await Assert.That(status).IsEqualTo(PatchStatus.AlreadyApplied); + } + + /// + /// Shapes where the call is all its statement does and the statement cannot simply be lifted + /// out: an if with no braces would take the next statement for its body, a line shared + /// with another statement is not the call's to remove, and a lambda or an awaited variable is + /// not a statement of its own at all. Reported, where it used to leave the receiver behind. + /// + [Test] + [Arguments(" if (flag)\n settings.Snapshot(\"old\");")] + [Arguments(" var settings = new VerifySettings(); settings.Snapshot(\"old\");")] + [Arguments(" Configure(_ => _.Snapshot(\"old\"));")] + [Arguments(" await task.Snapshot(\"old\");")] + public async Task RemoveReportsACallItCannotTakeWithItsStatement(string body) + { + var source = Method(body); + + var status = TryApply(source, 5, InlinePatchMode.Remove, "\"old\"", "", out _, out var reason); + + await Assert.That(status).IsEqualTo(PatchStatus.NotFound); + await Assert.That(reason).Contains("Remove the statement by hand"); + } + + // With more of the chain to come, the rest hangs off the variable as it hung off the call + [Test] + public async Task RemoveFromTheMiddleOfAChainOnAVariable() + { + var source = Method(" await task.Snapshot(\"old\").UseDirectory(\"snapshots\");"); + + var status = TryApply(source, 5, InlinePatchMode.Remove, "\"old\"", "", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo(Method(" await task.UseDirectory(\"snapshots\");")); + } + /// /// A verify call with no Snapshot left is what a Remove leaves behind, and what the same /// Remove finds when a second framework's test process applies it. It is done, and saying so diff --git a/src/DiffEngine/Inline/InlinePatcher.cs b/src/DiffEngine/Inline/InlinePatcher.cs index d92f28e3f..927cce829 100644 --- a/src/DiffEngine/Inline/InlinePatcher.cs +++ b/src/DiffEngine/Inline/InlinePatcher.cs @@ -601,6 +601,14 @@ static bool HoldsContent(string source, SourceScan scan, int openParen, string c /// /// Removes the Snapshot call, along with the whitespace and line break that preceded it so no /// blank line is left behind. + /// + /// What it was called on stays, and that has to still be something once the call has gone. A + /// verify call is. A variable is not: settings.Snapshot("old"); became + /// settings;, which is no statement (CS0201), and Snapshot is as public on a + /// VerifySettings as on what a verify call returns. So there it is the statement that goes, + /// where it can be taken whole (), and the call is reported + /// where it cannot. + /// /// static PatchStatus TryRemove( SourceLanguage language, @@ -653,6 +661,18 @@ static PatchStatus TryRemove( start--; var dotStart = start; + if (LeavesOnlyItsReceiver(source, scan, dotStart, closeParen)) + { + if (!TryStatementLines(source, scan, lineStarts, nameStart, closeParen, out var from, out var to)) + { + failReason = $"Removing the {methodName} call near line {lineHint} would leave what it is called on as a statement by itself. Remove the statement by hand."; + return PatchStatus.NotFound; + } + + newSource = Splice(source, from, to, ""); + return PatchStatus.Applied; + } + // Then back over the indentation and line break it sat on while (start > 0 && (source[start - 1] == ' ' || source[start - 1] == '\t')) @@ -679,6 +699,116 @@ static PatchStatus TryRemove( return PatchStatus.Applied; } + /// + /// Whether taking a call out would leave nothing of its expression but what it was called on: + /// the call hangs off a name rather than off another call, and nothing is chained on after it. + /// + /// Either of those is enough for what is left to read as it did. A call result is a statement + /// with one call fewer on the end of it, and with more of the chain to follow, the rest hangs + /// off the receiver exactly as it hung off this. + /// + /// + static bool LeavesOnlyItsReceiver(string source, SourceScan scan, int dot, int closeParen) + { + var receiverEnd = PreviousToken(source, scan, dot); + if (receiverEnd >= 0 && + source[receiverEnd] == ')' && + scan.IsCode(receiverEnd)) + { + return false; + } + + var after = closeParen + 1; + scan.SkipTrivia(ref after); + return after >= source.Length || + source[after] != '.'; + } + + /// + /// The lines of a statement that is one call and nothing else, from the start of its first + /// line to the start of the line after its last, for taking out whole. + /// + /// Only where taking them out cannot change what is around them, which is a narrower thing + /// than being a statement. It has to have its lines to itself, since a line is what goes. In + /// C# it has to sit in a block and end in its own semicolon: the body of an if with no + /// braces is a statement too, and removing that hands the if whatever came next. F# + /// has no semicolon to look for, so the call has to end its line, and something has to follow + /// at the same indentation: the last line of a block is the block's value, and a binding left + /// with nothing under it does not compile. + /// + /// + static bool TryStatementLines(string source, SourceScan scan, List lineStarts, int nameStart, int closeParen, out int start, out int end) + { + start = -1; + end = -1; + var expressionStart = ExpressionStart(source, scan, nameStart); + if (!StartsLine(source, lineStarts, expressionStart)) + { + return false; + } + + var cursor = closeParen + 1; + var byLayout = scan.Language.IndentationIsSyntax; + if (!byLayout) + { + var before = PreviousToken(source, scan, expressionStart); + if (before >= 0 && + !(scan.IsCode(before) && source[before] is ';' or '{' or '}')) + { + return false; + } + + scan.SkipTrivia(ref cursor); + if (cursor >= source.Length || + source[cursor] != ';') + { + return false; + } + + cursor++; + } + + var lastLine = LineOf(lineStarts, cursor - 1); + var lineEnd = lastLine < lineStarts.Count ? lineStarts[lastLine] : source.Length; + while (cursor < lineEnd) + { + if (char.IsWhiteSpace(source[cursor])) + { + cursor++; + continue; + } + + // A comment that runs past the end of the line would be cut in two + if (scan.TryGetCommentSkip(cursor, out var afterComment) && + afterComment <= lineEnd) + { + cursor = afterComment; + continue; + } + + return false; + } + + if (byLayout) + { + // A name at the same indentation is the next statement of the same block. An + // operator there carries this one on, and anything further left ends the block + var next = lineEnd; + scan.SkipTrivia(ref next); + if (next >= source.Length || + !scan.IsIdentifierChar(source[next]) || + !StartsLine(source, lineStarts, next) || + LeadingWhitespace(source, lineStarts, next) != LeadingWhitespace(source, lineStarts, expressionStart)) + { + return false; + } + } + + start = lineStarts[LineOf(lineStarts, expressionStart) - 1]; + end = lineEnd; + return true; + } + /// /// Whether the Snapshot call the recorded line names has already been removed: the line holds /// no Snapshot call, and the verify statement it belongs to has none chained onto it. From fff265ae1312ff3813c5ffb09ff02473ee826fba Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:11:47 +1000 Subject: [PATCH 19/73] Recognise a queued call site that has moved, and ask whose entry a line names A queue entry is keyed by its line, and accepting a snapshot moves every later call site in the file. The re-run's patches then matched no key and were queued beside the entries they should have updated, so a bulk accept applied the stale content and refused the fresh, and a passing call that had moved onto a later test's old line settled that test's entry by key. An enqueue whose key names nothing now folds into the one entry for the same member, test, mode and anchor that its framework already has content in, and takes it to the new line. A key that names another member's entry is no longer believed: a settle leaves it unless the value settles it, staged trios are cleared by the same rule, and an enqueue updates its own entry instead. The viewer keeps the reader on an entry that moved. Two existing tests gave both call sites of one member the same literal, which now reads as one call site, so they have a literal each. --- src/DiffEngine.Tests/InlineQueueTests.cs | 237 ++++++++++++++++++- src/DiffEngine.Tests/InlineStagingTests.cs | 32 +++ src/DiffEngine/Inline/InlinePatch.cs | 52 ++++ src/DiffEngine/Inline/InlineQueue.cs | 129 +++++++++- src/DiffEngine/Inline/InlineStaging.cs | 8 +- src/DiffEngineViewer.Tests/ReEnqueueTests.cs | 71 ++++++ src/DiffEngineViewer/ViewerSession.cs | 49 +++- 7 files changed, 562 insertions(+), 16 deletions(-) diff --git a/src/DiffEngine.Tests/InlineQueueTests.cs b/src/DiffEngine.Tests/InlineQueueTests.cs index 3b2e0b60c..2cf35b4d5 100644 --- a/src/DiffEngine.Tests/InlineQueueTests.cs +++ b/src/DiffEngine.Tests/InlineQueueTests.cs @@ -11,8 +11,9 @@ static InlinePatch Patch( string content = "new", string? framework = null, string? testName = null, - string? member = null) => - new(source, line, "\"old\"", content) + string? member = null, + string expression = "\"old\"") => + new(source, line, expression, content) { Framework = framework, TestName = testName, @@ -76,6 +77,183 @@ public async Task EnqueueKeepsPathCaseApartWhereTheFilesDo() await Assert.That(queue.Count).IsEqualTo(2); } + /// + /// Three tests in one file with a snapshot pending each. Accepting the first writes its + /// literal into the source, and the re-run reports the other two from five lines further down. + /// Their keys name nothing by then, so each was queued a second time beside the entry it + /// should have updated: four entries for two snapshots, the stale one of each first in line + /// for a bulk accept. + /// + [Test] + public async Task ARerunFromWhereItsCallSiteMovedToUpdatesItsEntry() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 10, content: "a", member: "TestA")) + .Enqueue(Patch(line: 20, content: "b", member: "TestB")) + .Enqueue(Patch(line: 30, content: "c", member: "TestC")) + .Accept(InlineKey.For("Sample.cs", 10), _ => InlineApplyResult.Applied, out _) + .Enqueue(Patch(line: 25, content: "b, as it is now", member: "TestB")) + .Enqueue(Patch(line: 35, content: "c", member: "TestC")); + + await Assert.That(queue.Items.Select(_ => $"{_.Name} {_.Patch.NewContent}")).IsEquivalentTo( + [ + "Sample.cs:25 b, as it is now", + "Sample.cs:35 c" + ]); + } + + /// + /// Every variant goes to the new line, not only the one the re-run came from. Left where they + /// were, the same content from two frameworks no longer matched - a patch is compared line and + /// all - and an entry that had agreed with itself turned into a conflict. + /// + [Test] + public async Task AMovedEntryTakesEveryFrameworksVariantWithIt() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 20, content: "eight", framework: "net8.0", member: "TestB")) + .Enqueue(Patch(line: 20, content: "nine", framework: "net9.0", member: "TestB")) + .Enqueue(Patch(line: 25, content: "nine", framework: "net8.0", member: "TestB")); + + var entry = queue.Items.Single(); + await Assert.That(entry.Key).IsEqualTo(InlineKey.For("Sample.cs", 25)); + await Assert.That(entry.Conflicted).IsFalse(); + await Assert.That(entry.Variants[0].Origins).IsEquivalentTo(["net9.0", "net8.0"]); + await Assert.That(entry.Variants[0].Patch.LineHint).IsEqualTo(25); + } + + /// + /// The patches a queue holds are shared with whatever is displaying them, so an entry that + /// moves is given copies and the ones it held are left saying what they said. + /// + [Test] + public async Task AMovedEntryLeavesThePatchItHeldAlone() + { + var first = Patch(line: 20, content: "b", member: "TestB"); + + var queue = InlineQueue.Empty + .Enqueue(first) + .Enqueue(Patch(line: 25, content: "b", member: "TestB")); + + await Assert.That(queue.Items.Single().Patch.LineHint).IsEqualTo(25); + await Assert.That(first.LineHint).IsEqualTo(20); + } + + /// + /// Two entries that read alike from here: one member, the same literal in the source at both. + /// Nothing says which of them a patch from a third line is, and folding into the wrong one + /// replaces a snapshot that is still pending, so it is queued beside them, as it always was. + /// + [Test] + public async Task ARerunFromAnotherLineIsQueuedBesideEntriesItCannotTellApart() + { + var queue = InlineQueue + .From( + [ + new(Patch(line: 20, content: "first", member: "MyTest")), + new(Patch(line: 30, content: "second", member: "MyTest")) + ]) + .Enqueue(Patch(line: 25, content: "first", member: "MyTest")); + + await Assert.That(queue.Count).IsEqualTo(3); + } + + /// + /// One framework stopped at the first call of a test, and another passed that one and stopped + /// at the second, which holds the same literal. Two call sites, and from here they differ only + /// by line and by who reported them: taking the second for the first one moved would put the + /// first framework's snapshot on the second call. + /// + [Test] + public async Task ARerunDoesNotMoveAnEntryAnotherFrameworkQueued() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 20, content: "eight", framework: "net8.0", member: "MyTest")) + .Enqueue(Patch(line: 25, content: "nine", framework: "net9.0", member: "MyTest")); + + await Assert.That(queue.Items.Select(_ => $"{_.Name} {_.OriginsLabel}")).IsEquivalentTo( + [ + "Sample.cs:20 net8.0", + "Sample.cs:25 net9.0" + ]); + } + + /// + /// A member is a name, and one file can declare it twice: a class per scenario, each with its + /// own Works. The test name is what says the second patch is not the first one moved. + /// + [Test] + public async Task ARerunDoesNotTakeTheEntryOfTheSameMemberInAnotherClass() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 10, content: "a", testName: "First.Works", member: "Works")) + .Enqueue(Patch(line: 40, content: "b", testName: "Second.Works", member: "Works")); + + await Assert.That(queue.Items.Select(_ => _.Name)).IsEquivalentTo(["Sample.cs:10", "Sample.cs:40"]); + } + + // Nor of the same member in another file, which a base class and its partial make ordinary + [Test] + public async Task ARerunDoesNotTakeTheEntryOfTheSameMemberInAnotherFile() + { + var queue = InlineQueue.Empty + .Enqueue(Patch("A.cs", 10, content: "a", member: "Works")) + .Enqueue(Patch("B.cs", 40, content: "b", member: "Works")); + + await Assert.That(queue.Items.Select(_ => _.Name)).IsEquivalentTo(["A.cs:10", "B.cs:40"]); + } + + /// + /// The move that put one call site on the line another was queued under. Both entries are + /// stale by the same accept, and the first re-run to arrive lands on the other one's key. + /// Folded into it, the other test's snapshot was replaced by this one's, and this one's own + /// entry was left behind stale. It updates its own instead, and keeps the key it had until the + /// other entry has moved off the line. + /// + [Test] + public async Task ARerunOntoALineAnotherMembersEntryIsUnderLeavesThatEntryAlone() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 20, content: "b", member: "TestB")) + .Enqueue(Patch(line: 30, content: "c", member: "TestC")) + .Enqueue(Patch(line: 30, content: "b, as it is now", member: "TestB")); + + await Assert.That(queue.Items.Select(_ => $"{_.Name} {_.Patch.MemberName} {_.Patch.NewContent}")).IsEquivalentTo( + [ + "Sample.cs:20 TestB b, as it is now", + "Sample.cs:30 TestC c" + ]); + + // The other test's re-run moves its entry off the line, and the next run of this one + // finds the line free + queue = queue + .Enqueue(Patch(line: 40, content: "c", member: "TestC")) + .Enqueue(Patch(line: 30, content: "b, as it is now", member: "TestB")); + + await Assert.That(queue.Items.Select(_ => $"{_.Name} {_.Patch.MemberName}")).IsEquivalentTo( + [ + "Sample.cs:30 TestB", + "Sample.cs:40 TestC" + ]); + } + + /// + /// A patch with no entry of its own, arriving at a line another member's entry is under. The + /// two are not one call site, and folding them said they were: a second framework's patch for + /// one test became a conflicting variant of another test's snapshot. + /// + [Test] + public async Task APatchFromAnotherMemberTakesTheLineRatherThanJoiningTheEntry() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 30, content: "c", framework: "net8.0", member: "TestC")) + .Enqueue(Patch(line: 30, content: "x", framework: "net9.0", member: "TestX")); + + var entry = queue.Items.Single(); + await Assert.That(entry.Conflicted).IsFalse(); + await Assert.That(entry.Patch.MemberName).IsEqualTo("TestX"); + } + [Test] public async Task SettleRemoves() { @@ -128,6 +306,51 @@ public async Task SettleFromAPassingSiblingKeepsTheFailingSiblingsEntry() await Assert.That(settled).IsSameReferenceAs(queue); } + /// + /// After an accept higher in the file, a passing call sits on the line a later test's entry + /// was queued under. Its settle names that entry by key and nothing checked whose it was, so a + /// snapshot that was still failing left the queue. + /// + [Test] + public async Task SettleFromAnotherMemberAtAnEntrysLineLeavesTheEntry() + { + var queue = InlineQueue.Empty.Enqueue(Patch(line: 20, framework: "net10.0", member: "TestB")); + + var settled = queue.Settle(InlineKey.For("Sample.cs", 20), "net10.0", "TestA", "what the passing call holds"); + + await Assert.That(settled).IsSameReferenceAs(queue); + } + + /// + /// And the entry the settle was for is still found, by its member, under the line it was + /// queued at before the move. + /// + [Test] + public async Task SettleFromAnotherMemberAtAnEntrysLineStillSettlesItsOwn() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 15, content: "a", member: "TestA", expression: "\"was a\"")) + .Enqueue(Patch(line: 20, content: "b", member: "TestB")); + + var settled = queue.Settle(InlineKey.For("Sample.cs", 20), null, "TestA", "was a"); + + await Assert.That(settled.Items.Single().Patch.MemberName).IsEqualTo("TestB"); + } + + /// + /// A test renamed while its snapshot was pending: the member no longer matches, the line does, + /// and the call passes holding what the entry was waiting to become. + /// + [Test] + public async Task SettleFromARenamedMemberTakesTheEntryItsValueSettles() + { + var queue = InlineQueue.Empty + .Enqueue(Patch(line: 20, content: "new", member: "OldName")) + .Settle(InlineKey.For("Sample.cs", 20), null, "NewName", "new"); + + await Assert.That(queue.Count).IsEqualTo(0); + } + /// /// The moved line again, with the value the settle now carries. Passing with the value it was /// anchored to is the code under test producing that again. @@ -162,9 +385,11 @@ public async Task SettleByMemberTakesAnEntryWaitingForTheValue() [Test] public async Task SettleByMemberWithAValueChoosesAmongSeveral() { + // Two literals, since two calls in one member anchored to the same one are a single call + // site to the queue: see ARerunFromWhereItsCallSiteMovedToUpdatesItsEntry var queue = InlineQueue.Empty - .Enqueue(Patch(line: 42, content: "first", member: "MyTest")) - .Enqueue(Patch(line: 48, content: "second", member: "MyTest")) + .Enqueue(Patch(line: 42, content: "first", member: "MyTest", expression: "\"one\"")) + .Enqueue(Patch(line: 48, content: "second", member: "MyTest", expression: "\"two\"")) .Settle(InlineKey.For("Sample.cs", 807), null, "MyTest", "second"); await Assert.That(queue.Items.Single().Patch.NewContent).IsEqualTo("first"); @@ -190,8 +415,8 @@ public async Task ASettleValueRoundTrips() public async Task SettleLeavesAnAmbiguousMemberAlone() { var queue = InlineQueue.Empty - .Enqueue(Patch(line: 42, member: "MyTest")) - .Enqueue(Patch(line: 48, member: "MyTest")); + .Enqueue(Patch(line: 42, member: "MyTest", expression: "\"one\"")) + .Enqueue(Patch(line: 48, member: "MyTest", expression: "\"two\"")); await Assert.That(queue.Settle(InlineKey.For("Sample.cs", 807), null, "MyTest")) .IsSameReferenceAs(queue); diff --git a/src/DiffEngine.Tests/InlineStagingTests.cs b/src/DiffEngine.Tests/InlineStagingTests.cs index aff0b5e4c..d8538a781 100644 --- a/src/DiffEngine.Tests/InlineStagingTests.cs +++ b/src/DiffEngine.Tests/InlineStagingTests.cs @@ -217,6 +217,38 @@ public async Task ClearFromAPassingSiblingKeepsTheFailingSiblingsStagedTrio() await Assert.That(project.StagedFiles().Count).IsEqualTo(3); } + /// + /// The queue's rule for an entry under the key, on disk. A passing call that an accept above + /// it moved onto a line another test staged at is not that test's call site, and its clear + /// used to take the trio for being at the line. + /// + [Test] + public async Task ClearFromAnotherMemberAtATriosLineLeavesTheTrio() + { + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + InlineStaging.Persist([new(Patch(source, "new", line: 42, member: "TestB"))]); + + var cleared = InlineStaging.Clear(source, 42, "TestA", value: "what the passing call holds"); + + await Assert.That(cleared).IsEqualTo(0); + await Assert.That(project.StagedFiles().Count).IsEqualTo(3); + } + + // A test renamed since it staged: the line still names it, and the value says it settled + [Test] + public async Task ClearFromARenamedMemberTakesTheTrioItsValueSettles() + { + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + InlineStaging.Persist([new(Patch(source, "new", line: 42, member: "OldName"))]); + + var cleared = InlineStaging.Clear(source, 42, "NewName", value: "new"); + + await Assert.That(cleared).IsEqualTo(1); + await Assert.That(project.StagedFiles()).IsEmpty(); + } + [Test] public async Task ClearByMemberTakesACallSiteTheValueSettles() { diff --git a/src/DiffEngine/Inline/InlinePatch.cs b/src/DiffEngine/Inline/InlinePatch.cs index e23b8c551..dadc382b9 100644 --- a/src/DiffEngine/Inline/InlinePatch.cs +++ b/src/DiffEngine/Inline/InlinePatch.cs @@ -112,6 +112,58 @@ OriginalExpression is not null && SourceLanguage.NormalizeNewlines(original) == normalized; } + /// + /// Whether this patch came from a member other than : both are known, + /// and they differ. + /// + /// What a line cannot say for itself. A line names a call site only until something above it + /// in the file changes, and accepting a snapshot is exactly that: every call site below it + /// moves down, and the line an entry was queued under becomes the line of whatever call moved + /// onto it. Whoever finds an entry by its line has this to ask before believing it, since a + /// call cannot be in two members. A patch with no member, or a caller with none, leaves the + /// line as all there is. + /// + /// + internal bool IsAnotherMembers(string? member) => + !string.IsNullOrEmpty(member) && + !string.IsNullOrEmpty(MemberName) && + member != MemberName; + + /// + /// Whether is for the call site this patch is for, going by + /// everything but the line: the same member of the same test in the same file, the same kind + /// of edit, and anchored to the same argument. + /// + /// For recognising a call site that has moved. The anchors are what the source held when each + /// run saw it, so they agree for as long as nothing has been accepted there, whatever the two + /// runs produced. The test name is beside the member because a member is only a name, and one + /// file can declare it in two classes. A patch with no member is never recognised: without + /// one there is nothing to say two call sites with nothing accepted yet are different ones. + /// + /// + internal bool IsSameCallSite(InlinePatch other) => + !string.IsNullOrEmpty(MemberName) && + MemberName == other.MemberName && + TestName == other.TestName && + Mode == other.Mode && + OriginalExpression == other.OriginalExpression && + OriginalValue == other.OriginalValue && + InlineKey.FoldPath(SourceFile) == InlineKey.FoldPath(other.SourceFile); + + /// + /// This patch with another line hint. A copy, because a queued patch is shared with whatever + /// is displaying it and with an accept that may be part way through applying it. + /// + internal InlinePatch At(int line) => + new(SourceFile, line, OriginalExpression, NewContent, Mode) + { + OriginalValue = OriginalValue, + MemberName = MemberName, + EntryPoints = EntryPoints, + TestName = TestName, + Framework = Framework + }; + public InlinePatchMode Mode { get; set; } = mode; /// diff --git a/src/DiffEngine/Inline/InlineQueue.cs b/src/DiffEngine/Inline/InlineQueue.cs index dc477538a..aa24207cb 100644 --- a/src/DiffEngine/Inline/InlineQueue.cs +++ b/src/DiffEngine/Inline/InlineQueue.cs @@ -40,15 +40,48 @@ public static InlineQueue From(IEnumerable items) => /// An unlabeled patch cannot be told apart from a re-run, so it replaces the whole entry, which /// is also the pre-variant behaviour. /// + /// + /// The key is the line, and a line stops naming a call site as soon as an accept above it + /// inserts a literal: the re-run reports every later call site in that file a few lines + /// further down. Folding by key alone queued each of those a second time beside the entry it + /// should have updated, and where the run's content had changed, a bulk accept applied the + /// stale one and then refused the fresh. So a patch whose key names nothing looks for the + /// entry of its own call site () and takes that one with it to the + /// line it is at now, and a patch whose key names another member's entry does not fold into it. + /// /// public InlineQueue Enqueue(InlinePatch patch) { var key = InlineKey.For(patch.SourceFile, patch.LineHint); var items = Items.ToList(); - var existing = items.FindIndex(_ => _.Key == key); - if (existing >= 0) + var atKey = items.FindIndex(_ => _.Key == key); + if (atKey >= 0 && + !items[atKey].Patch.IsAnotherMembers(patch.MemberName)) { - items[existing] = Fold(items[existing], patch); + items[atKey] = Fold(items[atKey], patch); + return new(items); + } + + var moved = FindMoved(items, patch); + if (moved >= 0) + { + // Where the key is free the entry takes it, and is back to being named by the line + // its call site is on. Where another call site's entry is still sitting there, left + // behind by the same move, this one keeps the key it has: a queue holds one entry to a + // key, and both entries are still found by their members, here and when they settle + items[moved] = atKey < 0 + ? Fold(At(items[moved], patch.LineHint), patch) + : Fold(items[moved], patch.At(items[moved].Patch.LineHint)); + return new(items); + } + + if (atKey >= 0) + { + // Another member's entry, under a line that is this patch's now. Folding the two + // presented one call site's snapshot as a variant of another's, or swapped it in under + // the other's name. Its own call site is elsewhere in the file, and the run that finds + // it still failing queues it again from there + items[atKey] = new(patch); } else { @@ -58,6 +91,69 @@ public InlineQueue Enqueue(InlinePatch patch) return new(items); } + /// + /// The entry for the call site a patch came from, where that entry is queued under another + /// line: the call site has moved since. + /// + /// Recognised by what a call site keeps when it moves (), + /// and only in an entry this patch's framework already has content in. A test stops at the + /// first verification that fails, so a framework reporting a call site has nothing else + /// failing in that member: an entry of its own there under another line is this call site + /// before it moved, or an earlier one it has since passed, which is no loss either. Another + /// framework's entry is not held to that. It can have stopped at an earlier call in the same + /// test, one this framework passed, and two calls holding the same literal read alike. + /// + /// + /// And only when exactly one entry answers to it. With more than one, nothing here says which + /// of them moved, and folding into the wrong one replaces a snapshot that is still pending, + /// so the patch is queued beside them, as it always was. + /// + /// + /// What this gives up is a test that carries on past a failed verification and has two call + /// sites nothing but the line tells apart, both new or both holding the same literal: the + /// second is taken for the first one moved, and the queue holds whichever reported last. + /// + /// + static int FindMoved(List items, InlinePatch patch) + { + var found = -1; + for (var index = 0; index < items.Count; index++) + { + var entry = items[index]; + if (!entry.Patch.IsSameCallSite(patch) || + !HasOrigin(entry, patch.Framework)) + { + continue; + } + + if (found >= 0) + { + return -1; + } + + found = index; + } + + return found; + } + + /// + /// Whether an entry already holds content from . An unlabeled entry + /// or an unlabeled arrival counts, on the reasoning gives: neither can be + /// told apart from a re-run. + /// + static bool HasOrigin(PendingInline entry, string? origin) => + origin is null || + entry.Variants.All(_ => _.Origins.Count == 0) || + entry.Variants.Any(_ => _.Origins.Contains(origin)); + + /// + /// An entry at another line. Every variant goes, since they are one call site, and as copies: + /// see . + /// + static PendingInline At(PendingInline entry, int line) => + new(entry.Variants.Select(_ => _ with { Patch = _.Patch.At(line) }).ToList(), entry.Status); + /// /// What a bulk accept reports. Both surfaces say this - the tray out of its own queue, the /// viewer out of its session - and each used to build the sentence itself, so a change to the @@ -231,8 +327,9 @@ public InlineQueue Settle(string key, string? origin, string? member) => /// The entry's key, naming its source file and recorded line. /// The framework moniker of the run that started passing. /// - /// The member the settled call site sits in, used only when matches - /// nothing. See . + /// The member the settled call site sits in. It finds the entry when + /// matches nothing (), and it is what says the entry the key does + /// match belongs to some other call site. /// /// /// What the settling call's expected argument holds, which narrows @@ -242,6 +339,18 @@ public InlineQueue Settle(string key, string? origin, string? member, string? va { var items = Items.ToList(); var index = items.FindIndex(_ => _.Key == key); + // The entry under the key is not always the settling call's. After an accept higher in + // the file a passing call sits on a line a later call site was queued under, and its + // settle took that entry, a snapshot still failing and then pending nowhere. An entry + // from another member is another call site's, unless the value says otherwise: a test + // renamed since it was queued passes with the content its entry was waiting to become + if (index >= 0 && + items[index].Patch.IsAnotherMembers(member) && + !IsSettledBy(items[index], value)) + { + index = -1; + } + if (index < 0) { index = FindByMember(items, key, member, value); @@ -335,7 +444,7 @@ static int FindByMember(List items, string key, string? member, s } if (value is not null && - !entry.Variants.Any(_ => _.Patch.IsSettledBy(value))) + !IsSettledBy(entry, value)) { continue; } @@ -351,6 +460,14 @@ static int FindByMember(List items, string key, string? member, s return found; } + /// + /// Whether a passing call holding settles any of an entry's + /// variants. Never with no value, which is a producer that sends none. + /// + static bool IsSettledBy(PendingInline entry, string? value) => + value is not null && + entry.Variants.Any(_ => _.Patch.IsSettledBy(value)); + /// /// The file half of a key. Taken off the key rather than off the patch, so both sides are /// case folded the way folds them for this platform. diff --git a/src/DiffEngine/Inline/InlineStaging.cs b/src/DiffEngine/Inline/InlineStaging.cs index 94ce78573..97bb0fea4 100644 --- a/src/DiffEngine/Inline/InlineStaging.cs +++ b/src/DiffEngine/Inline/InlineStaging.cs @@ -122,8 +122,14 @@ static int ClearIn(string directory, string sourceFile, int line, string? member return 0; } + // A trio staged at the line is the call site's unless it was staged from another member, + // which is the same test the queue makes of an entry under the key + // (InlineQueue.Settle): the line was that trio's before an accept above it moved this call + // onto it, and the snapshot it holds is still failing var matching = staged - .Where(_ => _.Patch.LineHint == line) + .Where(_ => _.Patch.LineHint == line && + !(_.Patch.IsAnotherMembers(memberName) && + !(value is not null && _.Patch.IsSettledBy(value)))) .ToList(); if (matching.Count == 0 && diff --git a/src/DiffEngineViewer.Tests/ReEnqueueTests.cs b/src/DiffEngineViewer.Tests/ReEnqueueTests.cs index 31b49120d..caa4c24ce 100644 --- a/src/DiffEngineViewer.Tests/ReEnqueueTests.cs +++ b/src/DiffEngineViewer.Tests/ReEnqueueTests.cs @@ -30,6 +30,77 @@ public async Task A_re_send_of_different_content_starts_at_its_first_change() await Assert.That(again.ScrollTop).IsEqualTo(26); } + /// + /// A re-run reporting the entry on screen from another line: an accept higher in the file + /// moved its call site. The queue takes the entry to that line rather than adding a second + /// one, so the key the selection was following has gone, and the entry it was following is + /// under the patch's. The reader stays on it rather than landing on the first in the list. + /// + [Test] + public async Task A_re_run_from_the_line_its_call_site_moved_to_stays_on_screen() + { + var state = Fixtures.Inline(Site(10, "First", "one"), Site(30, "Second", "two")); + state = ViewerSession.Apply(state, CommandKind.NextItem); + await Assert.That(state.Current!.Key).IsEqualTo(InlineKey.For("A.cs", 30)); + + var again = ViewerSession.EnqueueInline(state, Site(36, "Second", "two, as it is now")); + + await Assert.That(again.Queue.Count).IsEqualTo(2); + await Assert.That(again.Current!.Key).IsEqualTo(InlineKey.For("A.cs", 36)); + await Assert.That(again.Current.LeftText).IsEqualTo("two, as it is now"); + } + + /// + /// The same re-run arriving at a line another test's entry is still under. A queue holds one + /// entry to a key, so the entry on screen keeps the key it had and takes the content, and the + /// other test's entry is left as it was. + /// + [Test] + public async Task A_re_run_onto_the_line_of_another_entry_updates_the_one_on_screen() + { + var state = Fixtures.Inline(Site(20, "First", "one"), Site(30, "Second", "two")); + await Assert.That(state.Current!.Key).IsEqualTo(InlineKey.For("A.cs", 20)); + + var again = ViewerSession.EnqueueInline(state, Site(30, "First", "one, as it is now")); + + await Assert.That(again.Queue.Select(_ => $"{_.Key} {_.LeftText}")).IsEquivalentTo( + [ + $"{InlineKey.For("A.cs", 20)} one, as it is now", + $"{InlineKey.For("A.cs", 30)} two" + ]); + await Assert.That(again.Current!.Key).IsEqualTo(InlineKey.For("A.cs", 20)); + } + + /// + /// The same move seen from a window displaying somebody else's queue. The first entry was + /// accepted and the owner took the other two to the lines the re-run reported, so the key the + /// selection was following is in no listing any more. Held by its index instead, the reader + /// was put on the entry after the one they had been reading. + /// + [Test] + public async Task An_owner_taking_the_entry_on_screen_to_another_line_keeps_it_on_screen() + { + var pending = Fixtures.Pending(Site(10, "First", "one"), Site(20, "Second", "two"), Site(30, "Third", "three")); + var state = ViewerSession.Apply(Fixtures.Attached(pending), CommandKind.NextItem); + await Assert.That(state.Current!.Key).IsEqualTo(InlineKey.For("A.cs", 20)); + + var moved = pending + .Accept(InlineKey.For("A.cs", 10), _ => InlineApplyResult.Applied, out _) + .Enqueue(Site(26, "Second", "two")) + .Enqueue(Site(36, "Third", "three")); + var synced = ViewerSession.Sync(state, moved, [], null); + + await Assert.That(synced.Queue.Count).IsEqualTo(2); + await Assert.That(synced.Current!.Key).IsEqualTo(InlineKey.For("A.cs", 26)); + } + + static InlinePatch Site(int line, string member, string content) => + new("A.cs", line, "\"old\"", content) + { + TestName = $"Tests.{member}", + MemberName = member + }; + /// /// Scrolled away from where the entry opened, so neither staying put nor starting again can /// pass by coincidence. diff --git a/src/DiffEngineViewer/ViewerSession.cs b/src/DiffEngineViewer/ViewerSession.cs index 883f2bb49..baa3aaee6 100644 --- a/src/DiffEngineViewer/ViewerSession.cs +++ b/src/DiffEngineViewer/ViewerSession.cs @@ -42,16 +42,21 @@ public static SessionState EnqueueInline(SessionState state, InlinePatch patch) var selected = current is null ? 0 : IndexOf(queue, current.Key); if (selected < 0) { - selected = 0; + // Enqueueing takes no entry away, so one that is no longer under its key has gone with + // its call site to the line this patch reports: an accept above it moved the call, and + // the queue took the re-run for what it was (InlineQueue.Enqueue). It is still the + // entry being read, and the first in the list is not + selected = Math.Max(IndexOf(queue, key), 0); } // Start the reader over, at the first change, only when the text under them changed. // Folding into an entry further down the list is not it, and neither is a re-send of what // is already there: Fold reports an identical patch as unchanged and Project hands back // the same entry, so a continuous runner re-sending the same failing snapshot every few - // seconds used to bounce the reader to the top on every run. + // seconds used to bounce the reader to the top on every run. Asked of the entry rather + // than of the key, since a patch can reach the entry on screen under a key that is not the + // patch's own: the one it had before its call site moved var replaced = current is not null && - current.Key == key && !ReferenceEquals(queue[selected], current); var next = state with @@ -291,6 +296,13 @@ public static SessionState Sync( var key = state.Current?.Key; var selected = key is null ? -1 : IndexOf(queue, key); + if (selected < 0) + { + // Gone from under its key is not always gone. An accept above a call site moves it, + // and the owner takes its entry to the line the re-run reports it at + selected = IndexOfMoved(queue, state.Current); + } + var next = state with { Queue = queue, @@ -1580,6 +1592,37 @@ static int IndexOf(IReadOnlyList queue, string key) return -1; } + /// + /// Where the entry for 's call site is once the owner has taken it to + /// another line, by the test recognised the move with. -1 + /// when none answers to it, or more than one does. + /// + static int IndexOfMoved(IReadOnlyList queue, QueueEntry? current) + { + if (current?.Patch is not { } patch) + { + return -1; + } + + var found = -1; + for (var index = 0; index < queue.Count; index++) + { + if (queue[index].Patch?.IsSameCallSite(patch) != true) + { + continue; + } + + if (found >= 0) + { + return -1; + } + + found = index; + } + + return found; + } + /// /// Drops whatever is no longer in the queue and leaves the reader where they were. /// From 04d1aa31e0ed690e72f2146cf0e76a98b5677eb8 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:14:26 +1000 Subject: [PATCH 20/73] Label what a test run stages with its framework, and add a clear scoped to it Clearing staged trios could be scoped to a framework, but never was in practice. A test run stages through InlinePatchFile.Write with a patch that names no framework, and an unlabeled trio is cleared whichever framework asks. And the caller, Verify, could not pass an origin to InlineStaging.Clear, because the moniker the labels are written with is internal. So in a multi-targeted project with no viewer, the framework that passed deleted the staged snapshot of the one still failing. Write now stamps the framework of the process staging the file where the patch carries none, as the send to a queue owner does, and InlineStaging.Settle clears for the running framework alone. Clear is unchanged, which is what a retire wants. --- src/DiffEngine.Tests/InlineStagingTests.cs | 80 ++++++++++++++++++++++ src/DiffEngine/Inline/InlinePatch.cs | 7 +- src/DiffEngine/Inline/InlinePatchFile.cs | 14 +++- src/DiffEngine/Inline/InlineStaging.cs | 26 +++++++ 4 files changed, 123 insertions(+), 4 deletions(-) diff --git a/src/DiffEngine.Tests/InlineStagingTests.cs b/src/DiffEngine.Tests/InlineStagingTests.cs index d8538a781..c50d0c43b 100644 --- a/src/DiffEngine.Tests/InlineStagingTests.cs +++ b/src/DiffEngine.Tests/InlineStagingTests.cs @@ -186,6 +186,75 @@ public async Task ClearScopedToAnOriginLeavesTheOtherFrameworkStaged() await Assert.That(project.StagedFiles().Count).IsEqualTo(3); } + /// + /// What a test run stages for itself goes through InlinePatchFile.Write, and its patch names no + /// framework: only the send to a queue owner ever stamped one. Every such trio was unlabeled, + /// and an unlabeled trio is cleared whichever framework asks, so scoping a clear to an origin + /// did nothing for the files a run with no viewer actually leaves. + /// + [Test] + public async Task ATrioAProcessStagesIsLabelledWithItsFramework() + { + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + var patchFile = project.Stage("ThisFramework", Patch(source, "content")); + + await Assert.That(InlinePatchFile.TryRead(patchFile, out var read)).IsTrue(); + await Assert.That(read!.Framework).IsEqualTo(RuntimeMoniker.Current); + + // Another framework of the same project, passing where this one failed + var cleared = InlineStaging.Clear(source, 42, null, origin: "net0.0"); + + await Assert.That(cleared).IsEqualTo(0); + await Assert.That(File.Exists(patchFile)).IsTrue(); + } + + // A patch that says where it came from is staged as it says: a queue owner writing out what + // other processes sent it is not the framework those snapshots belong to + [Test] + public async Task ATrioStagedWithAFrameworkKeepsIt() + { + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + var patchFile = project.Stage("OtherFramework", Patch(source, "content", framework: "net0.0")); + + await Assert.That(InlinePatchFile.TryRead(patchFile, out var read)).IsTrue(); + await Assert.That(read!.Framework).IsEqualTo("net0.0"); + } + + /// + /// The clear a passing run makes: its own framework's trio, and nobody else's. A caller has no + /// way to name its framework as DiffEngine labels it, so the one clear it could make was for + /// every framework, and the one that passed took the snapshot of the one still failing. + /// + [Test] + public async Task SettleTakesThisFrameworksTrioAndLeavesAnothers() + { + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + var mine = project.Stage("ThisFramework", Patch(source, "from this one")); + var theirs = project.Stage("OtherFramework", Patch(source, "from another", framework: "net0.0")); + + var cleared = InlineStaging.Settle(source, 42, null); + + await Assert.That(cleared).IsEqualTo(1); + await Assert.That(File.Exists(mine)).IsFalse(); + await Assert.That(File.Exists(theirs)).IsTrue(); + } + + // The member and the value narrow a settle on disk as they narrow a clear + [Test] + public async Task SettleFindsACallSiteWhoseLineHasMovedByMember() + { + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + var mine = project.Stage("ThisFramework", Patch(source, "new", line: 42, member: "MyTest")); + + await Assert.That(InlineStaging.Settle(source, 807, "MyTest", value: "what a sibling holds")).IsEqualTo(0); + await Assert.That(InlineStaging.Settle(source, 807, "MyTest", value: "new")).IsEqualTo(1); + await Assert.That(File.Exists(mine)).IsFalse(); + } + [Test] public async Task ClearFindsACallSiteWhoseLineHasMovedByMember() { @@ -390,6 +459,17 @@ public string Source(string name) return path; } + /// + /// Stages a patch the way a test run with no viewer does, through InlinePatchFile.Write, + /// rather than the way an exiting owner does. Returns the patch file. + /// + public string Stage(string name, InlinePatch patch) + { + var path = Path.Combine(directory, "obj", InlineStaging.DirectoryName, $"{name}.inlinepatch"); + InlinePatchFile.Write(path, patch); + return path; + } + public IReadOnlyList StagedFiles() { var staging = Path.Combine(directory, "obj", InlineStaging.DirectoryName); diff --git a/src/DiffEngine/Inline/InlinePatch.cs b/src/DiffEngine/Inline/InlinePatch.cs index dadc382b9..10150d338 100644 --- a/src/DiffEngine/Inline/InlinePatch.cs +++ b/src/DiffEngine/Inline/InlinePatch.cs @@ -182,9 +182,10 @@ internal InlinePatch At(int line) => /// /// Short target framework of the test process that produced this patch ("net9.0", "net48"). - /// Stamped by in the sending process, never by a - /// parser or a re-host, so a patch that crosses processes keeps the framework it was born - /// under. Null means unknown origin, which selects last-writer-wins queue semantics. + /// Stamped by in the sending process, and by + /// in the one staging it, never by a parser or a re-host, + /// so a patch that crosses processes keeps the framework it was born under. Null means unknown + /// origin, which selects last-writer-wins queue semantics. /// public string? Framework { get; set; } diff --git a/src/DiffEngine/Inline/InlinePatchFile.cs b/src/DiffEngine/Inline/InlinePatchFile.cs index 74f6719ed..e30687928 100644 --- a/src/DiffEngine/Inline/InlinePatchFile.cs +++ b/src/DiffEngine/Inline/InlinePatchFile.cs @@ -6,6 +6,18 @@ namespace DiffEngine; /// public static class InlinePatchFile { + /// + /// Stages a patch as a file, stamped with the framework this process is running as where the + /// patch carries none, as stamps one it sends. + /// + /// A test run that finds no viewer stages through here, and a multi-targeted one stages a file + /// per framework for the same call site. Written with no framework, none of them could be + /// told from the others: + /// takes an unlabeled trio whichever framework is clearing, so the framework that passed + /// deleted the snapshot of the one still failing. The process writing the file is the one + /// that produced the patch, which is the same reason the send stamps it there. + /// + /// public static void Write(string path, InlinePatch patch) { var directory = Path.GetDirectoryName(path); @@ -14,7 +26,7 @@ public static void Write(string path, InlinePatch patch) Directory.CreateDirectory(directory); } - File.WriteAllText(path, Build(patch), new UTF8Encoding(false)); + File.WriteAllText(path, Build(patch, patch.Framework ?? RuntimeMoniker.Current), new UTF8Encoding(false)); } /// diff --git a/src/DiffEngine/Inline/InlineStaging.cs b/src/DiffEngine/Inline/InlineStaging.cs index 97bb0fea4..3747d5bc4 100644 --- a/src/DiffEngine/Inline/InlineStaging.cs +++ b/src/DiffEngine/Inline/InlineStaging.cs @@ -54,6 +54,32 @@ public static int Persist(IEnumerable pending) public static int Clear(string sourceFile, int line, string? memberName, string? extraDirectory, string? origin) => Clear(sourceFile, line, memberName, extraDirectory, origin, null); + /// + /// Deletes what this process's framework staged for a call site that now passes, and leaves + /// what any other framework staged for it. Returns how many trios were cleared. + /// + /// + /// The staging half of , + /// and beside for the + /// reason that one is beside : "this framework now + /// passes" and "there is no inline snapshot here for any of them" are different statements. + /// Clear could already be given an origin to say the first, but nothing outside this assembly + /// can name the framework the way and the queue label it, + /// so no caller passed one. Every settle was the second statement, and in a multi-targeted + /// run the framework that passed cleared the trio of the one still failing. + /// + /// A process whose framework cannot be determined clears as Clear does with no origin. It + /// stages without a label for the same reason, so there is nothing to scope by. + /// + /// + /// The source file the settled call site is in. + /// The line the call site was recorded at. + /// The member the call site is in, used where the line has moved. + /// A staging root to clear beside the source project's. + /// What the settling call's expected argument holds. + public static int Settle(string sourceFile, int line, string? memberName, string? extraDirectory = null, string? value = null) => + Clear(sourceFile, line, memberName, extraDirectory, RuntimeMoniker.Current, value); + /// /// Deletes the staged files for a call site, for a run that has just settled or retired it. /// Returns how many trios were cleared. From 21d9ca478b65155936547464fae82871b03be2e8 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:35:19 +1000 Subject: [PATCH 21/73] Take only the Snapshot call where its value is awaited, assigned, returned or passed Removing a Snapshot call from a variable now takes the whole statement, because settings.Snapshot("old"); otherwise became settings; which is no statement. But every call on a variable with nothing chained after it was treated that way, and one that could not be taken with its statement was refused. So await task.Snapshot("old"); and var kept = task.Snapshot("old"); were refused too, where taking the call alone leaves await task; and var kept = task; which is what each would have run without the snapshot, and what it did before. The statement goes only where the variable would be left as the statement. Awaited, returned, assigned, compared or passed, the call alone is taken. A lambda's body is still refused, since _ => _ is no body for a lambda that returns nothing. In F# what takes the value has to sit on the same line: the = a line above is the one a whole body hangs off. --- src/DiffEngine.Tests/InlinePatcherFsTests.cs | 18 ++++++ src/DiffEngine.Tests/InlinePatcherTests.cs | 28 +++++++++- src/DiffEngine/Inline/InlinePatcher.cs | 58 +++++++++++++++++++- 3 files changed, 100 insertions(+), 4 deletions(-) diff --git a/src/DiffEngine.Tests/InlinePatcherFsTests.cs b/src/DiffEngine.Tests/InlinePatcherFsTests.cs index cd3ef6d1e..309e56af8 100644 --- a/src/DiffEngine.Tests/InlinePatcherFsTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherFsTests.cs @@ -841,6 +841,24 @@ await Assert.That(newSource).IsEqualTo( """)); } + /// + /// Bound or passed on the same line, what the call was on is still a value with the call gone, + /// so the call alone is taken. The = a line above is another matter: a whole body hangs + /// off that one, and the line under it is the body's first statement. + /// + [Test] + [Arguments(" let kept = task.Snapshot(\"old\")\n kept.ToTask()", " let kept = task\n kept.ToTask()")] + [Arguments(" run (task.Snapshot(\"old\"))", " run (task)")] + public async Task RemoveOfACallWhoseValueIsTakenLeavesWhatItWasOn(string body, string expected) + { + var source = Test(body); + + var status = TryApply(source, 5, InlinePatchMode.Remove, null, "", out var newSource, out var reason, originalValue: "old"); + + await Assert.That((status, reason)).IsEqualTo((PatchStatus.Applied, "")); + await Assert.That(newSource).IsEqualTo(Test(expected)); + } + /// /// The last line of its block is the block's value, and taking it away leaves a binding with /// nothing under it. So is a line the next one carries on, or one something else shares. diff --git a/src/DiffEngine.Tests/InlinePatcherTests.cs b/src/DiffEngine.Tests/InlinePatcherTests.cs index 793e22a97..df92b9d47 100644 --- a/src/DiffEngine.Tests/InlinePatcherTests.cs +++ b/src/DiffEngine.Tests/InlinePatcherTests.cs @@ -1487,14 +1487,13 @@ public async Task ReapplyingARemoveOfAStatementIsAlreadyApplied() /// /// Shapes where the call is all its statement does and the statement cannot simply be lifted /// out: an if with no braces would take the next statement for its body, a line shared - /// with another statement is not the call's to remove, and a lambda or an awaited variable is - /// not a statement of its own at all. Reported, where it used to leave the receiver behind. + /// with another statement is not the call's to remove, and a lambda's body is not a statement + /// of its own at all. Reported, where it used to leave the receiver behind. /// [Test] [Arguments(" if (flag)\n settings.Snapshot(\"old\");")] [Arguments(" var settings = new VerifySettings(); settings.Snapshot(\"old\");")] [Arguments(" Configure(_ => _.Snapshot(\"old\"));")] - [Arguments(" await task.Snapshot(\"old\");")] public async Task RemoveReportsACallItCannotTakeWithItsStatement(string body) { var source = Method(body); @@ -1505,6 +1504,29 @@ public async Task RemoveReportsACallItCannotTakeWithItsStatement(string body) await Assert.That(reason).Contains("Remove the statement by hand"); } + /// + /// Awaited, assigned, returned or passed, what the call was on is still a value with the call + /// gone, so the call alone is taken and the statement reads as it would have run without the + /// snapshot. Only a statement that was nothing but the call leaves a name standing by itself. + /// + [Test] + [Arguments(" await task.Snapshot(\"old\");", " await task;")] + [Arguments(" var kept = task.Snapshot(\"old\");", " var kept = task;")] + [Arguments(" kept = task.Snapshot(\"old\");", " kept = task;")] + [Arguments(" return task.Snapshot(\"old\");", " return task;")] + [Arguments(" Run(task.Snapshot(\"old\"));", " Run(task);")] + [Arguments(" Run(first, task.Snapshot(\"old\"));", " Run(first, task);")] + [Arguments(" var same = other == task.Snapshot(\"old\");", " var same = other == task;")] + public async Task RemoveOfACallWhoseValueIsTakenLeavesWhatItWasOn(string body, string expected) + { + var source = Method(body); + + var status = TryApply(source, 5, InlinePatchMode.Remove, "\"old\"", "", out var newSource, out _); + + await Assert.That(status).IsEqualTo(PatchStatus.Applied); + await Assert.That(newSource).IsEqualTo(Method(expected)); + } + // With more of the chain to come, the rest hangs off the variable as it hung off the call [Test] public async Task RemoveFromTheMiddleOfAChainOnAVariable() diff --git a/src/DiffEngine/Inline/InlinePatcher.cs b/src/DiffEngine/Inline/InlinePatcher.cs index 927cce829..e5aee7a72 100644 --- a/src/DiffEngine/Inline/InlinePatcher.cs +++ b/src/DiffEngine/Inline/InlinePatcher.cs @@ -609,6 +609,11 @@ static bool HoldsContent(string source, SourceScan scan, int openParen, string c /// where it can be taken whole (), and the call is reported /// where it cannot. /// + /// + /// Only where the variable would be left as the statement, though. Awaited, assigned, returned + /// or passed, it is still a value with the call gone (), and the + /// statement reads as it would have run without the snapshot. + /// /// static PatchStatus TryRemove( SourceLanguage language, @@ -661,7 +666,8 @@ static PatchStatus TryRemove( start--; var dotStart = start; - if (LeavesOnlyItsReceiver(source, scan, dotStart, closeParen)) + if (LeavesOnlyItsReceiver(source, scan, dotStart, closeParen) && + !IsTakenAsAValue(source, scan, lineStarts, nameStart)) { if (!TryStatementLines(source, scan, lineStarts, nameStart, closeParen, out var from, out var to)) { @@ -724,6 +730,56 @@ static bool LeavesOnlyItsReceiver(string source, SourceScan scan, int dot, int c source[after] != '.'; } + /// + /// Whether something takes the value of the expression a call ends: it is awaited, returned, + /// assigned or passed. + /// + /// What the call was called on is then still something with the call gone. + /// await task.Snapshot("old"); reads await task; and + /// var kept = task.Snapshot("old"); reads var kept = task;, each as it would + /// have run without the snapshot. It is a statement that was nothing but the call that leaves + /// a name standing by itself. + /// + /// + /// A lambda's body is left out on purpose. _ => _.Snapshot("old") would be left as + /// _ => _, which is no body for a lambda that returns nothing. And where indentation is + /// syntax, only what takes it sits on the same line: the = a line above is the one a + /// whole body hangs off, and the line under it is that body's first statement. + /// + /// + static bool IsTakenAsAValue(string source, SourceScan scan, List lineStarts, int nameStart) + { + var expressionStart = ExpressionStart(source, scan, nameStart); + var before = PreviousToken(source, scan, expressionStart); + if (before < 0 || + !scan.IsCode(before)) + { + return false; + } + + if (scan.Language.IndentationIsSyntax && + LineOf(lineStarts, before) != LineOf(lineStarts, expressionStart)) + { + return false; + } + + // Passed, or assigned, or compared: an equals sign that ends a comparison takes a value as + // much as one that assigns. The arrow of a lambda ends in the other character + if (source[before] is '(' or ',' or '=') + { + return true; + } + + if (!scan.IsIdentifierChar(source[before])) + { + return false; + } + + var wordStart = scan.WordStart(before); + var word = source.Substring(wordStart, before + 1 - wordStart); + return word is "await" or "return"; + } + /// /// The lines of a statement that is one call and nothing else, from the start of its first /// line to the start of the line after its last, for taking out whole. From 36af5601be137ea9f775da07fd475536d2b87171 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:32:05 +1000 Subject: [PATCH 22/73] Decide accept-all on Linux by the Shift key, not by the case of the letter typed The Linux head read letters as the characters typed, 'a' for accept and 'A' for accept all. Caps Lock types 'A' with no Shift held, so with it on the key that accepts one snapshot accepted every pending one, with no confirmation, and d, v, q, n, p, m, r and j did nothing. The letter is now folded to lower case and accept-all is chosen by whether Shift is held down, which is how the Windows and macOS heads decide it. Shift with any other letter is that letter's command, as it is on those two. --- native/src/deview.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/native/src/deview.cpp b/native/src/deview.cpp index 8c33de56a..1d5031d47 100644 --- a/native/src/deview.cpp +++ b/native/src/deview.cpp @@ -943,16 +943,28 @@ int ReadKey() return DEVIEW_KEY_NONE; } + /* The key itself held down, rather than read off the case of what was typed: see below. */ + const bool shift = IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT); + /* Letters by the character typed rather than by key position. raylib's key codes are * positions on a US layout, so on AZERTY the key labelled Q reported KEY_A and accepted - a * snapshot written into source by a key meant to quit - while the one labelled A quit. * Characters follow the layout, the way the macOS and Windows heads already do. */ for (int character = GetCharPressed(); character != 0; character = GetCharPressed()) { + /* Which letter, and nothing of its case. A capital says that Shift or Caps Lock was on and + * not which of them, so read as typed Caps Lock turned a plain A into accept all - every + * pending snapshot written into source, with nothing asked first, by the key that accepts + * one - and left D, V, Q, N, P, M, R and J doing nothing. */ + if (character >= 'A' && character <= 'Z') + { + character += 'a' - 'A'; + } + switch (character) { - case 'a': return DEVIEW_KEY_ACCEPT; - case 'A': return DEVIEW_KEY_ACCEPT_ALL; + /* Accept all is A with Shift held, which is what the other two heads go by. */ + case 'a': return shift ? DEVIEW_KEY_ACCEPT_ALL : DEVIEW_KEY_ACCEPT; case 'd': return DEVIEW_KEY_DISCARD; case 'v': return DEVIEW_KEY_NEXT_VARIANT; case 'q': return DEVIEW_KEY_QUIT; @@ -979,9 +991,7 @@ int ReadKey() if (IsKeyPressed(KEY_PAGE_DOWN)) return DEVIEW_KEY_PAGE_DOWN; if (IsKeyPressed(KEY_HOME)) return DEVIEW_KEY_HOME; if (IsKeyPressed(KEY_END)) return DEVIEW_KEY_END; - if (IsKeyPressed(KEY_TAB)) return IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT) - ? DEVIEW_KEY_PREVIOUS_ITEM - : DEVIEW_KEY_NEXT_ITEM; + if (IsKeyPressed(KEY_TAB)) return shift ? DEVIEW_KEY_PREVIOUS_ITEM : DEVIEW_KEY_NEXT_ITEM; if (IsKeyPressed(KEY_ESCAPE)) return DEVIEW_KEY_QUIT; return DEVIEW_KEY_NONE; } From 4a1da8f1c239cd05a7b523d0d5d68b8d39338d84 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:32:09 +1000 Subject: [PATCH 23/73] Let the right pane's text be selected on Linux when the left pane shows only filler A drag starts only where there is text to select, and that was asked of the left pane whichever pane was pressed: where its text starts is read from the first row that draws any, and a pane of nothing but filler has none. So nothing in the right pane could be selected or copied for a pending delete, whose left side is empty, or anywhere inside a long removed block. It is now asked of the pane the press landed in. A press in a pane of filler still starts nothing. --- native/src/deview.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/native/src/deview.cpp b/native/src/deview.cpp index 1d5031d47..803207690 100644 --- a/native/src/deview.cpp +++ b/native/src/deview.cpp @@ -1260,7 +1260,6 @@ void UpdateSelection( mouse.y > bodyMin.y + bodyAvail.y || mouse.x > bodyMin.x + bodyAvail.x || leftHit.cellLeft < 0.0f || - leftHit.textLeft < 0.0f || mouse.x < leftHit.cellLeft || /* The splitter's grab zone overlaps the left pane's edge, and a drag that started * there would otherwise also select whatever it began over. */ @@ -1270,12 +1269,17 @@ void UpdateSelection( } const bool right = rightHit.cellLeft >= 0.0f && mouse.x >= rightHit.cellLeft; - if (right && rightHit.textLeft < 0.0f) + const PaneHit& hit = right ? rightHit : leftHit; + + /* Nothing but filler on screen in the pane that was pressed, so nothing there to select. + * Asked of that pane and of no other: asked of the left one whichever was pressed, a left + * pane of filler ruled out the right pane's text with it, which is the whole of a pending + * delete and wherever a long removed block has been scrolled to. */ + if (hit.textLeft < 0.0f) { return; } - const PaneHit& hit = right ? rightHit : leftHit; const DeviewPane& pane = screen->panes[right ? 1 : 0]; state.dragging = true; state.dragSide = right ? 1 : 0; From bf7cbedadb9e1cf94087ff8e646f0b13369e45c8 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:32:14 +1000 Subject: [PATCH 24/73] Wrap the Linux footer's buttons and give its status a line when they do not fit Every footer button was drawn on one line and the status after the last of them, wherever that was. A paged document pending in a queue has eleven buttons, 1199 pixels of them in a window with 1084, so Zoom in could not be clicked and the status line was not drawn at all; in a window of its own the same document left the status 54 pixels. The status line is where the page on screen, a page that could not be drawn, a selection and a failed accept are said. Buttons now wrap onto another row at the window's edge, and a status with no room beside the last row takes a line of its own, cut with an ellipsis if even that is too narrow. The title stops short of the subtitle in the same way rather than running on under it. A footer that fits is laid out exactly as before, so the existing baselines are unchanged. Two scenes pin it, a document in a window of its own and the same one in a queue. Both are skipped on macOS, where they have no baseline. --- native/src/deview.cpp | 160 ++++++++++++++++-- src/DiffEngineViewer.Tests/Fixtures.cs | 25 +++ ...PixelTests.DocumentPage.Linux.verified.png | Bin 0 -> 86994 bytes ...sts.DocumentPageInQueue.Linux.verified.png | Bin 0 -> 91937 bytes src/DiffEngineViewer.Tests/PixelTests.cs | 31 ++++ .../SkipOnMacAttribute.cs | 10 +- 6 files changed, 207 insertions(+), 19 deletions(-) create mode 100644 src/DiffEngineViewer.Tests/PixelTests.DocumentPage.Linux.verified.png create mode 100644 src/DiffEngineViewer.Tests/PixelTests.DocumentPageInQueue.Linux.verified.png diff --git a/native/src/deview.cpp b/native/src/deview.cpp index 803207690..dc05bd26f 100644 --- a/native/src/deview.cpp +++ b/native/src/deview.cpp @@ -1612,6 +1612,96 @@ bool UpdatePan(const DeviewScreen* screen) return true; } +/* + * One line of text in no more than a width, ending in an ellipsis where it was cut short, so it + * reads as cut rather than as all there was. It takes the place in the layout the text would. + */ +void TextWithin(const char* begin, const char* end, float width) +{ + const float room = std::max(width, 0.0f); + const ImVec2 size = ImGui::CalcTextSize(begin, end); + const ImVec2 position = ImGui::GetCursorScreenPos(); + const ImVec2 limit(position.x + room, position.y + size.y); + ImGui::Dummy(ImVec2(std::min(size.x, room), size.y)); + ImGui::RenderTextEllipsis(ImGui::GetWindowDrawList(), position, limit, limit.x, begin, end, &size); +} + +/* + * How the footer is laid out: its buttons, on as many rows as the window's width makes of them, + * and the status line, right aligned beside the last of those rows or on a line of its own. + * + * Worked out before the body is laid out, because the body is given what the footer leaves. A + * footer that fits on one line is every footer there used to be, and is still laid out as it was: + * each button after the one before, and the status after the last. That was the only layout, so + * one that did not fit ran off the window. A paged document pending in a queue has eleven buttons, + * 1199 pixels of them in a window with 1084: the last was past the window's edge, where it could + * not be clicked, and the status past that, where it could not be read - and the status line is + * where the page on screen, a page that could not be drawn, a selection and an accept that failed + * are said. + */ +struct Footer +{ + std::vector labels; + + /* Whether each button goes to the start of a new row rather than after the one before it. */ + std::vector wraps; + + std::string status; + float statusWidth = 0.0f; + + /* On a line of its own under the buttons, for want of room beside the last row of them. */ + bool statusBelow = false; + + /* What all of it takes from the bottom of the window. */ + float height = 0.0f; +}; + +Footer LayOutFooter(const DeviewScreen* screen, float width) +{ + const ImGuiStyle& style = ImGui::GetStyle(); + Footer footer; + int rows = 1; + + /* How far along its row the last button reaches. */ + float reach = 0.0f; + for (int index = 0; index < screen->buttonCount; index++) + { + const DeviewButton& button = screen->buttons[index]; + footer.labels.push_back(Copy(screen, button.labelOffset, button.labelLength)); + + /* What ImGui::Button makes of a label: its text, less whatever follows a ##, inside the + * frame's padding. */ + const float size = + ImGui::CalcTextSize(footer.labels.back().c_str(), nullptr, true).x + style.FramePadding.x * 2.0f; + const bool wraps = index > 0 && reach + style.ItemSpacing.x + size > width; + footer.wraps.push_back(wraps); + if (wraps) + { + rows++; + reach = size; + } + else + { + reach += (index > 0 ? style.ItemSpacing.x : 0.0f) + size; + } + } + + footer.status = Copy(screen, screen->statusOffset, screen->statusLength); + if (!footer.status.empty()) + { + footer.statusWidth = ImGui::CalcTextSize(footer.status.c_str()).x; + /* Beside the buttons only with room to spare, which is the test it was always put to. */ + footer.statusBelow = + screen->buttonCount > 0 && + width - reach - style.ItemSpacing.x <= footer.statusWidth; + } + + footer.height = + static_cast(rows) * ImGui::GetFrameHeightWithSpacing() + style.ItemSpacing.y + + (footer.statusBelow ? ImGui::GetTextLineHeightWithSpacing() : 0.0f); + return footer; +} + void BuildFrame(const DeviewScreen* screen) { /* Read by the input pass, which has no screen of its own: Escape means dismiss while one of @@ -1628,18 +1718,47 @@ void BuildFrame(const DeviewScreen* screen) ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoScrollbar); - Text(screen, screen->titleOffset, screen->titleLength); + /* + * The title, which stops a character short of the subtitle where it would otherwise run on + * under it: the subtitle is drawn in from the right edge wherever the title ended. It is the + * title that gives way, because what it says is also in the pane headers and the queue, and + * which entry of the queue this is is said only by the subtitle. + */ const std::string subtitle = Copy(screen, screen->subtitleOffset, screen->subtitleLength); + const float subtitleWidth = subtitle.empty() ? 0.0f : ImGui::CalcTextSize(subtitle.c_str()).x; + const float titleRoom = subtitle.empty() + ? ImGui::GetContentRegionAvail().x + : ImGui::GetContentRegionAvail().x - subtitleWidth - ImGui::CalcTextSize("M").x; + const char* titleBegin; + const char* titleEnd; + if (Slice(screen, screen->titleOffset, screen->titleLength, &titleBegin, &titleEnd) && + ImGui::CalcTextSize(titleBegin, titleEnd).x > titleRoom) + { + TextWithin(titleBegin, titleEnd, titleRoom); + } + else + { + Text(screen, screen->titleOffset, screen->titleLength); + } + if (!subtitle.empty()) { - const float width = ImGui::CalcTextSize(subtitle.c_str()).x; - ImGui::SameLine(ImGui::GetContentRegionAvail().x - width); + ImGui::SameLine(ImGui::GetContentRegionAvail().x - subtitleWidth); ImGui::TextDisabled("%s", subtitle.c_str()); } ImGui::Separator(); - const float footer = ImGui::GetFrameHeightWithSpacing() + ImGui::GetStyle().ItemSpacing.y; + /* + * Its height comes off the body, and the managed side is not asked for fewer rows to make up + * for it. That side keeps eight lines for everything that is not a row, where this head's + * title, headers and one line of footer take under five, so there are 62 pixels and more under + * the last row it slices. A second row of buttons takes 23 of them and a line for the status + * 17, and a third row of buttons on top of both is a pixel over at most. It is only past + * that - four rows, which a paged document's buttons come to in a window under 450 pixels + * wide - that the last rows of the body are cut off, behind a footer that can at least be read. + */ + const Footer footer = LayOutFooter(screen, ImGui::GetContentRegionAvail().x); /* * The strip the pane scrollbar gets, taken off the body before anything is laid out in it. @@ -1647,7 +1766,7 @@ void BuildFrame(const DeviewScreen* screen) * and went would shift the pane split every time the selection changed. */ const float scrollbarWidth = ImGui::GetStyle().ScrollbarSize; - ImGui::BeginChild("##body", ImVec2(-scrollbarWidth, -footer), ImGuiChildFlags_None, ImGuiWindowFlags_NoScrollbar); + ImGui::BeginChild("##body", ImVec2(-scrollbarWidth, -footer.height), ImGuiChildFlags_None, ImGuiWindowFlags_NoScrollbar); /* Read back rather than recomputed, so the scrollbar lands against the body whatever the * negative sizes above worked out as. */ @@ -2001,9 +2120,9 @@ void BuildFrame(const DeviewScreen* screen) for (int index = 0; index < screen->buttonCount; index++) { const DeviewButton& button = screen->buttons[index]; - const std::string label = Copy(screen, button.labelOffset, button.labelLength); const bool enabled = (button.flags & DEVIEW_BUTTON_ENABLED) != 0; - if (index > 0) + if (index > 0 && + !footer.wraps[static_cast(index)]) { ImGui::SameLine(); } @@ -2014,7 +2133,7 @@ void BuildFrame(const DeviewScreen* screen) } ImGui::PushID(index); - if (ImGui::Button(label.c_str())) + if (ImGui::Button(footer.labels[static_cast(index)].c_str())) { state.input.clickedButton = index; } @@ -2026,18 +2145,27 @@ void BuildFrame(const DeviewScreen* screen) } } - const std::string status = Copy(screen, screen->statusOffset, screen->statusLength); - if (!status.empty()) + if (!footer.status.empty()) { - const float width = ImGui::CalcTextSize(status.c_str()).x; - ImGui::SameLine(); - const float available = ImGui::GetContentRegionAvail().x; - if (available > width) + if (!footer.statusBelow) { - ImGui::SetCursorPosX(ImGui::GetCursorPosX() + available - width); + ImGui::SameLine(); } - ImGui::TextDisabled("%s", status.c_str()); + const float available = ImGui::GetContentRegionAvail().x; + if (available > footer.statusWidth) + { + ImGui::SetCursorPosX(ImGui::GetCursorPosX() + available - footer.statusWidth); + ImGui::TextDisabled("%s", footer.status.c_str()); + } + else + { + /* Wider than the window even with a line to itself. From the left edge then, so that + * what is lost is its end, and said to be lost. */ + ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyleColorVec4(ImGuiCol_TextDisabled)); + TextWithin(footer.status.data(), footer.status.data() + footer.status.size(), available); + ImGui::PopStyleColor(); + } } ImGui::End(); diff --git a/src/DiffEngineViewer.Tests/Fixtures.cs b/src/DiffEngineViewer.Tests/Fixtures.cs index 65bbf2ab8..c29dccf91 100644 --- a/src/DiffEngineViewer.Tests/Fixtures.cs +++ b/src/DiffEngineViewer.Tests/Fixtures.cs @@ -277,6 +277,31 @@ public static SessionState Document() public static SessionState DocumentDrawing() => ViewerSession.Rendered(Document(), "BB", Rendering.Started); + /// + /// The pair holds, as a pending move in a queue rather than in a window + /// of its own. That is the fullest footer there is: a queue's three buttons, the three every + /// entry has, and the five a paged document adds. + /// + public static SessionState DocumentInQueue() + { + var leftPage = WriteImage("page.received.png", SamplePng.Build(200, 260, 198, 64, 64)); + var rightPage = WriteImage("page.verified.png", SamplePng.Build(200, 260, 64, 150, 198)); + var left = new DocumentFile("temp/sample.received.pdf", 1_234, DocumentFormat.Pdf, "AA"); + var right = new DocumentFile("code/sample.verified.pdf", 1_240, DocumentFormat.Pdf, "BB"); + var state = ViewerSession.EnqueueTracked( + SessionState.Start(ViewerMode.Inline, Columns, Rows), + QueueEntry.ForMove( + "move:temp/sample.received.pdf", + "Sample.Test (pdf)", + null, + "temp/sample.received.pdf", + "code/sample.verified.pdf", + new(Long(false), null, null, null, left), + new(Long(true), null, null, null, right))); + state = ViewerSession.Rendered(state, "AA", new([new(leftPage, 200, 260, "LEFT")], true)); + return ViewerSession.Rendered(state, "BB", new([new(rightPage, 200, 260, "RIGHT")], true)); + } + static string WriteImage(string name, byte[] content) { // A fixed directory and a fixed name: only the file name reaches a pane header, and a diff --git a/src/DiffEngineViewer.Tests/PixelTests.DocumentPage.Linux.verified.png b/src/DiffEngineViewer.Tests/PixelTests.DocumentPage.Linux.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..135a1c046eabb7a53cc861c579c8037ac8e6e58a GIT binary patch literal 86994 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 h%lz%-{~y_kArQ@ydf_uQ& Capture(ViewerSession.OpenPaneMenu(Fixtures.File(), PaneSide.Right)); + /// + /// A document's page under its text, in a window of its own. Its ten buttons leave 54 pixels + /// beside them, and the status line - which lines, which page, which pages differ - is the + /// one place those are said: it takes a line of its own under the buttons rather than running + /// off the window from wherever they ended. + /// + /// Linux only, until a baseline for the macOS head has been taken on the runner its others + /// come from. How a footer that does not fit is laid out is each head's own, so this one says + /// nothing about that one. + /// + /// [Test] [PixelTest] [NotInParallel(nameof(PixelTests), Order = 13)] + [SkipOnMac("There is no macOS baseline for this scene: a footer that does not fit is laid out by each head in its own way.")] + public Task DocumentPage() => + Capture(Fixtures.Document()); + + /// + /// The same document pending in a queue, which is the fullest footer there is: eleven buttons + /// that need 1199 pixels of a window with 1084. They wrap onto a second row, where the last + /// used to be drawn past the window's edge and could not be clicked, and the status line goes + /// beside what wrapped rather than past that. Linux only, as is. + /// + [Test] + [PixelTest] + [NotInParallel(nameof(PixelTests), Order = 14)] + [SkipOnMac("There is no macOS baseline for this scene: a footer that does not fit is laid out by each head in its own way.")] + public Task DocumentPageInQueue() => + Capture(Fixtures.DocumentInQueue()); + + [Test] + [PixelTest] + [NotInParallel(nameof(PixelTests), Order = 15)] [SkipOnMac("A capture host never creates the macOS window, and that head waits for the next frame in its event pump rather than after drawing one.")] public async Task PresentWaitsForTheNextFrame() { diff --git a/src/DiffEngineViewer.Tests/SkipOnMacAttribute.cs b/src/DiffEngineViewer.Tests/SkipOnMacAttribute.cs index a85e484a1..8a6799931 100644 --- a/src/DiffEngineViewer.Tests/SkipOnMacAttribute.cs +++ b/src/DiffEngineViewer.Tests/SkipOnMacAttribute.cs @@ -1,9 +1,13 @@ /// /// Skips a test on macOS, with the reason given at the use site. /// -/// Both uses so far come down to deview_capture making no window on macOS: what that head -/// shows is drawn by AppKit into its window, and it waits for the next frame in that window's -/// event pump. +/// Most uses come down to deview_capture making no window on macOS: what that head shows is +/// drawn by AppKit into its window, and it waits for the next frame in that window's event pump. +/// +/// +/// The rest are scenes that pin something each head does in its own way, and so far have a +/// baseline for the Linux head alone. A macOS one has to be taken on the pinned runner the others +/// come from, and the skip goes when it has been. /// /// public sealed class SkipOnMacAttribute(string reason) : SkipAttribute(reason) From f78b783544752eb5b5f712c816da8de9672e824e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:32:19 +1000 Subject: [PATCH 25/73] Draw the characters JetBrains Mono lacks from the machine's fonts on Linux The embedded font was the only font the Linux head had, so CJK, Hangul, Arabic, Hebrew, Thai and emoji all drew as the replacement glyph and a snapshot holding them could not be reviewed: a line with one such character changed looked the same on both sides. The other two heads fall back to system fonts. The window's font now takes the machine's fonts as further sources, found through fontconfig in the order it falls back through them. Only the fonts a character on screen has needed are read, on a thread of their own, and fontconfig is loaded at run time rather than linked, so a machine without it loads the library as before. Each is scaled to the embedded font's em, and a glyph wider than the cells the grid gave it is cut off where the next character starts. ImGui is built with 32 bit characters so that anything past the basic plane can be drawn at all. A capture never draws with them. It uses the embedded font alone, so a baseline is the same picture whatever a runner has installed, and a new scene pins that after showing the same text in the window. It is skipped on macOS, where it has no baseline. --- native/CMakeLists.txt | 9 +- native/src/deview.cpp | 661 +++++++++++++++++- ...xelTests.OutsideTheFont.Linux.verified.png | Bin 0 -> 56700 bytes src/DiffEngineViewer.Tests/PixelTests.cs | 62 +- 4 files changed, 707 insertions(+), 25 deletions(-) create mode 100644 src/DiffEngineViewer.Tests/PixelTests.OutsideTheFont.Linux.verified.png diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 476c4a8f4..d742b9f53 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -96,9 +96,14 @@ add_library(diffengine_viewer SHARED ${imgui_SOURCE_DIR}/imgui_widgets.cpp) target_include_directories(diffengine_viewer PRIVATE include ${imgui_SOURCE_DIR}) -# Threads for the thread pictures are decoded on. +# ImGui's characters are sixteen bits unless told otherwise, and everything past the basic plane, +# which is most emoji and the rarer Han characters, is then the replacement character before any +# font is asked for it. +target_compile_definitions(diffengine_viewer PRIVATE IMGUI_USE_WCHAR32) +# Threads for the threads pictures are decoded and fonts are found on, and dl for fontconfig, +# which is looked for at run time rather than linked. find_package(Threads REQUIRED) -target_link_libraries(diffengine_viewer PRIVATE raylib Threads::Threads) +target_link_libraries(diffengine_viewer PRIVATE raylib Threads::Threads ${CMAKE_DL_LIBS}) # The managed side probes for a bare name; keep it identical on every platform apart from the # platform's own prefix and extension. diff --git a/native/src/deview.cpp b/native/src/deview.cpp index dc05bd26f..b775b0657 100644 --- a/native/src/deview.cpp +++ b/native/src/deview.cpp @@ -18,6 +18,8 @@ #include "rlgl.h" #include +#include +#include #include #include #include @@ -25,14 +27,22 @@ #include #include #include +#include #include #include #include +#include #include #include #include +#include #include +/* For fontconfig, which is found at run time rather than linked: see Fontconfig. */ +#if !defined(_WIN32) +#include +#endif + /* * raylib latches GLFW's close flag and exposes no way to clear it, but the window has to survive a * close when a tray is running, otherwise every later frame would report closing again. raylib @@ -82,7 +92,8 @@ constexpr float grabWidth = 4.0f; * The correction is the font's own ascent plus descent over its em, and it is a constant because * the only font that reaches here is the JetBrains Mono the managed side embeds: 1020 and 300 over * 1000 units. Swapping that font means revisiting this number, hence naming it rather than folding - * it into the size. + * it into the size. The machine's fonts, merged in for the characters that one lacks, do not come + * through here, and have theirs read out of their own tables: see EmScaleOf. */ constexpr float emScale = 1.32f; @@ -151,6 +162,35 @@ struct Decoder bool stopping = false; }; +/* + * One of the machine's fonts, read whole, for the characters the embedded one does not have: + * its bytes, which of the faces in them, and the scale that makes deview_init's size an em for + * that face, as emScale does for the embedded font. + */ +struct FoundFont +{ + std::vector data; + int face = 0; + float scale = 1.0f; +}; + +/* + * Those fonts are looked for and read on a thread of their own, for the reason pictures are + * decoded on one: fontconfig reading its caches and a CJK collection coming off the disk are tens + * of milliseconds each, and the first is seconds on a machine whose caches are stale. Shared and + * detached as the decoder is, and for its reason. + */ +struct FontFinder +{ + std::mutex mutex; + std::condition_variable wake; + + /* Characters the window's font cannot draw, each asked about once. */ + std::vector wanted; + std::vector found; + bool stopping = false; +}; + struct State { bool initialised = false; @@ -158,6 +198,31 @@ struct State ImGuiContext* context = nullptr; DeviewInput input{}; + /* + * The font the window draws with: the embedded font, and merged into it whichever of the + * machine's fonts a character on screen has needed. + * + * Not the font a capture draws with. That is the embedded font alone, which the atlas holds + * a second time and ahead of this one, so that a capture is the same picture on a machine + * with every font installed and on one with none: a character the embedded font lacks is the + * replacement glyph there, as it was everywhere before this. What the two draw from the + * embedded font is the same glyphs, so the captures still describe the window. + */ + ImFont* font = nullptr; + + /* Started with the first character the font cannot draw, so a window that never shows one + * never has it, nor fontconfig. */ + std::shared_ptr finder; + + /* One bit a code point, set once it has been looked at, so it is asked about once and a + * frame of text already seen costs a pass over its bytes. Empty until something past ASCII + * turns up. */ + std::vector asked; + + /* The bytes of each font merged in. ImGui rasterises a glyph out of them when a character is + * first drawn, so they are kept for as long as the atlas is. */ + std::deque> fontData; + /* Whether the last screen carried a context menu, which is what makes Escape and a click * outside it a dismissal rather than what they would otherwise mean. */ bool menuOpen = false; @@ -769,6 +834,534 @@ void UnloadPictures() state.pictures.clear(); } +/* ---- fonts ---- */ + +/* + * The machine's own fonts, for the characters the embedded one does not have. + * + * JetBrains Mono has Latin, Greek, Cyrillic and the symbols code is written in, and it was the + * only font here: Chinese, Japanese, Korean, Arabic, Hebrew, Thai and emoji all drew as the + * replacement glyph, so a snapshot holding any of them could not be reviewed in this head. A line + * with one such character changed was marked as changed and looked the same on both sides. The + * other two heads have their toolkits' font fallback. ImGui has none of its own, but it does draw + * a character from the first of a font's sources to have it, so the machine's fonts are merged + * into the window's font as further sources. + * + * Drawn, and not shaped: each character is the glyph its font has for it, where the grid put it. + * Arabic is its letters unjoined and in the order they are stored, and an emoji made of several + * is as many of them as its cells hold. That is enough to see which characters a snapshot holds, + * which is what this is for. + * + * Only the fonts a character on screen has needed, and only once one has. Every font fontconfig + * knows of can be hundreds of megabytes of files, and a screen of ASCII, which is nearly every + * screen, costs a pass over its bytes and nothing else. Until a font lands its characters are the + * replacement glyph they always were. + * + * Never for a capture: see State::font. + */ + +/* As many of the machine's fonts as are ever merged in. ImGui numbers a font's sources in four + * bits, and the embedded font is the first of them. */ +constexpr size_t fontLimit = 15; + +/* + * fontconfig's FcFontSet, whose layout is part of its ABI, and the entry points this uses. + * + * Found in the library when a character first needs them rather than linked. Linked, a machine + * without fontconfig could not load this library at all, and building it would need fontconfig's + * headers. Found at run time, such a machine has no fonts to offer, which is what every machine + * had before. + */ +struct FontSet +{ + int count; + int capacity; + void** fonts; +}; + +struct Fontconfig +{ + void* (*initLoadConfigAndFonts)() = nullptr; + void* (*nameParse)(const unsigned char* name) = nullptr; + int (*configSubstitute)(void* config, void* pattern, int kind) = nullptr; + void (*defaultSubstitute)(void* pattern) = nullptr; + FontSet* (*fontSort)(void* config, void* pattern, int trim, void** charset, int* result) = nullptr; + int (*patternGetString)(const void* pattern, const char* object, int index, unsigned char** value) = nullptr; + int (*patternGetInteger)(const void* pattern, const char* object, int index, int* value) = nullptr; + int (*patternGetBool)(const void* pattern, const char* object, int index, int* value) = nullptr; + int (*patternGetCharSet)(const void* pattern, const char* object, int index, void** value) = nullptr; + int (*charSetHasChar)(const void* charset, unsigned int codepoint) = nullptr; +}; + +/* + * Every font on the machine that says which characters it has, in the order fontconfig falls + * back through them from a monospace font for this user's language. That is the answer every + * other program here is given, and it is what puts the Japanese forms of the Han characters + * ahead of the Chinese ones for a Japanese reader. + */ +struct SystemFonts +{ + bool opened = false; + Fontconfig fontconfig; + + struct Candidate + { + const void* pattern; + const void* charset; + }; + + std::vector candidates; + + /* Handed over already, and found to be something stb_truetype cannot draw from. By file and + * face rather than by candidate, because one face can be listed more than once. */ + std::set> taken; + std::set> unusable; +}; + +#if !defined(_WIN32) +template +bool Resolve(void* library, const char* name, Entry& entry) +{ + entry = reinterpret_cast(dlsym(library, name)); + return entry != nullptr; +} +#endif + +/* On the finder's thread, the first time a character is asked about. What fontconfig hands back + * is not given back: the candidates point into it for as long as the thread runs, which is as + * long as the window does, and a process has the one window. */ +void OpenSystemFonts(SystemFonts& fonts) +{ + fonts.opened = true; +#if !defined(_WIN32) + void* library = dlopen("libfontconfig.so.1", RTLD_NOW | RTLD_LOCAL); + if (library == nullptr) + { + return; + } + + Fontconfig& fontconfig = fonts.fontconfig; + if (!Resolve(library, "FcInitLoadConfigAndFonts", fontconfig.initLoadConfigAndFonts) || + !Resolve(library, "FcNameParse", fontconfig.nameParse) || + !Resolve(library, "FcConfigSubstitute", fontconfig.configSubstitute) || + !Resolve(library, "FcDefaultSubstitute", fontconfig.defaultSubstitute) || + !Resolve(library, "FcFontSort", fontconfig.fontSort) || + !Resolve(library, "FcPatternGetString", fontconfig.patternGetString) || + !Resolve(library, "FcPatternGetInteger", fontconfig.patternGetInteger) || + !Resolve(library, "FcPatternGetBool", fontconfig.patternGetBool) || + !Resolve(library, "FcPatternGetCharSet", fontconfig.patternGetCharSet) || + !Resolve(library, "FcCharSetHasChar", fontconfig.charSetHasChar)) + { + return; + } + + void* config = fontconfig.initLoadConfigAndFonts(); + void* pattern = fontconfig.nameParse(reinterpret_cast("monospace")); + if (config == nullptr || + pattern == nullptr) + { + return; + } + + /* The two steps every match is prepared with: the configuration's rules, which is where + * "monospace" becomes the fonts the machine means by it, and the defaults, which is where + * the user's language comes from. */ + fontconfig.configSubstitute(config, pattern, 0); + fontconfig.defaultSubstitute(pattern); + + /* Untrimmed. Trimming leaves out a font with no character the ones ahead of it lack, which + * it works out by uniting every character set in turn, and each character is asked of them + * here anyway. */ + int result = 0; + const FontSet* sorted = fontconfig.fontSort(config, pattern, 0, nullptr, &result); + if (sorted == nullptr) + { + return; + } + + for (int index = 0; index < sorted->count; index++) + { + void* charset = nullptr; + if (fontconfig.patternGetCharSet(sorted->fonts[index], "charset", 0, &charset) == 0 && + charset != nullptr) + { + fonts.candidates.push_back({sorted->fonts[index], charset}); + } + } +#endif +} + +constexpr uint32_t Tag(char first, char second, char third, char fourth) +{ + return static_cast(static_cast(first)) << 24 | + static_cast(static_cast(second)) << 16 | + static_cast(static_cast(third)) << 8 | + static_cast(static_cast(fourth)); +} + +/* + * The scale that makes deview_init's size an em for a face: its ascent plus its descent over its + * em, which is what emScale is for the embedded font. Merged at ImGui's own scale it is each + * font's height that is matched, so one with tall lines comes out small and one with short lines + * large. An em is what the other two heads fall back at, and what leaves a CJK character, an em + * wide, inside the two cells the grid gives it. + * + * False for a face stb_truetype, which is what rasterises here, cannot draw from. Those are its + * own conditions, asked first. It wants outlines, as TrueType's or in a CFF table, and a variable + * font of the CFF2 kind has neither, which is one of the forms Noto CJK comes in. Asked here, on + * the finder's thread, the next font with the character is tried instead; left to ImGui, the + * refusal comes on the render thread as an error, and nothing else is tried. + */ +bool EmScaleOf(const std::vector& data, int face, float& scale) +{ + const size_t size = data.size(); + const auto u16 = [&data, size](size_t at) -> uint32_t + { + return at + 2 <= size + ? static_cast(data[at]) << 8 | static_cast(data[at + 1]) + : 0; + }; + const auto u32 = [&u16](size_t at) -> uint32_t { return u16(at) << 16 | u16(at + 2); }; + + /* A collection starts with where each of its faces does. */ + size_t start = 0; + if (u32(0) == Tag('t', 't', 'c', 'f')) + { + if (static_cast(face) >= u32(8)) + { + return false; + } + + start = u32(12 + static_cast(face) * 4); + } + else if (face != 0) + { + return false; + } + + size_t head = 0; + size_t hhea = 0; + bool cmap = false; + bool hmtx = false; + bool glyf = false; + bool loca = false; + bool cff = false; + const uint32_t tables = u16(start + 4); + for (uint32_t table = 0; table < tables; table++) + { + const size_t record = start + 12 + static_cast(table) * 16; + switch (u32(record)) + { + case Tag('h', 'e', 'a', 'd'): head = u32(record + 8); break; + case Tag('h', 'h', 'e', 'a'): hhea = u32(record + 8); break; + case Tag('c', 'm', 'a', 'p'): cmap = true; break; + case Tag('h', 'm', 't', 'x'): hmtx = true; break; + case Tag('g', 'l', 'y', 'f'): glyf = true; break; + case Tag('l', 'o', 'c', 'a'): loca = true; break; + case Tag('C', 'F', 'F', ' '): cff = true; break; + default: break; + } + } + + const int unitsPerEm = static_cast(u16(head + 18)); + const int ascent = static_cast(u16(hhea + 4)); + const int descent = static_cast(u16(hhea + 6)); + if (head == 0 || + hhea == 0 || + !cmap || + !hmtx || + !(cff || (glyf && loca)) || + unitsPerEm == 0 || + ascent <= descent) + { + return false; + } + + scale = static_cast(ascent - descent) / static_cast(unitsPerEm); + return true; +} + +bool ReadFont(const Fontconfig& fontconfig, const void* pattern, const std::pair& face, FoundFont& found) +{ + /* Outlines, and nothing else. A bitmap font has none to scale, and a colour font - which is + * what the emoji font usually is - keeps its pictures in tables stb_truetype does not read. + * Merged, it would draw every emoji as nothing, ahead of a font with plain ones. */ + int flag = 0; + if ((fontconfig.patternGetBool(pattern, "outline", 0, &flag) == 0 && flag == 0) || + (fontconfig.patternGetBool(pattern, "color", 0, &flag) == 0 && flag != 0)) + { + return false; + } + + std::ifstream file(face.first, std::ios::binary | std::ios::ate); + const std::streamoff length = file.tellg(); + /* ImGui takes a length as an int. */ + if (!file || + length <= 0 || + length > INT_MAX) + { + return false; + } + + std::vector data(static_cast(length)); + file.seekg(0); + if (!file.read(reinterpret_cast(data.data()), length) || + !EmScaleOf(data, face.second, found.scale)) + { + return false; + } + + found.data = std::move(data); + found.face = face.second; + return true; +} + +/* + * The first font in fontconfig's order to have a character and be one that can be drawn from, + * read whole. False when there is none, and when that font has been handed over already, since + * the character is then on its way with it. + */ +bool FindFont(SystemFonts& fonts, uint32_t codepoint, FoundFont& found) +{ + if (!fonts.opened) + { + OpenSystemFonts(fonts); + } + + const Fontconfig& fontconfig = fonts.fontconfig; + for (const SystemFonts::Candidate& candidate : fonts.candidates) + { + if (fontconfig.charSetHasChar(candidate.charset, codepoint) == 0) + { + continue; + } + + unsigned char* file = nullptr; + if (fontconfig.patternGetString(candidate.pattern, "file", 0, &file) != 0 || + file == nullptr) + { + continue; + } + + /* The face of a collection is the low half of the index. The high half names an instance + * of a variable font, which stb_truetype draws as its default whichever is asked for. */ + int index = 0; + fontconfig.patternGetInteger(candidate.pattern, "index", 0, &index); + const std::pair face(reinterpret_cast(file), index & 0xFFFF); + if (fonts.taken.count(face) != 0) + { + return false; + } + + if (fonts.unusable.count(face) != 0) + { + continue; + } + + if (ReadFont(fontconfig, candidate.pattern, face, found)) + { + fonts.taken.insert(face); + return true; + } + + fonts.unusable.insert(face); + } + + return false; +} + +void FindFonts(std::shared_ptr finder) +{ + SystemFonts fonts; + std::unique_lock lock(finder->mutex); + while (true) + { + finder->wake.wait(lock, [&finder] { return finder->stopping || !finder->wanted.empty(); }); + if (finder->stopping) + { + return; + } + + std::vector wanted; + wanted.swap(finder->wanted); + lock.unlock(); + + /* fontconfig and the disk, and nothing of ImGui's, which belongs to the other thread. */ + std::vector found; + for (const uint32_t codepoint : wanted) + { + FoundFont font; + if (FindFont(fonts, codepoint, font)) + { + found.push_back(std::move(font)); + } + } + + lock.lock(); + for (FoundFont& font : found) + { + finder->found.push_back(std::move(font)); + } + } +} + +void StopFontFinder() +{ + if (!state.finder) + { + return; + } + + { + const std::lock_guard lock(state.finder->mutex); + state.finder->stopping = true; + state.finder->wanted.clear(); + state.finder->found.clear(); + } + + state.finder->wake.notify_one(); + state.finder.reset(); +} + +/* + * Asks for a font for every character of a screen that the window's font cannot draw. Every + * string of the frame is in the one blob, so one pass over it covers the title, the queue and + * the tooltips with the rows. + */ +void FindFontsFor(const DeviewScreen* screen) +{ + if (state.font == nullptr || + screen->strings == nullptr || + state.fontData.size() >= fontLimit) + { + return; + } + + const char* text = reinterpret_cast(screen->strings); + const char* const end = text + screen->stringsLength; + std::vector wanted; + while (text < end) + { + /* ASCII, all of which the embedded font has, and which is nearly every byte of nearly + * every screen. */ + if (static_cast(*text) < 0x80) + { + text++; + continue; + } + + unsigned int codepoint = 0; + text += std::max(1, ImTextCharFromUtf8(&codepoint, text, end)); + if (codepoint > IM_UNICODE_CODEPOINT_MAX) + { + continue; + } + + if (state.asked.empty()) + { + state.asked.resize(static_cast(IM_UNICODE_CODEPOINT_MAX) + 1); + } + + if (state.asked[codepoint]) + { + continue; + } + + state.asked[codepoint] = true; + if (!state.font->IsGlyphInFont(static_cast(codepoint))) + { + wanted.push_back(codepoint); + } + } + + if (wanted.empty()) + { + return; + } + + if (!state.finder) + { + state.finder = std::make_shared(); + std::thread(FindFonts, state.finder).detach(); + } + + { + const std::lock_guard lock(state.finder->mutex); + state.finder->wanted.insert(state.finder->wanted.end(), wanted.begin(), wanted.end()); + } + + state.finder->wake.notify_one(); +} + +/* + * Merges what the finder has read into the window's font. At the top of a frame: ImGui takes a + * new source between frames, and drops what it had rasterised from the font as it does, so a + * character already drawn as missing is looked for again. + */ +void TakeFonts() +{ + if (!state.finder) + { + return; + } + + std::vector found; + { + const std::lock_guard lock(state.finder->mutex); + found.swap(state.finder->found); + } + + ImGuiIO& io = ImGui::GetIO(); + for (FoundFont& font : found) + { + if (state.fontData.size() >= fontLimit) + { + return; + } + + state.fontData.push_back(std::move(font.data)); + std::vector& data = state.fontData.back(); + + /* Merged into the font added before it, which is the window's: see deview_init. */ + ImFontConfig config; + config.MergeMode = true; + config.FontNo = static_cast(font.face); + config.ExtraSizeScale = font.scale; + config.FontDataOwnedByAtlas = false; + + /* A font stb_truetype turns out not to read after all is left out. That is nothing for + * ImGui to assert or to write to its log, which is what it does with a font it is given + * and cannot use. */ + const bool asserts = io.ConfigErrorRecoveryEnableAssert; + const bool logs = io.ConfigErrorRecoveryEnableDebugLog; + io.ConfigErrorRecoveryEnableAssert = false; + io.ConfigErrorRecoveryEnableDebugLog = false; + const ImFont* merged = io.Fonts->AddFontFromMemoryTTF( + data.data(), + static_cast(data.size()), + 0.0f, + &config); + io.ConfigErrorRecoveryEnableAssert = asserts; + io.ConfigErrorRecoveryEnableDebugLog = logs; + if (merged == nullptr) + { + state.fontData.pop_back(); + } + } +} + +ImFont* AddEmbeddedFont(const uint8_t* fontTtf, int32_t fontLength, float fontSize) +{ + /* ImGui frees font data with its own allocator, so hand it a copy rather than memory owned + * by the managed heap. */ + void* copy = IM_ALLOC(static_cast(fontLength)); + memcpy(copy, fontTtf, static_cast(fontLength)); + ImFontConfig config; + config.FontDataOwnedByAtlas = true; + config.ExtraSizeScale = emScale; + return ImGui::GetIO().Fonts->AddFontFromMemoryTTF(copy, fontLength, fontSize <= 0.0f ? 15.0f : fontSize, &config); +} + /* ---- texture protocol (ImGuiBackendFlags_RendererHasTextures) ---- */ void UpdateTexture(ImTextureData* texture) @@ -1103,11 +1696,41 @@ void RowText(const DeviewScreen* screen, const DeviewRow& row, ImVec2 textPos) continue; } - list->AddText( - ImVec2(textPos.x + static_cast(segment.column) * cell, textPos.y), - colour, - begin, - end); + const ImVec2 position(textPos.x + static_cast(segment.column) * cell, textPos.y); + + /* + * Cut off where the next character starts, when it is drawn wider than the cells the grid + * gave it: a character from one of the machine's fonts, which is as wide as that font + * made it. The grid says where everything after it goes whatever its width, so drawn + * whole it would run on under the characters that follow. Over spaces it may, there being + * nothing there to run under, which is what leaves a warning sign or a star with a space + * after it whole. A run from the embedded font is exactly its cells and is never cut, and + * the last segment has nothing after it. + */ + if (index + 1 < row.segmentCount) + { + const DeviewSegment& next = screen->segments[row.segmentOffset + index + 1]; + int column = next.column; + const char* following; + const char* followingEnd; + if (Slice(screen, next.textOffset, next.textLength, &following, &followingEnd)) + { + for (; following < followingEnd && *following == ' '; following++) + { + column++; + } + } + + const float limit = textPos.x + static_cast(column) * cell; + if (ImGui::CalcTextSize(begin, end).x > limit - position.x) + { + const ImVec4 cells(position.x, -FLT_MAX, limit, FLT_MAX); + list->AddText(nullptr, 0.0f, position, colour, begin, end, 0.0f, &cells); + continue; + } + } + + list->AddText(position, colour, begin, end); } ImGui::Dummy(ImVec2(0.0f, ImGui::GetTextLineHeight())); @@ -2269,14 +2892,15 @@ int32_t deview_init( if (fontTtf != nullptr && fontLength > 0) { - /* ImGui frees font data with its own allocator, so hand it a copy rather than memory - * owned by the managed heap. */ - void* copy = IM_ALLOC(static_cast(fontLength)); - memcpy(copy, fontTtf, static_cast(fontLength)); - ImFontConfig config; - config.FontDataOwnedByAtlas = true; - config.ExtraSizeScale = emScale; - io.Fonts->AddFontFromMemoryTTF(copy, fontLength, fontSize <= 0.0f ? 15.0f : fontSize, &config); + /* + * Twice. The first is the atlas's default, and so what a capture's context draws with: + * the embedded font and nothing else, on every machine. The second is the window's, which + * the machine's fonts are merged into, and it is added last because a merge goes into + * the font added before it. See State::font. + */ + AddEmbeddedFont(fontTtf, fontLength, fontSize); + state.font = AddEmbeddedFont(fontTtf, fontLength, fontSize); + io.FontDefault = state.font; } ResetInput(); @@ -2306,6 +2930,9 @@ int32_t deview_present(const DeviewScreen* screen) /* Before the frame asks for its pictures, so one that finished decoding since the last frame is * drawn in this one. */ TakeDecoded(); + /* And its fonts, for that reason and because a font can only be added between frames. */ + TakeFonts(); + FindFontsFor(screen); ImGui::NewFrame(); BuildFrame(screen); ImGui::Render(); @@ -2523,6 +3150,7 @@ void deview_shutdown(void) /* Before CloseWindow, which takes the GL context these live in with it. */ UnloadPictures(); + StopFontFinder(); if (state.context != nullptr) { @@ -2531,6 +3159,11 @@ void deview_shutdown(void) state.context = nullptr; } + /* After the context, whose atlas was still reading glyphs out of these. */ + state.font = nullptr; + state.fontData.clear(); + state.asked.clear(); + CloseWindow(); state.initialised = false; state.windowOpen = false; diff --git a/src/DiffEngineViewer.Tests/PixelTests.OutsideTheFont.Linux.verified.png b/src/DiffEngineViewer.Tests/PixelTests.OutsideTheFont.Linux.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..39cdcf3771dc91e203ff8e7f46a08db557f2f443 GIT binary patch literal 56700 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 literal 0 HcmV?d00001 diff --git a/src/DiffEngineViewer.Tests/PixelTests.cs b/src/DiffEngineViewer.Tests/PixelTests.cs index de37c652e..ef0da762e 100644 --- a/src/DiffEngineViewer.Tests/PixelTests.cs +++ b/src/DiffEngineViewer.Tests/PixelTests.cs @@ -239,15 +239,6 @@ public Task InlineAccepted() public Task Minimal() => Capture(ViewerSession.Apply(Fixtures.File(Fixtures.Long(true), Fixtures.Long(false)), CommandKind.ToggleMinimal)); - /// - /// raylib does three things at the end of a frame, behind one flag: puts it on the screen, - /// reads input, and waits for the next frame. raylib 6.0's CMake turned that flag on, so - /// deview_present did none of them - the window stayed blank and took no keys, and the loop - /// drew as fast as it could. A capture draws into a texture and never gets that far, so every - /// snapshot above kept passing. The wait is the one of the three that can be timed from here, - /// so it stands for all of them. Last in the order, so the frames it draws in the live context - /// come after every capture rather than between two of them. - /// /// /// The image comparison six steps in, eight times the size that fits, and dragged to the top /// right corner: each pane filled with the same part of its picture, cut off at the edges of @@ -311,9 +302,62 @@ public Task DocumentPage() => public Task DocumentPageInQueue() => Capture(Fixtures.DocumentInQueue()); + /// + /// Text the embedded font has no glyphs for: wide characters, which the grid gives two cells, + /// narrow ones, marks that take none, and one from outside the basic plane. + /// + /// In its window the Linux head draws these from the machine's own fonts, and in a capture it + /// never does, because a baseline would then be a picture of whatever a runner had installed. + /// So this is the replacement glyph at each character's column, on a machine with every font + /// and on one with none. It is shown in the window first, and for long enough that the fonts + /// this machine has for it have been found and merged: that is the state a capture has to be + /// indifferent to, and one that drew with the window's font would fail here on any machine + /// with a font for one of these characters. + /// + /// + /// Linux only. The macOS head draws through Core Text, in a capture as in its window, so there + /// these characters are the runner's fonts, and a baseline of them has to come from that runner. + /// + /// [Test] [PixelTest] [NotInParallel(nameof(PixelTests), Order = 15)] + [SkipOnMac("There is no macOS baseline for this scene: that head draws these characters from the runner's own fonts, and a capture host never creates its window.")] + public async Task OutsideTheFont() + { + var state = Fixtures.File( + "plain text\n日本語 and 漢字\n한국어 텍스트\nעברית عربي ไทย น้ำ\nemoji \U0001F600 and ★\nmixed 中a文b字c", + "plain text\n日本語 and 漢子\n한국어 텍스트\nעברית عربي ไทย น้ำ\nemoji \U0001F600 and ★\nmixed 中a文b字c"); + var screen = ScreenBuilder.Build(ViewerSession.Resize(state, columns, rows)); + await OnShimThread( + () => + { + // A second of frames. A font is asked for on the first of them, found on a thread + // of its own, and merged at the top of the next frame after it lands + for (var frame = 0; frame < 60; frame++) + { + window!.Present(screen); + } + + return true; + }); + + await Capture(state); + } + + /// + /// raylib does three things at the end of a frame, behind one flag: puts it on the screen, + /// reads input, and waits for the next frame. raylib 6.0's CMake turned that flag on, so + /// deview_present did none of them - the window stayed blank and took no keys, and the loop + /// drew as fast as it could. A capture draws into a texture and never gets that far, so every + /// snapshot above kept passing. The wait is the one of the three that can be timed from here, + /// so it stands for all of them. Last in the order, so the frames it draws in the live context + /// come after the captures rather than between two of them. is + /// the one capture with frames of its own ahead of it, which are what it is about. + /// + [Test] + [PixelTest] + [NotInParallel(nameof(PixelTests), Order = 16)] [SkipOnMac("A capture host never creates the macOS window, and that head waits for the next frame in its event pump rather than after drawing one.")] public async Task PresentWaitsForTheNextFrame() { From 48cf3ea1104b6ed71976b284292d534f0a136bc4 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 16:43:59 +1000 Subject: [PATCH 26/73] Start the viewer in its own folder rather than the test host's A launched viewer took its working directory from the test host, which is usually the test project's output folder. On Windows a directory a process is in cannot be deleted, and a viewer hidden behind a tray lives for the session, so git clean -xdf or removing a worktree failed with nothing on screen to say what was holding it. The viewer now starts in the folder it runs from, which it holds anyway. A relative path on a --delete or --diff launch meant relative to the host, so it is rooted first; a rooted one goes over as the caller spelt it, since the row is settled by a key built from that spelling. DiffRunner.LaunchProcess is left alone: a third party tool resolves relative arguments against the directory it inherits, and its window is on screen for as long as it holds one. --- src/DiffEngine.Tests/ViewerLauncherTests.cs | 106 ++++++++++++++++++++ src/DiffEngine/Viewer/ViewerLauncher.cs | 60 ++++++++++- 2 files changed, 161 insertions(+), 5 deletions(-) diff --git a/src/DiffEngine.Tests/ViewerLauncherTests.cs b/src/DiffEngine.Tests/ViewerLauncherTests.cs index e15d36643..d95e9b1bd 100644 --- a/src/DiffEngine.Tests/ViewerLauncherTests.cs +++ b/src/DiffEngine.Tests/ViewerLauncherTests.cs @@ -59,6 +59,112 @@ public async Task ElsewhereTheViewerHasStandardStreamsOfItsOwn() await Assert.That(info.RedirectStandardError).IsTrue(); } + /// + /// A viewer took its working directory from the test host, which is usually the test project's + /// output folder, and held it for as long as it lived. It is started in its own folder, which + /// it holds by running from it whatever its working directory is. + /// + [Test] + [Arguments(true)] + [Arguments(false)] + public async Task TheViewerStartsInItsOwnFolder(bool windows) + { + var directory = Path.Combine(Path.GetTempPath(), "viewer folder"); + + var info = ViewerLauncher.StartInfo(Path.Combine(directory, "DiffEngineViewer.exe"), "--attach", windows); + + await Assert.That(info.WorkingDirectory).IsEqualTo(directory); + } + + /// + /// The same thing as Windows sees it, which is where it mattered: the directory the host was in + /// when it started a viewer could not be deleted until that viewer exited, so + /// git clean -xdf failed behind a viewer nobody could see. + /// + /// The one test that moves this process's current directory, so it runs alone and puts it back + /// before anything else is asked. + /// + /// + [Test] + [NotInParallel] + [RunOn(TUnit.Core.Enums.OS.Windows)] + public async Task ARunningViewerDoesNotHoldTheHostsDirectory() + { + var directory = Path.Combine(Path.GetTempPath(), $"DiffEngine.HostDirectory.{Guid.NewGuid():N}"); + Directory.CreateDirectory(directory); + var previous = Environment.CurrentDirectory; + Process? viewer; + Environment.CurrentDirectory = directory; + try + { + // FakeDiffTool stands in for the viewer: no window, and gone by itself in five seconds + viewer = ViewerLauncher.Start(FakeDiffTool.Exe, ""); + } + finally + { + Environment.CurrentDirectory = previous; + } + + try + { + await Assert.That(viewer).IsNotNull(); + // Still running, or the delete below says nothing about what a running one holds + await Assert.That(viewer!.HasExited).IsFalse(); + await Assert.That(() => Directory.Delete(directory)).ThrowsNothing(); + } + finally + { + if (viewer is not null) + { + using (viewer) + { + try + { + viewer.Kill(); + } + catch (InvalidOperationException) + { + // Already gone, which is all the kill was for + } + + viewer.WaitForExit(5000); + } + } + + if (Directory.Exists(directory)) + { + Directory.Delete(directory); + } + } + } + + /// + /// A relative path meant relative to the host's directory, which is no longer where the viewer + /// starts. + /// + [Test] + public async Task ARelativePathIsHandedOverRooted() + { + var rooted = ViewerLauncher.Rooted("Sample.received.txt"); + + // Not compared with a path built from the current directory here, which the test above + // moves for a moment + await Assert.That(Path.IsPathRooted(rooted)).IsTrue(); + await Assert.That(Path.GetFileName(rooted)).IsEqualTo("Sample.received.txt"); + } + + /// + /// And one that is already rooted goes over as the caller spelt it, tidied or not: the row is + /// settled later by a key built from that spelling. + /// + [Test] + public async Task ARootedPathIsHandedOverAsGiven() + { + var path = Path.Combine(Path.GetTempPath(), "one", "..", "Sample.received.txt"); + + await Assert.That(ViewerLauncher.Rooted(path)).IsEqualTo(path); + } + /// /// The patch goes in a file named on the command line, because a launch that redirects stdin /// cannot use ShellExecute. diff --git a/src/DiffEngine/Viewer/ViewerLauncher.cs b/src/DiffEngine/Viewer/ViewerLauncher.cs index 1079f0067..26f2849c2 100644 --- a/src/DiffEngine/Viewer/ViewerLauncher.cs +++ b/src/DiffEngine/Viewer/ViewerLauncher.cs @@ -16,6 +16,14 @@ namespace DiffEngine; /// close-on-exec, so only the three standard streams pass to a child, and redirecting all three /// and closing this side of them is enough. /// +/// +/// Nor is the host's working directory, which a child takes unless it is given another. For a +/// test host that is usually the test project's output folder, and on Windows a directory some +/// process is in cannot be deleted. A viewer hidden behind a tray lives for the session, so +/// git clean -xdf, or removing a worktree, failed with nothing on screen to say what was +/// holding it. A viewer is started in its own folder instead, which it holds by running from it +/// whatever its working directory is. +/// /// static class ViewerLauncher { @@ -99,7 +107,7 @@ static void TryDelete(string file) /// /// public static bool LaunchDelete(string file) => - Start($"--delete \"{file}\"") is not null; + Start($"--delete \"{Rooted(file)}\"") is not null; /// /// Starts a viewer holding one failing pair, for when the tool resolved for that pair is the @@ -107,7 +115,35 @@ public static bool LaunchDelete(string file) => /// for the same reason: the pair joins a queue that later pairs can join too. /// public static bool LaunchDiff(string temp, string target) => - Start(DiffArguments(temp, target)) is not null; + Start(DiffArguments(Rooted(temp), Rooted(target))) is not null; + + /// + /// A path as the viewer has to be handed it now that it no longer starts in the host's + /// directory, which is what a relative one was relative to. + /// + /// One that is already rooted goes over exactly as it was given, not normalised: the entry is + /// settled later by a key built from the caller's own spelling of the path, and a viewer told + /// a tidier one would hold a row that settle never finds. + /// + /// + internal static string Rooted(string path) + { + try + { + if (Path.IsPathRooted(path)) + { + return path; + } + + return Path.GetFullPath(path); + } + catch (Exception exception) + when (exception is ArgumentException or NotSupportedException or IOException) + { + // Not a path this process can resolve, so not one it can improve on either + return path; + } + } /// /// Built here rather than at each caller, because the tray stores these arguments against the @@ -133,9 +169,18 @@ public static string DiffArguments(string temp, string target) => return null; } + return Start(tool.ExePath, arguments); + } + + /// + /// The launch itself, apart from deciding which copy to start, so a test can hand it a + /// stand-in rather than whichever viewer the machine running it has installed. + /// + internal static Process? Start(string exePath, string arguments) + { try { - return Start(StartInfo(tool.ExePath, arguments, RuntimeInformation.IsOSPlatform(OSPlatform.Windows))); + return Start(StartInfo(exePath, arguments, RuntimeInformation.IsOSPlatform(OSPlatform.Windows))); } catch (Exception exception) { @@ -150,11 +195,15 @@ public static string DiffArguments(string temp, string target) => /// internal static ProcessStartInfo StartInfo(string exePath, string arguments, bool windows) { + // The resolved path is always a full one. A bare file name has no directory to name, and + // an empty working directory is the one a child inherits, which is no worse than before + var directory = Path.GetDirectoryName(exePath) ?? ""; if (windows) { return new(exePath, arguments) { - UseShellExecute = true + UseShellExecute = true, + WorkingDirectory = directory }; } @@ -164,7 +213,8 @@ internal static ProcessStartInfo StartInfo(string exePath, string arguments, boo CreateNoWindow = true, RedirectStandardInput = true, RedirectStandardOutput = true, - RedirectStandardError = true + RedirectStandardError = true, + WorkingDirectory = directory }; } From 48f4f184ba30d3a2a4694bbadd9304c5df0ff2f1 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:01:25 +1000 Subject: [PATCH 27/73] Report a viewer that exits with a failure as not launched ViewerLaunchGate waited for the port and then reported the launch whatever had happened to the process, so a viewer that could not take the launch still read as Launched. AddInlineAsync turned that into Queued, and a caller told Queued stages nothing: the snapshot was in no queue and in no file. A copy from before 20.5.0 exits with 2 on --payload, and an apphost with no runtime exits before any viewer code runs. Each held the gate for the whole five second wait and left its payload file in the temp directory. The launcher now hands back the process, and the wait ends as Failed as soon as that process has exited with a failure. A clean exit is still waited on, since a viewer that hands its work to an owner exits with zero, and one that is running and slow is still reported as launched. A failed inline launch takes its payload file back. Two things about which copy is started, from the same item. A wildcard over folders named for versions is taken highest first rather than most recently written, so the NuGet cache no longer yields whichever DiffEngine was restored last. And a copy stamped older than 20.5.0 is passed over while a newer one is further down the search order; it is still taken when it is the only one, and one an environment variable names is never second guessed. --- .../ViewerClientUnownedTests.cs | 2 +- src/DiffEngine.Tests/ViewerContractTests.cs | 158 +++++++++++++++ src/DiffEngine.Tests/ViewerLaunchGateTests.cs | 184 +++++++++++++++++- .../ViewerThatCannotStartTests.cs | 135 +++++++++++++ .../WildcardFileFinderTests.cs | 68 +++++++ src/DiffEngine/DiffRunner_Inline.cs | 23 ++- src/DiffEngine/DiffTools_Add.cs | 17 +- .../Implementation/DiffEngineViewer.cs | 5 + src/DiffEngine/OsSettingsResolver.cs | 75 +++++-- src/DiffEngine/Tray/PendingFiles.cs | 5 + .../Viewer/FallbackViewerDirectories.cs | 4 +- src/DiffEngine/Viewer/ViewerContract.cs | 85 ++++++++ src/DiffEngine/Viewer/ViewerLaunchGate.cs | 89 +++++++-- src/DiffEngine/Viewer/ViewerLauncher.cs | 45 +++-- src/DiffEngine/WildcardFileFinder.cs | 152 +++++++++++++-- src/FakeDiffTool/Program.cs | 11 +- 16 files changed, 982 insertions(+), 76 deletions(-) create mode 100644 src/DiffEngine.Tests/ViewerContractTests.cs create mode 100644 src/DiffEngine.Tests/ViewerThatCannotStartTests.cs create mode 100644 src/DiffEngine/Viewer/ViewerContract.cs diff --git a/src/DiffEngine.Tests/ViewerClientUnownedTests.cs b/src/DiffEngine.Tests/ViewerClientUnownedTests.cs index 32bff60dd..378ef542a 100644 --- a/src/DiffEngine.Tests/ViewerClientUnownedTests.cs +++ b/src/DiffEngine.Tests/ViewerClientUnownedTests.cs @@ -272,7 +272,7 @@ public async Task ANonViewerOnThePortIsReportedRatherThanTakenForAnOwner() () => { launches++; - return Task.FromResult(true); + return Task.FromResult(null); }, Cancel.None, isOwned: () => ViewerClient.IsOwned(port)); diff --git a/src/DiffEngine.Tests/ViewerContractTests.cs b/src/DiffEngine.Tests/ViewerContractTests.cs new file mode 100644 index 000000000..b1bea7d6a --- /dev/null +++ b/src/DiffEngine.Tests/ViewerContractTests.cs @@ -0,0 +1,158 @@ +/// +/// Which installed copy of the viewer resolves when there is more than one. +/// +/// A globally installed tool and the copy shipped with a tray are looked for ahead of the bundled +/// one, and either can be older than the library about to launch it. A viewer from before 20.5.0 +/// exits on the --payload an inline launch names, so with one of those first in the order +/// no inline snapshot reached a viewer, whatever newer copy sat behind it. +/// +/// +/// The stand-ins are an empty file for the executable and, beside it, an assembly whose version +/// is the one read: an executable with no version of its own is every apphost off Windows, so +/// the same arrangement reads the same way on all three platforms. +/// +/// +public class ViewerContractTests : + IDisposable +{ + [Test] + [Arguments("20.5.0+de0e3be5177093d6e915f2fa27970455f29dfc53")] + [Arguments("20.5")] + [Arguments("20.6.0")] + [Arguments("21.0.0-beta.1+0cb4f830cb45e9a87aabfd16928ac27eb0fced94")] + public async Task ACopyFromTwentyFiveOnMeetsIt(string productVersion) => + await Assert.That(ViewerContract.IsMetBy(productVersion)).IsTrue(); + + [Test] + [Arguments("20.4.0+80a966e0b1add0f6f65c16f42db594a7eda972d1")] + [Arguments("20.3.1+65e8e790c676ae4cf6d98783f35345db2a926e47")] + [Arguments("20.0.0-beta.30+5c6d11e917702eb170a505647a4ce6cda8576b21")] + [Arguments("19.3.3")] + public async Task ACopyFromBeforeItDoesNot(string productVersion) => + await Assert.That(ViewerContract.IsMetBy(productVersion)).IsFalse(); + + /// + /// A copy that does not say what it is is not passed over on a guess. + /// + [Test] + public async Task ACopyWithNoVersionIsTakenToMeetIt() + { + await Assert.That(ViewerContract.IsMetBy(null)).IsTrue(); + await Assert.That(ViewerContract.IsMetBy("")).IsTrue(); + await Assert.That(ViewerContract.IsMetBy("a local build")).IsTrue(); + } + + /// + /// The read itself, off an assembly this build produced, so the version is one known here. + /// + [Test] + public async Task TheVersionIsReadFromTheAssemblyBesideAnExecutableThatHasNone() + { + var viewer = Copy("current", typeof(DiffRunner)); + + var version = ViewerContract.ProductVersion(viewer); + + await Assert.That(version).IsNotNull(); + await Assert.That(version!).StartsWith(FallbackViewerDirectories.LibraryVersion()!, StringComparison.OrdinalIgnoreCase); + } + + [Test] + public async Task AnOlderCopyIsPassedOverForANewerOneBehindIt() + { + Copy("tray", typeof(AllFiles)); + var bundled = Copy("bundled", typeof(DiffRunner)); + + await Assert.That(Resolve("tray", "bundled")).IsEqualTo(bundled); + } + + /// + /// The order is otherwise the one written: a copy that meets the contract is not passed over + /// for a later one that also does. + /// + [Test] + public async Task TheFirstCopyThatMeetsItIsTheOneTaken() + { + var global = Copy("global", typeof(DiffRunner)); + Copy("bundled", typeof(DiffRunner)); + + await Assert.That(Resolve("global", "bundled")).IsEqualTo(global); + } + + /// + /// Passed over, not refused. An older viewer still takes a pair and a delete, which is better + /// than no viewer, and the launch gate reports the inline launch it cannot take. + /// + [Test] + public async Task AnOlderCopyIsStillFoundWhenItIsTheOnlyOne() + { + var tray = Copy("tray", typeof(AllFiles)); + + await Assert.That(Resolve("tray", "bundled")).IsEqualTo(tray); + } + + /// + /// Only the viewer is chosen between this way. Every other tool is started with the two + /// paths its own definition gives it, and which copy of it is found is none of this + /// library's business. + /// + [Test] + public async Task OnlyTheViewerIsChosenBetween() + { + await Assert.That(DiffTools.PreferredCopy(DiffTool.DiffEngineViewer)).IsNotNull(); + await Assert.That(DiffTools.PreferredCopy(DiffTool.BeyondCompare)).IsNull(); + await Assert.That(DiffTools.PreferredCopy(null)).IsNull(); + } + + /// + /// Through the resolution DiffTools runs for the viewer, over search directories of the test's + /// own in the order given. + /// + string? Resolve(params string[] directories) + { + var launchArguments = new LaunchArguments( + Left: (temp, target) => $"\"{target}\" \"{temp}\"", + Right: (temp, target) => $"\"{temp}\" \"{target}\""); + var settings = new OsSettings( + viewerName, + launchArguments, + directories.Select(_ => Path.Combine(root, _)).ToArray()); + + OsSettingsResolver.Resolve( + "ViewerContractTests", + new(settings, settings, settings), + out var path, + out _, + DiffTools.PreferredCopy(DiffTool.DiffEngineViewer)); + return path; + } + + /// + /// A copy of the viewer whose version is that of the assembly + /// is in. EmptyFiles stands in for an older one: it is a dependency of the library, so it is + /// always beside the tests, and it is a long way short of version 20. + /// + string Copy(string directory, Type versioned) + { + var full = Path.Combine(root, directory); + Directory.CreateDirectory(full); + var viewer = Path.Combine(full, viewerName); + File.WriteAllText(viewer, ""); + File.Copy(versioned.Assembly.Location, Path.ChangeExtension(viewer, ".dll")); + return viewer; + } + + // Not the viewer's own name, which PATH is searched for after the directories: on a machine + // with the viewer installed as a tool that copy would join the ones under test + static readonly string viewerName = + RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "ViewerContractStandIn.exe" : "ViewerContractStandIn"; + + readonly string root = Path.Combine(Path.GetTempPath(), $"DiffEngine.ViewerContract.{Guid.NewGuid():N}"); + + public void Dispose() + { + if (Directory.Exists(root)) + { + Directory.Delete(root, true); + } + } +} diff --git a/src/DiffEngine.Tests/ViewerLaunchGateTests.cs b/src/DiffEngine.Tests/ViewerLaunchGateTests.cs index 8d109119a..5c0b526e3 100644 --- a/src/DiffEngine.Tests/ViewerLaunchGateTests.cs +++ b/src/DiffEngine.Tests/ViewerLaunchGateTests.cs @@ -74,7 +74,7 @@ public async Task AViewerThatNeverAnswersDoesNotHoldTheGateForever() launch: () => { Interlocked.Increment(ref starts); - return true; + return Running(); }, isOwned: () => false, canLaunch: () => true)))); @@ -98,7 +98,7 @@ public async Task ALaunchThatCouldNotStartIsReportedRatherThanWaitedOn() { var outcome = ViewerLaunchGate.Launch( retry: () => true, - launch: () => false, + launch: () => null, isOwned: () => false, canLaunch: () => true); @@ -110,6 +110,142 @@ public async Task ALaunchThatCouldNotStartIsReportedRatherThanWaitedOn() } } + /// + /// A viewer that starts and cannot take the launch is no more a launch than one that never + /// started. A copy from before 20.5.0 exits with 2 on the --payload it does not know, and an + /// apphost with no runtime to run on exits before any of the viewer's code does. Either was + /// waited on for the whole of BindWait with the gate held, and then reported as launched - so + /// an inline snapshot was called queued, and the caller staged nothing, when no process had it. + /// + [Test] + public async Task AViewerThatExitsWithAFailureIsReportedRatherThanWaitedOn() + { + var previous = ViewerLaunchGate.BindWait; + // Long enough that waiting it out would show in this test's duration. + ViewerLaunchGate.BindWait = TimeSpan.FromSeconds(20); + try + { + var elapsed = Stopwatch.StartNew(); + + var outcome = ViewerLaunchGate.Launch( + retry: () => true, + launch: () => Exited(2), + isOwned: () => false, + canLaunch: () => true); + + await Assert.That(outcome).IsEqualTo(ViewerLaunchOutcome.Failed); + await Assert.That(elapsed.Elapsed).IsLessThan(TimeSpan.FromSeconds(10)); + } + finally + { + ViewerLaunchGate.BindWait = previous; + } + } + + /// + [Test] + public async Task AViewerThatExitsWithAFailureIsReportedRatherThanWaitedOnAsync() + { + var previous = ViewerLaunchGate.BindWait; + ViewerLaunchGate.BindWait = TimeSpan.FromSeconds(20); + try + { + var elapsed = Stopwatch.StartNew(); + + var outcome = await ViewerLaunchGate.LaunchAsync( + retry: () => Task.FromResult(true), + launch: () => Task.FromResult(Exited(2)), + Cancel.None, + isOwned: () => false, + canLaunch: () => true); + + await Assert.That(outcome).IsEqualTo(ViewerLaunchOutcome.Failed); + await Assert.That(elapsed.Elapsed).IsLessThan(TimeSpan.FromSeconds(10)); + } + finally + { + ViewerLaunchGate.BindWait = previous; + } + } + + /// + /// An owner that turns up while a failed viewer is being waited on is somebody else's, and was + /// never handed this caller's work. Read as the viewer this call started, it had the caller + /// told its snapshot was queued by a process that had never heard of it. + /// + [Test] + public async Task AnOwnerArrivingBehindAFailedViewerIsNotTakenForIt() + { + var probes = 0; + + var outcome = ViewerLaunchGate.Launch( + retry: () => true, + launch: () => Exited(2), + // Nobody when the gate decides to launch, and somebody by the time it waits + isOwned: () => Interlocked.Increment(ref probes) > 1, + canLaunch: () => true); + + await Assert.That(outcome).IsEqualTo(ViewerLaunchOutcome.Failed); + } + + /// + /// A clean exit is not a failure to start. A viewer that finds the port already bound hands + /// its work to whoever bound it and exits with zero, so the owner the next probe finds does + /// have the work, and the launch is reported as one. + /// + [Test] + public async Task AViewerThatHandedItsWorkOverAndExitedIsStillALaunch() + { + var previous = ViewerLaunchGate.BindWait; + // Long enough that reaching the end of it would show, so the answer is the owner's + ViewerLaunchGate.BindWait = TimeSpan.FromSeconds(20); + try + { + var probes = 0; + var elapsed = Stopwatch.StartNew(); + + var outcome = ViewerLaunchGate.Launch( + retry: () => true, + launch: () => Exited(0), + // Nobody when the gate decides to launch or first waits, and then the owner + isOwned: () => Interlocked.Increment(ref probes) > 2, + canLaunch: () => true); + + await Assert.That(outcome).IsEqualTo(ViewerLaunchOutcome.Launched); + await Assert.That(elapsed.Elapsed).IsLessThan(TimeSpan.FromSeconds(10)); + } + finally + { + ViewerLaunchGate.BindWait = previous; + } + } + + /// + /// Nor is a clean exit with nobody on the port, which is a viewer that opened, was dealt with + /// and closed before a probe caught it. It is waited on as a running one is, and reported the + /// same way: what it held when it closed, it staged. + /// + [Test] + public async Task AViewerThatExitedCleanlyIsNotAFailure() + { + var previous = ViewerLaunchGate.BindWait; + ViewerLaunchGate.BindWait = TimeSpan.FromMilliseconds(200); + try + { + var outcome = ViewerLaunchGate.Launch( + retry: () => true, + launch: () => Exited(0), + isOwned: () => false, + canLaunch: () => true); + + await Assert.That(outcome).IsEqualTo(ViewerLaunchOutcome.Launched); + } + finally + { + ViewerLaunchGate.BindWait = previous; + } + } + /// /// An owner that is there and refuses the payload is not answered by launching another, which /// would bind nothing and be refused in its turn. @@ -124,7 +260,7 @@ public async Task ARefusingOwnerIsNotLaunchedOver() launch: () => { launches++; - return Task.FromResult(true); + return Task.FromResult(Running()); }, Cancel.None, isOwned: () => true); @@ -263,7 +399,7 @@ public async Task TheDefaultProbeReadsTheRealPort() launch: () => { launches++; - return true; + return Running(); }); await Assert.That(outcome).IsEqualTo(ViewerLaunchOutcome.Taken); @@ -290,17 +426,45 @@ sealed class FakeViewer public int Starts => starts; - public bool Start() + public Process? Start() { Interlocked.Increment(ref starts); Interlocked.Exchange(ref upAt, (elapsed.Elapsed + BindDelay).Ticks); - return true; + return Running(); } public bool IsUp() => elapsed.Elapsed.Ticks >= Interlocked.Read(ref upAt); } + /// + /// The process of a viewer that is still running, which is all the gate asks of one it has + /// started. This process, since it is. What the gate disposes when its wait is over is the + /// object, which holds a handle of its own and nothing of the process. + /// + static Process Running() => + Process.GetCurrentProcess(); + + /// + /// A process that has exited with : the command interpreter, told to + /// do that and nothing else. A real one, because what the gate reads is Process.HasExited and + /// Process.ExitCode, and how those behave is the part a stand-in would only be guessing at. + /// + static Process Exited(int code) + { + var windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + var process = Process.Start( + new ProcessStartInfo( + windows ? "cmd.exe" : "/bin/sh", + windows ? $"/c exit {code}" : $"-c \"exit {code}\"") + { + UseShellExecute = false, + CreateNoWindow = true + })!; + process.WaitForExit(); + return process; + } + /// /// DiffRunner.AddDeleteAsync's shape and then DiffRunner.AddDelete's, on the only thread a /// single threaded context has, which is where xUnit v2 puts a second test once the first is @@ -309,7 +473,7 @@ public bool IsUp() => /// [Test] public Task SyncLaunchBehindAnAsyncDeleteOnTheSameContextFinishes() => - SyncBehindAsync(() => Task.FromResult(true)); + SyncBehindAsync(() => Task.FromResult(Running())); /// /// AddInlineAsync's shape: the launch is ViewerLauncher.LaunchAsync, whose stdin write and @@ -322,10 +486,10 @@ public Task SyncLaunchBehindAnAsyncInlineOnTheSameContextFinishes() => SyncBehindAsync(async () => { await Task.Delay(10); - return true; + return Running(); }); - static async Task SyncBehindAsync(Func> launch) + static async Task SyncBehindAsync(Func> launch) { var previous = ViewerLaunchGate.BindWait; ViewerLaunchGate.BindWait = TimeSpan.FromMilliseconds(300); @@ -343,7 +507,7 @@ static async Task SyncBehindAsync(Func> launch) canLaunch: () => true); syncOutcome = ViewerLaunchGate.Launch( retry: () => true, - launch: () => true, + launch: Running, isOwned: () => false, canLaunch: () => true); }) diff --git a/src/DiffEngine.Tests/ViewerThatCannotStartTests.cs b/src/DiffEngine.Tests/ViewerThatCannotStartTests.cs new file mode 100644 index 000000000..a7d7d6688 --- /dev/null +++ b/src/DiffEngine.Tests/ViewerThatCannotStartTests.cs @@ -0,0 +1,135 @@ +// DiffEngineTray is the obsolete public shim, but its IsRunning is still where the tray check +// lives, and this test has to hold it down. +#pragma warning disable CS0618 + +/// +/// A viewer that resolves and cannot take the launch, from the public entry point down: the real +/// resolution, the real ShellExecute launch and the real probe of the port, with only the +/// executable stood in for. +/// +/// The copy that resolves is not always the one this library was built beside. A globally +/// installed tool and the copy shipped with a tray are both looked for ahead of the bundled one, +/// and either can be older than the arguments it is about to be given: --payload first +/// shipped in 20.5.0, and a viewer from before it exits with 2 on seeing it. The launch was +/// reported as made all the same, so the snapshot was called queued, in a queue no process held, +/// and a caller told that stages nothing. +/// +/// +/// FakeDiffTool copied to the viewer's name is that older copy: it exits with 2 on +/// --payload. Windows only, as everything else that starts FakeDiffTool is. +/// +/// +[NotInParallel] +[RunOn(TUnit.Core.Enums.OS.Windows)] +public class ViewerThatCannotStartTests +{ + [Test] + public async Task AnInlineSnapshotIsNotCalledQueued() + { + using var viewer = new OlderViewer(); + var patch = new InlinePatch(Path.Combine(viewer.Folder, "Tests.cs"), 42, "\"old\"", "new") + { + TestName = "Tests.Method" + }; + var before = PayloadFiles(); + + var result = await DiffRunner.AddInlineAsync(patch); + + await Assert.That(result).IsEqualTo(InlineResult.NoViewerFound); + // The viewer reads its payload file and deletes it, and this one never got that far, so + // the file is the launcher's to take back + await Assert.That(PayloadFiles().Except(before)).IsEmpty(); + } + + static List PayloadFiles() => + Directory.GetFiles(Path.GetTempPath(), "DiffEngineViewer_*.inlinepatch").ToList(); + + /// + /// The stand-in, resolved the way a real copy is - through the variable that overrides where + /// the viewer is looked for - with no tray and nothing on the port, so the launch is the only + /// way left to hand the patch over. + /// + sealed class OlderViewer : + IDisposable + { + const string variable = "DiffEngine_DiffEngineViewer"; + readonly string? previousPort; + readonly bool previousRunning; + readonly bool previousDisabled; + readonly TimeSpan previousBindWait; + + public string Folder { get; } = Path.Combine(Path.GetTempPath(), $"DiffEngine.OlderViewer.{Guid.NewGuid():N}"); + + public OlderViewer() + { + // The apphost under the viewer's name. Everything it loads keeps its own, since the + // apphost looks for the assembly it was built for rather than one named after itself + Directory.CreateDirectory(Folder); + var apphost = Path.GetFileName(FakeDiffTool.Exe); + foreach (var file in Directory.GetFiles(Path.GetDirectoryName(FakeDiffTool.Exe)!)) + { + var name = Path.GetFileName(file); + File.Copy(file, Path.Combine(Folder, name == apphost ? "DiffEngineViewer.exe" : name)); + } + + if (!ViewerServer.TryBind(0, out var bound)) + { + throw new("Could not bind an ephemeral port."); + } + + var port = bound.Port; + bound.Dispose(); + previousPort = Environment.GetEnvironmentVariable(ViewerClient.PortVariable); + previousRunning = DiffEngineTray.IsRunning; + previousDisabled = DiffRunner.Disabled; + previousBindWait = ViewerLaunchGate.BindWait; + Environment.SetEnvironmentVariable(ViewerClient.PortVariable, port.ToString()); + DiffEngineTray.IsRunning = false; + DiffRunner.Disabled = false; + // Well past how long a freshly copied executable can take to start with a virus + // scanner reading it first. The stand-in is noticed when it exits, not when this ends + ViewerLaunchGate.BindWait = TimeSpan.FromSeconds(30); + ViewerClient.ForgetUnowned(); + MaxInstance.ResetCount(); + + try + { + Environment.SetEnvironmentVariable(variable, Folder); + DiffTools.UseOrder(DiffTool.DiffEngineViewer); + // Checked before anything is launched, because the alternative to the stand-in is + // whichever real viewer this machine has installed + if (!DiffTools.TryFindByName(DiffTool.DiffEngineViewer, out var tool) || + !tool.ExePath.StartsWith(Folder, StringComparison.OrdinalIgnoreCase)) + { + throw new($"The stand-in viewer did not resolve. Resolved: {tool?.ExePath}"); + } + } + catch + { + Dispose(); + throw; + } + } + + public void Dispose() + { + Environment.SetEnvironmentVariable(variable, null); + DiffTools.Reset(); + Environment.SetEnvironmentVariable(ViewerClient.PortVariable, previousPort); + DiffEngineTray.IsRunning = previousRunning; + DiffRunner.Disabled = previousDisabled; + ViewerLaunchGate.BindWait = previousBindWait; + ViewerClient.ForgetUnowned(); + MaxInstance.ResetCount(); + try + { + Directory.Delete(Folder, true); + } + catch (Exception exception) + when (exception is IOException or UnauthorizedAccessException) + { + // A stand-in that is still on its way out holds its own files for a moment + } + } + } +} diff --git a/src/DiffEngine.Tests/WildcardFileFinderTests.cs b/src/DiffEngine.Tests/WildcardFileFinderTests.cs index e78b7b601..bf0f43daf 100644 --- a/src/DiffEngine.Tests/WildcardFileFinderTests.cs +++ b/src/DiffEngine.Tests/WildcardFileFinderTests.cs @@ -28,6 +28,74 @@ public async Task MultiMatchDir_order2() await Assert.That(File.Exists(result)).IsTrue(); } + /// + /// The NuGet cache holds a folder for each version of DiffEngine any project on the machine + /// has referenced, and the viewer bundled in each. Taken most recently written first, the one + /// found was whichever had been restored last, so restoring an old project put a viewer from + /// before the arguments this library passes ahead of every newer one. As numbers, too: 20.10.0 + /// is above 20.6.0. + /// + [Test] + public async Task VersionFoldersAreTakenHighestFirst() => + await Assert.That(First("20.10.0", "20.6.0", "20.3.1")).IsEqualTo("20.10.0"); + + /// + /// A release is above every prerelease of it, whichever was written last. + /// + [Test] + public async Task AReleaseIsAboveItsPrereleases() => + await Assert.That(First("21.0.0", "21.0.0-beta.10", "21.0.0-beta.2")).IsEqualTo("21.0.0"); + + /// + /// And prereleases part by part, numbers as numbers: beta.10 is after beta.2, and both are + /// after any alpha. + /// + [Test] + public async Task PrereleasesAreOrderedByTheirLabels() => + await Assert.That(First("21.0.0-beta.10", "21.0.0-beta.2", "21.0.0-alpha.11")).IsEqualTo("21.0.0-beta.10"); + + /// + /// Everything else is still taken most recently written first. A tool's install folder is + /// named for the tool, and a number on its own is not a version: Visual Studio 2022 installs + /// to 2022 and its successor to 18. + /// + [Test] + [Arguments("Beyond Compare 5", "Beyond Compare 4")] + [Arguments("2022", "18")] + [Arguments("20.6.0", "current")] + public async Task OtherFoldersAreTakenMostRecentlyWrittenFirst(string older, string newer) => + await Assert.That(First(older, newer)).IsEqualTo(newer); + + /// + /// The folder a wildcard resolves to first, of ones holding the same file and written in the + /// order given, a day apart, so the last named is the most recently written. + /// + static string First(params string[] folders) + { + var root = Path.Combine(Path.GetTempPath(), $"DiffEngine.Wildcard.{Guid.NewGuid():N}"); + try + { + for (var index = 0; index < folders.Length; index++) + { + var directory = Path.Combine(root, folders[index]); + Directory.CreateDirectory(Path.Combine(directory, "tools")); + File.WriteAllText(Path.Combine(directory, "tools", "viewer.txt"), ""); + Directory.SetLastWriteTime(directory, DateTime.Now.AddDays(index - folders.Length)); + } + + if (!WildcardFileFinder.TryFind(Path.Combine(root, "*", "tools", "viewer.txt"), out var found)) + { + throw new("Nothing was found."); + } + + return Path.GetFileName(Path.GetDirectoryName(Path.GetDirectoryName(found))!); + } + finally + { + Directory.Delete(root, true); + } + } + [Test] public async Task FullFilePath() { diff --git a/src/DiffEngine/DiffRunner_Inline.cs b/src/DiffEngine/DiffRunner_Inline.cs index 180d2e60c..4b1357359 100644 --- a/src/DiffEngine/DiffRunner_Inline.cs +++ b/src/DiffEngine/DiffRunner_Inline.cs @@ -14,9 +14,10 @@ public enum InlineResult Disabled, /// - /// Nothing has the snapshot. No DiffEngineViewer could be resolved, or the owner of the queue - /// declined the payload - which is the same thing from the caller's side, since in both cases - /// the snapshot is pending nowhere. Callers that want a fallback should use it here. + /// Nothing has the snapshot. No DiffEngineViewer could be resolved, the one that was started + /// exited with a failure, or the owner of the queue declined the payload - which is the same + /// thing from the caller's side, since in each case the snapshot is pending nowhere. Callers + /// that want a fallback should use it here. /// NoViewerFound } @@ -83,10 +84,19 @@ public static async Task AddInlineAsync(InlinePatch patch, Cancel // Through the gate, because a parallel run reaches here once per failing snapshot with // nothing owning the port, and every one of them used to start a viewer of its own. + var file = ViewerLauncher.PayloadFile(); var launched = await ViewerLaunchGate.LaunchAsync( async () => await ViewerClient.SendAsync(new(ViewerVerb.Inline, Body: payload), cancel) == SendOutcome.Accepted, - () => ViewerLauncher.LaunchAsync(patch, payload, cancel), + () => ViewerLauncher.LaunchAsync(patch, payload, file, cancel), cancel); + if (launched == ViewerLaunchOutcome.Failed) + { + // Nothing is left that could read it: no viewer was started, or the one that was has + // exited. One that got as far as reading it also deleted it, and then this finds + // nothing + ViewerLauncher.Discard(file); + } + return InlineResultFor(launched); } @@ -100,6 +110,11 @@ public static async Task AddInlineAsync(InlinePatch patch, Cancel /// Capped existed and wrong from then on: with no tray running, every inline snapshot failing /// after the fifth diff tool of a run was reported as handed over and staged by nobody. /// + /// + /// A viewer that was started and exited with a failure is Failed too, for the same reason: it + /// took nothing. That is a copy too old for the arguments this library gives it, or one with + /// no runtime to run on. + /// /// internal static InlineResult InlineResultFor(ViewerLaunchOutcome outcome) => outcome switch diff --git a/src/DiffEngine/DiffTools_Add.cs b/src/DiffEngine/DiffTools_Add.cs index 9f77209d9..eaad1819d 100644 --- a/src/DiffEngine/DiffTools_Add.cs +++ b/src/DiffEngine/DiffTools_Add.cs @@ -46,7 +46,7 @@ public static partial class DiffTools static ResolvedTool? AddTool(string name, DiffTool? diffTool, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, IEnumerable binaryExtensions, OsSupport osSupport, bool useShellExecute, bool createNoWindow, bool killLockingProcess = false) { - if (!OsSettingsResolver.Resolve(name, osSupport, out var exePath, out var launchArguments)) + if (!OsSettingsResolver.Resolve(name, osSupport, out var exePath, out var launchArguments, PreferredCopy(diffTool))) { return null; } @@ -54,6 +54,21 @@ public static partial class DiffTools return AddInner(name, diffTool, autoRefresh, isMdi, supportsText, requiresTarget, binaryExtensions, exePath, launchArguments, useShellExecute, createNoWindow, killLockingProcess); } + /// + /// Which of several installed copies of a tool to take, for the one tool where that is this + /// library's business: the viewer, which it starts with arguments of its own rather than only + /// the two paths every tool is given. See . + /// + internal static Func? PreferredCopy(DiffTool? tool) + { + if (tool == DiffTool.DiffEngineViewer) + { + return ViewerContract.IsMet; + } + + return null; + } + static ResolvedTool? AddInner(string name, DiffTool? diffTool, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, IEnumerable binaries, string exePath, LaunchArguments launchArguments, bool useShellExecute, bool createNoWindow, bool killLockingProcess = false) { Guard.AgainstEmpty(name, nameof(name)); diff --git a/src/DiffEngine/Implementation/DiffEngineViewer.cs b/src/DiffEngine/Implementation/DiffEngineViewer.cs index bd064f5de..99c2370b8 100644 --- a/src/DiffEngine/Implementation/DiffEngineViewer.cs +++ b/src/DiffEngine/Implementation/DiffEngineViewer.cs @@ -59,6 +59,11 @@ and maps (GeoJSON, TopoJSON, KML, KMZ, GPX, WKT, WKB, FlatGeobuf and /// A globally installed tool is preferred, because installing one is an explicit choice of /// which viewer to run. Then the tray's copy, then the bundled copy, which is version matched to /// the library that is about to launch it, then the NuGet cache's. + /// + /// That is the order copies are looked for in, and not quite the order they are taken in: one + /// from before the way this library starts a viewer is passed over while a newer one is + /// further down. See . + /// /// static string[] SearchDirectories(string toolsDirectory, IEnumerable tray, IEnumerable nuGet) { diff --git a/src/DiffEngine/OsSettingsResolver.cs b/src/DiffEngine/OsSettingsResolver.cs index 13b174f41..879679e4a 100644 --- a/src/DiffEngine/OsSettingsResolver.cs +++ b/src/DiffEngine/OsSettingsResolver.cs @@ -50,25 +50,32 @@ internal static string[] ParsePath(string value, char separator) return paths.ToArray(); } + /// + /// Says which of several installed copies the caller would rather have. The first copy it + /// accepts is the one resolved, wherever that comes in the search order, and the first copy + /// of all when it accepts none - so it reorders what is found and never empties it. Not asked + /// about a copy an environment variable names, which is somebody's explicit choice. + /// public static bool Resolve( string tool, OsSupport osSupport, [NotNullWhen(true)] out string? path, - [NotNullWhen(true)] out LaunchArguments? launchArguments) + [NotNullWhen(true)] out LaunchArguments? launchArguments, + Func? preferred = null) { - if (TryResolveForOs(tool, osSupport.Windows, out path, "WINDOWS")) + if (TryResolveForOs(tool, osSupport.Windows, out path, "WINDOWS", preferred)) { launchArguments = osSupport.Windows.LaunchArguments; return true; } - if (TryResolveForOs(tool, osSupport.Linux, out path, "LINUX")) + if (TryResolveForOs(tool, osSupport.Linux, out path, "LINUX", preferred)) { launchArguments = osSupport.Linux.LaunchArguments; return true; } - if (TryResolveForOs(tool, osSupport.Osx, out path, "OSX")) + if (TryResolveForOs(tool, osSupport.Osx, out path, "OSX", preferred)) { launchArguments = osSupport.Osx.LaunchArguments; return true; @@ -83,7 +90,8 @@ static bool TryResolveForOs( string tool, [NotNullWhen(true)] OsSettings? os, [NotNullWhen(true)] out string? path, - string platform) + string platform, + Func? preferred) { path = null; @@ -99,7 +107,7 @@ static bool TryResolveForOs( return true; } - return TryFindExe(exeName, os.PathCommandName, os.SearchDirectories, out path); + return TryFindExe(exeName, os.PathCommandName, os.SearchDirectories, preferred, out path); } public static bool TryFindForEnvironmentVariable(string tool, string exeName, [NotNullWhen(true)] out string? envPath) @@ -150,40 +158,77 @@ public static IEnumerable ExpandProgramFiles(IEnumerable paths) } } - static bool TryFindExe(string exeName, string pathCommandName, IEnumerable searchDirectories, [NotNullWhen(true)] out string? exePath) + static bool TryFindExe(string exeName, string pathCommandName, IEnumerable searchDirectories, Func? preferred, [NotNullWhen(true)] out string? exePath) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { searchDirectories = ExpandProgramFiles(searchDirectories); } + // With nothing preferred this stops at the first copy, having looked no further than it + // ever did. With a preference it goes on past the copies that are turned down, and comes + // back to the first of them only if nothing better turns up + exePath = null; + foreach (var candidate in Installed(exeName, pathCommandName, searchDirectories)) + { + if (preferred == null || + preferred(candidate)) + { + exePath = candidate; + return true; + } + + exePath ??= candidate; + } + + return exePath != null; + } + + /// + /// Every installed copy, in the order they are looked for: the search directories as written, + /// then PATH. + /// + static IEnumerable Installed(string exeName, string pathCommandName, IEnumerable searchDirectories) + { foreach (var directory in searchDirectories.Distinct()) { var exeSearchPath = Path.Combine(directory, exeName); - if (WildcardFileFinder.TryFind(exeSearchPath, out exePath)) + var found = false; + foreach (var exePath in WildcardFileFinder.FindAll(exeSearchPath)) { - return true; + found = true; + yield return exePath; + } + + if (!found) + { + Logging.Write($"Could not find file: {exeSearchPath}"); } } - return TryFindInEnvPath(pathCommandName, out exePath); + foreach (var commandPath in InEnvPath(pathCommandName)) + { + yield return commandPath; + } } // For each path in PATH, append cliApp and check if it exists. // Return the first one that exists. public static bool TryFindInEnvPath(string pathCommandName, [NotNullWhen(true)] out string? commandPath) + { + commandPath = InEnvPath(pathCommandName).FirstOrDefault(); + return commandPath != null; + } + + static IEnumerable InEnvPath(string pathCommandName) { foreach (var path in envPaths) { var combine = Path.Combine(path, pathCommandName); if (File.Exists(combine)) { - commandPath = combine; - return true; + yield return combine; } } - - commandPath = null; - return false; } } \ No newline at end of file diff --git a/src/DiffEngine/Tray/PendingFiles.cs b/src/DiffEngine/Tray/PendingFiles.cs index 1293cce79..14a01daac 100644 --- a/src/DiffEngine/Tray/PendingFiles.cs +++ b/src/DiffEngine/Tray/PendingFiles.cs @@ -152,6 +152,11 @@ public static LaunchResult AddDiff(ResolvedTool tool, string tempFile, string ta /// A capped one reports what every other tool's does, rather than being folded in with a tool /// that could not be found: the pair has a tool and the cap is why no window opened. /// + /// + /// A viewer that was started and exited with a failure is folded in with it. The copy that + /// resolved cannot be run, which from here is a tool that is not there, and it used to be + /// reported as a new instance with no window behind it. + /// /// static LaunchResult Launched(ViewerLaunchOutcome outcome) => outcome switch diff --git a/src/DiffEngine/Viewer/FallbackViewerDirectories.cs b/src/DiffEngine/Viewer/FallbackViewerDirectories.cs index 4949b32b8..04f8fc934 100644 --- a/src/DiffEngine/Viewer/FallbackViewerDirectories.cs +++ b/src/DiffEngine/Viewer/FallbackViewerDirectories.cs @@ -7,7 +7,9 @@ namespace DiffEngine; /// The bundled lookup depends on buildTransitive/DiffEngine.targets having stamped the package /// path into the consuming project, which does not happen for every project shape, so the cache is /// searched as well. The cache's copy of this library's own version is tried before any other -/// version, which is as close to version matched as a fallback gets. +/// version, which is as close to version matched as a fallback gets. The others are tried highest +/// first: the wildcard that stands for them is resolved by version where the folders are named +/// for one, rather than by which was restored last. /// /// /// Written with environment variables rather than resolved, like every other search directory, so diff --git a/src/DiffEngine/Viewer/ViewerContract.cs b/src/DiffEngine/Viewer/ViewerContract.cs new file mode 100644 index 000000000..153d19e4a --- /dev/null +++ b/src/DiffEngine/Viewer/ViewerContract.cs @@ -0,0 +1,85 @@ +namespace DiffEngine; + +/// +/// Whether a copy of the viewer is new enough to be started the way +/// starts one. +/// +/// The copy that resolves is not always the one this library was built beside. A globally +/// installed tool and the copy shipped with a tray are both looked for ahead of the bundled one, +/// and either can be older than the library about to launch it. Two things a viewer is launched +/// with arrived together in 20.5.0: the patch in a --payload file, which a viewer from +/// before then exits on as an argument it does not know, and ShellExecute, which gives a viewer +/// from before then - a console executable - a console window to sit beside its own. +/// +/// +/// Resolution passes over a copy known to be older when a newer one is there to be found, and +/// still takes it when it is the only one: for everything but an inline patch an older viewer is +/// better than none, and reports the launch it fails. +/// +/// +/// A copy that does not say what version it is counts as new enough, since passing it over would +/// be acting on nothing. The version read is the one stamped on the executable, or on the assembly +/// beside it where the executable carries none, which is every apphost off Windows. +/// +/// +static class ViewerContract +{ + /// + /// Two parts, so that it is not above a version written with only two. + /// + static readonly Version first = new(20, 5); + + public static bool IsMet(string executable) => + IsMetBy(ProductVersion(executable)); + + /// + /// By the numbers alone. What follows them is a prerelease label or the source revision the + /// SDK appends, and neither changes which side of 20.5 a copy is on. + /// + internal static bool IsMetBy(string? productVersion) + { + if (productVersion is null) + { + return true; + } + + var end = productVersion.IndexOfAny(['+', '-']); + var numbers = end < 0 ? productVersion : productVersion.Substring(0, end); + if (!Version.TryParse(numbers, out var version)) + { + return true; + } + + return version >= first; + } + + /// + /// Null for a copy that carries no version, and for one that cannot be read. This runs while + /// DiffTools initialises, where anything thrown is a TypeInitializationException for every + /// later use of it in the process, so nothing is allowed out. + /// + internal static string? ProductVersion(string executable) + { + try + { + var version = FileVersionInfo.GetVersionInfo(executable).ProductVersion; + if (!string.IsNullOrWhiteSpace(version)) + { + return version; + } + + var assembly = Path.ChangeExtension(executable, ".dll"); + if (!File.Exists(assembly)) + { + return null; + } + + version = FileVersionInfo.GetVersionInfo(assembly).ProductVersion; + return string.IsNullOrWhiteSpace(version) ? null : version; + } + catch + { + return null; + } + } +} diff --git a/src/DiffEngine/Viewer/ViewerLaunchGate.cs b/src/DiffEngine/Viewer/ViewerLaunchGate.cs index d44043800..a1a3735ae 100644 --- a/src/DiffEngine/Viewer/ViewerLaunchGate.cs +++ b/src/DiffEngine/Viewer/ViewerLaunchGate.cs @@ -17,7 +17,8 @@ enum ViewerLaunchOutcome Launched, /// - /// Nothing could be started, and nobody was there to take it. + /// Nothing could be started, or what was started exited with a failure before anything held + /// the queue, and nobody was there to take it. /// Failed, @@ -72,8 +73,9 @@ static class ViewerLaunchGate /// /// How long the caller that launched holds the gate waiting for its viewer to answer. Long - /// enough for a cold start with an antivirus in the way; one that never binds costs a single - /// caller this wait, and then the next tries again. + /// enough for a cold start with an antivirus in the way; one that is running and never binds + /// costs a single caller this wait, and then the next tries again. One that has exited with a + /// failure costs only as long as that takes to notice. /// internal static TimeSpan BindWait { get; set; } = TimeSpan.FromSeconds(5); @@ -82,7 +84,11 @@ static class ViewerLaunchGate /// and takes a round trip: nineteen of those queued behind one another cost more than the /// nineteen processes this exists to avoid. /// - /// Starts a viewer. False when nothing could be started. + /// + /// Starts a viewer and hands back its process, which is how the wait tells one that has given + /// up from one that is only slow. Null when nothing could be started. Disposed here once the + /// wait is over. + /// /// /// How the gate asks whether anyone holds the queue, which is also what it waits on after a /// launch. Defaults to the real port. Supplied by the tests, which otherwise have to arrange @@ -96,7 +102,7 @@ static class ViewerLaunchGate /// public static ViewerLaunchOutcome Launch( Func retry, - Func launch, + Func launch, Func? isOwned = null, Func? canLaunch = null) { @@ -116,12 +122,12 @@ public static ViewerLaunchOutcome Launch( return ViewerLaunchOutcome.Capped; } - if (!launch()) + using var viewer = launch(); + if (viewer is null || + !WaitForBind(viewer, isOwned)) { return ViewerLaunchOutcome.Failed; } - - WaitForBind(isOwned); } } finally @@ -150,7 +156,7 @@ public static ViewerLaunchOutcome Launch( /// public static async Task LaunchAsync( Func> retry, - Func> launch, + Func> launch, Cancel cancel, Func? isOwned = null, Func? canLaunch = null) @@ -169,12 +175,12 @@ public static async Task LaunchAsync( return ViewerLaunchOutcome.Capped; } - if (!await Task.Run(launch, cancel).ConfigureAwait(false)) + using var viewer = await Task.Run(launch, cancel).ConfigureAwait(false); + if (viewer is null || + !await WaitForBindAsync(viewer, isOwned, cancel).ConfigureAwait(false)) { return ViewerLaunchOutcome.Failed; } - - await WaitForBindAsync(isOwned, cancel).ConfigureAwait(false); } } finally @@ -195,34 +201,85 @@ public static async Task LaunchAsync( /// an owner rather than starting another. Gives up after and reports /// the launch all the same, because it did happen: the work went over on the command line or /// in a payload file, and the cost of giving up early is one more viewer, which is where this began. + /// + /// False when the viewer gave up first, which is the one launch that did not happen. It used to + /// be waited on for the whole of with the gate held and then reported + /// like any other, so an inline snapshot was said to be queued when it was nowhere: not in a + /// queue, and not staged either, since a caller stages only what it is told nobody took. + /// /// - static void WaitForBind(Func isOwned) + static bool WaitForBind(Process viewer, Func isOwned) { var elapsed = Stopwatch.StartNew(); while (elapsed.Elapsed < BindWait) { + // Before the probe, so that an owner some other process started is not taken for the + // viewer this one did: that owner was never handed the work + if (GaveUp(viewer)) + { + return false; + } + if (isOwned()) { - return; + return true; } Thread.Sleep(poll); } + + return true; } /// - static async Task WaitForBindAsync(Func isOwned, Cancel cancel) + static async Task WaitForBindAsync(Process viewer, Func isOwned, Cancel cancel) { var elapsed = Stopwatch.StartNew(); while (elapsed.Elapsed < BindWait) { + if (GaveUp(viewer)) + { + return false; + } + if (isOwned()) { - return; + return true; } await Task.Delay(poll, cancel).ConfigureAwait(false); } + + return true; + } + + /// + /// Whether the viewer this call started has exited and said it failed, so it took nothing and + /// never will. A copy from before the arguments it was given exits on the first it does not + /// know, and an apphost with no runtime to run exits before any of the viewer's own code. + /// + /// A clean exit is not this, and is left to the wait. A viewer that finds the port already + /// bound hands its work to whoever holds it and exits with zero, and the next probe finds that + /// owner. One that opened, was dealt with and closed between two probes exits with zero too, + /// having staged whatever it still held. + /// + /// + /// A process that cannot be asked is taken to be running, which is the answer that leaves the + /// wait as it was before there was a process to ask. + /// + /// + static bool GaveUp(Process viewer) + { + try + { + return viewer.HasExited && + viewer.ExitCode != 0; + } + catch (Exception exception) + when (exception is InvalidOperationException or System.ComponentModel.Win32Exception or NotSupportedException) + { + return false; + } } static TimeSpan poll = TimeSpan.FromMilliseconds(50); diff --git a/src/DiffEngine/Viewer/ViewerLauncher.cs b/src/DiffEngine/Viewer/ViewerLauncher.cs index 26f2849c2..10059a415 100644 --- a/src/DiffEngine/Viewer/ViewerLauncher.cs +++ b/src/DiffEngine/Viewer/ViewerLauncher.cs @@ -27,14 +27,26 @@ namespace DiffEngine; /// static class ViewerLauncher { + /// + /// Where the patch for one inline launch goes. Named by the caller rather than inside + /// , because the caller is the one told that the viewer went without + /// reading it, and has to know what to take back: see . + /// + public static string PayloadFile() => + Path.Combine(Path.GetTempPath(), $"DiffEngineViewer_{Guid.NewGuid():N}.inlinepatch"); + /// /// Starts a viewer with a patch, which goes in a file rather than on stdin: a launch that /// redirects stdin cannot use ShellExecute (see the class remarks). The viewer reads the file /// and deletes it. + /// + /// The process is handed back, as it is from every launch here that goes through + /// , which is what lets the gate see a viewer exit rather than + /// wait for one that has already gone. + /// /// - public static async Task LaunchAsync(InlinePatch patch, string payload, Cancel cancel) + public static async Task LaunchAsync(InlinePatch patch, string payload, string file, Cancel cancel) { - var file = Path.Combine(Path.GetTempPath(), $"DiffEngineViewer_{Guid.NewGuid():N}.inlinepatch"); try { // Bytes rather than text, so no preamble: a BOM is exactly what a .NET Framework @@ -52,17 +64,17 @@ public static async Task LaunchAsync(InlinePatch patch, string payload, Ca when (exception is IOException or UnauthorizedAccessException) { Trace.WriteLine($"Failed to write the inline patch for DiffEngineViewer: {exception}"); - TryDelete(file); - return false; + Discard(file); + return null; } - if (Start(PayloadArguments(patch, file)) is null) + var viewer = Start(PayloadArguments(patch, file)); + if (viewer is null) { - TryDelete(file); - return false; + Discard(file); } - return true; + return viewer; } /// @@ -73,7 +85,14 @@ public static async Task LaunchAsync(InlinePatch patch, string payload, Ca internal static string PayloadArguments(InlinePatch patch, string file) => $"--inline --source \"{patch.SourceFile}\" --line {patch.LineHint} --payload \"{file}\""; - static void TryDelete(string file) + /// + /// Removes a payload file that no viewer is going to read: nothing was started, or what was + /// started has exited. A viewer deletes the one it reads, so this only finds a file where the + /// viewer never got that far - a copy that does not know --payload, or one that could + /// not run at all - and each of those used to leave a snapshot's worth of text in the temp + /// directory for good. + /// + public static void Discard(string file) { try { @@ -106,16 +125,16 @@ static void TryDelete(string file) /// the winner and exits, which is the same resolution a second inline viewer reaches. /// /// - public static bool LaunchDelete(string file) => - Start($"--delete \"{Rooted(file)}\"") is not null; + public static Process? LaunchDelete(string file) => + Start($"--delete \"{Rooted(file)}\""); /// /// Starts a viewer holding one failing pair, for when the tool resolved for that pair is the /// viewer itself and nothing owns the queue. The same launch makes, /// for the same reason: the pair joins a queue that later pairs can join too. /// - public static bool LaunchDiff(string temp, string target) => - Start(DiffArguments(Rooted(temp), Rooted(target))) is not null; + public static Process? LaunchDiff(string temp, string target) => + Start(DiffArguments(Rooted(temp), Rooted(target))); /// /// A path as the viewer has to be handed it now that it no longer starts in the host's diff --git a/src/DiffEngine/WildcardFileFinder.cs b/src/DiffEngine/WildcardFileFinder.cs index 5d975133d..e94b717a3 100644 --- a/src/DiffEngine/WildcardFileFinder.cs +++ b/src/DiffEngine/WildcardFileFinder.cs @@ -72,9 +72,7 @@ static IEnumerable Children(string root, string segment) try { - return Directory.EnumerateDirectories(root, segment) - .OrderByDescending(Directory.GetLastWriteTime) - .ToList(); + return NewestFirst(Directory.EnumerateDirectories(root, segment).ToList()); } catch (Exception exception) when (exception is IOException or UnauthorizedAccessException) { @@ -82,22 +80,153 @@ static IEnumerable Children(string root, string segment) } } + /// + /// Newest first, which is what a wildcard in a search directory is for: it stands for the part + /// of an install path that changes from one release of a tool to the next. + /// + /// By version where every name is one, because those are package folders, and when one was + /// written says when it was restored rather than how new it is. The NuGet cache holds a folder + /// for each version of DiffEngine any project on the machine has referenced, so restoring an + /// old project put a viewer from before the arguments this library passes ahead of every + /// newer one. + /// + /// + /// By when it was written otherwise, as it always was. "Beyond Compare 5" and "vim91" are not + /// versions, and neither is a number on its own: Visual Studio 2022 installs to a folder + /// named 2022 and its successor to one named 18. + /// + /// + static List NewestFirst(List directories) + { + var versioned = new List<(string Directory, FolderVersion Version)>(); + foreach (var directory in directories) + { + if (!FolderVersion.TryParse(Path.GetFileName(directory), out var version)) + { + return directories + .OrderByDescending(Directory.GetLastWriteTime) + .ToList(); + } + + versioned.Add((directory, version)); + } + + return versioned + .OrderByDescending(_ => _.Version) + .Select(_ => _.Directory) + .ToList(); + } + + /// + /// A directory name read the way NuGet names a package's folder: two to four numbers, then + /// whatever follows a hyphen as a prerelease label. + /// + readonly struct FolderVersion(Version numbers, string[] prerelease) : + IComparable + { + Version Numbers { get; } = numbers; + + string[] Prerelease { get; } = prerelease; + + public static bool TryParse(string name, out FolderVersion version) + { + var hyphen = name.IndexOf('-'); + var numbers = hyphen < 0 ? name : name.Substring(0, hyphen); + var label = hyphen < 0 ? "" : name.Substring(hyphen + 1); + // Version.TryParse also takes a sign and surrounding space, neither of which is in a + // folder NuGet made + if (numbers.Any(_ => _ != '.' && !char.IsDigit(_)) || + (hyphen >= 0 && label.Length == 0) || + !Version.TryParse(numbers, out var parsed)) + { + version = default; + return false; + } + + version = new(parsed, label.Length == 0 ? [] : label.Split('.')); + return true; + } + + /// + /// Semantic versioning's order: the numbers first, a release above every prerelease of + /// it, and prerelease labels part by part, where a numeric part is compared as a number + /// and sorts below one that is not. + /// + public int CompareTo(FolderVersion other) + { + var byNumbers = Numbers.CompareTo(other.Numbers); + if (byNumbers != 0) + { + return byNumbers; + } + + var others = other.Prerelease; + if (Prerelease.Length == 0 || + others.Length == 0) + { + return others.Length.CompareTo(Prerelease.Length); + } + + for (var index = 0; index < Math.Min(Prerelease.Length, others.Length); index++) + { + var byPart = ComparePart(Prerelease[index], others[index]); + if (byPart != 0) + { + return byPart; + } + } + + return Prerelease.Length.CompareTo(others.Length); + } + + static int ComparePart(string left, string right) + { + var leftIsNumber = ulong.TryParse(left, out var leftNumber); + var rightIsNumber = ulong.TryParse(right, out var rightNumber); + if (leftIsNumber && + rightIsNumber) + { + return leftNumber.CompareTo(rightNumber); + } + + if (leftIsNumber != rightIsNumber) + { + return leftIsNumber ? -1 : 1; + } + + return string.Compare(left, right, StringComparison.OrdinalIgnoreCase); + } + } + public static bool TryFind( string path, [NotNullWhen(true)] out string? result) + { + result = FindAll(path).FirstOrDefault(); + if (result != null) + { + return true; + } + + Logging.Write($"Could not find file: {path}"); + return false; + } + + /// + /// Every file the path names, in the order would come to them, for a + /// caller that may not want the first. One path names several only through a wildcard. + /// + public static IEnumerable FindAll(string path) { var expanded = Environment.ExpandEnvironmentVariables(path); if (!path.Contains('*')) { if (File.Exists(expanded)) { - result = expanded; - return true; + yield return expanded; } - Logging.Write($"Could not find file: {path}"); - result = null; - return false; + yield break; } var filePart = Path.GetFileName(expanded); @@ -112,13 +241,8 @@ public static bool TryFind( var filePath = Path.Combine(directory, filePart); if (File.Exists(filePath)) { - result = filePath; - return true; + yield return filePath; } } - - Logging.Write($"Could not find file: {path}"); - result = null; - return false; } } \ No newline at end of file diff --git a/src/FakeDiffTool/Program.cs b/src/FakeDiffTool/Program.cs index b0d9f35d0..c9b028ce5 100644 --- a/src/FakeDiffTool/Program.cs +++ b/src/FakeDiffTool/Program.cs @@ -5,8 +5,15 @@ class Program { [STAThread] - static void Main(string[] args) + static int Main(string[] args) { + // Copied to DiffEngineViewer.exe, this plays a viewer from before 20.5.0, to which + // --payload is an argument it does not know: that one says so and exits with 2 + if (Array.IndexOf(args, "--payload") >= 0) + { + return 2; + } + // If --windowed is passed, create a simple form that can be closed gracefully if (args.Length > 0 && args[0] == "--windowed") { @@ -24,5 +31,7 @@ static void Main(string[] args) // Default behavior: just sleep (no main window) Thread.Sleep(5000); } + + return 0; } } \ No newline at end of file From c9a5e777eb20ab9aa3fd949c37050c9d9bec70d4 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:24:57 +1000 Subject: [PATCH 28/73] Start tools declared without ShellExecute so they inherit nothing from the test host DiffRunner.LaunchProcess started a tool declared UseShellExecute: false through Process.Start, which on Windows always hands the child every inheritable handle whatever is redirected. One of those is the pipe dotnet test reads the host's output from, and it reads until every writer has closed it. So a run that opened the Word or Excel comparer, Cursor or VS Code's launcher did not return until the process it had started was gone, and the Word comparer's stays until Word is closed. This is Verify issue 1229 again, for the tools ShellExecute was not the answer for. On Windows those tools are now started by CreateProcess directly, with handle inheritance off and no console. ShellExecute with a hidden window was the other way to do it and is not used: the hidden request reaches the program as how to show its first window, so a console program that opens a window of its own never appears, and nothing in the file says which kind of console program it is. No console whatever the tool declared, because a console program sharing the host's console is given the host's standard handles with it, inherited or not. Tools declared with ShellExecute are untouched, and so is everything off Windows, where nothing in a definition says which tools need the terminal's streams. --- src/DiffEngine.Tests/ToolProcessTests.cs | 224 ++++++++++++++++++ src/DiffEngine/DiffRunner.cs | 33 ++- .../Process/WindowsProcess_Start.cs | 142 +++++++++++ 3 files changed, 390 insertions(+), 9 deletions(-) create mode 100644 src/DiffEngine.Tests/ToolProcessTests.cs create mode 100644 src/DiffEngine/Process/WindowsProcess_Start.cs diff --git a/src/DiffEngine.Tests/ToolProcessTests.cs b/src/DiffEngine.Tests/ToolProcessTests.cs new file mode 100644 index 000000000..606ebe0fb --- /dev/null +++ b/src/DiffEngine.Tests/ToolProcessTests.cs @@ -0,0 +1,224 @@ +using System.IO.Pipes; + +/// +/// What a diff tool takes from the test host that starts it. +/// +/// A test host's output goes to a pipe that dotnet test reads until every writer has closed +/// it. A tool started through ShellExecute inherits nothing, and most tools are declared that way. +/// The ones declared without it - the Word and Excel comparers, VS Code, Cursor - were handed every +/// inheritable handle the host had, the write end of that pipe among them. So a run that opened +/// one of them did not return until the process it had started was gone, and the Word comparer's +/// stays until Word is closed. +/// +/// +/// The real tools are never started here. A console program, a windowed one and a script stand in +/// for them: ping, FakeDiffTool, and a script that runs ping. +/// +/// +[NotInParallel] +[RunOn(TUnit.Core.Enums.OS.Windows)] +public class ToolProcessTests +{ + /// + /// The pipe is the one dotnet test reads a host's output from: its write end can be + /// inherited, and reading it only ends once every copy of that end is closed. This process + /// closes its own, so a read that does not end is a tool holding one. + /// + [Test] + [Arguments("console")] + [Arguments("windowed")] + [Arguments("script")] + public async Task AToolDeclaredWithoutShellExecuteInheritsNothing(string kind) + { + var (exe, arguments) = StandIn(kind); + using var pipe = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable); + + var processId = DiffRunner.LaunchProcess(Tool(exe), arguments); + + using var process = Process.GetProcessById(processId); + var read = Task.Run(() => pipe.ReadByte()); + try + { + pipe.DisposeLocalCopyOfClientHandle(); + var ended = await Task.WhenAny(read, Task.Delay(TimeSpan.FromSeconds(2))) == read; + + // Still running, or the pipe ending says nothing about what a running tool holds + await Assert.That(process.HasExited).IsFalse(); + await Assert.That(ended).IsTrue(); + } + finally + { + // Before the pipe is disposed, so a read that a tool is holding open ends first + KillTree(processId); + await Task.WhenAny(read, Task.Delay(TimeSpan.FromSeconds(10))); + } + } + + /// + /// A tool is found again, to be refreshed or killed, by the command line it was started with: + /// the quoted path and then the arguments, as a tool started any other way has. + /// + [Test] + public async Task AToolDeclaredWithoutShellExecuteIsStillFoundByItsCommand() + { + var (exe, arguments) = StandIn("windowed"); + + var processId = DiffRunner.LaunchProcess(Tool(exe), arguments); + + try + { + var command = ProcessCleanup.FindAll().Single(_ => _.Process == processId).Command; + + await Assert.That(command).IsEqualTo($"\"{exe}\" {arguments}"); + } + finally + { + KillTree(processId); + } + } + + /// + /// VS Code's launcher is a script in a folder with spaces in its name, and it is handed two + /// quoted paths, which is the arrangement the command interpreter is known for mangling. The + /// command line is the one that was always built, so each path arrives whole. + /// + [Test] + public async Task AScriptInAFolderWithSpacesIsGivenItsArguments() + { + var (exe, arguments) = StandIn("script"); + var folder = Path.GetDirectoryName(exe)!; + var written = Path.Combine(folder, "arguments.txt"); + File.Delete(written); + + var processId = DiffRunner.LaunchProcess(Tool(exe), arguments); + + try + { + for (var attempt = 0; attempt < 40 && !File.Exists(written); attempt++) + { + await Task.Delay(250); + } + + // Once more, for a file that exists a moment before its line is in it + await Task.Delay(250); + await Assert.That(File.ReadAllText(written).Trim()) + .IsEqualTo($"{Path.Combine(folder, "Sample received.txt")}|{Path.Combine(folder, "Sample verified.txt")}"); + } + finally + { + KillTree(processId); + } + } + + [Test] + public async Task TheCommandLineIsTheQuotedPathThenTheArguments() + { + await Assert.That(WindowsProcess.CommandLine(@"C:\Program Files\Tool\tool.exe", "\"a.txt\" \"b.txt\"")) + .IsEqualTo("\"C:\\Program Files\\Tool\\tool.exe\" \"a.txt\" \"b.txt\""); + // Nothing trailing, which would be an argument to some programs + await Assert.That(WindowsProcess.CommandLine(@"C:\Tool\tool.exe", "")) + .IsEqualTo("\"C:\\Tool\\tool.exe\""); + await Assert.That(WindowsProcess.CommandLine("\"C:\\Tool\\tool.exe\"", "a")) + .IsEqualTo("\"C:\\Tool\\tool.exe\" a"); + } + + /// + /// A tool that cannot be started is still reported the way it was, with the command that + /// failed, rather than as whatever Windows said about it. + /// + [Test] + public async Task AToolThatCannotBeStartedSaysWhichOne() + { + var exe = Path.Combine(TempDirectory, "not-an-executable.exe"); + File.WriteAllText(exe, "not an executable"); + + var exception = Assert.Throws(() => DiffRunner.LaunchProcess(Tool(exe), "\"a.txt\" \"b.txt\"")); + + await Assert.That(exception.Message).Contains("Failed to launch diff tool."); + await Assert.That(exception.Message).Contains(exe); + } + + /// + /// As the Word comparer is declared: no ShellExecute, and no window. + /// + static ResolvedTool Tool(string exe) => + new( + name: "StandIn", + exePath: exe, + launchArguments: new( + Left: (temp, target) => $"\"{target}\" \"{temp}\"", + Right: (temp, target) => $"\"{temp}\" \"{target}\""), + isMdi: false, + autoRefresh: false, + binaryExtensions: [], + requiresTarget: false, + supportsText: true, + useShellExecute: false, + createNoWindow: true); + + /// + /// Something of each kind that outlives the two seconds a test waits, and the arguments that + /// make it do so. + /// + static (string Exe, string Arguments) StandIn(string kind) + { + const string wait = "-n 8 127.0.0.1"; + var ping = Path.Combine(Environment.SystemDirectory, "PING.EXE"); + switch (kind) + { + case "console": + return (ping, wait); + case "windowed": + // It sleeps for five seconds whatever it is given. Two paths, because that is the + // shape of command line ProcessCleanup lists + return (FakeDiffTool.Exe, $"\"{Path.Combine(TempDirectory, "Sample.received.txt")}\" \"{Path.Combine(TempDirectory, "Sample.verified.txt")}\""); + case "script": + // In a folder with a space in its name, as VS Code's launcher is, and it writes + // down the two paths it was given before it waits + var folder = Path.Combine(TempDirectory, "with a space"); + Directory.CreateDirectory(folder); + var script = Path.Combine(folder, "stand-in.cmd"); + File.WriteAllText(script, $"@echo %~1^|%~2> \"%~dp0arguments.txt\"\r\n@\"{ping}\" {wait} > nul\r\n"); + return (script, $"\"{Path.Combine(folder, "Sample received.txt")}\" \"{Path.Combine(folder, "Sample verified.txt")}\""); + default: + throw new($"Unknown kind: {kind}"); + } + } + + /// + /// The process and whatever it started, since the script's wait is a child of its own. + /// + static void KillTree(int processId) + { + using var kill = Process.Start( + new ProcessStartInfo(Path.Combine(Environment.SystemDirectory, "taskkill.exe"), $"/PID {processId} /T /F") + { + UseShellExecute = false, + CreateNoWindow = true + })!; + kill.WaitForExit(10000); + } + + static string TempDirectory { get; } = CreateDirectory(); + + static string CreateDirectory() + { + var directory = Path.Combine(Path.GetTempPath(), $"DiffEngine.ToolProcess.{Guid.NewGuid():N}"); + Directory.CreateDirectory(directory); + return directory; + } + + [After(Class)] + public static void DeleteDirectory() + { + try + { + Directory.Delete(TempDirectory, true); + } + catch (Exception exception) + when (exception is IOException or UnauthorizedAccessException) + { + // A stand-in on its way out holds the script it was started from for a moment + } + } +} diff --git a/src/DiffEngine/DiffRunner.cs b/src/DiffEngine/DiffRunner.cs index 4341526fa..1b9634155 100644 --- a/src/DiffEngine/DiffRunner.cs +++ b/src/DiffEngine/DiffRunner.cs @@ -368,18 +368,33 @@ static bool TryCreate(ResolvedTool tool, string targetFile, Encoding? encoding) return true; } - static int LaunchProcess(ResolvedTool tool, string arguments) + internal static int LaunchProcess(ResolvedTool tool, string arguments) { - var startInfo = new ProcessStartInfo(tool.ExePath, arguments) - { - // Given the full exe path is known we dont need UseShellExecute https://stackoverflow.com/a/5255335 - // however UseShellExecute allows the test running to not block when the difftool is launched - // https://github.com/VerifyTests/Verify/issues/1229 - UseShellExecute = tool.UseShellExecute, - CreateNoWindow = tool.CreateNoWindow - }; try { + // A tool declared without ShellExecute held the test run open for as long as the tool + // was, which is the problem the comment further down records being solved for the + // tools declared with it. On Windows it is started so that it cannot: see + // WindowsProcess.StartInheritingNothing. + // + // Elsewhere it is started as declared, as every tool is. A child there takes the + // host's standard streams however it is started, and nothing in a definition says + // which tools could do without them: Neovim runs in the terminal and needs all three, + // and is declared the same as the tools that open a window + if (!tool.UseShellExecute && + RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + return WindowsProcess.StartInheritingNothing(tool.ExePath, arguments); + } + + var startInfo = new ProcessStartInfo(tool.ExePath, arguments) + { + // Given the full exe path is known we dont need UseShellExecute https://stackoverflow.com/a/5255335 + // however UseShellExecute allows the test running to not block when the difftool is launched + // https://github.com/VerifyTests/Verify/issues/1229 + UseShellExecute = tool.UseShellExecute, + CreateNoWindow = tool.CreateNoWindow + }; using var process = Process.Start(startInfo); if (process != null) { diff --git a/src/DiffEngine/Process/WindowsProcess_Start.cs b/src/DiffEngine/Process/WindowsProcess_Start.cs new file mode 100644 index 000000000..fe98e755a --- /dev/null +++ b/src/DiffEngine/Process/WindowsProcess_Start.cs @@ -0,0 +1,142 @@ +// ReSharper disable PartialTypeWithSinglePart +static partial class WindowsProcess +{ +#if NET7_0_OR_GREATER + [LibraryImport("kernel32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool CreateProcessW( + IntPtr applicationName, + IntPtr commandLine, + IntPtr processAttributes, + IntPtr threadAttributes, + [MarshalAs(UnmanagedType.Bool)] bool inheritHandles, + uint creationFlags, + IntPtr environment, + IntPtr currentDirectory, + ref STARTUPINFOW startupInfo, + out PROCESS_INFORMATION processInformation); +#else + [DllImport("kernel32.dll", SetLastError = true)] + static extern bool CreateProcessW( + IntPtr applicationName, + IntPtr commandLine, + IntPtr processAttributes, + IntPtr threadAttributes, + bool inheritHandles, + uint creationFlags, + IntPtr environment, + IntPtr currentDirectory, + ref STARTUPINFOW startupInfo, + out PROCESS_INFORMATION processInformation); +#endif + + const uint createNoWindow = 0x08000000; + + [StructLayout(LayoutKind.Sequential)] + struct STARTUPINFOW + { + public int cb; + public IntPtr lpReserved; + public IntPtr lpDesktop; + public IntPtr lpTitle; + public int dwX; + public int dwY; + public int dwXSize; + public int dwYSize; + public int dwXCountChars; + public int dwYCountChars; + public int dwFillAttribute; + public int dwFlags; + public short wShowWindow; + public short cbReserved2; + public IntPtr lpReserved2; + public IntPtr hStdInput; + public IntPtr hStdOutput; + public IntPtr hStdError; + } + + [StructLayout(LayoutKind.Sequential)] + struct PROCESS_INFORMATION + { + public IntPtr hProcess; + public IntPtr hThread; + public int dwProcessId; + public int dwThreadId; + } + + /// + /// Starts a process that takes nothing from this one, and returns its id. + /// + /// For the diff tools declared UseShellExecute: false. A test host's output goes to a + /// pipe that dotnet test reads until every writer has closed it, and + /// without ShellExecute always asks Windows to hand the child + /// every inheritable handle, the write end of that pipe among them, whatever is or is not + /// redirected. So a run that opened one of those tools did not return until the process it + /// had started was gone, and the Word comparer's stays until Word is closed. That is + /// https://github.com/VerifyTests/Verify/issues/1229 again, for the tools it was not fixed for. + /// + /// + /// Not through ShellExecute, which is how every other tool avoids it. A tool is declared + /// without it because ShellExecute would give it a console window: it is a console program, + /// or a script the command interpreter runs. That window can be asked for hidden, but the + /// request travels to the program as how its first window is to be shown, so a console + /// program that opens a window of its own - as tools built with Go, Rust or Java commonly + /// are - never appears. Nothing in the file says which kind of console program it is. + /// + /// + /// So this is the same call makes, with the one argument it + /// does not expose turned off. With no console as well, whatever the tool declared: a console + /// program that shares this process's console is given its standard handles along with it, + /// inherited or not, and those are the pipe. + /// + /// + public static int StartInheritingNothing(string exePath, string arguments) + { + var startupInfo = new STARTUPINFOW + { + cb = Marshal.SizeOf() + }; + // A buffer rather than a string, because CreateProcess is allowed to write to it + var commandLine = Marshal.StringToHGlobalUni(CommandLine(exePath, arguments)); + try + { + if (!CreateProcessW( + IntPtr.Zero, + commandLine, + IntPtr.Zero, + IntPtr.Zero, + false, + createNoWindow, + IntPtr.Zero, + IntPtr.Zero, + ref startupInfo, + out var process)) + { + throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()); + } + + CloseHandle(process.hThread); + CloseHandle(process.hProcess); + return process.dwProcessId; + } + finally + { + Marshal.FreeHGlobal(commandLine); + } + } + + /// + /// The quoted path and then the arguments, which is what builds + /// and what ProcessCleanup looks a running tool up by. + /// + internal static string CommandLine(string exePath, string arguments) + { + var quoted = exePath.StartsWith('"') && exePath.EndsWith('"') ? exePath : $"\"{exePath}\""; + if (arguments.Length == 0) + { + return quoted; + } + + return $"{quoted} {arguments}"; + } +} From 19843f119ee888f42ef9b36d6d522443abc211ff Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:46:34 +1000 Subject: [PATCH 29/73] Describe the second round of fixes, and close them in todo.md The twenty seven bugs the six per-area reviews found are fixed in the commits before this one. todo.md loses them, and gains what each fix says it did not reach: the macOS changes have not been run, Verify has a call to change before staged trios are cleared per framework, and so on by area. - docs: which copy of the viewer runs now passes over one from before 20.5.0 when a newer one is there; the tray's Accept all says which deletes it carries out and which it holds; the inline page covers the F# indentation, what ends a chain in either language, a Remove that takes its statement, InlineStaging.Settle, and a settle or a re-run asking whose entry a line names. - claude.md says the same for whoever works on this next, and counts the shim's exports correctly: eleven, not eight. - OsSettingsResolver.Resolve documented one parameter and not the others, which a Release build makes an error. The Debug builds it was written under do not. - Three comments that the fixes made untrue: ILoopHooks on the native heads having no modal loops, the tray's DiffToolLauncher on what DiffRunner starts a tool with, and the viewer definition calling itself a console program. --- claude.md | 69 +++++++- docs/inline.md | 13 +- docs/mdsource/inline.source.md | 13 +- docs/mdsource/tray.source.md | 6 +- docs/mdsource/viewer.source.md | 8 +- docs/tray.md | 6 +- docs/viewer.md | 8 +- native/swift/readme.md | 2 +- .../Implementation/DiffEngineViewer.cs | 3 +- src/DiffEngine/OsSettingsResolver.cs | 15 +- src/DiffEngineTray/DiffToolLauncher.cs | 10 +- src/DiffEngineViewer/ILoopHooks.cs | 6 +- todo.md | 167 ++++-------------- 13 files changed, 159 insertions(+), 167 deletions(-) diff --git a/claude.md b/claude.md index 8d2a856c9..e54c7c1bd 100644 --- a/claude.md +++ b/claude.md @@ -106,6 +106,24 @@ that member's declaration is not in it, so an identical snapshot in the test nex candidate at all, while the recorded line is still tried first so two snapshots in one member stay apart. +A line names a call site only until something above it in the file changes, and accepting a +snapshot is exactly that. So whoever finds a queued entry by its line asks whose it is before +believing it. A settle that hits an entry queued from another member leaves it alone unless the +value settles it, and a failing re-run whose key names nothing looks for the entry of its own +call site (`InlinePatch.IsSameCallSite`: member, test, mode and anchor) and takes it to the line it +is at now, rather than queueing a second one beside it. `InlineStaging` asks the same of a staged +trio, and scopes a settle to the running framework (`InlineStaging.Settle`), which +`InlinePatchFile.Write` labels a staged patch with. + +What the patcher writes has to compile where it lands, and three shapes did not. F# measures a +continuation from the column the call's expression starts at, not from the line's indentation, +whenever something precedes the call on its line (`do!`, `let! x =`): the offside rule +(`SourceLanguage.IndentationIsSyntax`, and the shapes are in `FsCompilerRoundTripTests`). An +appended `Snapshot` call goes in front of `ToTask`, `ConfigureAwait` or `GetAwaiter` in either +language, none of which returns something to call it on. And a `Remove` of +`settings.Snapshot("old");` takes the statement, since `settings;` is none, while one whose value +is awaited, assigned, returned or passed takes only the call. + ### Core Components **DiffEngine Library (`src/DiffEngine/`):** @@ -143,10 +161,25 @@ apart. tooltips and an `NSScroller`, with `NSApp.appearance` set to `darkAqua` so they match the drawn grid. The cost is that none of them exists in `deview_capture`, which makes no window — hence `PixelTests.ContextMenu` being skipped there, and the scroller taking its strip out of the - renderer only when a window exists. + renderer only when a window exists. AppKit's own loops run inside the pump, so the managed loop + waits them out. The scroller is a `PaneScroller`, which follows a drag of its knob as ordinary + events for that reason, where AppKit's tracking loop left the panes still until the knob was let + go. A live resize is the same kind of loop and still draws the rows sliced for the old size: + doing better takes a frame callback the C ABI does not have. Keys and clicks are queued in + `Runtime` and handed over one a poll, as the WinForms head does and for its reason. The footer + wraps its buttons, and puts the status on a line of its own when there is no room beside them. + The font has `calt` and `liga` off, so `<>` or `!=` in a snapshot is drawn as the characters it + holds. None of this head can be compiled or run from Windows: CI's `macos-14` job is the first + build, and its OSX baselines come from that job's `received-*` artifacts. - Linux draws its own menu, so it keeps that baseline. Its tooltip and pane scrollbar are ImGui's, the scrollbar being `ScrollbarEx` driven in rows rather than pixels so its travel is exactly - `ViewerSession`'s clamp. + `ViewerSession`'s clamp. Its footer wraps as the macOS one does (`LayOutFooter`), with two + Linux-only scenes for it in `PixelTests`. Characters JetBrains Mono lacks are drawn from the + machine's fonts, found through fontconfig, which is loaded at run time rather than linked and + only once a character on screen needs it. A capture never uses them: it draws with the embedded + font alone, so no baseline depends on what is installed (`PixelTests.OutsideTheFont`). + Accept-all is `a` with Shift held, read from the key rather than from the case of the letter, + which Caps Lock also changes. - Group headers fold. `SessionState.Collapsed` holds `QueueItem.GroupKey`s and `QueueProjection` skips their members, so the marker rides in the label and no head or ABI field knows about it. Whether an entry is hidden is always read back out of `VisibleEntries`, never recomputed — the @@ -358,7 +391,7 @@ apart. this folder, so a recursive clone on every checkout would serve a path almost nobody takes. - Building it needs CMake 3.24+, a C++17 compiler and network access. Contributors do not need any of that, because the binaries are committed. -- `native/src/deview.cpp` is a renderer for the `Screen` model, not an ImGui binding: eight exports +- `native/src/deview.cpp` is a renderer for the `Screen` model, not an ImGui binding: eleven exports taking one flat blittable frame description. The ABI is `native/include/deview.h`; bump `DEVIEW_VERSION` whenever the structs change **or a field changes meaning**. The managed side refuses a library whose version is not an exact match, so a bump and a binaries rebuild land @@ -409,7 +442,18 @@ apart. the pipe `dotnet test` reads the host's output from kept the run from returning until its window closed. That is why an inline patch goes in a file rather than on stdin, which a ShellExecute launch cannot redirect, and why the Windows head is a `WinExe`: ShellExecute gives - a console executable a console window. + a console executable a console window. The viewer also starts in its own folder, since a child + that inherits the host's working directory keeps that directory from being deleted for as long + as it runs. The third party tools declared `UseShellExecute: false` are started on Windows by + `WindowsProcess.StartInheritingNothing`, a `CreateProcess` with handle inheritance off and no + console, rather than through ShellExecute: asked for hidden, ShellExecute also hides the own + window of a console program that opens one, and nothing in the file says which kind it is. +- `ViewerLaunchGate` is handed the process it started. One that has exited with a failure before + anything held the queue is `Failed`, so the caller stages; it used to be waited on for the whole + of `BindWait` and reported as launched, and an inline snapshot was then in no queue and not + staged either. A clean exit is left to the wait, since a viewer that hands its work to an owner + exits with zero. `ViewerContract` is the other half: resolution passes over a copy older than + 20.5.0, which exits on `--payload`, when a newer one is further down the search order. - Unless that diff tool is the viewer, which is the `Diff` verb and `--diff `. Then the premise above is false — there is no window for the pair yet — so it is tracked exactly as a move and a window is raised over the entry, and `DiffRunner` skips the whole process per @@ -434,6 +478,21 @@ apart. - `DebugReport` / `DebugForm` - the menu's "Debug view": every field of every tracked move, delete and snapshot as text, plus the queued patches when this tray owns the queue. The report is a string so it can be copied into an issue and snapshot tested without rendering a window. +- A delete can be the last copy of a snapshot, so the tracker is careful about which it carries + out. `AddMove` withdraws a tracked delete of its target, as `SettleDelete` would have. An + accept-all lists its deletes as it begins and carries out only those + (`ITrackedFiles.AcceptAll(deleteKeys, ...)`), leaves one whose file a move in the same sweep + wrote or still awaits (`WrittenOrAwaited`), and holds them all when the queue's owner could not + be asked: `IInlineHost.TryList` tells an owner that did not answer from there being none, the + second being what `ViewerClient.FoundUnowned` is for. +- `Program.Main` is a synchronous `[STAThread]` method that blocks on `Inner`. An attribute on an + `async Task Main` lands on a method the runtime does not start, and the thread came up MTA. +- `SessionEndWindow` is a hidden top level window that hears `WM_ENDSESSION`, which neither the + notify icon nor a message filter does. An owning tray stages its queue from inside the message + (`OwnedInlineHost.SessionEnding`) and refuses patches from then on, because a logoff never comes + back through `Application.Run()`. +- A move that arrives for a tracked pair with no tool keeps the tool it was tracked with + (`Tracker.Retarget`): one over the viewer port carries two paths and nothing else. - Allows accepting/discarding diffs from system tray **Packaging.Tests (`src/Packaging.Tests/`):** @@ -460,7 +519,7 @@ apart. ### Key Patterns -- Tool discovery uses wildcard path matching (`WildcardFileFinder`) to find executables in common install locations +- Tool discovery uses wildcard path matching (`WildcardFileFinder`) to find executables in common install locations. A wildcard whose matches are all version-named folders takes the highest version; anything else takes the most recently written - Tool order can be customized via `DiffEngine_ToolOrder` environment variable - `DisabledChecker` respects `DiffEngine_Disabled` env var - `ViewerClient` remembers a port found unowned for ten minutes (`RecheckUnownedAfter`), and the library's telling sends - settle, retire, move, delete, the first inline or diff send - skip the connect while that stands. A refused loopback connection costs two seconds on Windows (firewall stealth mode drops the reset), and a green run settles once per inline verification, which was six minutes for a class of 188 inline tests. Probes (`IsOwned`), the hosts and `InlineQueueClient` always connect and correct the memory; so does `SettleAppliedInline`, being one send per accept diff --git a/docs/inline.md b/docs/inline.md index 5e3357573..efe6f5ccb 100644 --- a/docs/inline.md +++ b/docs/inline.md @@ -75,8 +75,9 @@ DiffEngineViewer --inline --source --line < the.inlinepat For the producing side — a test library with a failing inline snapshot: -* `DiffRunner.AddInlineAsync(patch)` queues a patch with whatever owns the port, launching the bundled viewer when nothing does. Returns `Queued`, `Disabled` (build servers, continuous testing and AI CLIs included), or `NoViewerFound` — the caller's cue to stage files and fall back to a text diff. -* `DiffRunner.SettleInline(sourceFile, line)` drops the pending entry for a call site, for when a previously failing test passes. Unknown entries and an absent owner are no-ops, so call it freely. The settle carries the running framework, so a multi-targeted run only settles its own variant of a conflicted entry. That framework is the running process's, which makes this the test run's verb and only the test run's: a surface applying a patch of its own wants `SettleAppliedInline`, [below](#applying-a-patch-from-another-surface). Pass `memberName` and `value` too: `value` is what the passing call's expected argument holds, as the library compared it (for F#, after `SourceLanguage.SnapshotValue`). Once an accept above a call site moves it, its line no longer names its entry and the member is the fallback. `value` narrows that fallback to an entry the value settles, one anchored to it or waiting to become it. Without `value`, a passing call can settle the entry of a failing sibling in the same member. +* `DiffRunner.AddInlineAsync(patch)` queues a patch with whatever owns the port, launching the bundled viewer when nothing does. Returns `Queued`, `Disabled` (build servers, continuous testing and AI CLIs included), or `NoViewerFound` — the caller's cue to stage files and fall back to a text diff. A viewer that was started and exited with a failure before it held the queue is `NoViewerFound` as well: one too old for the launch, or with no runtime to run on, took nothing. +* `DiffRunner.SettleInline(sourceFile, line)` drops the pending entry for a call site, for when a previously failing test passes. Unknown entries and an absent owner are no-ops, so call it freely. The settle carries the running framework, so a multi-targeted run only settles its own variant of a conflicted entry. That framework is the running process's, which makes this the test run's verb and only the test run's: a surface applying a patch of its own wants `SettleAppliedInline`, [below](#applying-a-patch-from-another-surface). Pass `memberName` and `value` too: `value` is what the passing call's expected argument holds, as the library compared it (for F#, after `SourceLanguage.SnapshotValue`). Once an accept above a call site moves it, its line no longer names its entry and the member is the fallback. `value` narrows that fallback to an entry the value settles, one anchored to it or waiting to become it. Without `value`, a passing call can settle the entry of a failing sibling in the same member. The line can also come to name another call's entry, so one found under it that was queued from a different member is left alone unless `value` settles it. A failing re-run of a call site that has moved is recognised the same way, by its member, test and anchor, and updates its entry rather than queueing a second one beside it. +* `InlineStaging.Settle(sourceFile, line, memberName)` clears what the running framework staged for a call site that now passes. `InlinePatchFile.Write` labels a patch that carries no framework with the running one, so a framework that passes does not clear what another one staged. `InlineStaging.Clear` still clears every framework's, which is what retiring a call site wants. * An absent owner is also remembered. A port found with nothing listening is taken as still unowned for ten minutes, and the sends that only tell the owner something — settle, retire, a move or delete to track, the first attempt to queue a patch — return without connecting while that stands. A refused loopback connection is not free on Windows: the firewall's stealth mode, on by default, drops the reset a closed port would answer with, so each refusal takes two seconds, and a green run settling once per inline verification was spending minutes on them. Anything that has to reach an owner probes for itself before launching a viewer, and that probe, like every listing, always connects and corrects the memory with what it finds. * `AddInlineAsync` stamps `patch.Framework` with the consuming project's target framework ("net9.0", "net48") unless the caller already set it, which is what lets the owner tell a re-run from another framework disagreeing. The value is the `$(TargetFramework)` the package's build targets stamp into the project's runtimeconfig, read back rather than asked of the process — in a hosted test run the entry assembly is the runner (testhost, ReSharperTestRunner), whose framework is not the project's — with the running runtime's version as the fallback for consumers without the targets. Callers may also set `patch.TestName`, which the viewer uses to group and label the queue; without it, items are labeled by call site. * Set `patch.OriginalExpression` from `CallerArgumentExpression` where the language supplies one, and `patch.OriginalValue` — the previous expected argument's value — where it does not. One of the two is what stops a patch rewriting the wrong call site when the file has moved since the run. `patch.MemberName` from `CallerMemberName` narrows it further, and is supported everywhere including F#. @@ -100,7 +101,7 @@ originalValue: {base64} memberName: {base64} ``` -`lineHint` is a hint: locating the call is content anchored, so a file that shifted since the test run still patches, and one whose call site changed reports rather than corrupts. `mode` is `Set` (replace or insert the expected argument), `Append` (add a Snapshot call where none exists yet), or `Remove` (delete the call, used when migrating a snapshot back to a file). `testName` and `framework` are optional provenance — who produced the patch and under which target framework — parsed tolerantly: absent means unknown, and unknown trailing lines are ignored. +`lineHint` is a hint: locating the call is content anchored, so a file that shifted since the test run still patches, and one whose call site changed reports rather than corrupts. `mode` is `Set` (replace or insert the expected argument), `Append` (add a Snapshot call where none exists yet), or `Remove` (delete the call, used when migrating a snapshot back to a file). A `Remove` of a call that is a statement by itself on a variable, `settings.Snapshot("old");`, takes the statement with it, since the variable alone is no statement, and is `NotFound` where the statement cannot be lifted out whole. Where the call's value is awaited, assigned, returned or passed, the call alone goes. `testName` and `framework` are optional provenance — who produced the patch and under which target framework — parsed tolerantly: absent means unknown, and unknown trailing lines are ignored. The anchor is `originalExpression`, the source text of the argument the test run saw. A producer whose language does not implement `CallerArgumentExpression` sends `originalValue` instead — the argument's *value* — and the call whose literal parses to it is the one rewritten. Either identifies the call; the expression is used where both arrived, being what the source actually says. With neither, all a patch has is the hint, and a literal that differs is taken as the snapshot that changed rather than as a conflict — otherwise an inline snapshot could be accepted once and never updated. @@ -131,7 +132,7 @@ await Verify(value).Snapshot( """); ``` -**Indentation.** The call line's own leading whitespace, plus one level. What a level is comes from two places: the character from the call site, so a tab indented method inside a space indented file stays on tabs, and the width from the file, taken as the most common run of whitespace its lines add to the line above. A file that indents by two spaces gets two; four spaces is a fallback for a file with no indentation to read, not a default. Blank lines inside the content are emitted bare, so the literal carries no trailing whitespace. +**Indentation.** The call line's own leading whitespace, plus one level. In F#, where indentation is syntax, a call with something before it on its line (`do!`, `let! result =`) is measured from the column its expression starts at instead, since a continuation has to sit right of that column to compile. What a level is comes from two places: the character from the call site, so a tab indented method inside a space indented file stays on tabs, and the width from the file, taken as the most common run of whitespace its lines add to the line above. A file that indents by two spaces gets two; four spaces is a fallback for a file with no indentation to read, not a default. Blank lines inside the content are emitted bare, so the literal carries no trailing whitespace. **Line endings.** The file's dominant ending, with the content normalised to it, so a patch produced on one platform applies cleanly on another. A file that mixes endings keeps every ending it already had: only the spliced span is written, and the rest of the file — encoding, BOM and all — is preserved byte for byte. @@ -168,7 +169,7 @@ The alternative, writing content at the left margin so the literal means itself, One thing C# can do that F# cannot is widen a delimiter (FS1232), so content containing `"""`, or starting or ending with a quote, has no multi-line form at all and takes a regular literal on one source line. Single line content is always a regular literal, escaping what both languages escape (`\` `"` `\a` `\b` `\f` `\t` `\v` `\n` `\r`) and `\uXXXX` for the rest, since F# has no `\0` or `\e`. -Two syntax differences show up in `Append` and in an argument list. F# does not apply the implicit conversion that lets a `SettingsTask` be awaited, so an F# test ends its chain with `ToTask`; `Snapshot` returns the `SettingsTask`, so an appended call goes in front of that rather than after it. And an argument binds to a parameter with `=`, so an inserted named argument is `expected = "..."`. +Two syntax differences show up in `Append` and in an argument list. F# does not apply the implicit conversion that lets a `SettingsTask` be awaited, so an F# test ends its chain with `ToTask`; `Snapshot` returns the `SettingsTask`, so an appended call goes in front of that rather than after it. The same holds in C# for `ConfigureAwait` and `GetAwaiter`, and for `ToTask` there too: none of them returns something `Snapshot` can be called on, so in either language an appended call goes in front of the first of them. And an argument binds to a parameter with `=`, so an inserted named argument is `expected = "..."`. ```fsharp // before @@ -214,6 +215,8 @@ For the staging fallback, where no viewer could be resolved and the patch is a f `AlreadyApplied` covers an `Append` onto a call that already has a `Snapshot` call holding this same content, which is what a multi-targeted project transitioning to inline meets: every framework fails the call site and queues an append, and whichever is accepted first writes the literal the rest are carrying. Only a chained call holding *different* content is `NotFound` — that one genuinely cannot say what it wants until it has been re-run against the literal now in the source. Accepting one framework's append before the others have run does mean the queue never sees them together, so a real disagreement between frameworks is reported as that `NotFound` rather than as a conflict to pick from. +That is the call on the recorded line. Where the line no longer lands on the call and the patch names its member, an `Append` passes over the calls in that member that already have a `Snapshot` call and takes the first that has none. + `Remove` mode patches are configuration changes with nothing to review: apply them directly; `AddInlineAsync` refuses them. diff --git a/docs/mdsource/inline.source.md b/docs/mdsource/inline.source.md index cc8f92fe5..be28af051 100644 --- a/docs/mdsource/inline.source.md +++ b/docs/mdsource/inline.source.md @@ -68,8 +68,9 @@ DiffEngineViewer --inline --source --line < the.inlinepat For the producing side — a test library with a failing inline snapshot: -* `DiffRunner.AddInlineAsync(patch)` queues a patch with whatever owns the port, launching the bundled viewer when nothing does. Returns `Queued`, `Disabled` (build servers, continuous testing and AI CLIs included), or `NoViewerFound` — the caller's cue to stage files and fall back to a text diff. -* `DiffRunner.SettleInline(sourceFile, line)` drops the pending entry for a call site, for when a previously failing test passes. Unknown entries and an absent owner are no-ops, so call it freely. The settle carries the running framework, so a multi-targeted run only settles its own variant of a conflicted entry. That framework is the running process's, which makes this the test run's verb and only the test run's: a surface applying a patch of its own wants `SettleAppliedInline`, [below](#applying-a-patch-from-another-surface). Pass `memberName` and `value` too: `value` is what the passing call's expected argument holds, as the library compared it (for F#, after `SourceLanguage.SnapshotValue`). Once an accept above a call site moves it, its line no longer names its entry and the member is the fallback. `value` narrows that fallback to an entry the value settles, one anchored to it or waiting to become it. Without `value`, a passing call can settle the entry of a failing sibling in the same member. +* `DiffRunner.AddInlineAsync(patch)` queues a patch with whatever owns the port, launching the bundled viewer when nothing does. Returns `Queued`, `Disabled` (build servers, continuous testing and AI CLIs included), or `NoViewerFound` — the caller's cue to stage files and fall back to a text diff. A viewer that was started and exited with a failure before it held the queue is `NoViewerFound` as well: one too old for the launch, or with no runtime to run on, took nothing. +* `DiffRunner.SettleInline(sourceFile, line)` drops the pending entry for a call site, for when a previously failing test passes. Unknown entries and an absent owner are no-ops, so call it freely. The settle carries the running framework, so a multi-targeted run only settles its own variant of a conflicted entry. That framework is the running process's, which makes this the test run's verb and only the test run's: a surface applying a patch of its own wants `SettleAppliedInline`, [below](#applying-a-patch-from-another-surface). Pass `memberName` and `value` too: `value` is what the passing call's expected argument holds, as the library compared it (for F#, after `SourceLanguage.SnapshotValue`). Once an accept above a call site moves it, its line no longer names its entry and the member is the fallback. `value` narrows that fallback to an entry the value settles, one anchored to it or waiting to become it. Without `value`, a passing call can settle the entry of a failing sibling in the same member. The line can also come to name another call's entry, so one found under it that was queued from a different member is left alone unless `value` settles it. A failing re-run of a call site that has moved is recognised the same way, by its member, test and anchor, and updates its entry rather than queueing a second one beside it. +* `InlineStaging.Settle(sourceFile, line, memberName)` clears what the running framework staged for a call site that now passes. `InlinePatchFile.Write` labels a patch that carries no framework with the running one, so a framework that passes does not clear what another one staged. `InlineStaging.Clear` still clears every framework's, which is what retiring a call site wants. * An absent owner is also remembered. A port found with nothing listening is taken as still unowned for ten minutes, and the sends that only tell the owner something — settle, retire, a move or delete to track, the first attempt to queue a patch — return without connecting while that stands. A refused loopback connection is not free on Windows: the firewall's stealth mode, on by default, drops the reset a closed port would answer with, so each refusal takes two seconds, and a green run settling once per inline verification was spending minutes on them. Anything that has to reach an owner probes for itself before launching a viewer, and that probe, like every listing, always connects and corrects the memory with what it finds. * `AddInlineAsync` stamps `patch.Framework` with the consuming project's target framework ("net9.0", "net48") unless the caller already set it, which is what lets the owner tell a re-run from another framework disagreeing. The value is the `$(TargetFramework)` the package's build targets stamp into the project's runtimeconfig, read back rather than asked of the process — in a hosted test run the entry assembly is the runner (testhost, ReSharperTestRunner), whose framework is not the project's — with the running runtime's version as the fallback for consumers without the targets. Callers may also set `patch.TestName`, which the viewer uses to group and label the queue; without it, items are labeled by call site. * Set `patch.OriginalExpression` from `CallerArgumentExpression` where the language supplies one, and `patch.OriginalValue` — the previous expected argument's value — where it does not. One of the two is what stops a patch rewriting the wrong call site when the file has moved since the run. `patch.MemberName` from `CallerMemberName` narrows it further, and is supported everywhere including F#. @@ -93,7 +94,7 @@ originalValue: {base64} memberName: {base64} ``` -`lineHint` is a hint: locating the call is content anchored, so a file that shifted since the test run still patches, and one whose call site changed reports rather than corrupts. `mode` is `Set` (replace or insert the expected argument), `Append` (add a Snapshot call where none exists yet), or `Remove` (delete the call, used when migrating a snapshot back to a file). `testName` and `framework` are optional provenance — who produced the patch and under which target framework — parsed tolerantly: absent means unknown, and unknown trailing lines are ignored. +`lineHint` is a hint: locating the call is content anchored, so a file that shifted since the test run still patches, and one whose call site changed reports rather than corrupts. `mode` is `Set` (replace or insert the expected argument), `Append` (add a Snapshot call where none exists yet), or `Remove` (delete the call, used when migrating a snapshot back to a file). A `Remove` of a call that is a statement by itself on a variable, `settings.Snapshot("old");`, takes the statement with it, since the variable alone is no statement, and is `NotFound` where the statement cannot be lifted out whole. Where the call's value is awaited, assigned, returned or passed, the call alone goes. `testName` and `framework` are optional provenance — who produced the patch and under which target framework — parsed tolerantly: absent means unknown, and unknown trailing lines are ignored. The anchor is `originalExpression`, the source text of the argument the test run saw. A producer whose language does not implement `CallerArgumentExpression` sends `originalValue` instead — the argument's *value* — and the call whose literal parses to it is the one rewritten. Either identifies the call; the expression is used where both arrived, being what the source actually says. With neither, all a patch has is the hint, and a literal that differs is taken as the snapshot that changed rather than as a conflict — otherwise an inline snapshot could be accepted once and never updated. @@ -124,7 +125,7 @@ await Verify(value).Snapshot( """); ``` -**Indentation.** The call line's own leading whitespace, plus one level. What a level is comes from two places: the character from the call site, so a tab indented method inside a space indented file stays on tabs, and the width from the file, taken as the most common run of whitespace its lines add to the line above. A file that indents by two spaces gets two; four spaces is a fallback for a file with no indentation to read, not a default. Blank lines inside the content are emitted bare, so the literal carries no trailing whitespace. +**Indentation.** The call line's own leading whitespace, plus one level. In F#, where indentation is syntax, a call with something before it on its line (`do!`, `let! result =`) is measured from the column its expression starts at instead, since a continuation has to sit right of that column to compile. What a level is comes from two places: the character from the call site, so a tab indented method inside a space indented file stays on tabs, and the width from the file, taken as the most common run of whitespace its lines add to the line above. A file that indents by two spaces gets two; four spaces is a fallback for a file with no indentation to read, not a default. Blank lines inside the content are emitted bare, so the literal carries no trailing whitespace. **Line endings.** The file's dominant ending, with the content normalised to it, so a patch produced on one platform applies cleanly on another. A file that mixes endings keeps every ending it already had: only the spliced span is written, and the rest of the file — encoding, BOM and all — is preserved byte for byte. @@ -161,7 +162,7 @@ The alternative, writing content at the left margin so the literal means itself, One thing C# can do that F# cannot is widen a delimiter (FS1232), so content containing `"""`, or starting or ending with a quote, has no multi-line form at all and takes a regular literal on one source line. Single line content is always a regular literal, escaping what both languages escape (`\` `"` `\a` `\b` `\f` `\t` `\v` `\n` `\r`) and `\uXXXX` for the rest, since F# has no `\0` or `\e`. -Two syntax differences show up in `Append` and in an argument list. F# does not apply the implicit conversion that lets a `SettingsTask` be awaited, so an F# test ends its chain with `ToTask`; `Snapshot` returns the `SettingsTask`, so an appended call goes in front of that rather than after it. And an argument binds to a parameter with `=`, so an inserted named argument is `expected = "..."`. +Two syntax differences show up in `Append` and in an argument list. F# does not apply the implicit conversion that lets a `SettingsTask` be awaited, so an F# test ends its chain with `ToTask`; `Snapshot` returns the `SettingsTask`, so an appended call goes in front of that rather than after it. The same holds in C# for `ConfigureAwait` and `GetAwaiter`, and for `ToTask` there too: none of them returns something `Snapshot` can be called on, so in either language an appended call goes in front of the first of them. And an argument binds to a parameter with `=`, so an inserted named argument is `expected = "..."`. ```fsharp // before @@ -207,6 +208,8 @@ For the staging fallback, where no viewer could be resolved and the patch is a f `AlreadyApplied` covers an `Append` onto a call that already has a `Snapshot` call holding this same content, which is what a multi-targeted project transitioning to inline meets: every framework fails the call site and queues an append, and whichever is accepted first writes the literal the rest are carrying. Only a chained call holding *different* content is `NotFound` — that one genuinely cannot say what it wants until it has been re-run against the literal now in the source. Accepting one framework's append before the others have run does mean the queue never sees them together, so a real disagreement between frameworks is reported as that `NotFound` rather than as a conflict to pick from. +That is the call on the recorded line. Where the line no longer lands on the call and the patch names its member, an `Append` passes over the calls in that member that already have a `Snapshot` call and takes the first that has none. + `Remove` mode patches are configuration changes with nothing to review: apply them directly; `AddInlineAsync` refuses them. diff --git a/docs/mdsource/tray.source.md b/docs/mdsource/tray.source.md index 0bf1f9488..25a1e4f46 100644 --- a/docs/mdsource/tray.source.md +++ b/docs/mdsource/tray.source.md @@ -43,7 +43,7 @@ A test can produce multiple resulting snapshots. If the accepted versions has a Clicking "file1" or "file2" will delete file1 or file2 respectively. The drop down will expose extra actions for that change. -A delete is withdrawn when a later test run verifies against its file again, since the file is then in use rather than stale: `DiffRunner.SettleDelete(file)` drops the pending delete and leaves the file alone. It reaches a tray that owns the inline queue, which is the usual arrangement since the tray starts at login. +A delete is withdrawn when a later test run verifies against its file again, since the file is then in use rather than stale: `DiffRunner.SettleDelete(file)` drops the pending delete and leaves the file alone. It reaches a tray that owns the inline queue, which is the usual arrangement since the tray starts at login. A pending move onto the file withdraws the delete as well, whichever process owns the queue: a run that produced a received file for it is a run that verified against it. ### Pending snapshots @@ -56,13 +56,15 @@ The viewer installed with the tray also reads [documents](/docs/viewer.md#docume "Pending Snapshots" accepts all of them. Clicking one accepts that one, and its drop down offers discard, opening the viewer on it, and opening the source file. A snapshot that failed to apply is marked with `!` and stays pending, so it can be retried once whatever blocked it is out of the way. -Exiting the tray writes any still-pending inline snapshots back to disk, under the source project's `obj/VerifyInline/`, where accept tooling such as [Verify.Terminal](https://github.com/VerifyTests/Verify.Terminal) still finds them. A kill or a crash skips that, and loses the queue as it loses pending moves and deletes; re-run the tests. +Exiting the tray writes any still-pending inline snapshots back to disk, under the source project's `obj/VerifyInline/`, where accept tooling such as [Verify.Terminal](https://github.com/VerifyTests/Verify.Terminal) still finds them. Logging off or shutting down does the same, and a snapshot that arrives once the session is ending is refused, so the test run stages it itself. A kill or a crash skips that, and loses the queue as it loses pending moves and deletes; re-run the tests. ### Accept all "Accept all" will accept all pending moves, deletes and inline snapshots. Snapshots whose target frameworks disagree about the content are skipped rather than picked between; resolve those in the viewer. +The deletes it carries out are the ones that were pending when it began. A delete can be the last copy of a snapshot that is moving inline, so the deletes are held back, and the tray says so, when a snapshot could not be written or when a viewer that owns the queue did not answer. A delete of a file that a move in the same accept has written is left pending rather than carried out. + A long queue takes a while to accept. An open [DiffEngineViewer](/docs/viewer.md) window shows how far it has got, with each snapshot leaving the list as it lands. diff --git a/docs/mdsource/viewer.source.md b/docs/mdsource/viewer.source.md index 75ea4a2b5..c20075668 100644 --- a/docs/mdsource/viewer.source.md +++ b/docs/mdsource/viewer.source.md @@ -47,7 +47,7 @@ flowchart TD Tray -->|no| Bundled{"A copy for this platform bundled in the
DiffEngine package the project references?"} Bundled -->|yes| Package["The bundled copy"] Bundled -->|no| Cache{"A DiffEngine package
in the NuGet cache?"} - Cache -->|yes| Cached["The copy bundled in that package:
this version first, then any"] + Cache -->|yes| Cached["The copy bundled in that package:
this version first, then the highest"] Cache -->|no| OnPath{"DiffEngineViewer on PATH?"} OnPath -->|yes| Found["The copy on PATH"] OnPath -->|no| None["No viewer: files go to another diff tool, and
an inline snapshot is staged as files instead"] @@ -64,6 +64,10 @@ flowchart TD An installed tool comes first because installing one is an explicit choice of which viewer to run. The bundled copy comes ahead of the NuGet cache because it is the version the library about to launch it was built with; the cache is searched as well because not every project shape tells the library where its package is. +There is one exception to the first copy found. A copy from before 20.5.0 is passed over when a newer one is further down that list, and taken only when it is the only one there is. A viewer that old exits on the `--payload` file a failing inline snapshot is launched with, so an installed tool or tray that had not been updated lost the snapshot. A copy named by `DiffEngine_DiffEngineViewer` is used as named, whatever its version. + +A viewer that is started and exits with a failure before it holds the queue is reported as not started, so an inline snapshot is staged as files rather than said to be queued. + The folder is looked for beside the copy that was found rather than assumed from where it came from, so a tool installed before documents existed is a minimal viewer, and is not offered files it would show as text. Setting `DiffEngine_DiffEngineViewer` to a path with no viewer at it is an error rather than a fall through to the next copy. So the full viewer is one install away, with nothing to configure afterwards: @@ -230,7 +234,7 @@ A conflicted entry is marked `*` in the list, the pane header names the framewor When [DiffEngineTray](/docs/tray.md) owns the queue, the viewer also lists the tray's pending file moves and deletes beside the snapshots, grouped by solution like everything else. A move shows the received file against the committed one; a delete shows the file's content against nothing. The files are read locally — the protocol never leaves the machine — and accept and discard are forwarded to the tray, which is why the buttons name the act: **Accept move**, **Accept delete**. -**Accept all** on a tray-owned queue sweeps everything the window shows: deletes, moves and snapshots, with conflicted snapshots skipped and anything locked kept pending and counted. +**Accept all** on a tray-owned queue sweeps everything the window shows: deletes, moves and snapshots, with conflicted snapshots skipped and anything locked kept pending and counted. The deletes are the ones pending when it began, and are held back when a snapshot was not written. One for a file that a move in the same sweep has written is left pending. A viewer that owns the queue itself never shows moves or deletes, because DiffEngine only sends them to a running tray. diff --git a/docs/tray.md b/docs/tray.md index cf8c90525..d55593617 100644 --- a/docs/tray.md +++ b/docs/tray.md @@ -50,7 +50,7 @@ A test can produce multiple resulting snapshots. If the accepted versions has a Clicking "file1" or "file2" will delete file1 or file2 respectively. The drop down will expose extra actions for that change. -A delete is withdrawn when a later test run verifies against its file again, since the file is then in use rather than stale: `DiffRunner.SettleDelete(file)` drops the pending delete and leaves the file alone. It reaches a tray that owns the inline queue, which is the usual arrangement since the tray starts at login. +A delete is withdrawn when a later test run verifies against its file again, since the file is then in use rather than stale: `DiffRunner.SettleDelete(file)` drops the pending delete and leaves the file alone. It reaches a tray that owns the inline queue, which is the usual arrangement since the tray starts at login. A pending move onto the file withdraws the delete as well, whichever process owns the queue: a run that produced a received file for it is a run that verified against it. ### Pending snapshots @@ -63,13 +63,15 @@ The viewer installed with the tray also reads [documents](/docs/viewer.md#docume "Pending Snapshots" accepts all of them. Clicking one accepts that one, and its drop down offers discard, opening the viewer on it, and opening the source file. A snapshot that failed to apply is marked with `!` and stays pending, so it can be retried once whatever blocked it is out of the way. -Exiting the tray writes any still-pending inline snapshots back to disk, under the source project's `obj/VerifyInline/`, where accept tooling such as [Verify.Terminal](https://github.com/VerifyTests/Verify.Terminal) still finds them. A kill or a crash skips that, and loses the queue as it loses pending moves and deletes; re-run the tests. +Exiting the tray writes any still-pending inline snapshots back to disk, under the source project's `obj/VerifyInline/`, where accept tooling such as [Verify.Terminal](https://github.com/VerifyTests/Verify.Terminal) still finds them. Logging off or shutting down does the same, and a snapshot that arrives once the session is ending is refused, so the test run stages it itself. A kill or a crash skips that, and loses the queue as it loses pending moves and deletes; re-run the tests. ### Accept all "Accept all" will accept all pending moves, deletes and inline snapshots. Snapshots whose target frameworks disagree about the content are skipped rather than picked between; resolve those in the viewer. +The deletes it carries out are the ones that were pending when it began. A delete can be the last copy of a snapshot that is moving inline, so the deletes are held back, and the tray says so, when a snapshot could not be written or when a viewer that owns the queue did not answer. A delete of a file that a move in the same accept has written is left pending rather than carried out. + A long queue takes a while to accept. An open [DiffEngineViewer](/docs/viewer.md) window shows how far it has got, with each snapshot leaving the list as it lands. diff --git a/docs/viewer.md b/docs/viewer.md index 1496a187d..8fe00da8d 100644 --- a/docs/viewer.md +++ b/docs/viewer.md @@ -54,7 +54,7 @@ flowchart TD Tray -->|no| Bundled{"A copy for this platform bundled in the
DiffEngine package the project references?"} Bundled -->|yes| Package["The bundled copy"] Bundled -->|no| Cache{"A DiffEngine package
in the NuGet cache?"} - Cache -->|yes| Cached["The copy bundled in that package:
this version first, then any"] + Cache -->|yes| Cached["The copy bundled in that package:
this version first, then the highest"] Cache -->|no| OnPath{"DiffEngineViewer on PATH?"} OnPath -->|yes| Found["The copy on PATH"] OnPath -->|no| None["No viewer: files go to another diff tool, and
an inline snapshot is staged as files instead"] @@ -71,6 +71,10 @@ flowchart TD An installed tool comes first because installing one is an explicit choice of which viewer to run. The bundled copy comes ahead of the NuGet cache because it is the version the library about to launch it was built with; the cache is searched as well because not every project shape tells the library where its package is. +There is one exception to the first copy found. A copy from before 20.5.0 is passed over when a newer one is further down that list, and taken only when it is the only one there is. A viewer that old exits on the `--payload` file a failing inline snapshot is launched with, so an installed tool or tray that had not been updated lost the snapshot. A copy named by `DiffEngine_DiffEngineViewer` is used as named, whatever its version. + +A viewer that is started and exits with a failure before it holds the queue is reported as not started, so an inline snapshot is staged as files rather than said to be queued. + The folder is looked for beside the copy that was found rather than assumed from where it came from, so a tool installed before documents existed is a minimal viewer, and is not offered files it would show as text. Setting `DiffEngine_DiffEngineViewer` to a path with no viewer at it is an error rather than a fall through to the next copy. So the full viewer is one install away, with nothing to configure afterwards: @@ -237,7 +241,7 @@ A conflicted entry is marked `*` in the list, the pane header names the framewor When [DiffEngineTray](/docs/tray.md) owns the queue, the viewer also lists the tray's pending file moves and deletes beside the snapshots, grouped by solution like everything else. A move shows the received file against the committed one; a delete shows the file's content against nothing. The files are read locally — the protocol never leaves the machine — and accept and discard are forwarded to the tray, which is why the buttons name the act: **Accept move**, **Accept delete**. -**Accept all** on a tray-owned queue sweeps everything the window shows: deletes, moves and snapshots, with conflicted snapshots skipped and anything locked kept pending and counted. +**Accept all** on a tray-owned queue sweeps everything the window shows: deletes, moves and snapshots, with conflicted snapshots skipped and anything locked kept pending and counted. The deletes are the ones pending when it began, and are held back when a snapshot was not written. One for a file that a move in the same sweep has written is left pending. A viewer that owns the queue itself never shows moves or deletes, because DiffEngine only sends them to a running tray. diff --git a/native/swift/readme.md b/native/swift/readme.md index 1240a0192..03eafcbcd 100644 --- a/native/swift/readme.md +++ b/native/swift/readme.md @@ -1,7 +1,7 @@ # macOS renderer The macOS half of `libdiffengine_viewer`, drawn with AppKit and Core Text. It implements the same -ABI as `native/` does for Linux — `native/include/deview.h`, eight exports over one flat frame +ABI as `native/` does for Linux — `native/include/deview.h`, eleven exports over one flat frame description — so the managed side is identical on both and `DiffEngineViewer.Core` has no idea which one it loaded. diff --git a/src/DiffEngine/Implementation/DiffEngineViewer.cs b/src/DiffEngine/Implementation/DiffEngineViewer.cs index 99c2370b8..7b8529e2a 100644 --- a/src/DiffEngine/Implementation/DiffEngineViewer.cs +++ b/src/DiffEngine/Implementation/DiffEngineViewer.cs @@ -34,7 +34,8 @@ public static Definition DiffEngineViewer() launchArguments, SearchDirectories("%HOME%/.dotnet/tools/", [], FallbackViewerDirectories.Osx()))), UseShellExecute: false, - // Console subsystem, so without this a window flashes on every launch. + // A copy from before 20.5 is a console executable, so without this a console window + // flashes when one is started by these flags, which the tray's Open diff tool does. CreateNoWindow: true, Notes: """ * The one tool DiffEngine does not open per pair. Every failing pair joins one diff --git a/src/DiffEngine/OsSettingsResolver.cs b/src/DiffEngine/OsSettingsResolver.cs index 879679e4a..c3604525e 100644 --- a/src/DiffEngine/OsSettingsResolver.cs +++ b/src/DiffEngine/OsSettingsResolver.cs @@ -50,12 +50,15 @@ internal static string[] ParsePath(string value, char separator) return paths.ToArray(); } - /// - /// Says which of several installed copies the caller would rather have. The first copy it - /// accepts is the one resolved, wherever that comes in the search order, and the first copy - /// of all when it accepts none - so it reorders what is found and never empties it. Not asked - /// about a copy an environment variable names, which is somebody's explicit choice. - /// + /// + /// The tool's executable and how it is launched, on whichever operating system this is. + /// + /// preferred says which of several installed copies the caller would rather have. The + /// first copy it accepts is the one resolved, wherever that comes in the search order, and the + /// first copy of all when it accepts none - so it reorders what is found and never empties it. + /// Not asked about a copy an environment variable names, which is somebody's explicit choice. + /// + /// public static bool Resolve( string tool, OsSupport osSupport, diff --git a/src/DiffEngineTray/DiffToolLauncher.cs b/src/DiffEngineTray/DiffToolLauncher.cs index b5b3a45cd..63a0ef039 100644 --- a/src/DiffEngineTray/DiffToolLauncher.cs +++ b/src/DiffEngineTray/DiffToolLauncher.cs @@ -7,10 +7,12 @@ public static void Launch(TrackedMove move) => Launch(move.Exe!, move.Arguments!, move.CanKill, move.Process, _ => move.Process = _); /// - /// The two start flags the tool itself declares, which is what DiffRunner.LaunchProcess - /// launches it with. Hard coded here before, so a console subsystem tool - the bundled viewer - /// is one - was started without CreateNoWindow and came up with a console attached, which - /// DiffEngine's own launch of the same tool does not do. + /// The two start flags the tool itself declares. Hard coded here before, so a console + /// subsystem tool - a viewer from before 20.5 is one - was started without CreateNoWindow and + /// came up with a console attached, which DiffEngine's own launch of the same tool does not do. + /// DiffRunner.LaunchProcess goes further for a tool declared without ShellExecute, and + /// starts it so that it inherits nothing from the test host. Nothing here needs that: no test + /// run is waiting on this process's output. /// /// Resolved by path rather than carried on the move, because the payload the tray receives has /// no room for them: PiperServer's format is frozen, every stable DiffEngine embeds the client diff --git a/src/DiffEngineViewer/ILoopHooks.cs b/src/DiffEngineViewer/ILoopHooks.cs index 9620d0f27..62f5b1025 100644 --- a/src/DiffEngineViewer/ILoopHooks.cs +++ b/src/DiffEngineViewer/ILoopHooks.cs @@ -5,8 +5,10 @@ /// a scrollbar thumb and for moving or sizing the window, and where a logoff ends the session. The /// loop's next step never comes in either case, so the head is handed those steps to run itself. /// -/// Optional, and only WinForms takes it: the native heads pump their own events and have no modal -/// loops to be caught in. +/// Optional, and only WinForms takes it. The native heads pump their own events. The Linux one has +/// no modal loops to be caught in. AppKit has: a menu, which is deliberate, and a window being +/// resized, which still draws the rows sliced for its old size until the mouse comes up. Handing +/// that head a frame from inside the loop would take a callback in the C ABI. /// /// interface ILoopHooks diff --git a/todo.md b/todo.md index 9c3e713a7..4a861631e 100644 --- a/todo.md +++ b/todo.md @@ -1,159 +1,66 @@ # Review todo -Findings from a review of `main` at 991bc480 (2026-10-03). The list from the review at 4244ebe6 is closed, so this one weights what has landed since: documents and maps, the text diff, zoom and pan, the remembered window and views, and pictures decoded off the UI thread. The five bugs that review found in the viewer's model are fixed and gone from this list. +Findings from a review of `main` at 991bc480 (2026-10-03). The list from the review at 4244ebe6 is closed, so this one weights what has landed since: documents and maps, the text diff, zoom and pan, the remembered window and views, and pictures decoded off the UI thread. -Most of what follows came from six reviews run alongside it, one per area: the library, the inline patcher, the tray, and the Windows, Linux and macOS heads. The word after each title says how far the item was taken. +Most of it came from six reviews run alongside, one per area: the library, the inline patcher, the tray, and the Windows, Linux and macOS heads. Every bug found is fixed and gone from this list: the five in the viewer's model, and the twenty seven the six reviews found. What is left is what those fixes did not reach, the performance items, and the smaller ones. + +File and line references are as of a01dfc1d, before the second round of fixes. The code they point at is unchanged, but lines below an edit have moved, so go by the names. - **reproduced**: run and seen by me. Either the API involved, or the repo's own sources compiled into a scratch console project outside the repo. No test in the repo yet. - **measured**: timed by me in that same project. Release, net10.0, this machine. - **read**: confirmed by me reading the code path, not run. - **reported**: found by one of the six reviews and not rerun by me. What follows the word is the reviewer's own evidence: *ran* is a probe of theirs outside the repo, *measured* a timing of theirs, *read* a trace through the code, and *plausible* a reading that rests on something they could not run, with what would settle it. For each of these I checked that the code it quotes is in the tree as quoted, and nothing more. -- Nothing under a Linux or macOS heading has been run by anyone: the C++ and Swift cannot be built from Windows. +- **left by the fix**: said by whoever fixed the bug it sits under, about the part the fix did not reach. +- Nothing under a macOS heading has been run by anyone: the Swift cannot be built from Windows, and its fixes are first compiled by CI. The Linux fixes were built and run in an `ubuntu:24.04` container. ## Bugs -### Library - -- [ ] **A viewer that cannot start is reported as launched, so an inline snapshot is neither queued nor staged** (read; both triggers reported: ran) - - `src/DiffEngine/Viewer/ViewerLaunchGate.cs:119-135` and `:172-188`: `WaitForBind` returns nothing, so a launch that never bound the port is still `Launched`, which `DiffRunner_Inline.cs:104-109` turns into `InlineResult.Queued`. Verify then stages nothing. - - A resolved copy older than the library. The search order is the global tool, the tray's copy, then the bundled one, and a 20.3.1 copy exits 2 on `--payload` ("Unknown argument"), which first shipped in 20.5.0. With no tray running, every failing inline snapshot starts a process that exits at once, waits out the five second `BindWait` holding the gate, and reports `Queued`, until `MaxInstance` is used up. The temp `.inlinepatch` is never deleted. - - No .NET 10 Desktop runtime: the apphost exits 131, or shows a dialog and never exits, with the same result. - - `ViewerLaunchGateTests.AViewerThatNeverAnswersDoesNotHoldTheGateForever` pins `Launched` for a viewer that never binds, on the reasoning that the work went over on the command line. Neither case here reaches code that could stage. - - The NuGet fallback picks the most recently written version folder, not the highest (`FallbackViewerDirectories.cs:94-103`, `WildcardFileFinder.cs:75-77`), so it can also choose a copy from before 20.5. - - Fix: have `ViewerLauncher` return the `Process`, and stop `WaitForBind` as soon as it has exited without the port being owned, reporting `Failed` so the caller stages. Do not resolve a copy older than the launch contract, or try the bundled copy first for launches the library makes itself. +Nothing that was found as a bug is open. What follows is what the fixes left. -- [ ] **`DiffRunner.LaunchProcess` hands the test host's handles to tools declared `UseShellExecute: false`** (read; the effect reported: ran, with a stand-in child) - - `src/DiffEngine/DiffRunner.cs:371-380` starts the tool with `UseShellExecute = tool.UseShellExecute` and nothing redirected. `MsWordDiff`, `MsExcelDiff` and `Cursor` are declared `false`, so they inherit the host's stdout pipe, which is what `ViewerLauncher` was rewritten to avoid. - - A host that starts an 8 second child this way and exits has its redirected stdout reach EOF after 8.3 s, against 0.1 s with ShellExecute. `diffword` waits until Word is closed, so `dotnet test` with a failing `.docx` would not return until then. On macOS and Linux every long lived tool is in the same position, ShellExecute or not. - - What would settle it end to end: `dotnet test` with a failing docx while Word stays open. - - Fix: on Windows start these through ShellExecute with `WindowStyle = Hidden`. On Unix reuse `ViewerLauncher.StartInfo`'s redirect and close for GUI tools, not terminal ones such as nvim. +### Library -- [ ] **A launched viewer pins the test host's working directory** (reported: ran) - - `src/DiffEngine/Viewer/ViewerLauncher.cs:151-169` sets no `WorkingDirectory`, so the viewer inherits the host's, commonly the test project's `bin//`. That directory cannot be deleted while the viewer lives, and a viewer can sit hidden behind the tray for the session: `git clean -xdf`, or removing a worktree, fails with no visible culprit. `DiffRunner.cs:373-380` has the same shape. - - Fix: set `WorkingDirectory` to the viewer's own folder or temp. The paths it is handed are absolute. +- [ ] A viewer that is alive and never binds the port is still reported as launched after `BindWait`, and its payload file stays. That is the apphost's "install .NET" dialog, which does not exit. At the gate it cannot be told from a viewer that is only slow. (left by the fix) +- [ ] A viewer that exits 1 or 4 has staged the patch itself, and the caller, told the launch failed, now stages it too: two trios in different `VerifyInline` folders until a passing run clears both. (left by the fix) +- [ ] A failed launch still spends a `MaxInstance` slot, so after five in one process the cap answers instead. (left by the fix) +- [ ] On macOS and Linux a tool started without ShellExecute still inherits the test host's streams. Nothing in the definitions tells a terminal tool, which needs them, from a windowed one: Neovim is declared `UseShellExecute: true` like the rest. (left by the fix) +- [ ] `DiffRunner.LaunchProcess` still starts a third party tool in the test host's working directory, which then cannot be deleted while the tool is open. Left alone because a tool resolves relative arguments against it and `ProcessCleanup` matches on those same strings. (left by the fix) +- [ ] None of the four tools now started through `WindowsProcess.StartInheritingNothing` (Word and Excel comparers, Cursor, VS Code) was itself run. A console exe, a windowed exe and a `.cmd` stood in for them. (left by the fix) ### Inline snapshots -- [ ] **F#: accepting into a call that does not start its line writes source the compiler rejects** (reproduced) - - `src/DiffEngine/Inline/InlinePatcher.cs:498-507` (`TryAppend`), `:1382-1392` (`RenderArgument`), `:1617-1638` (`IndentForSpan`): both indents are measured from the line's leading whitespace, and F#'s offside rule needs the continuation right of the column the expression starts at. - - Append onto `do! Verifier.Verify("findPerson", person).ToTask()`, which is the shape of Verify's own Expecto sample, writes `.Snapshot("c").ToTask()` on the next line at the column of `Verifier`: `error FS0010: Unexpected symbol '.' in expression`. Set to a value of two lines after `let! _ =` fails the same way, at `.ToTask()`. - - By the reviewer's runs under `dotnet fsi`: after `do!`, Append fails and Set compiles. After `let! x =`, `let x =` and a one line `let f () =`, both fail. A call that starts its line, and one after `return!`, compile. `FsCompilerRoundTripTests` only uses calls that start their line. - - Fix: for F#, when the call is not the first token on its line, measure from the column the call expression starts at. Add the `do!`, `let!`, `let` and one line shapes to `FsCompilerRoundTripTests`. - -- [ ] **C#: Append lands after `ConfigureAwait`, `ToTask` or `GetAwaiter`, and `CanAnchor` says the site can host it** (reproduced) - - `InlinePatcher.cs:478` and `:689-740` (`WalkChain`): `SourceLanguage.ChainTerminator` is null for C#, and only F# has `"ToTask"` (`FsLanguage.cs:31`), so the end of the chain is always where it is inserted. - - `await Verify(value).ConfigureAwait(false);` becomes `await Verify(value).ConfigureAwait(false)` then `.Snapshot("new");`, which is CS1061: a `ConfiguredTaskAwaitable` has no `Snapshot`. `anchorOnly` returns Applied before the chain is walked (`:473-476`), so Verify's `InlineAnchor.CanHost` declares the verification inline. - - Fix: treat `ToTask`, `ConfigureAwait` and `GetAwaiter` as terminators in both languages, and insert in front of the first. - -- [ ] **Queue identity is the line alone: a partial accept then a re-run duplicates entries, and a settle can take another test's** (reported: read) - - `InlineQueue.cs:44-59` (`Enqueue`), `:241-248` (`Settle`), and `InlineStaging.cs:125-127` for staged trios. - - Entries for A, B and C at lines 10, 20 and 30 of one file. Accepting A adds five lines, and the re-run sends B and C at 25 and 35. No key matches, so the queue holds B|20, C|30, B|25 and C|35. If B's content changed, accept-all applies the stale B|20 and then refuses the fresh one. - - After the same accept, a passing call that moved from line 15 to line 20 settles `file|20`, which is B's stale key. A direct hit is not checked against the member or the value. - - Fix: on a direct hit where both members are known and differ, treat it as a miss unless `IsSettledBy(value)` holds. In `Enqueue`, when the key misses, fold into the single entry with the same file, member and anchor. Longer term, have `InlineApplier` report the line delta and rebase the hints of what is left for that file. - -- [ ] **Clearing staged trios is never scoped to a framework in practice** (reported: plausible) - - `InlineStaging.cs:142-151`, `InlinePatchFile.cs:9-18` and `:31`, `RuntimeMoniker.cs:5`. Verify calls `InlineStaging.Clear` with no origin, and cannot supply one because `RuntimeMoniker` is internal. It also stages through `InlinePatchFile.Write` with `patch.Framework` null, which any origin clears. - - A multi-targeted project, no viewer, and a snapshot that differs per framework: net8 fails and stages a trio, net9 passes and its settle deletes it. - - What would settle it: a two framework run with `DiffEngine_InlineViewer=false`. - - Fix: stamp `RuntimeMoniker.Current` in `InlinePatchFile.Write` when the patch has no framework, and expose a clear that uses the current moniker. - -- [ ] **Append takes the first entry point in the member, even one that already has a Snapshot** (reproduced) - - `InlinePatcher.cs:456`, `:864-884` (`TryFindCall`), `:487-496`. - - `await Verify(a).Snapshot("A");` then `await Verify(b);` in one member, with a hint that an accept higher in the file made stale. The walk restarts at the member and yields `Verify(a)` first, and the answer is NotFound, "The call near line 12 already has a Snapshot call. Re-run the test.", with `Verify(b)` plainly there. A single accept drops the entry. - - Fix: in `TryAppend`, take the first entry point with no chained Snapshot, and give today's answer only when every candidate has one. - -- [ ] **Remove on `settings.Snapshot(...)` leaves `settings;`** (reproduced) - - `InlinePatcher.cs:574-614`: the only shape check is `source[start - 1] != '.'`, and the splice removes `.Snapshot("old")` and keeps the receiver. `settings.Snapshot("old");` becomes `settings;`, which is CS0201. `VerifySettings.Snapshot` is public API, and Verify sends a Remove for it under `NotInline()`. - - Fix: when the receiver starts the statement and the call is followed by `;`, remove the statement's line. Otherwise report NotFound. +- [ ] Verify has to change for the staged trios of a multi-targeted project to be cleared per framework: in `InlineEngine.Settle()`, call `InlineStaging.Settle(MappedSourceFile, inline.Line, inline.MemberName, VerifierSettings.IntermediateDir, SnapshotInSource)` in place of `ClearStaged(...)`. DiffEngine's half is done: the trios are labelled, and `Settle` clears only the running framework's. (left by the fix) +- [ ] A queued entry is still found by its line, with the member asked second. Three cases remain: a test that carries on past a failed verification and has two call sites only the line tells apart folds them into one; an entry the reporting framework has no content in is not moved, so a multi-target run can keep a stale duplicate; and a settle from the same member is believed on a key hit. Rebasing the hints of a file's remaining entries when one is accepted would close all three, and was not done because a batch accept finds entries by their `Variants` reference. (left by the fix) +- [ ] An `Append` with a stale hint takes the first call in the member that has no `Snapshot` call. Where an earlier call there is verified through files, or through `settings.Snapshot`, that is the wrong call, as it already was whenever such a call came first. (left by the fix) +- [ ] A `Remove` with a stale hint can answer AlreadyApplied while its anchored call is still there, because `RemovedAtHint` is asked first. (left by the fix: seen in its fuzzing, and present before it) ### Tray -- [ ] **"Accept all" deletes the verified file a move in the same sweep just wrote** (read; reported: ran) - - `src/DiffEngineTray/Tracker.cs:873-889`: `AcceptAll` accepts every move and then every delete, and `AddMove` (`:165-227`) drops no tracked delete for its target. The wire sweep at `:1004-1040` is the same. - - A delete for `Foo.verified.png` is tracked and not accepted. A later run fails on that target, and a move onto it is tracked beside it. Accept all moves the received file into place and then deletes it: both files gone, with no warning. - - The stale delete is still there with any library before 20.4.0, which has no `SettleDelete`, when a viewer owns the queue, and when the settle was skipped by the ten minute unowned-port memory. - - Fix: in `AddMove`, drop a tracked delete whose file is the move's target. As a second guard, have both delete sweeps skip a file that a tracked or just accepted move targets. - -- [ ] **Accept-all lists the deletes after the snapshot sweep, so one that arrived mid-batch is carried out without its patch** (reported: read) - - `Tracker.cs:411-436`, `:447-465`, `:880-889`, `:1022-1037` and `OwnedInlineHost.cs:427-441`, `:598-613`: the snapshot keys are taken when the batch starts, and the deletes are read when their turn comes. - - A "snapshot moving inline" pair lands while a batch is applying. Its patch is not in the batch, but its delete is in the list taken afterwards, so the verified file goes while the patch is only pending. - - Fix: take the delete keys when the batch begins and carry out only those, as the viewer's own batch does (`src/DiffEngineViewer/ViewerSession.cs:994`). - -- [ ] **An owner that cannot be asked reads as "nothing pending", so the tray's deletes go ahead** (reported: ran) - - `Tracker.cs:447-457`: `if (inline.List().Count == 0) { return false; }`, and `RemoteInlineHost.List` is `TryList(out var pending) ? pending : []` (`RemoteInlineHost.cs:51-72`). - - A viewer owns the queue and holds a patch, the tray holds the paired delete, and the viewer does not answer `List` within 500 ms: cold starting, or wedged. Accept all deletes the verified file with the patch never tried. - - Fix: let the host tell "port not held" from "held but no answer", and treat the second as refused: deletes held, user told. - -- [ ] **The tray's UI thread is MTA, so Debug view's Copy always throws** (reported: ran) - - `src/DiffEngineTray/Program.cs:5` is `static async Task Main()` with no `[STAThread]`. `Clipboard.SetText` (`DebugForm.cs:92-109`) throws `ThreadStateException`, which `catch (ExternalException)` does not catch, so it reaches WinForms' Continue or Quit dialog and nothing is copied. - - Fix: `[STAThread] static void Main()` that calls `Inner().GetAwaiter().GetResult()`, or `content.SelectAll(); content.Copy();`. - -- [ ] **A tray that owns the queue does not stage it at logoff or shutdown** (reported: plausible) - - `OwnedInlineHost.cs:746-782`, `Program.cs:129-139`: `Persist()` only runs when `Inner` unwinds after `Application.Run()` returns. Nothing in the tray handles the session ending, which the viewer does. For a tray started at login, that is how its life usually ends. - - What would settle it: log off with one pending inline snapshot, then look for the staged `.inlinepatch`. - - Fix: a hidden `NativeWindow`, or `SystemEvents.SessionEnding`, that calls `Persist()` on `WM_ENDSESSION`. - -- [ ] **A `Move` or `Diff` over 3493 for a pair already tracked replaces its tool with the tray's own choice for the extension** (reported: ran) - - `Tracker.cs:198-226`, `:234-246`: the update always rebuilds with the incoming `exe`, and null falls to `DiffTools.TryFindByExtension`. "Open diff tool" on a viewer pair starts `DiffEngineViewer --diff`, which cannot bind and forwards `Diff` to the tray. - - Before: `DiffEngineViewer.exe CanKill=False IsViewer=True IsOpen=True`. After: `BCompare.exe CanKill=True IsViewer=False IsOpen=False`. The "Accept open" hot key then skips a pair that is on screen in the viewer. - - Fix: when the incoming `exe` is null, keep the tracked `Exe`, `Arguments`, `CanKill`, `KillLockingProcess` and `IsViewer`, and refresh only the target. - -### Viewer, Windows head - -- [ ] **A decode dropped because its picture left the screen is never retried: a spinner for good** (read; reported: ran) - - `src/DiffEngineViewer.Windows/ImageCache.cs:240-257` (`Loaded`): a decode that lands for a path no longer wanted is disposed, and the method returns before `pending.Remove(path)`. `Get` (`:194-198`) then reads the entry in `pending` as already on its way and starts nothing, and `Loading` stays true. - - Step past an image entry or a document page before its decode lands, then come back: Tab twice, hold Tab, `]` `]`. Both panes show a spinner until the file's stamp changes, repainted 25 times a second. A decode takes 23 ms for a 1920x1080 png and 89 ms for a 2550x3300 page against a 16 ms frame, so holding Tab through a queue of pictures sticks nearly every one. - - `ADecodeForAPictureNoLongerOnScreenIsDropped` pins the drop and never comes back to the path. - - Fix: in `Loaded`, remove the pending entry once the stamp matches and before the `wanted` test, or have `Keep` remove pending entries for paths it no longer wants. - -- [ ] **The first window is centred for its unscaled size and then scaled in place** (reported: ran) - - `ViewerForm.cs:140-141`, `:234-241`, `:374-392`: WinForms centres before `OnHandleCreated` assigns `ClientSize = InitialClientSize(...)`. At 125% on a 3440x1380 working area the margins are left 1161, right 886, top 316, bottom 142. On 1920x1080 at 150% the same arithmetic puts the footer under the taskbar, and `Placement` then remembers those bounds for every later run. - - Fix: `CenterToScreen()` straight after the `ClientSize` assignment in the `!sized` branch. - -- [ ] **`Raise()` un-maximises a window that was minimised from maximised, and that is then remembered** (reported: ran) - - `ViewerForm.cs:482-492`: `if (WindowState == Minimized) { WindowState = Normal; }`. Maximise, minimise, a snapshot arrives: the window comes back at its normal size, and the next hide or close saves it that way. - - Fix: `WindowState = maximized ? FormWindowState.Maximized : FormWindowState.Normal;` - -- [ ] **One picture path on both sides, panes a pixel apart: the composite is rebuilt forever** (reported: ran) - - `ImageCache.cs:297-338`, `:340-365` keep one composite per path. Identical documents share their page pngs, and with an odd panes width the two sides ask for sizes a pixel apart (`ViewerCanvas.cs:517-518`, `:581-583`): 14,609 composites in 2 s with a trivial builder, one side always the stretched copy. - - Fix: give both panes' picture space the same width, or keep the composite by size. +- [ ] "Accept all in" a group from an attached viewer sends one `Accept` per key (`OwnerLink.AcceptGroup`), so the guard that leaves a delete whose file a move in the same sweep wrote does not apply there. (left by the fix) +- [ ] A delete held back that way stays in the menu with only a log line to say why, and a second "Accept all" carries it out. (left by the fix) +- [ ] An owning viewer's own batch looks to have the shape the tray's had: `ViewerSession.EnqueueTracked` replaces by key only, and `BeginAcceptAll` takes moves and deletes in queue order, so a delete can follow the move that wrote its file. (left by the fix: read, not run) +- [ ] A batch that begins between Verify raising a delete and queueing its patch can still carry out the delete without the patch. Closing that needs the two tied together on the wire. (left by the fix) +- [ ] A logoff also skips `TrayVersionFile.Delete()`, for the reason it skipped the staging. (left by the fix) +- [ ] The session ending was confirmed by sending the tray-shaped process `WM_QUERYENDSESSION` and `WM_ENDSESSION`, not by logging off. (left by the fix) ### Viewer, Linux head -- [ ] **Caps Lock turns `a` (accept) into accept-all** (read) - - `native/src/deview.cpp:950-974`: letters are decided by the character typed, `'a'` accept and `'A'` accept-all. Caps Lock produces `'A'` without Shift, and `ViewerSession.BeginAcceptAll` starts with no confirmation. The other heads decide by the Shift modifier. With Caps Lock on, d, v, q, n, p, m, r and j also do nothing. - - Fix: lower-case the character before the switch, and choose accept-all from `IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT)`. - -- [ ] **The footer has no overflow handling** (reported: read, by arithmetic against the Linux baselines) - - `deview.cpp:1987-2027`: every button is `SameLine()`d, and the status is drawn after the last when nothing is left. A paged document in the queue needs 1199 px of buttons in a 1084 px content width: "Zoom in" starts at x=1128, off the window, and the status at 1213. In file mode the status gets 54 px. The status line is where page numbers, draw failures, the selection, accept-all progress and accept failures are said. - - Fix: give the status its own line, and wrap buttons that would pass the content edge. The title row (`:1617-1624`) has the same shape. - -- [ ] **No fallback font: every character JetBrains Mono lacks draws as the replacement glyph** (reported: read) - - `deview.cpp:2128-2138` is the only `AddFont` call. CJK, Hangul, Arabic, Hebrew, Thai and emoji in a snapshot cannot be reviewed on Linux. Windows and macOS fall back to system fonts. - - Fix: merge system fonts with `MergeMode`, found by fontconfig or well known Noto and DejaVu paths, and clip each segment that is not simple to its own cells. - -- [ ] **Text cannot be selected in the right pane while the left pane's visible rows are all filler** (reported: read) - - `deview.cpp:1244-1260` (line 1253): the start test rejects on `leftHit.textLeft < 0.0f` before looking at which pane was pressed, and `textLeft` is only set by a row that is not filler. That is every pending delete, whose left side is empty, and any scroll position inside a long removed block. - - Fix: test `leftHit.textLeft` only when the press is in the left pane, or derive it from the gutter width. +- [ ] The body is not told about a taller footer. The model's eight chrome lines leave room for two rows of buttons and a status line; a paged document in a window under about 450 px wide needs four, and the last body rows are then hidden. Fixing it means the shim reporting fewer `rows`, which changes what `deview.h` says that field is. (left by the fix) +- [ ] The machine's fonts are drawn, not shaped: Arabic is unjoined and right to left text is in stored order. Colour emoji fonts and CFF2 variable fonts cannot be read by stb_truetype and are passed over, so a machine whose only CJK font is the variable Noto still shows replacement glyphs. At most fifteen fonts are merged. (left by the fix) +- [ ] Accept-all reads the Shift key's physical state, since raylib gives no modifiers with a character, so a latched Shift (sticky keys) is a plain accept. (left by the fix) ### Viewer, macOS head -- [ ] **Keys and clicks share one slot per kind, so a slow frame drops or reorders them** (reported: read) - - `native/swift/Sources/Deview/ViewerView.swift:130,143,283,296,361`, `MainMenu.swift:15,26,37`, `Runtime.swift:350-355`: `pump()` dispatches every queued event before returning, and each handler overwrites one field. With the loop busy, Tab then `a` accepts the entry the reader meant to skip, and `d` then a click on another row discards the clicked row, because `Apply` runs the click before the key. The Windows head fixed this with a queue (`ViewerForm.cs:95-116`). - - Fix: queue discrete events in `Runtime` and hand over one per `deview_poll_input`. No ABI change. - -- [ ] **The footer has no overflow handling: the status is drawn over the buttons, and a document's buttons fall off the window** (reported: read, by arithmetic against the OSX baselines) - - `Renderer.swift:346-371`. At the default 1100 pt an image pair in queue mode has buttons ending at x=1015 and "images differ" starting at 977. A paged document's eleven buttons need 1405 pt in queue mode, so "Zoom out" and "Zoom in" cannot be clicked. - - Fix: clip the status to the space right of the last button, and give the buttons a second row or less padding when they overflow. - -- [ ] **AppKit's nested tracking loops starve the managed loop** (reported: read; what it looks like needs a Mac) - - `Runtime.swift:269-270`, `:279-298`, `:350-355`: the scroller knob is tracked inside `NSApp.sendEvent`, so `deview_present` does not return and no frame is presented. Dragging the knob moves it without scrolling the panes until release, and a live resize draws the old slice into the new size. `ILoopHooks` says the native heads have no modal loops. - - Fix: track the knob without the modal loop, or add a frame callback to the ABI that Swift calls from `scrolled` and during a live resize. - -- [ ] **macOS draws JetBrains Mono's code ligatures** (reported: read, from a committed baseline) - - `Renderer.swift:217-233`, `:919-929`: Core Text applies `calt` by default. In `PixelTests.Images.OSX.verified.png` the title's `<>` is one glyph. `!=`, `<=`, `=>`, `->` and `==` in snapshot text are drawn as ligatures, in a tool whose job is to show which characters a snapshot holds. - - Fix: create the `CTFont` with `calt` and `liga` off through `kCTFontFeatureSettingsAttribute`, then re-approve the OSX baselines. +- [ ] None of the four macOS fixes has been run. What would confirm each on a Mac: + - Keys and clicks queued: with three entries queued, `pkill -STOP -x DiffEngineViewer`, press Down twice, `pkill -CONT`: the panes scroll two rows. Stopped, Tab then `a`: the second entry is the one accepted. + - The scroller's knob: dragging it scrolls the panes while the button is down, and the scroller stays on the right edge through a resize. + - The footer: `DiffEngineViewer --diff a.png b.png` at the default size has "images differ" on a line of its own with nothing over "Zoom in"; a PDF pair has two rows of buttons, all of which click. + - Ligatures: `!= <= => -> == ...` in a text file are each drawn as separate characters. +- [ ] Turning ligatures off moves five OSX baselines, which can only be approved from the `received-macos-14` artifact of a CI run: `FileDiff`, `Images`, `ImagesEnlarged`, `Selection` and `Minimal`, each at the title's `<>`, and `Minimal` at the `...` of its folded rows too. If none of the five fails, the setting did not take. If all ten scenes fail, the copy is not the embedded font. (left by the fix) +- [ ] A live resize still draws the rows sliced for the old size until the mouse comes up. That half of the tracking loop bug needs a frame callback in the C ABI. A press in the scroller's slot followed by a drag is still AppKit's loop too. (left by the fix) +- [ ] The managed side still slices the body for a footer of one row. This head has 64 pt to spare, which is three rows of buttons or two and a status line; past that the last one or two body rows are not drawn. (left by the fix) +- [ ] Every auto-repeat of a held `a` or `d` is now handed over, including ones queued during a stall. `event.isARepeat` would drop them. The Windows item under Smaller is the same hazard. (left by the fix) +- [ ] The title row has the footer's old shape: the subtitle is drawn over a long title. (left by the fix) ## Performance From 5e5b73a6a16908b3a67f1466b5b1669814b1141d Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 17:51:42 +1000 Subject: [PATCH 30/73] Approve the macOS Minimal baseline drawn without ligatures The first macos-14 run with calt and liga off failed one pixel snapshot, PixelTests.Minimal, at SSIM 0.9982 against a threshold of 0.999. This is its received image from that run. It differs from the old baseline in thirteen small places and nowhere else: the title's <>, now two characters where it was one glyph, and the ... at each end of the three folded rows, whose outer dots moved. That is what turning the ligatures off was expected to change in this scene. The other four scenes with <> in their title, FileDiff, Images, ImagesEnlarged and Selection, passed: the one glyph is inside the threshold. Their baselines still show the old glyph, and the job uploads no image for a scene that passes. --- .../PixelTests.Minimal.OSX.verified.png | Bin 66965 -> 67317 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/DiffEngineViewer.Tests/PixelTests.Minimal.OSX.verified.png b/src/DiffEngineViewer.Tests/PixelTests.Minimal.OSX.verified.png index 2a01b622a62c9232345d7b9d2e7fbdb43078ed60..1a318cf1df24d298cf7f68597a13f7bba5643c2d 100644 GIT binary patch literal 67317 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 dMgcpA-0ZH1+ZP8F?*spnyQh3N`?m3u{|9RRq$2 Date: Sat, 3 Oct 2026 17:52:18 +1000 Subject: [PATCH 31/73] Say in todo.md what the first macOS run showed The Swift compiled and the suite passed. One pixel snapshot failed and its baseline has been approved; the other four whose title holds <> are inside the threshold, so their baselines still show the old glyph. --- todo.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/todo.md b/todo.md index 4a861631e..3e4db73fa 100644 --- a/todo.md +++ b/todo.md @@ -11,7 +11,7 @@ File and line references are as of a01dfc1d, before the second round of fixes. T - **read**: confirmed by me reading the code path, not run. - **reported**: found by one of the six reviews and not rerun by me. What follows the word is the reviewer's own evidence: *ran* is a probe of theirs outside the repo, *measured* a timing of theirs, *read* a trace through the code, and *plausible* a reading that rests on something they could not run, with what would settle it. For each of these I checked that the code it quotes is in the tree as quoted, and nothing more. - **left by the fix**: said by whoever fixed the bug it sits under, about the part the fix did not reach. -- Nothing under a macOS heading has been run by anyone: the Swift cannot be built from Windows, and its fixes are first compiled by CI. The Linux fixes were built and run in an `ubuntu:24.04` container. +- Nothing under a macOS heading has been run by a person: the Swift cannot be built from Windows. CI's `macos-14` job compiles it and runs the suite and the pixel snapshots, and it passes there. The Linux fixes were built and run in an `ubuntu:24.04` container, and pass on CI's Linux job too. ## Bugs @@ -51,12 +51,12 @@ Nothing that was found as a bug is open. What follows is what the fixes left. ### Viewer, macOS head -- [ ] None of the four macOS fixes has been run. What would confirm each on a Mac: +- [ ] The four macOS fixes compile and the suite passes on CI, but none has been run by a person, and two are event handling that no capture exercises. What would confirm each on a Mac: - Keys and clicks queued: with three entries queued, `pkill -STOP -x DiffEngineViewer`, press Down twice, `pkill -CONT`: the panes scroll two rows. Stopped, Tab then `a`: the second entry is the one accepted. - The scroller's knob: dragging it scrolls the panes while the button is down, and the scroller stays on the right edge through a resize. - The footer: `DiffEngineViewer --diff a.png b.png` at the default size has "images differ" on a line of its own with nothing over "Zoom in"; a PDF pair has two rows of buttons, all of which click. - Ligatures: `!= <= => -> == ...` in a text file are each drawn as separate characters. -- [ ] Turning ligatures off moves five OSX baselines, which can only be approved from the `received-macos-14` artifact of a CI run: `FileDiff`, `Images`, `ImagesEnlarged`, `Selection` and `Minimal`, each at the title's `<>`, and `Minimal` at the `...` of its folded rows too. If none of the five fails, the setting did not take. If all ten scenes fail, the copy is not the embedded font. (left by the fix) +- [ ] Four OSX baselines still show the title's `<>` as the one glyph it was drawn as before ligatures were turned off: `FileDiff`, `Images`, `ImagesEnlarged` and `Selection`. Each differs from what the head now draws by that glyph alone, which is inside the pixel tests' SSIM threshold of 0.999, so they pass and CI uploads no image to approve. `Minimal` did fail, at 0.9982, and its baseline is the image from that run: it changed at the title's `<>` and at the `...` of its folded rows, and nowhere else. To bring the four up to date, delete them for one run and approve what it uploads. (read: the run's log and its one received image) - [ ] A live resize still draws the rows sliced for the old size until the mouse comes up. That half of the tracking loop bug needs a frame callback in the C ABI. A press in the scroller's slot followed by a drag is still AppKit's loop too. (left by the fix) - [ ] The managed side still slices the body for a footer of one row. This head has 64 pt to spare, which is three rows of buttons or two and a status line; past that the last one or two body rows are not drawn. (left by the fix) - [ ] Every auto-repeat of a held `a` or `d` is now handed over, including ones queued during a stall. `event.isARepeat` would drop them. The Windows item under Smaller is the same hazard. (left by the fix) From 9850231ad10fcc81a466d866d6489d74991949a2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Oct 2026 17:53:37 +1000 Subject: [PATCH 32/73] Rebuild native renderer binaries (#923) Co-authored-by: SimonCropp <122666+SimonCropp@users.noreply.github.com> --- .../native/libdiffengine_viewer.so | Bin 2243304 -> 2243384 bytes .../linux-x64/native/libdiffengine_viewer.so | Bin 2435304 -> 2459976 bytes .../native/libdiffengine_viewer.dylib | Bin 409176 -> 426440 bytes .../osx-x64/native/libdiffengine_viewer.dylib | Bin 409176 -> 426440 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so b/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so index b0106d983c4ab5e2cba4c29daf86047888925d77..f53aba4943519d6b92b537225be468bb523b1e6d 100644 GIT binary patch delta 481045 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ಱ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

`G3F85%UGJ&KE||Rd4REi zY{)~5X&dq|7!Ek1)=viGQKqO3#$$}xWE&o5%p>+CV`*Y%7<0%DH1ovBC$F1`2LyAo zFm4p6D(TFaOUz0b zhccEXHk>hS-c<;u_a5j~&9PjOOtA@!X;Z9 zs+58Km}fc3u?vPwtW7KhZDQ3))+mQky;8WDF@ubut&D}lw&k(uiA#phcBW{ML9>Ig zfLH@#1{pLv8PkT(F2+34+pSp#Jo3Up{#Ad%{`Zz9?3h^cr~JO+*#Kw8c}W*$Nw`<* zVyBu*Y#(DGu>*|RgH_x^jCsTkGnOWHlrg6~p&}n+5NmNVGshV-&R6Wqyw)PP6~s=d zFRBKJ-Kvdo*g#VM4AX}VB$(J9z0vG;Qs_%v*g=8^HQi1MIUP;lPD6s`IRwS7#v!E0 zm`BVk5PC8baXhf(#nt{JB#5|a9arip<_uNonccJ32*JeMAgE!`8AggdvWi%PQ@Li$ zy^!>JX7xg1HH_If89`jbEX?Y`+EM8ho|N@3a}9GxDHdfFVeTkJ#$fI!ycS;iJ(xf$gN(rhQhKFXJy<|Wk1>0UWNCQZPWb1%mtT}H(Wd#4 z)Xw$aN*Q_yPkiR&?2WjXgo|Wl`<|MMvl*y;W8N$;H%rb4RMW%sRkFp5;propdir!! zieVrBx9??a`T_p??`fOfBm1ng+$aZaVbu_`7}NGy0b|+}D`dNFWi4Ya*(B>U6Sku^R5oe|rdPW*F_tDnrH(Oelx${98YQqvwle0Bt+9=<5KP*R z+Zogb$PUKzB31)qHrX0G8S{wkV$2{LVmD*j*4Se(+tDB!qKPXK+sl}?EA}y_?TQ18 z8DuXUVoa|u9nLU39}Kb=j%FZ=pV%?RLSn}mv&pXbk};3i8O98fHA%7Q^=S>c11B`9m)ks~FR^#uUavWt6y68Pm4LG{%&zk!W(O z8MMiUn8BDwY$juAVzU@?$cC8BSV(LxW7@8mCz!S!wPCSKKCoA&X)&V=y2j+sYUW2+6iF782X8ne^+? zLdgydg^@$7fiZ^`MRqb465GX?UMShk80-U?nLUg-L&)FS#2^+$E;*1t`0LZTj^9qX z`DAQ52!{a{ENBoTtNcEOdjJjA5!H*(}KtN-?ZdaIu72 zWMo^-8-t~c1vF<|%a|Qian~{C5mS3}RC;M*YHyBWPJ$+!YIBZ)Au+W%r&eXAgSv>? zo1<8o*mikgV!29B?XOWR%u@_oX)?B0*jcd(wN*ta8p=Qm)K(Q@U6rCKmr)gS@!rP= z`L=)ld-+zP>$g+3UaiJw-p-nS;}vdY5y{A zsi)R46!VCg%3-S@CeKnaSI*rj!AlhD%$P&WV$35}z*tDEkTGg}L2-r&ql{W!Nd{sb zM68T4-5Linrdwk7k6d#D+5#3g$O7!(G#I4=j8+v^7jh8AV_7)nu0%56M2* zC@184sqrvlda3a!W3aP5F(@BnEFgAVFuiloxKJs6$rL?eXBaasQhFxe4oWPSu{5#H zjJdSbXfc+6p)GS*z@SS@h=q*lWyNB~oRKPS31cC#GRE|>;y}h|Sux?3GiX<+1cx#f z5F5^zP0NK9jCsVyGL|MbfiZ_x3#%lf*9ZcFQ<$Pbrsq_~Tw>E0LwA%VSk0JCD}yr_ zL)VjfGZ{* znW{%@DPw73HH@KC$tP8OW6U9Q`?%V>uZmxr+g~z8Jay$ApJB`(bK8_pVii}L;JJ*2q}Q1-ZI)Y_FZ_LeZe)O8`LXUE?Ps)&$`3;`RX(FlQ$oc$bz!%YfnOq-iraqXt62M) zuVRjVwPhn4_S?^VNwM9`mlA9@^HuDdX1?0lP{uP&j)j2<21A17jM-wj6A!ha?C#o6 zr71J*rqYz@b~9Q)!WDHIpViVtZvt zx2Pw3SLz_5w7+H}V=nn?HZc|wt7FV2AI|0s`z}T&f?G2X6JuiA7<0&pvz@Vk*bc@F^4B!b z%RKeYr}1UTZ_hm&E98+c_#{W2II1=m=eIq#!olKN_qq`{#PIi@osu7< z-w#=weVN7~FZX<4BtQ)g5zE%Zz;gkrVmXMv$Qs`NI+&Q~RM3Lfw8il1d<|hu;Sf#WC_z ziH^qIH$xUWm4+#GE3Y9$J9;GtwemGBf_PAfZt9uRe52ql5fvVRd(x? zs=U9Gl6!Sd?Ke>{kDkmgIwzhK>4-G;%ks_l>rdhUmbgEnHUF~lxH?jK8K=M8gj8he zNJ;)jYA*_IbV=dtoa!9>9f17uXQzsA(|e8_J5^ubntx4X*g6oZS=@_pcck{RRGCpU zJbr&+LENY*j@0I*sD5SbkNztE0@Y$}`zpW2MByL#Dt~-;>lhjnYE9Uw_nc~bz6SCo zr}D4NX>`!I9yyhNSKk3i=km*ON>F6J+i~LJiKpA9i#8*wz*s)TFFKun6CS}oIGz9F zu8n5b{!gO5u8JdW>`ean-v5hSM)H^KiFT9UVYy1=xGJaLlcMF`b|&Asy|Hl80Gxjl zdFBK@h#8K(9C^-^lzGMIS zt|%1)X9fKX;o-bdCl9nO+hZVX|KfX2-ji!2joa@#`ExYCSX=)1qVM4D#6?Pt?(;9l znWOV)i(g_|6U_Ts>SvkO3bO!5L^YypKRvy~kmvCjANj{~tnu9% zo1-0*A9U~v4#d2I=)+U|Ngb?9^WbdQ5)bedl@8Vzv!un})xjz*cQG7B%ype@#cLC?+rlgU01XpX79+q~OMy(l9o7Q&ah^EeEsf7Lg$}X8y1|*w{qp3U=B?Kyorq1~P)5R)MMQIQ8e~ly=q)Ha5U z@?`UbXzE#(N>J{9l1T-A*ybtG)RQa<+^`*9jHXsIWM7bMo*GU47fZ#vz)$4sycqc8 zc6BuM0~Q6FGn!{aQwtahfo4Wix3W}lEM?5nslZj#;gx9WS{4PKq7JV`Q&Sm&qo{dy zG&PZ>5)Sj%XHu~*Og7JpriQU70nmbIY9K@QMakxc(NtfSig%GeET;1UuTb;iXsQc~ z0;f>((rC(LQ9^th8d0diNBFN~;(H^K%`2m+5B&`>t4P&x8faBCwT~fewP;=)P5oIS zl?qPnysDedg*z(Qyf&J8jYSE8)8FDI;%^Rbs|6!@5EBwD_Qh~pxxh|So&!QL? zC!04%Q)?LVfVM_c|IJgm*uU$XOkTz$o3}?(OIVaN(2i(oAw$mCWQQX;sqgVr#`-(bNHk91|l~H1&THsZ;{fuk4|70oO=#ZcgeA79|AgoRiwY5PTrbR!-^#mP(j| zPnqac><-E1!kpAoEDBs2&BZyXwG5?!N^(+3mWq?>-_%p5667YE2j-*_EQ*nb!73-U zh#?PXXin-*mWt8Q|0I)&*D={#k(0WCMKL;IWXefZGX%Fn^Mst#w^%CaPJW_L=f&xq zY_7^ljb>2-peZ@2p$uU;p?PXfY5+?Gr$@(%bSl^b&|IC9>dvBI3qbRXoK$CqumhlZ zW=<-?QgQPA_1RSNG3Ml?KJm}#rE407Y4hBi)FFwe>&E;py>v?nV*ap<;B@n^?PbLa zx_o@fPnbQ9Y``=~*wA?&`zye6T6#^2`@imGO^F=!kM*+3%C0za%I}_I$n&`GJ$ecs zlq=5L;qtUyvi z?i0Q?ZhoX!vTykNai!twX z`km)lJ6403-@ zNyW6EmHuv8ujvi-2hX=UMJEZ34`*ICCh^Yu<38+RoYVKlhVfzB`s#C|Mi&wGgLiH` zbw|ylPI)5Nxcm3U#B)A-V}0>{L|kw5oL^y#sDEmlH8LlsQP>6V zJJz{fMDE12_!e`J-{x3_=6Q}^G|{RyA-m_jlfQc|8uGJH`|o<=hKP*ScY z89pc}&mbB8Cn?V)86_#@StL^lCA`@LsEE9|Qr=>Os>r-~B*WJv6Iehp{7h0_NHTm( zQeH$d{7X_^Ofq~+QeH|j+)9uWO`o=3Xd>sZzBQtjHJRQlHo6savjO=6-jwB$#4@%c`M0q5lML) z$#4%zc{|B)4M}+i$#4s~{y!#L1H}O{4~ zs&0>7M+#F(0o`6km_{8QosWi%CYem-14Q(e0&NLo#~3ayheZFBMjj0=m7F zSCNcvFXh!FquWb)4av-Ftg0aEF;-PTUf_+Sk6y1fz_M;H6RaZzbbBdpCK=sc%3DcB zx0muZl9^XnWgzPjRvE~8gT;B#I4j!E`B(hK zc~2wRA-S4lT|Zd+#?|n&r0|(qpXy^4$+~`KV_8;4&=oXSN1zIuN3uuq0+K_L7wY&_ zAB%K+k{4@zl9%dms-Hv+0qx>nK{Cc^Spq9bMukav70DQ;rM#MCU0-WR*7dbk>r;KL zBiT^(lW;c@&=t6eWQ^PL0(B(YRDqjGc1hk!GMs->f1B2)EtlK1KFK>s4yBAipn(7! zaWa9OIs(bNbOe%jlkD_W`g=$YNNyrIP4ZrnvA!VF-$$}1WU&kOfQ~>4hjawmYI&Gs zm*k@)2P7XO*`O_#$4T}`{*q)k>tqJbX#F@10;cRk@N)x*M_Vq*9?6|a4oS91HfT#` z0m&}Og(Rm*R*y=gPg^t9qZ0GXel!S_=>+?$3=Gr>l3Y%*e&uT@$@T!HKb&NbZg@SaApN8!~Zr%9ecvQ5u!^?cv0!n!S$u7wYNe)R~M6ylKV)bA^21r&9hDIZiCQzdz z(8GF#z5vN9Ne)O}MRJsyVsBm@1e}_T9V;9l=3t+3?$E3dZVWuLz`9>!vATkn1) zC;AyLzgN0r+KHQtmkY7V1cSbI`^eCL^lGch{Cy} zjYy%=>3K?M!$z;2aIbU))PDDlhVgxz72_&J3fEY3u!!~9HP-a5jR!t6lH&84Vs-1< zYU{!twc?u#UtoR8y#2vF;@b<4n04)6P$Z?xu`NA~)K-?he?zxzMG`n%RN^XdQdH;VtY z|5tzPyVjHr=7jhBv2y^*->Y9a2S$2MOAgHDL36De&KZ!Lj?bt?>0+#i|F72kjEs4Nt` zJR;?QWV|>cWw_j2VP@l{5v5Nu-WQQ_NHX3Pk+Mx@Hr^AFvX>x$mqb(qlJSCwlnpYw z@p6ci9g^{0h)RHDyc440lZ^L4RD3eS@h*spPcq&Efj^e;g2g(Vqd678Iam^8*|VYl}|{$r~N5;+5ca10mZNt5>muG6GnikqHkZ zIZbjo$qwyxA4+mS^6;o^RQkfJ@j=R<^jpd}(@x5^tz?{Mr_v+&5Dv_f z0P}Ad0SDQs2yrFj3_B@fh8%?_mBPwD64 z_$(EHK<5ss_;5s>ZRz5pumaM>(z(n`p^i&(G0AC?OGw64Tj{*T zf-_J>7)mnyWHN!_I((3lD@YDV9!s*JPD}_UXnm5aNXArKrZ=Sn)qk46R2^ZkQkX_E zrrI(>HOZK2OL+##m}*OTCdrs;OL-Q_m}*OTHp!T3OL;C1=99&bskQ|3NWr;4$qPuv z)LMowB-t3EhohBpVBn~O-hJ#Z$R5-N-oWLPvgX$WmZzz3|w`qNXcY;348Iy$Mem|5U{ zRch*0EHSGP@`kCotp>Kd%M|hYzPdt=k{6S#M{U#4><1|PPgN;=vR!6UJtb5bi%bf6gXnjx56O$Z zr_w}*u(mQvr&()zlxE_u*+iiP-?M7sbmz4jaKeZYQnSa&A~Ml5=3ycun3#!qm`vPJ ziOYEyW{r}0iUpW7%6K2J%%oLV0(V$z|Cn;qa#m&n)ju+s!KovLL0tf+jmShlXNlrP z7%H_|yOz>CslwHBR6U(uMK#+$&JpnwN#j%|0o04?z*6A@x_~iB&pNYri??gUh2-60 ziYxCHvv%1&FvXQ}Kr*JdQa0!rjVZ2v{-)nUzmj*+ZIWypQqfh4vSgm7yXf%^nFy7h z%!Cc_S4tA(KFlA{(^=jT)PDIQ4`&9ZvFQ zlBxX!TS@llfv`>Mlf0c|CqYku9a@3p2CYD?eWwm5d6y2S0e`m+CwY$!rvbi6hm*Wl z*Z*Wy?6~_{;n@+TA>N!6JwP%%VaiVBwF(|baob+ElXArT9qJh0>J%d;>a@|Y$H}mLOtPXH!Q$YETp?#A)jbix1_sWNrTXI)mGY#`-ZAh znYnVhxJUIolrDZf8{E<=Ob%}E;cZ&km|j9-!X%s;6P{FR=%mKfvSBXexl(qhR0fh92w5C)R8GLizJ@C!xY<{5r5uu6f$E{j+E4e=^W%0_ z#E#OFMf_K)x;rxAwFXV4<_h>H=JOA0oPTJuQOquK(J^{BRxWId`aB010# zQ<4qp)=NotNv?q`?W#<_Ck0#gdy+kpSCO11c{Rxnje=`P4oF^0ve8jh-#U`XTN!Lb z{j1_8g-xVjcTy4RNcKqHOmdp!tt2}%>~14DAbC5 zX_60@P7|9#;3e@vo-l;`*W{{h*fMl2CLXx!`vzTO?ypkm( zdnA`p$^12YV{#ZLJ3w4Bor@!EHsGXggXa9fVVVtpglajv!K78fGP479=6b67E+<*L zIEU(Ra&ZpV;Urg(oX{@Kv09->B{+d{-*s|(`+z)9D)-2|@I)~$l6p|7stZhd6x;n& znz?jyy(VWSBg(Hv({7QdsQV4Vi1(v`Yl4Kb0@_}Se))o_tRyAKx_1#z1cmM1~ zWTw0Unf4^)4Fgf?=>e+#19+6Al0)-(c!1sWP+7m#Q*ftcn@FRFQ_k ze5q2#R&6;pz?CXx;YyW9T-H$p?ZJRARVuiBR0Q}+Woe9T*A}pCOwDkpEi`VJA?Ez_ zD6XN4c=WK@MzS7yzf^OCgmE$U%%ET5%u``VU|y%HKqM-j->>4>Q_0Dkmc?$CoK(8X z0uE|O*1gCqRpDeI2Q?(yY7S}tnr>*^6)4x$VEPS%j`Z(Na-V9_EHpBC% zy2rH>irnAg4wr4D3x~=D?rqW;QG=6LC*=f8B?6mC!BC@>x0Pg%{M_3^va3cuuSq9B@?Mf@(DL@__~-dc zeq?>C`$W8v7q`{WSPwTF-re>8@+0^>@fv@3Y_acA_uL=a;MP?utD@Gi;*7(Ghu}?v z9(56HLW|Sts_+OjV0AUaX@xb!3aii)TztY&^nnnotQnRjhLu)vJ#pQ`fACj6Y`vLK z9?>*BqM205E4l%>5Kd85yYo>cBB7b>J8c(AbZQAp}?1kHIe$~vgX@Q}8mO(g9r4AgYU&|mlPi6XWoMtkp9H@z=5FS(+ z86MPj7a%XHECF~?r4GEPT1OTytpn~ykqb|%)PW9oYj876h$OqDtY<~6dRU2|4T zBaf=gEj+3sx3UFN`wih$&9o|d6ol}sW|(oYzy1-cNHnW%@OAKJMNb8JKk%o@eDu)y zI4c|U#E{uAv1+TcL4MURHHy?)l^21-HN(mA8p7`?Biooa ze?$9>lRrhqFJL7Rj#b^fP%t%&?E4c9BaSoAI7Oq6wlKWJq|BE6u#%B{PXF2y2 z4~J5QuAkJt0jE{CY{2lD>5=qSxk{%>Z8w!#!npmc$m9)@k>L%JMSDk9N8Cl6o;b3n z!XYGezJHbuIfZ0(T}Tb@-fY985=!8SV`lFXULgu-jFWdLJQGzHxF5w16X)!KF-{&L zS@dHgGQJuKDrLIi1Xh(Eu`12Pk@4g$3a3b@>WDl>;Z(-RYZOkSVt*i0ZCjeKK`vA0 z^sti|g6Am1LwdNufh0@JLy0A_0}mRDnhVRKhZjjIEyqQAe(kO?SSqiPyvU5qU84sn z9?oPLCy!D%i!oP~dLo?7AbFO;xr~u_DV)a`d6>cljFFcqT*w%Cn!-hlk+&&aESdP6 z1ggNGZnBgqy2NT2%XBBk$omwoWQ;se;VQ<+3l*+r%t zrNWJjg&kF++r$`or@}hM$U_w-HZw?Ws&Fe~l-D9%hVOT;Wm48fE(;H&=L!v9xe?iShq9gS25T{E~A16F6fq z)+6VQ?Iyb9@{--}OeW)aBrCU9XqwsQKDoZaTvK)FpP}FDZa+`Vn#uo#e&1-r|0VnV zZ?a0_IUXk;m>hE90+Tww``U2YC_Z^2X4NudaDma_gZP8|M;}-7o$#!rX#$DM*V@Zz zq;AX%w(akmHu%ZpEn!R2w2PczVF9~ua)gD2j3vk$78Wx|9;!PV{s;5W(G=||H27$hwz-8HS^mNCqq_d5T3Kl9g+tv#6B#vjxB=6 zLsj!3yl5Flp0p62G+7e85|huKyWkaHWgp6mz>`K7!M9ix58+W0O;BBg7`$pSL3q`4 zTb9k#Rpz5?OOI1qf@du=UrMNn(Uv&5*HqE7x+7~hgoiD27i6%8@UqE^!plb1XZyzK zDzBPMvx-$GZ88j}n5~IS@srCfoXYAct=w+mG^!G~-2%9K*krs`d@DH9!Nj&lbwjmr z^1g-ezGX8`>8;IF6HenLH(ZD*O`ytrH6wC$y=JeYqHmvZn9>xa)+k;dpieg_)mfL^2b?b*G9L@l<~g;l9HKRfE)h z9WJ~K3$-3&;uy>J#|0aelL zcKx5=T&75VzHlC6V9x1^ZMiUyU&z=YmXEBif7O=PJQt9Bv6#1Wjb@nPpNWHk`cCh|18V1~JB z`6rz~AIv67k;`Ocbs^n=1~R7SEai;pDGPQiXVTMC7VKKiFg<0dP)yBt^qgfZQ`B>o z35>}lH}n|v^Gt#+O+(PnGb|)Fl`%aH!N!)1o)=T|oe(=*GEmM#a1nI340C82F_SS= zjVx+xe#z)jQHQe`qoNMyG8U@h59eWDb|x}SJHiEw(epiA$XHtK;SU!v=BP!ka4};6 zv89X|Y7I(^8}hnh{1+emkax0zDTc&WGG^0bcokzFvDJ*}NAnuS9C{3|WeofE<^G{? z9fL-Z%FIT_^z(WXVst_ zXh?;to*XdkpMK=7mtAxz8@RMbs75^0gue?e`#?Ew&q|0&EXci=O;Levi(_v*uWKu?PN^PhITPV?*DK%W8{zt_b^7w0AUkj=>*N+_A;oaSNj+Xv{%|}73a1D zcvIb(n0;1=Luy4A4yMXDH16wneHe3yRTGo_p9Yy=22-R#CQy%3l^_i=VwDVSMKKy= zg4vAGAQQ}G%u(Y>Fpn{>2kjqJk5ZK&4Lrd@rf8@^CRoInLky47OlCr2=x!NC15beN zmSGrpWNEEX&wnZ|HK2$Uv5X=OJb~&~ltI#4&GcyC3Dz)115dD)u}}?0!8*-^zspdA zOn~l@xiAezf$AMp)TCF(^lUX41*&%_J(t*4rk5tRjWHV&9=U$Jok5zZ20IuF)yybR zy@N`N7Ccq&pbHb*#p4oFy+i3aY8DjiQS<*=*#&886g0`mils?$FJrb^1r7EwMnh_F zfUz{`9b(K@qhxS6!!ZA+;WRj!fmjP8#bb;aYGe$KGv*Qdk}(<`gENd7Y7`7i_8f5p z6Z;2q8T3f8Gh;MV1{Pz68YzPU##~~BjHQVcGv=tJwV(t{>>pFbPq2(B>X$wSGUlq` zGbm>)BsP>WTaBK3MH1-cxGnl5xGZ?eg&?~+Pgzl+I%Of_6v5?qo#`J#jxr_z0hkTx3*gvQqK;>#g zTEGORRyhkl0Sf?2A;~U5vTJb~6@SLvRm+X<|)`*~3+Wdl_?y z?PDw$?!Wyj>(Xn5!>80R=X-`RJ?;!n+I>38!>r5jTga0FTe3;ra#};2G$8b|VezEk zI?huFo9zttZ+phNA~M*2?ip)T(MGKLmEZ({{oRdZX}6&zZIhxWt1h1Cw>@KB6blfT zmt({}8uZeg#>ErsE9S+8=F}NxX_Jk^0mLpv zBPah(Q7lrv{L<5z-&d;NrF6cu$XEKnnrgfAFBg^=gG%gf6I)CBI4`%IKcS?wk0H;8 zN49DW6uIG);zWepAtEguKj?z915A`{-d5{cv5^Bh=49h#V|kv`6Q=_H0@ujtV~ptE zr`L$deY%afrBBBZPv36J>P+ADtLjo**MOeLi~qB&R#ngTVRU`}v#nz5i20M+YQr$Q z#4orMcO8*;Epk%>XE*lUl-n;YtFCGhC1Pg6bhtQA{ojOd5%JxPwf`#qmWa{Gt0o2i zx6fI2*DasnWD9XP#2V~vdH*@+_Vw+H+6&s*_9 zBJdNltfchKD_?GjSC$Np7}HPovrGPn{~2ZDe825^YgC>9al72VZEX%l{_#+ z=!sftpHAP>rnU!-cOFJyr*L`o=_Qe8PERtDhx<9Hj>|6d*VkM96IiCVKp@~MAC~eBX=^B=1`iTg$7w`z#Fwr_Q;olH96E4d9 z%CDy_!xOlGtdxJHfN<~jf1d#v{x34H9PyVs;^H*WV9SR1E`x*dSqumXaR-5i98S*W zP%!Tsm|gSrjK~rY{NH6D%w|Bel(_p~wXw{ru6llQuS}B@0TZ(U{$Em-or4o+;{I1D z>%7T4EE7i*q4@I<*9gQ#un`!;scyRVEz7b^_x{QLZQHH$uHRySW?O)20FwQSTM&Iv zd^90q3>_oNOvt75TU=ephOxl^aJzNk$Sv_+l_hiVXN;WOS|$GDPv=YLSNsVzt@%?7%_0a$;TTmOn%YbXzdC4g_>dhk6yG!4U@wOCO((#Y4hD_4)(NH zHkEemad-So8@h`shD>u$5A}~AQfUSR7bS-vViQJ`4D*Kgl`mQ6UX=lu1(ibSO(==2 zB4X(44f*#x5+)~wV6T9oL$=(4=gUJESEpVvjQKV?>>NB&e)*C$u1Cuo2>EDob*eOC z%=Zwo6Co#FvL3oDb2&^Sns9){<0yw3+;v-}k=l;~e1b`})sG?Rs_9OvgPS~1>7-my z`eHoA)``Km{LT1k!D}yDl|2XJwAgs^J9v6!RNRq%(GF{jSm3D@FrFTnj3CaknNF*n zez4jWX`-EE!m*#O75Nb1&NqbzqmrLexOaE*>+y|>#nf?|Q}Ro6Q-9*R9Ce1E^6?7c+LPeVgYNxiP-V%jPy1oBRb2 zNAA2YSva;@{hWs*w+0VSUy?{Z!4;5wuazZ$tycfd!*M$X4|m2VAL8M-JMUy(g*Z@A z6zM%xrAgUdumfs|&|8Q22+tI^o0yQi4*}xPt1oV-!kLV}Z~p+n`ei=CA4RF?-X;ET z5JN%#i5O_q3`QgIL6&qH7dNQKE)NG5-~ z>UX;Yp1-tJ#5uj>xo0+__lT!rl{?wL;Z^G*^NY}5^{RE>{Fd}pcwZcyFg?j=9The3 z!5wdpF!|mIPx+_N{?ntK)^T}8tKfeG6Z`D?;hZn6_l9OMqZOkc;uh645KCX;wD!XY zC3Ig7>lZXw=SI%0jXOs21)MOoA1Ob6eCfMs9L)U_6o?Y^VVxtX(V2M{c6hBgx*-PG5z=41+`4>sHUAcV9W>M{}Iye!wa`{Kw%2Zo1I%&);d?T8a@9<1Bjg z1DCamUi>~aS*-VAA5^9P+ntu3FLQD5ZER=9#M1xkPODcQMwnU*6aH5_t;so!aAW$D z-mv~Kd;o67t@)3W{ltHB=E=B}XPzvT@(m~Z;{V^x?nhodDb88%Rd;UaPk7TR9ML^I zm1z^Fm%J#yFOz=FkY`$B;F70$-aNZh4&nOJKYG*pUgBfi-0XsDvZI-2Ca*(IYxX&< z8&>yE+PF6d_ci9y=C>S6yU_1$9#v+s}I=^Ry#=bwYRJrvC01A!Z9vJj@y>iROiMYto}e$IUWvz2N)0p7curR zo<>I(d@lHVnt#48MvM?s5wLZl${wx@gO?wzTdSC~d)m zOKW9qY5oau^pEP?eyH~4sJ_=xb^p*25Fo1SOOpMc?Y7>%yv0E2+eh;%(ya8`9yH&1 znst!n=pYC4tido$QvJId73dhxh+eusY9>$2$$7>{Kd67(YUx&cV3L{qV29KC>YK^x z#QhC^eWNw!+<0Q+KP6?Xhwq9Z995-}_zb%ADHK>5l&VcdZc^O4q+@UDVyi z3qT^12Pu=K4>b4(-?i>R_;r7>e)#op+{D2@S$7xpLqu^`m|C?8vsm0^0+Hwc*}C!a zmW-{Jb7^ZDww_JHlD73uFL_BAV^U9i|LgOpSw0)3+8~D<^O;2mYe0d-nqc@g8Xqkj z6Gn}SS3$07vd%3sF|0bceQ~S!d_%d|-&;D;@e@r}Z{+;RCTnm%5hjZ#=$c&qR-6AR zibsrk;Em!@Ek^qfMe;45N2BH9V8mKf;P z|HT?yx*Vmj+#dF|Q3(CD5#x*h;a{u)UB2_8`u^Rmh*k8S)gK>XLr`Vr*KO+8=L`Ku zGr#Kfulm2gXZ4H}y}$jGe=`c@5T3B&qX!40J<12YG}-U6*ZR1REJj0&+QSU-Ms3As zcn04CZIRFJ@57=OH!W`Xs`ufzzzv(38(#9hb(eUczHjx9i!+ z$=o=0Ap9?0*b%)-6nKUk-I8yBi%!*!dzSzH->g14E%zeDul^>T6}Rov4})|!-`{6B zD&uoR#xZe!4K*yZ=N8NcoCmi_P5pZdFXXM*lCIUIRPW74nZWV2Bi!o!0l z#Of+fc#o8aNbrbgn`d!7Rnqa?e-kd^Q@Hpjp|qT{nqqejiN`0Y8jDU zIOZ{o?xHd=3GoyA;lRL&+i2lL4WuWgCwhJuVwxtkPqz1Z={(A?mTcG@r2GNy6`xZq z7ad?u$4jwoKc~DU8kL5v2rq?`#F=bAa!c1sTce?0cEBp}?Ua=>q8X76qIrnIT8@$F zK(vEQMBDxtYHOQOcshXgrqkCaRCQhUOyfFCK6n+c{1YOK!%wSA*PCEf-Vi!KyxmlSf=wWG0Qy zVB_NUSsmiqgH~L2aaZInJjYKQw0d=wQDokJe5wD`K?|Qt#E~HWy9ccY#aQ?Oro|P% z^H+Xg4eTv*>ET3j#P1|>iW%{V-<|Ts@buOP)-|1_0``Jj^`^h0*(yX$bQe9QQACJ) z-IL94wE3^f9@D*CWJ29`VX{)`SGLm+3X*?@{{N7ECLOm&@@?>66BlXAble{Pi_O*r z{pAe__awfXSni;YiN2NYW>lQ$ZM6OXW%N0++vSioK5+n9t4d>K7*C-G>n671ZJ2V* z)~h8KtHX>>)ZA^)Z`M3$&zEVQZqGMpZl8O3y9>l4bYT}O#_YoTb%d}z$5$dLqs4yg zLp{`a#r_o#%=_#8nh$lAIXE&Msa%0l6IC__Rdxbp@Y;vgMQWT0d;4E~X!RY0a@->8 z3TK1h3zXGE5#tETSv)h^7pbh@tnKto-)AD;v;|1&}@#lYJjp`=? zuFW-`2T1nlcuh*YWE7d3tZslZhVb$YP<-tpYc#ge#1UL+^q7x+GhJ6tfNkC4-6gnD z%By}qQT7*PSG*chzQ19jv|dj1cGM1*uGh$~T88j@7UC0{7!n#~Eq-*V)XOxQpigq& z&Ng3tK4;=H+h9qg{U83rinY7vccCJ_Pg;1UZKQZ)if@wMizLMq<+uN^##|=S6J0Eh zh3^-kY@m=%FL_m36T)vMt}nxJeKF{X+qF@dx?z9T#c7R)CH}C(R?zzGwuf; z?)Qj`88=45#yPi$L^7jeF@(%(?t5`D(|1?1(jaI_^K~aL?XyJUI@xoak!YJrS-wSxz5`E2wf3AI4pV54lSI zyDXP-;}rk=k1adW=wJD;7pu9nne#!<8__U;j_*f{vJKz4j|1z57q=(h-?<6P6`^`+EC!qaSDDf96iY zGXILB)+jmT${rc?OFr?swBOXaRABp`9JS)zL@Z3Y2*#6saMbGIr;l1Wd4&BVM`3W{ z;Q;G?uwV2ECKp954E8^Z#D?^f?Hp^k)u+Xi>g8v0 za7UtHX6Mv!TA8um^8^I8l+)ii_~+-vuFq){1H)%|vGV~+JH~#5f4}S) zdkX)q=oGs=N4U6rU;bK#Uk5wIuIMy43A?Yh357DcbL`eG_d&pUspT&K{IYYbbO26X zfamG4ih@+>h2`YJQj2y%^=8+r7OF=&$A1jaGYA%*&+vb}=w27}!@}Jnz)M-9L6;zBqCpbKw#G6~kk{h#`1OX(t$J`Nqqo zA6@3R4Ua7|f3?Z484+vhvTzgZJkiymJ!fR>yIrnl;H{CdJG+c!VA81AM3MLwk@zE{ zV&AS>{S-cS?bs#Z#CS>RuTJ?EetQ$`k{^TT%ir;mbHTgfw+p@kyj1>ej3fFue`-&k-cgcU~53*Dvb7tcb0On1?sjue>;R zCL->BOYyD7kfM=c{bOTe&zh1L*ivEK;rJ+zbL(#zADf(OuG-+&O^Ov4{PJmJv)8ba zwmC?$%aD?%p00126gy^`YXX1Ql-N}B!N4!PELLVN4(i9^f28{@F#RV!;5=7m3@i!o ze>v{{uFGR5JJgnr49EM(-}$XrZp3_jy}x^EtgH)0$QBD(>56jy zYAVY8r|bQtSHz0V+3WqaSH#AaKNjE{;hlz+{PU7;;l9qdGA7)jW0NKpAlQyl|GBO zZqei+kNTg^wTk@bXT&Z#`@;|SK>fsw*aY$6htb!?D#ZW0u8aMLx%Wwb*LAV~%BjWI zAL_5WKK8wcdE=9Q!+*s336&53L#dX|j1|hLGh^laLyX^@-sZ2zhZs@6wI%p`#FCk@ zi)8lhMdasZ#>R?BpUjM1(=9}v)kc&lgWQ`oSM!Jv*UPBzU+!_r_S~4(8-1>kDp<9gUc8uB|uc#MVU2O+WG1 z-h#IB*iZaJx5Sp3!`9Z%y*0KtB5J&`$G43k=ioyhN9M+E&U2_QUVB^YyXV_ap7PsX zEh`c2qU2)dbnw%kR(q*mF6@JSDS{atmzI=tn^4ksoKye)ZLyJXk<7v8MY?}4b{)PL zGXHzA5%{( zm(7cb?~eR>UhEPPZ=Q^vH(&l6r2bttALHi$|DO5sLcdh-jrlS{^p4nN2)p8r*pni< zl7`(G>n-4&v4_kaKdIkyXKZ;SGNAstyJB7N-=FjS*dNUCe*Mt9(ek=9;||3W;uXiK zuU{Bzj&y&z6YlvAXIIq&9iEKiZ#mlGZ|_A#Z$vb#;7Dh&n4lIC z)F@mhlp^>n$$ha!CjNI>6dTp$Cy$>hier*3zW#Z|qS%GPDKgkkEQ*~6KN#4r7scQv z5}#XnOa2m}M>3&BKZp$(v_acrUU~ACr^M53$20x$ND@P|$bV^$bJ{}!^M4TQlV~xq zpcFv}l5CwngFVO$go!UE{*p)DvcZVV%gt=o!M`EUXhn zB^C-#%$Xz?3p=4?`XM9mwbYg2zYE=ocNnetEYpHRr*V!mASs+WbFhWj!L8QcAG@@l zD3^G6LGr{#wF-H9iCWMRxf_K@FQBcJ{t%;xRCF%zulQl?g03wGufQ~?%jJWSH~+yO z#>Nbj!Ps><=qW6D&0BQx^{d+a+#XJ95H23Y9WDbyX;tU+a0aIl>BtXb<9apjM3#0U zJ3^}&SraZH5n8!8HnLaaFA(|*go+!$vS9fKC{dB|M;6B}?(vPc^q0l43&ypi@eo4B zTJJ+4h*}cA4^V-eUh>K_f{9uZ{O`-!e6b8aQ9Q04Y(-cSyS@)57U}~-U!8BXeuYpG z_K^D61Lz<*jR8u^|IgUSjxEn2wwO}A`=7Dv&uh6k z*OAAMRT<0od@{&59XHICNAcJ+Zk*U!+0pql>}X6Eaqn6d8{{uu8v9O83s%bfcbCR) z?k-AI+APk{eKt0MYuJs7j$-UnKT zrwcCap8z>el5Z)3%q*hJ6spX8+BRJ^?!kWL@>uVSM1Johm7eOlE$X_<;2RS8)z@vK zi#)PCX5Z4d|E#27+^-Sm>FZun>0bWu8Squ20+`2cjpo%WGo6Ga%(Lm{Ij zUYI<-UfoXYq1d^V5@Pqv#|k353n{w=GV-fOsF*0bx_IBD?B4cJtn}Lhk|G(|p2FeD zcahYx)t99b=J$`qjcx_DsKI}-?RE z;og79!uHZNHt6b^O6}tMb{9EEUPP>PWiEm{zl|j%R$ANLu|3M4^P||XJ5@f{BY5%Y zY@U8j*S(o4{{K;S<$*C>-~YWgNhV}@%Vb|BGf6CoiajI}nIv{fEv2OxqNvy@iptov z(VB<4loC{t7SmRZv{h+zrAtantBY8QR!hFBDunz#=e?PTw!UA#Ka!by?>Xn5d+xdS zo_p@Ocf4(Depj`zTD7Y@u%w$$L1^A~S!YIQ<d18Y0w3Q(-~+9@7buV#B;Z}{mvvW-i%_5Yov z*cfPfhpEKyjHuQo);%LO)f1RRzI>(*SopJbN_spCE6q!QJu5z5n=llL<7*Q$3hUs! zS}1mk_TZ@L8?Yw9%~wP=2DFf~C$fNLSn6H0=r>s=J|LCHT{DO@muGVek8qQ0Z1gg* zIevi+F`}pPv>BdlStcf0%4vbLp(9@DQfD=XO-PE04r1q*i49?I2R|ov=>FjI)$C8e zQ|FS$H5>KQyJ$U@!`oXYU*i)IRh^K3{qOmB5G-psTm7797M486_C5#uPGvtmCw5N1 z{9H9V)x}oD^W2`(vu!08VAi3DPR`O+T|1UvRe`czPQYk;CR1^iihUH=s8ZR`=f$Lg z@_25kX0wdIyhO^C?PKfnT~-aFwvY=o&Su3~Ck5tcYh8Jc2j0pp*5*#a8;-xvJUCXg zlkoUjy!Uoc9R#Pz7WByj&pl)QmQw+t5lD}MR zF1ct$v0(Yu(URD!%f;R(yt!OcuW+Y`^AQq#7pE9okN}xiaNHj1Z;~rHYpu4n+OiYz zQcXAsU;+dOUXRctovrX4uHa&=4;<}OvaD7U4dgY3@GwGJ!2OMg8B;OQBzo7Ls}3i4 zeFki&3NO{L>lh8&b877f1 zaxzOvMz)^*CFG`Vg_6OlINA7SJ+7R#HAhvkb1-&Y1ueOfwjlWjdtLwTVZccf!FeXe8d0bv z0@jGJSp-Q+&966T?0a{Flpp8G)2P{o|D&AiI-HGOBlgq}UfpZNHgO)>YAh~%oax7@ zr*m;^0aE67yWJv3aKKvegLbY`xQD9peRiZlBVb%OxeK{fdB-s-bDOHXePCL)fon@4 zP^B0+LhBkfv!k{oFyo72GxT=b7sUpx2rnB^XmK2$Z?CTD|2F!TMqa;GR+aV*w69o$ z{$luxIFqja6`#SDzbGE&VYn8Fp={DRaWlS~){75^zg?)00!K|ve_G2= zo+C0-#SAsVkj36yFMjDIvF0T)Dzbsv$;VdZGiS@X3i#|_LCvHkR!1f~{E}D@*;ExO zbE<4UFo=CP+2+HQY=+Wpg3{$}(Ds!ZH;55FPQ22=-q`@Roz9)na;2s}0S((Iw#W9i zGpg{N^YXee+xwLmp}?es+HkJm2`!d=y-^&i<3@uc?4_JAyPeY#vec;wnQFvAAGF_( zO)U~{0&3zWu~||Bl_2P+LH`o!X&6zolUra^PqpHzt{S3}Z(=^!2Od7&bf?LXnh$er zh7Z6a#>cjZFShw-BWIzJ1_PKxuhf;#M_^u)kKMqUyet+p_$TTgw=vBCZ9T;3Z#Apy z7u088zAO%Jwy7THY*^W?q~XDu);@J;8z2~xeIvoqHw_x3(dPo)!?ub&c<}k^D_Bo; z#e`RRo7fzuEnT;XErdB8*=!`S9mdeuy-j>N1e1r8B2vk^p9be=C=`_0wu>#{|DC#B z9F33fw~L55z--5Aw!?Q|WpO*i$FBN2E@GE5GoNNt?T{xW{Wxq-j@Z%Vm4pOJ}ee3^n0!6i^WbREJjW` zFQVp|Kp1;Bmi4NL<9Hs}o|_;n?^W>yqo+Zv=2h{*+C;zCV5Sfe@*!`0P4gjBOFcg1 zHmvbZv6Vjzi2L#)lW>RI>v)kV7_0+%(j0`+Tk{L8%tOrzNB;0(bft|fJL;X(s5zAknX zeptl%zAnBf_E}WTxW*PU4HR-|-h5qb8Z&<>xmfMyli4H8Z{zPa{BJwcCYVVfS;sdp z3@&tW&v--Z#G8;+e(Ul>O|SM7_RoS7&D;?lt7Jd-$Ubo z!ho0W5nD8Ayb$ggFoov9LBvg@K_EyR4Mx|N(|VM{#vDh6wIZBd+#^~OsKAPFhXsOu zH;KF!n>~PfStM)rmKZu%OCbJXLH&CGBGzF+@IA_kP^R3YtTd8stgQgI;}?v*2Owf2 z7EGv9c0+Ft7%R70g4G4n?@?w8X5wDG1?5&eKC{4l55OXn#owc>0%Z;FQDzZY!JP_3 zb-|Q-02ZMPMwJa}tI4@;3-E}|f)4j6vq+I(GcwtV_yQUu6oEhrqxB);3U;m3gF$pRX4&@ih1FV=pf^y_0DK&K z7w2hl26~79StOo(pW-|O99(qMZu)(UqwsxV15J_0&u7IwRqqBoaV7TEI2pmjgvqfv z8@5lZ)=`F)z{5%GXnS^`5UK+#QtaB7E9#)xo3l4d#0no$X~y0b*C$e)TGOv0df^XD z57s$3RZ#j$YU(P%Rzkrj1K$yIaq7129c{HRyel@t*(S*ZQ6TR2?~04~7~<@^Q8Dn~ zwNiPTSv|YOSG_(Wi>7oJ`(eKrD`5V{@?~C91lw(P92b75syuZuqfp2n991>lGb(CC`R}KEfp_S*4T*@+x53AgE zBp8P>TMmk8CUri7sbCA7pZ#c43|%qf+m7zb2gQAG)X{wN>W5;L5%H(aJe>Qy`jOa& zxGE>E=o%|=74Wf`BxEgcr+zGk8gx4v?q_$uL*fPDp>h(oK50m5P4v^|3f#3FHqGxA z=ikB1mByR1pRWn$&T`EJ%zbrX<7{>fE)C`6g2qbdqSdePbA94z%65M)b_~HH)>NI< zwuaG!R&c4)esfnFGkzgDuw$A82j~|#iis{@=e`j41}p^QdE;^qk)M6rmtvZ6J~A{v z`<)YaXKew8K_unEV$13R>j#YAYxwaEywCM^f9zGOzlptLC)wHak+$!2!pRSpAgz&&t*jHkF zqZ5FoG%dn$sQfg()27UUQB^y7Y$i7BD>#=)L{^8w3cnIFhLoQ+2^6xVIli~r5HXr- zyR{3p*R9#M9f8vPBc$DgQIq#Tq17g9d&H7ux7kOWIo#xN@C@0J7AofVH6UbRWKUbkMqGxc32j7UTNNFT)O;;=%SH2@MG%9v zC{*oHgS|WmoPwZnoBbhb-aARMGi$TuCY_ zdJPrr{tl*Pkw({`F50h$-^U?x-FN~!97I8!fE^Aq;e?nr|QuCu09+LkPtT_jJ{U`BBaMtJ~j=#~% z{Z5L5k=%V!981aQ3h<54j|#C{ZRc&N(|Ic^w9fmoLR-#Er^FOp2Tag`XiW!tR@bl^ z13l`6;Fwcllc2jgk*z!>b{Y-QSJLc3H*pRutziSay=ZUok6x^mG^zbBXdUi^R6wD# zaoSf~2B{QXfc!`*C`;GNSk`H+7Y5_Q+Y5Aq@tmhG0okA~74)U$XHQ?E438pE4Q#hg z8;?Q%&d;KSuVg>`ESlj4 zx%o313#S*(2<%NFQi~vFT0v}ZMV7bIj=nu*QmUQ0z*F`q%4kXJeNJ1_^3Q1};Dtze zh?S;UQf=6$dl6o%L(JB0Osa#Y8!~!DTlF$_QYUuv90HR-`aBH$9CUpSM1+Sajuc>d zfT85f;TF7zBhDim;8fcLfv-F-_J)6s_OAwutz=6p1mR*Ewg=NA`R_NS>#Q0sh^^rA zuS(GFHTLBnGN(<$vc!Rj0t@aV!-?UbBgg3GZ7ZV3;0A32^{)l`wzz64ukxkY*ZESz z_4!x`bMPt=;gUoMkGcVIR_cPX-0KU%r3A~mZ{{CY4GKuA2FHfNo%Oh1JzY^)42HKK$-(A z;s{y(uVT0EgJ)v%8Oyb)2|Ui*Q?5HPPcm+sIc!V^SB_` z$p#!H=+>3}y?VE%&VX+p*3#Oi*zI4%jdv*OLHt&1URD2x5<#8ilceSc94Co%k{4c;EV;fRK6$+5?>mA`34 z@BAiO3tmPZH;3=%YxC;^E|WJtWV@A!^n!(kKAo2NB@HVTsz;zD+1rgJBk`F-G_*xC zq?j~+(FeIzG!hPAB;;_5UQETn!3a<-kMUI%$7KtcLe_o`;>ngNOff2`c zUlx6t{dci(v)hnKE~e2U3{f5!G~TbK-Wl%|hni{QUDsYSbN?>pw?Ws#vcnrSsWgZd zVZHE*(cueAr>BB#wivFY z;2|4x12ayOBVyL0fTexMBW>Z{@0^+aaY>VT`^$jUhYTKK^Rydk6kh6;M`d#&Unv$~p1xcu)}-RKM3@RW*cF~R>Z@MO;9*h5^Vx@&6UL8)TrrYcJWSGt2<=`Z-uX8 zDr(eff?tCgjb9C8v#(+6ymKnsbxjQGyKSm|M{t^-ek0z(6&=}(JPL0aQQvc;-Z=S< zm%Mqw`i**wwIgf1d5R9lachpOoXW!f5`Sx|xLv;yZkH7cFt$g)a7p0W z?tu$o_z_OEK<3}UBhc!)_zSN~z|OOT8*pfRG(~6ReQ-Wk7`*{gPdVMNH^)TuvR-|t zWMgw1%fF$8{=RxcWRXc~hwI$V4>!lFA8f{>9E{sv^D4I=UJLi&n_`egyxdyUj!mq_ zbOu*OwP@`@Ql>LoYlVJp=r_NHjm4}$`7{mDL*G2|!t3T$#HiJX0rJ=L^nC@)YQrtD zX#vJ}d5$AZi}}WZaPl<-Ady}XK`VYfiM*=0AXuBnrK?#;U#+j}pAMI zrc2waE$gQ38ET52?x|PAWva<_0g5u!hIP~Ug`D`h>52}j8EF9y8G5wH24~DXtO+-7 ziTxyacfr3s-l__ZV+ESRhTaz2;gB&06QpfnZjx=GF=-`$x7`*G_R)-yBO3>p(>4~H zN`j}+z7@OaA8QzvwsKn9Xj!A>jfi$f57V+X32>LPI*li_qlq3ufU5?sEDKJ9YQz@` zNGe(ee*K2x*r;o6%|5!_JP(JN7}1ucepRK0JC9jVrB;mI)XCL&5Qb0Am~!Xg1KJ96 zNP7eCuw^f?`*VBXcX8#MwN=f>kuo{Ky!Te%{&?X_sb0ZwA96S#;t6vq^h4X(2>bc>KpYLldBo26>ab-pEmDfQFc<`CI|U&{l7&pAMr=!WX7rNQ~K z06~iEM;WBcR{ZczAO^+JzXRG08WUSVkOF7C&ItN+qIc-Z068T%Tv;RUX5Izd>=dL1 zG=W!IZGP%uOfw`#Tr%4;A7Z1Ho`FM&M70K8KwP1_TW=J&d>cf2heM<4&{`2zoI08P zDoF99Mlf=H)v3rQJ>$SQsTH|PNqtCa8Vn>f7BEy^RabI$KXoMX=`9C>vs1&1jOqd8 zQRtCZr5r|X54nJ?zuEB6h*zEX0__Ira34Cq@U8V7lRg!qk+fc8C9Kt@GHvjL6n_Fe zAYCF|g;dW~PRHrS$sUGy#VecbUW%8>IolQNu-KxvHG4@uIfhrmTqAfk3aDLk0lLtT!V zKMIsmd&I*_M`Jq&PGXuGX>G7m8>_P>cY}wL$}|C&2GTmxm(=68r>Qqg#eRTuRM)&k z-$$da!NHQ1{a}^+*`y$;MI%V0A`e^Rzz`+QVw=q4$|_N!r-7{a-GuGqQLb=%m?TOe z@xK7yfpZLMsRQS7Z+SFagLVX|Ysa(OLFk7Q6IoQSl&Wh$MGzYpEHxG0oX8d<)ADbP zsRUta%$Ryyf9431ECRIscCge?U=vwGQA%&}Z&)9Du%7VKnbxMi(m+-yN|8eTMD~g( zb%TbK<%(Pg0&czALn2eV(QP>{w$QG z253XEEH&XLvSYH89023CoF#T&GB}DObP*9aPwBYTh~^aQ|5e`1k!@cya1{xNqZVDmE4GfMDqJ_&9b>ks60K zRXI?s%drDicY;Y8QZREIUQvRLpHnKTG$W(S;7*WLJ3fa>rI}o*q7EziAmiL9UcIe2 zGJiiLsE?zpX7j>~t+o*Lw-g_|A8FfpafPp%4){DOo5k(S!z1p$Uh_j)_D-UoIVpQ* zjxAiRnZ@t?Wstvm;k|ll7H&b+n523lRT^ox?W|d`D8pJB;SLXxLU|!{0!s;%rZ?1C zic%j&%VT~ElF1P9NZeIXmQiTMR=(GGb|_Se8aoS=N^o;!(3WU58uDGcwq(khwVS3) zM}A&GWb}x!v)jEtKUyWcJpToz0xlxI8)m9ghN$9ppg-Hlsp}0~zyTpTe;FO%gwL^u7ke#jpiolIGjSrGyyvW|-79 zpuAKF($?3BB{*BsafxGlM|(!S>Y0Uk*K|zuTO}yXrcyn8`2bkIYQtL z(^L_MG{J4E1Ggcc9SWBo$ON@9mUgt{>b&0lm|N-3i~5$%_j~Ff1}T*jC+`bEbhRf9 zY1S%2YGB4j7>~hXlaFEc0)VKhP{@e1acVxB9wGH_5u`TN2U3+o6Um)%M9n4)I)qES z1H*2DbO9_eCmHJ$4(jzq(a7c@_ETsL%>pzz`%NGV?!6seUzKeT|Qe(+f{0-nq z!>K~f5vy$gJ{XI65FVi4A!QqXy)7*x)F+$|_f;u(oo$Si!Xv2*iC_JlRuYK=B0)RY zmyuGM@Jc@0)lH5PHs-U2QBr*0U(xhZ%v6c^B(sGBuimRE`aKw4v)iwt?r`rC2J!u& z8I`8uy~wBKo@S#{SZGF#WiLiaLv!BKM9S^CuJvX}@hI&xtau;t?XVfHAWe+YzJx5? zjfYybBaLu*`1v)TrAJHA{CGAXT51viQC9#8+$pSRu`z@dMN2UaNw+NqZqLUcMz?!b zq9OEru zv|vRn*7=yR>`1J%t5F41U}#fj!_T3B=g1lhjJ$!RBtm&nb8v=-2x%x;wFR^ zlG^1X?FFbYOOM76q71O|G9=h1quoY-!Ty>1be_)G|zfc}6C#ZX<+hHo~5K zRu(5UNkwZa`rTRN-xsy@5+h$<I4!#wOH!_SQBomlo?D3FaK-CFd<%Q3tH*%QWUNDchTAiTH8RY z76q2dtTCEZq&1oLaJ6Mv@u!YqtK+3X!KDy^9a5%q{;DU~?RY6gcy0_!Nsy9-`D56i z1ZfcI0e)F6j=hs0HT5Kd*yRLCb67fQdqP&!PSilXPtcw`)+AA~idV6!(msb&dzH|N z4NjC|h4e9OR-)87zA<>DRkp$qQ=9|G(y3hhbUL1ZJQas9fQ8)k>to!f6QvYGcp?DL zAcBMr-t4-doK_C6XEl}{6xxqw(;G|ity+$zNjV&=Ryc-nXfZ9cr$&)(g%;mL86=IT zhV*b8tyNq+JKR`$EBZQsssLOBQP4j9cU-bM55CVM++$sm^trHlG#i^NrBMGnwNb<+ zur0|_C*jyA_G_{0|?9iX`vrsPHiHU+`%YKU~M0eT9B7lCjpBodOEy6 zde`WAMTu<515&o}EXdFu<1gzb!kbDxeOwK2?QC>Y>6za10W-`|mN|F2ap!>x^D@7E zT;I%`#-w%%7W7i2D-d>2bf|5+zox|Yb013GM~xeA=K4E;TmJmBeZSneu5ZfZ7y8CI z%G_Bg(prO28`-GhWD6-WpqNO|P)CNLrPQ<;94@Xi@mz~|TT}IvnU^VonFL4lthNPF z){#*Pb#@z$mqC*aYbho5*gH~RD)t8!$=)kG7PC3we*bQ(H;z8E6`Ef;W}Jfl!RZm4x)oIDe9yz!nWk`>GiTMgSu3&@mSs{NId+)9t8_P`!_u-$ZRo*Z z7ZImnfqj0=}(>nPHkY{r(u@f0eapHW4hEP{?ifFjOUgfIc4zM@h7%U zq{`Xkjncdb!j2ywXG7Daftl#20+`TP1p8-W0wX(#+}Wh73#ZhuN02uVe-URIA=bIE zdSfL|d-%RI>jsWySJI{K1;1ku@D{vngglxa-v>>iMRbc0T~73fF3}tcnuPlsa4gj| ztz*bm+$V9tIfKMsp=p(|HJ}ZcT-CYWfa@C@MNEk9E(GS{9@M zmX`P&)SP2$qT2AuS(@OGAf&i6zCSj{w(}$V1FA1)dx~fdotC}x@kDMW-FVHZ%-y#> z-jVT46t6Cs!mCdQIx=%(hviewjhfg%*0BSG?HD)lp6YPL0i#_$;>e* zJR;A#F4HHCVapob#qd5kP_N(p+As9aWrg_pA|LI#1Eu3U-wB^QT|~oc@X=~*DeA~r z2dPaHY6w|GR@}fNPb&3e#bo^*MDNphr!WSrmX_?V4w6l(1cvTju}dmq;#ij~$r4iz z;{l`ES{T>dnnr%bQ+z{nDg5MQR4mAnY;_<4Gt%Du8^p;hDPoLH16Oh4N<*u61ES_T zYp{og%4zu#)jRIS)auk4@5)M}TMBjR)%ijG`n&VlFq>rY(K)k8xMNO7YP)Sx3?A9@ zw!)H?M%MxUPED%`Wm8dRukR>96kRa7gea(%K&~+EW#g@JD6^r5#maj7pTKvtpi;wI zWk`D*>93KdfcD{#^f^3gn2obgI-fklSodrx=@E^IGputG-4;9tyVA;qwWN!e4|<55 zVSY)3NVk11B-Sv3CAdzW@(;k!LNG+kFNEX&w81x-ZZsXvmTTou&GS z`uM&xY&5j33pGOHqYFgi1*10`+_go2bdj3-xJaQJb%g?H-+I)3o7k0VqS9?$C7X@D zsaY|By-0CMP2x&Js!0@32d#|zA$UJu5q#H^7BpHt<*ZS++B&*PiOtL7)^x>lD(%c( zanituTVE$H29bf-qIqSov76MwNMqGn(UKkSM$A$B#O_jrZ#g%uYYDUM2nyL|>n`!( zSm>PEAm>`Eam&gwp}ysuqX`?>LrUtBjf53f{{>8toMbDB59D@Ouy!{L5q1zW9$>9p zz{E)~oQy+Elu?7c#6IpJHH{)-@pzNPI~TPAVa)K!mI`-pPbtMmunu*1cu2Z!5S|*! zI`o%Ph5VuJ>HQ@?J{WXdCV*d`J1~H&V9!1*9TEOBgbf`a

o+*yaJ)S$#Ex{WL(D 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%0A5xf=CFs`C|=!@|p9e`6m@SLd6G%@)rO z5z!`RQMZpkFh*11N3b;ZrMn*i)e`8HkJbK4n*`{}~RY7514KY4zF-_m|d z$4{V4hkLBWX-H_=W}Gi%%S6t)bvRCny!houC%HJ^EqaQWSU;HM|@lE;*-wZvb z3K=ndqmQedLJ;4yPl78aRFbS5Lj$?LD5>6p6i{%)>;+m*9Y=Va^7%V-`!m(IRyqVf zwp}yVG#2=f_vfmyOFq^TmcNNPkkTF=kj;s(65+T&kr7w=@x!p?C&meXf3;y=)oM8H|Kk)LDnyVhtF4)9in){*tO}Ic}Zezofpm zG^1s8+wcok*EixaZvKYbY~p-xf{4iPIWWWCZ-KA9&oJkEfT8;PYz*po1B|FVIRhM# z|8!vR`=UqxEK^MMJ0|)ZV`JJ)E-+Tgs`LBT3 z*4p`j*Pz}i2suc4R@I6xyyQAIlwAhvtL{h22{0F;uXZ}g3*jm$rHHt;b(P8uI=$CG z>h>+PgYS0G_-_%l_4y83_N^Mx0^O~U&<%ITi^I)wcL$x_ZK;j(H#{5+orgPqJKg*i z;>{gtwrh~lWJC<6OAuGccqz$a6+WugBl!a^=a0H=r}5vZ9lLR7Mw7q!?G(v89d+{q zOJ-!lajFt4FJPQQ{F ziOB)>?gsCmn3HOhM-P<40bs>2=#7&&jMNDQFOG?2Y{0Xe$7G)%T!%^DPFmF-^``z+ z)ruSC{`eg?9*goR_(p=6o6AZ$G#j^aG)KAA7RNenHH<~{EW{A+BKtfs&Ir7-x1H(Z zZin9WZKR!214DU2+<5gQV*so{=%k)=azAdPj;GYnI-Y2N2U5M@8qGKbG*f8ZDK%N} z*ODpF{DtM(DK$*z7Ur-{d!7T6Dlk)vbLv{(llGI@Y%{cnQKdXN-e$?f!IsPC)Q*aq z5g!;ou|%AQc^XMmhySSdR(5<#AN`0U20>KuBZQq1mc~D+nR0d8D}PoeMRpyCQNf|k zN72%f+{}3hJ_y|cSp!NE+aOs@XYCnFpYoEW`33cTr1e=#Wf#?Ot;+yMN|tA9$?F%j z2#37r$S;VyuIns6v6gQBqBc&t!@d9sx2Ln8tzy=hUDJZA{5bU8gvew2JKUCD{cZx@ z@iV{Ux_mw0Sn7)dbZ()JAoKZ`)Ol_1aCtk_t;SLQ4;bt-e$uI2!e9}=T5ep5tN9@8 z8(v3v52(1afsU8e6nB%I!s}`CWwpJR^N0C`O1Ceo&1>0vc~lR!cYDhe^{e{C&46d= z6N<8_`s(Kto7$bhx(^P89X9od7muDtI2_+P>rX9J%e03e;?A}*%G54_)%CpV!D#`E z<5@WCpD0t~tJ~DBsGH=8wEK$MKXC9NBsNCXvUFO#ja9@O zf-Qc|uDq_PlZ3si0=;<%y>(6XV|)RuEJfEqBXQc~z2DU3UfdM#ac&MUJUitgb-$sG zQ6djoKDwc5vV4<1|6R?7`{U)CFqclEIXBh8%K4?pD6Mu0?hLavt4<{&63dT6JxQD2 zH&O?_UW&xOHcI>h!uQXXA%8%t;m%i}^Ygc0)MXg106g>lQU`gbVO6@$(e>U0m)Y;g zcN|i1%<|V?>J+8A)|h+hmg;A(`)U_$?gw@Va|n%S5vi==XIj~ zR!7J&wB~QbpuS6W9zg0poI=_|m=;D-gNJHU=h$e_Lv^wD`zc@v7*gpK#e92E-wHj3 z^XQ?vUG^9Y$z$&9S?97p_|&rVG4g-gOB&Cym(YQ7wU}k+Cy=m;dSW+$IK8&qvhs;~ zTc^C+gYqh2C-kH3m1>CRh92;5!wr-ML-(u8EN3g#nX+%^y|9WYt{{WHMH!*4W>$<1 z=0h3cxU6qjz(*i@*kNm%%oNNQ+ELwzq}E}2LjffzqJ_MKrYIs-DVOy5f#fi<+X12fw)4)O{SkoK{mb4xBWPrNekQP9^3) z_Ir0r2TSFPx6(&7#U}X&8t5sKWg~6$#FRd!L!Kf*Ih9WjJw>Q8a{&d`5-U9m5joGM zTP6%&FQJcWi8jLHEDrtScXO(!B^oOE`4nDT98rEcOV?`)Jrp9>I>Hj31iH+ZAAdLt zxu8*d;q6z8c{mJo9uCvSoGnyVN30bFrr{+n<}}Ln65hPG9r+hQ2dcfHOwoL5(_SwT z5zX(@|CVO(HQF;@b(z6U4SS}>J)4aTkZ5}StxB9c2A4v2Jn*YqC2Opurnl%VQ_dyT z6@hOf>WcX0+zv~g!|#}8WWX@a?F~n}=`XZ7A8l65I<|}34Wl3Gimr9|Gp;%wuZ)dw z8lRf`h%h&AEXL#`G{{FxbvHnMkxVlE=p)kIjrd{2j|5*4=^o9JP?AiOeZ^NETrJ=G zl{l{2$xrlB#_Xi^exk@7^aOV4;eixBD% zAYO9)#2fx$ni3!qJU4hhpZMaB>3D#Ma;xWsbm`A%j9%!eZlL&9{+@b;hyZ#Lh}%*7 zQq3R{;ghQ9m*|5KfLj3>#=)rz zA!3KV0H~g>41CP4fkNJNd2fH%uoEZ{%6^__*<=ut5u={;N5 zxMNp}2o>?p1})=51^kqC=u((y>#3Zsw9`b{PV*_ez8K-=d|p{!^s9cpU0+;qb48u) zpU}w$Vhl{>ap59aS#*T5!o^JG!b*A)E_NtCYY6=$ke{GaNZ^33aY?LNo=!3Ee#fW8I-078k-mV7oH5`6?{Rb+G5n0Net&|Z9 z-1{k;w!|`&@%=UM2X=%4%CTtro2?doYY{FhZ)8))IHC8vZ*qW+dC0bGniMC-L><`p zd@1HA}ja@EWxoCAblK4)obw%JCi4Ul`IB3o3li8 z5D|)dYtRk<7Gu0RVLWN!@Vz@_=;V0I z+Rj4pfNyzSZ!uUI+t%{1xA1gv8T2;JD6BY9JJb>}K)5OLyO!pIM68>TShBN)npK*Z zCg6eKpP-_PMmwlz5BfY!gvhU0uBC~tvfINN(!TRYEHN1%4$6V?G$K=^hT6XYQ~2&_ zCEdl?Uld_&_yGL$dZswx_BWnaAEEuj#CT;?YYH7M4kHfZ=iwq>d9ajHM~D{6jd2J8 z5TURJ9U37*lpmMU`4K{|Jl#VNM~GB+$tmOx9w{EkuTrm37+MFKI0_TpIi60A0uJfv z!6xz4*N@eh)P)sKV$GM+UUI=4rBC1)ve33-f|60+s3(`7fZ*aiX6xdmPOi2h#cX zXr!bS7nHNDXy$kfAY}=yACCc4O{VMPF@PQ)I|lGN)pZY|tYif5 zcJ9e>@q$m$GHN_Q>{Mn))7c54yIUHLZQ~qv_(ZWc5>P*FS2h6oidmO-b$VRsm%P(t zUBWDu2>{BkZT8q*@r_h$B6*VVRzGc%_a$h{1Ww=B>bB1Z{f%oG;E@S zSHt^dZ3%j{%I&imNZEr!Q}S5cUD(Iour17-LhB}p1h4b(FtCZsPNcw!&%(Sv2{hrW z33Pd~&}-eC%~nkyw>JTtyfK8k%p;=rOaOL)M6##l7&gUm&f$ji)6Jdrui!np#~q8( z>1Yf?LYL=h(VJqc+at{3(GhAfMMNpKU6e6JbPNi_M&=_h?3fw!soorf&yZpzW!6?b zeL6)nM?n08DY$Fnw2jGwZ_!@3SeMhdsbD1|wpCK3$)IP+Y1I}wJXLTWVH|orj?0v$ ziRQc^UI6nKyROl=X`*Q$7gq~A(_auwzR9G+)4*Xf>4#~erJDod7SHJ-Ne+GejsGo# z-fQL%Lbts^5JE#~^$fAl?E&U_=m>?*6xV&%Ew_jESaX^b#FRoC;Uq=@W{ZB7*de=? zKg0Pe`f9ewls8i39N>P+2c%?)hoNI8K?#G1kmmc@4A@Va+b&e~iG(0raKSy6=R322 z0<%R@H_T-p3s}7GUlg(~!YnGI-V8{VRm?!*{F-6oSPXzj9 z7FE)p=#I$gQW6n-Y&bZc)0E^MUt5G59xNE(7PRT@CC1Y(WOCS z_`!1?I+%MnKVNq|hw<}C$Fl*MgGHEfEQ@yJLrQUeeluT$>z}=jlZ_8y*}|059;$I^ z_yjh;gV|q85lWr!-=7)4EwLzk*3EtOhRTirGX89r!EH|Y0774%VwfK6Gh-q;R7cD8!A-039>R>ft zV9bS3Va#b_E}tN+_I3ip^C3(>VN&euh16oPh;p~ju^^I0E*8B;@<%{ISX>*MCFET+ zLiDy*utl1;21~2+@&-mKsFQo%RGegpFqfiJBRcGiC_gsCCE<@R$#r}aWj5B%TfYY1 z<>&QhD!wmw@qkE4YDOVTL_mVQ02@{^G&e8cN-=mwrMwpSj|3OF5ueS-MS0G>k{LO= z$FVtk6N?$Dc^@TO&zH5JX-mZR>}MDOgO@=o4cwLT4v3O?s8@i zcA#_VJQ3&~3&SOwuQhzrr7*&bIK1^^6_ZuqcVoGUc>;o?Z+J^qoYmQvEzh~9CN?oI z)6x2DdG@_Ux<&Xu>)t}$!u9u%C33@3;j4Vwk`62t(aK-1(aoj6qP~`zZ$UxIMh7dp zk7&6l6hSKko0&`T){8yF@Au;2sFUK0W%h0C$*G|OJn8YoCS1qnFx>cpHoE#es+(o znALUn{ob!4%)Hy~DqT&xrHuy%JUMMli!}3H><6j+a?rJQTd3c1h-|I%XxVbu81B*T zZ2F)DmFhwwepLHZVr0$2t+p68FEn`^}4@Gz7egOtlQ7Q2*Nlw?)v zIHcTNjU7_%pi#7btq5#0=Y_U<+`)Ip=VDtq2d;`V-@e z!+Otnu?6`sIU)>^o+SJ{ys-*vQDyS+IO;*7f!hz54>;*e0x_Ip|JD(yWhavO7K&6v zoaJ*8M|H}tBWV5xp%O8=Z)9sA6Zc!+P^BPrbfOtADoAmDhO7Cu_ zsqcvKp$kU*=TYdg3_c1Sx1px9wWA}*ZKD_xbjMVG%cRxE6g zM^M&A=vdbqI=X**1Z~*}h4#E%?54_%qC0|1x^04i$U^2#;v41OCQ98b&bB{?8k3K7 zD(7Piw-emQy@@cocQU$^Z}<(&r>!ndy$?MBx3se#lCq1GEn+2z|C%kLZRk&_SR@2Y*bSioTn^eOY#gR% z1F7_rF}22Y%e^f?a>cxkJhzE0Zl7XcFvA_*20NV&F(uS)huFqA$!3De<$5QN&sT=q0JCIcrGhf1b6Sa`tc@U-U6(^Mk z=@j+8@D;Pd92+E(y1fsT44aoNy^G%$>+PyY$mx#MWS=;rQK7sVisBePwY)!Z5 zKM=QNuUp~RF{U(qLBJUOt>iTQ@8P6BAQpR`K)EN%(*nlnKMl7WJ|Jewp2M7lrhu{f z^l*wlB=&o?LRsU)bbU=!HlVy&xJ5Y(k=66#29;D3;&EEQOZpERSW+w?C|=!A7=pr_ zfC&AcIHmSV1M;+r3tnC*uYvL_$);jcK$zaM0X?yb^S(dT=hlt(a(-{XyL0vF`bXkd zIm~k6W6@Fe8izVO1zW&){a={E==v6Yu{a@nKEh;c;YAK!{2gYwcSN|!Ui(qVwMznC z*WX6%y1s9%X_;k689Co#7g_WI-Wi^GtxT6`ggS~8Adie6Vj z9ka0oM4@Mc{?|~;;p5^X*>eJ3c-p5KsUH_=$@)zA%AO5T$Y&c10Fe5jwB>U#!b@|u zkQ30<-hx{w1)f09<;F^S5A)_Z7vS9kBc+~zq}JL%_fEiI)Yw2#U%(Ef8K~$Bk))J| zSZ;qIF6a~`guebpe2w6oHQ&OZ-Pv;NTX9iVy6I`tN#MuEZ;aSARXr+iBQ-X5rY?Cpx3(5=gB)W1+Y=mh!_q4d8+~`Il&Op}uq8r^j zBR=x#8eARB?E?pHVA1A4I($})Q6}`H&~svtQaXUL&WS)VA`lb+q~4zj&xw%;RubPs zHhha3d@mNjlk(p8(5H*Y_=5;C-g^~Q&zWX8?cEU}2;3?G@tFnUl=esG^2s#t2hkFK zi?@Cd8|0?c_`Jxhvk@Qp>m(0fT|n2P3g_9}cpe%mr;W%PHN7>Ke}q0ViiZ3szLDRD#}FC_nSK`j#y`4Z zbS)GAYjm&aKr%79*J;Yn&~eMqaWY_s?B&=kHgE^lUD(6GYQa|`m}lx38gmae zmBH)i@IBZ8-tS4*?}?7exVjW|9~#&rFEqQ{R6HGlq}{MAWr)_`ZWEF9h=C+}W|Akd0g-`h`PIsta_0k-@n$>jA= zO!74Kb<{1u_bhuo6fr)_{`tPc?%w#`fVO7PrH7)47J}-|s$P%K{kUZ6{s>&RAB}zl zRq_y8fyA@y5tia+AG(YxK5hPK?d9E7xE`5XYe12YMM$WldZ%)Z>~{pnI)w2;Y*XWe zSo4WKH2$$@Bm2^BR97m`(-?GC-OJ6#K+%*5G_xG@Ig><3%0+~W_|-|Y|A}a$O}$v@=LFirCt_`#AxRFP+uUE?%|OR8Jq3wqMQ5Ih ze6MFzN#k22Iy_d$wEX^jim$|Cb|CXJ(K2A<&sfY#_n0z#TmZ(;&MV}~?3zoLo{0z@ z+=0k_ECzY~1{1X1>E-NX!${in6xPQh3#q6=c->wPwwAZNA$=SPXz{lVojvo#U{W+o!akqrHo%bVjE& zq-KiN2m+naMQbR3Nx6#Vt^C%JQeCtzWK*=BO1m}GLZ`*M<)bM;XR1!?Qm5y?nsVW$ zdMG7xX^^6Y1IO&mOtCk!Uio@8J#o>J+}5LoK}RXcRofw_S$=ob7RboJJkeb{irc)K ztJ*1_H<4{Yg}z;i>t`h_ZIE2gqY3#4tx3QzyyA>4rIT?0Hz=_UBj+sdoWMXDD72)0wGjB>B5P`6fq?63Y7LbRv*~zEEmYb4E?uvwr6^_lsEwx1$7X`NLGY?Wsj6dDBQ=ON&uDyh8nIY295duzKMz zKrJn#=3YE<>_1b(Ncy3c)>hV2o!VN%nk!#;Q-@xz4V2iQMOn4A2)6~$a(?@S_SV)W z#fMq!hP$)O2U$Z}*1@S^+a0}j?I)#ltW>@ugKg2_`XFh18i%L%{dgt7Ty>=Bxd1@&d&sm+Z)-8m7pW zRPLqy==C;U+mIoIjl%^vQH(8L=B>roDuHpLLYG*44I|Tk-;tWu)r`s)W=g56tyE5} zpzC$D7G53kF%mJ_Ez4>6I4OxDe6$$ZWJ&kYkcB;-y7_6FMG5Q#60Yd|7?&(-Vea;y zhISO`+Hi&rk^Qbd3j z>N^FFq*9$9Dm^!0*4|GU0a{F8xN|r2dnQqi#(avt??6X_G+!kh^_`p!|4c6ktxg3WiEm89TEy#C_eUyAMF5n;b z>iPjK3kD2>{u!pP9fpo31B$*%rpv)-^35cA7>r?dTTX5CTHmlcAm?|g0XQ6E{26SW zZ)vKJG0uZB2^a5vy*9~bD8_)>xg(iLV{z={btA=vXib9u0+Gr0Og_hJnkh+$$@S*G z&t~E_`h}Dm0vh*fGMx?4LK$cF0cW0sXsI9o0}Wb;GA4&+8ni&4t!Tvod;foC6;Hbj zTHB7j6YSZT{_%$Nz;EP#!EX-tU}W+yLbhf5grD)=snsJAz=^QAcaP-#v+eS$#XA!z z!l>=lyf6>vD9VglM+9;=4#g-QW>c3?jH2oP7{%8#BUEeq@~`p#If{$;{eO*Op?wtH zoTGTvK8nvU3hdxeZMhpTleP3^VcL8+G<@o7$;#At8dP7?dxhf5`>-8Udw#~m)8hJC z7Py0G07BTE8aL1e2kz@%MSK{F&G=^7Y}u^`9ZR5j)hSJ<38;e zbI$tvFzB$n@CBKpw4*%K6(ITjnrb_IzM8>2Bj_KLWZp51>NEo*+}oB0HPb?&qRnZh z^^aQK*5PWjAxP9Am)C{6F_1GDrToyRiX11g0*d~O)yBKq;_TxH{Eu-Utfht42|R3F3oT5ppyC!WH@Z{v4KfZnYHS9<-tOmRf|XHn@s@pytgrKV(4B{FUu(kkL`o<3xLLORYy# z4!UGdCTD4p0405+ZpEi@NT*;kFhB>%_9X98@1g<>@7&AOrj-^E<@Y5vMi>s)qO3YY z3TI8Jm~~=Tv#%=c(`k%%5UW^*U)f6A>pLBo#BPWeLF>JT`b9(hXhh~{ElByHJ?)JK z$;xR*C!!$|#J8cq7%))%Kxz}CwQ+0M22FTS_c+a$R>WvE>+Ejr93;8V@E2gLxjDF_K(cYfFMh z#XaBT{FUsfCi#$gAi4yZzcNU1LC`nOtojGGikUE(0$ zEu@KYTJILU(V_&kwhU;(o@q9GG38`5S(k#8f*3RBPGajU=)?-piHC982(RxUUIF>e zR&&LKHZ;DC=IhmefJ4^shOFTYIpYfQezeg>_z3%?m^eO1-fdK;tu{GoD7F}5Xbvo| zFC`&iFoscfG%0QaewTin6qkhL?S^`=uB{!T z;Gk-zqq)c@!W-QVW-_+dng+K<75=2U3M-S$^46@$a=wSLO{ z>Esy?9N9RXqT(^?R@5tA^M?31JYI|Sy%x(ntf!qCm(}VO`5EM^m)p?(cr624&?iA_ zsXMQ$q^=3tyc7siD>&5=tGL&(JRz@lthjbXHecN;n@huRl=D-Wwd=DLvpgfK5~PZY z^WlRIGL`=s+W~nOULH3I%gFG{fs8d7GoBkup(bs7H~_d$c0r25g7y$vLiI9y)Nk9D z{A1+Og=5p%^$R51=V(*6s8eg|o&?fAxF1bT()2!I_T~eC*nSZVUS7x}v^z;_sVr(k zmy;kGhLKOQ)kLR)O^!C4RdiavphYPAT2UE(yEy?6{xXEsNpEsAqT~3s zb5dho){=aNpxlQ2Ts>eW%8%*T%bIuf=NDeqx-0Q-Qbb2hua80XH_yw~$AB|CKdS$n zU5)6dWmLoLWJhhW&po7+__yr>VqhmN)8~8ptLL&S_xuK3>!c+p`Oy^K85~gpAaXL& z;-m`q7)V!8mfM@Z#*IXsu@}ZgQ&wjvTz}BI&RP%)iTfDfMq7LHfP4o6t$9#&h|dIb zdX(qL;7fNpYdOBJ|BsQm@1XgwXybjl{*R$uC(#A+ZDlKJ(*;AD)!i|)oEL`navqKE zqIC@ZwUvV|F-K=n1Buag31k8b=5W~ueYMSSHZ3kf2(!VB78Hu;rKpU0=(ck3^zYRlDTEM z)TJBta91y%TLI9FkW=4yq&CC=M9z-Z9F%Bj5ZoZ*oAPju5-D6d7+6EyEO z0%a#Yp@{Cm<6Q%% zqRaE}8#yjQknK9>IoN#;Pa&;81a;5>#81SVWrbyFzoNbojB|cP`}@+M{#u}sv;USM z+LouP>wti*o4I$vksm{aMi!CI3*`;wN# zo39||@uVLS3HKR7K!MYGmqhEt4^g9*422toWkj3h_Ev6*=b^m5` z{x!&Ur$`Ke$>7zN)M5zi5L+kE`XP{cYtgkKn1vs?rfQkK{+Wo z8dn&lSUQ!ijT^MSVI^=9h67{+Wd^erzcVpt{=LfnToT96D;)JI`1vhI9eep=N1Yj5 zzQ9p#f1caWvNl6oth!-?L3y!+kJa*&rm10!w%$cACfdM_9V-x)j}$b|Z$WgHS$-U+ z85H$SdiJbU*OXYQdP8fjnC?@H30fPk=JzXrrp$`iQQ}_|@Hb^m&{`Q{&5wM8mXvy$ z%Bx07R_-mKmUNf%OYqUhcOD^x5B8pAk4T%Sb(Ui-y(en7 z*06Y^(jJ$b%|APALaG(sgC%pN;1*O!xD^yu8l2XVcsyEQCX%WgayB zeuZB;@_?{|G96( z`J11e-`s6R@o#GTHP43pt#8q?d-UW@ZLinjzZoj^?6jC=xyyIyqbb@$rSspke=3;V z^oFEN(*_0q-W0AVxR3ajjY9O35s_n^a2JS(vQW#6X<8GRsl~p8pE}Z>>6%s9aGyrZ zK~5k=O8W zB$JbTx_$s;L?~3zgFBQuOA8PFH42dnS&qmB9?$W6Io1(quLNaqam~^ajKFKVvcV^i z5+Ntq_nL=PZogdYX6Nz_B+u5)>h1vd&(GGj>sYACnxl=^zl^riKXQaQ+UGhZ*ZS>W z6_kdutSHj5px7e-GfVT<4mgX4N748!h#Q4}(cUaAG6@D=Z0=c-J%a@&pa_&r<<~dY z-EGU3%1xQr%#%UwGNtk>9gXfF%GO?n*Nl``I=uB?@kUWUWODe zLy9k5A|d8OF4B*}u{*dqZIx-~LJ&-peDT#{eQkr@6xPCQ8;QGhX6r*r++Z3+JtHiR zwk32q8|vIrs>s%+Wt)QeWS%f1S!4OLWTm*GlTy56IK14M!;#P5d#sco^)bcvwLcfc z^K+WDG+)KhTe(Q56d>uR_gLGfs`;_s=D^a;5@z5X5%V?#1#lsbc9&GsOdAp%Ccd9) z)&G!x)}+%fDeWX%2cn&jH%)XuN2`-H zR#K&RVg-xrNXuTqgT=Xm?DDy&Q1#;x&oKTEMLFv8N*ajH0x%2i>^E314fy{#8c5(- zd6;IF;6yZ^FXHmcN!^|e21;D*lxWRfZbAnx5t);5&`GM(BK@zV8C5^Vdyf7T12cRY zC`oce+F!~Hd*`1fT6f1~H`Zq_mnuvL^j6zuQ+e+_dTWRG_0~S$F(SZfk0j_EI#}Q( z#jf(kaxF*rKIoL;(lGn79^rlo&{f9z_)bf zG{72S&62kwVLhaVJS{4laRgDQ6D6tl%!lrq1D`dLW0{+pmdUL~Z8jChjKpsoQn8K2 z()uX&=U5C5cbZxG+(7wOoLMj>#@RAuggGl?({9Lp8Z|-o5+rL&OOp@g;N+;`upDhe zy>|TF0m;h7D*N|i<)&8KWZAk%mg*|N?SF5hrR)E58$D`BS=pLza;=VBK4KGF->dgg z5WGUXhlXD4g}qZ>U*!?6e+Eay-zAmQ_K1TOJ1!0GofA1(xhEbrndf9;aYtH->^Aw1_8)_@#j}5yi3Cm@}?y182D&7b{1I7== zpOSC?g$B3WV+MGbvJt`r#W5Y}%|@Ey&MQ(%iGnm|z?E}srbN1@T0Npd3LCLu_ zG=}RRQv6!j2Fn0Dz{z;=zwp6{4pVM@5px6Q*i^(*(DvMR`c?uSjL!w z6H=c#Idjhr(A8ODYPl-K3){eO&N7J!q4cZC+F9qdBm^;pOr^MP2vYFc=F5GU_43qS zxm`h5fl)lIc{mM5rX%yUAS8jfFkcJF2D0;}sz!F#EsjlP8!Gpa z#)6}wX*tK#7)Q9Gl>o4VI#PKV%9YwuEMIYBdSB|po1!4su_>gs|L3N#?+N6rt;rE;sPqgg!mIO)cPnuCp{`y8KQnJ)u_70$ zD4RoXz7o)_tHb9*>tpsdiI>_|1 zBwK1#8I}}SJacSPaaF^l;#qGb6}M{~uRk5uMqkl5L7zsK7HL7QS(B5Bv#DZ{*3dpw z@CQ4|O!JbWXJc#HKE`m7kLPbp120?)J^)zNB85s~Ja+t!X_U$3pguFzV`lQxn_$A!tSEWT|#JZfdoL$kJUC zNNCv=6CGHr8Iz8sW0D?;c0c5eJyQ9P_3g(nB1#Wn;#eX(^MHVGV-Lt37)b7%=lnjW zhty|E5At0C9r7hgT%xs%Ppd1pl59u4s*o`GtBG=-D>w;JRt1iWUG1?NyBbszl+g@& z64Mh)TCFwlf7^1}u|!MF{xSos0wTeShM~+gm2{&w6d+9AG%eLCD+QBo^p>#Ja)fD` z-g*%%pr2htL7=x1;00nEp@)Xne^08FzoYBOh5^pcjN1gp-4Besl_J&s1mmzT!g4GI z@Wr-Fiil>0Sc-mq+lLQt(@ve>Pfq z32Rc~h5&Q4lJmvmSYF6oV{oC=aymVH z3l^~bwuvrG$&uER6K7&beF$#OtqUc3}r{*iku5Mg48W}2BZTJBR5v+@M_ zAE2wbq%$pArUeCu0YFUInZir%iPn5Xo@aw9MIx1q3C3Xn06Xr+$4Jk)M7Fxa^dK)V zm1{Z|^UZHS2cah2z!tiO&aY%9TCXliv=-uqC`FfRy@K6-4d3#2^Zuxyo8Lgl1YL?j z8~n``d~?nDjjOwCt+zlbS3#7YCs)>u-CmF%NNLM8m+U>rby*KR>vXa;1I(2Z7_y~+ zIn-73G7dfPJQ{#QT}7)hI2%vh0J$siU{#-=L0qREbdQy<@Ro8JE2B(;Hc@h*>R=w) zA1#5WG$1P*A^91sCUzpEJKL%+@0f!83a-Z%h(3_IJ5i#WLBH&-}GJUSikcPIL0@^=>kvHHKe4FHMGM9oLl!4}^l_bZ> z1KH9;$5&`xUWq%TR_TA5inBu!i;b-l^l^oBeT9Q{N~o%QCC8aS)I#vzHVci$69>J-JUAx=O6wA&`;0}C08H@tpF$43P znup?d*1UR9sEwj{?C??0?Po(Cn=9(B(TC8LjfDa)k8!m;)8TI zhJtoMdri8s#F~VQ!OCw|5bBrjK^=a_=lNpXAw^yBurecHSRO0E5#TQXOQ~-h6aRuW zQtacSAQB@@<*C@A46Bfya4lpel5VADbSndwxVn`hR%)Tyg~@VEdc6*DEI}1Q!Zu~g zu~(UkY?UFgdq*%8Gjz&Jxv>E%D5CssYyc(%$uURW{3fLXI?Q2mUI8TqzH)sQJh(1q zKUT)KIUVv+O5T+Fe1LCdEOP0`*dyFVmK=j`=o<{E!B%I(hNg0iZ53AhqHMPTaD!>i z&ev0&Ra#5!Eoaq&X2`mzg&Onln^!E^&p~nd6WbNpI&F6L$^wM#%p~(Ft#0;9atzOe z-xee~W;3CBL|-^Z6!Bu6x%L^4bk^Y!BWG?zK_fZFgk>{GCHJsr{>TZD`&74Eg5GYN z!ofx7h;E$1H&~8R5Zwr7#--;Rvoe?*72ky?jVl$PV;k01ihzQ1j=HY~kNT5ltkzyq zH-Lg;TP4wZtF^Fxrn&Mz9N*Lm!X9?;V_qvX{t7ml9iiTk%HM%~5XMZ%SU{*ZaBzJY z=uFpKzR$(Zx|4A4Vh9imEV%qkBMM)mH8g_04&CWhJ{HZCVISHsXhv{bZ`1w`lIh8x zZ`1fST2T78*tVM;d{IgUiedHB4&ZK+uFmSff8ICPTYW<6Naa#yT3iY9tuW_%Y*z{I zjk#!N38rip{zqHDm-@rt7eH- z!_z9*8N4Gl!+3QbB)wecYWL$YscCnUiq-D|@+xT9Fc-->+(jz?1c~@zbzVwl(i(aiK17o2 z+R_;$wf;j|K_>|A2NV5HnjstV%_$sFVlC-wCDg7pR;+eDY%M(|rYA}#dOgF~vCw9}iY&N?kbt1(aN;|AO*%cnN$w7~9rvaxo( z(F0&=D0Ppqvx;%ZnXgMK4)Mo`{z#0w?VeODHA>J+*+g^(A`Ux3Z2&ngx?HaXWlx7yx(b${OEBEnyc5eS-D{*4|Cr#J0O|S$ zRthpy`Q;`}^%Xj~qAEx!t_)F%pFPE8sX)on6;kw2gJi!wv?Fd0Et#FQ>iR_p1i*mi zK=1S-Q~5|_+WE}_bOS10!|Gng>gGat$mo)5Mcp8l`^$M(e{iFMezTxM;9&+nzP5)h zuh)EQUch`FLbg4Ry9Pcac>_2hZefh!?aM1)a1+~UB!mvOSb$Rui32w9-8F6iR^NEHKOqQp1tsrY-gs_<;a3YI&jq8;R+Ev&2H@R;26JM=k4^K% zaB{I)e{-p=zl5R0umBI&`&{pTqmT-Yah8`#YqExvI5a*~87eS6st7y9WPY ztRKp3G>WDc_Oh*KuLdm2oNZ6k(<0RQ9)r`oP(-En40N7rOgj@mxg(&1drKWMMp&Fo z`f;cOe|>QNzuAFQYlEzGf$*5uc}Kyy$UtFH%b7SQ4yVC*WUN$*jzRLV{SE!ZehErC z*7g75NOC@bnUyrDgN+7!tcK()1Z*BS3&HxS(RC@V7vQ=Qe?4v9!8L=%yeoFTl)C=5 zZ%P3yU#8udF`)H_==+b=tO8uJ7ob>{I{5_Qydc&D1~lmE3LCDmJQCnPQ`fK*UBe0h zWImCIDXS2RGRzxeqbc5F_u5V5N3rQC;dGCJ8}K?Y z4`!arf!l}mR5rbiqqX{DhoEL86#Fm*h;q5&~ERvc}m{a<( zIR*;rm)jb0d6Zi~>|v3xD50=6PeRAwoh~mQT@l`O+E9X-u_#bo%tGkF|zk$LB%*PKbXz1J?05Do&@plnM!DiGL{jaU|b)bxWaXhQY zHqpJ??2}{P!;esgORc{D@Y}J^j(v5{11lawgpCu|pC}k!$c9K$-6s_YqvR2?TO za7;<5m>;)lAC9Hp*!lFttG=meK-FacVoP|uR>pa1FhS?W#7dXtARO@?*e(Tynse9- zKIaxFHm0ulR|)QPK>{{>!Q!;Tsmb@R_anK)11EJ6m< z9jaTT&K3nY%c=}@%x`){QAw#9>4Ou8g9>Oxsrp>vW@Ki>z$aPsmEeu5|ty=cmm8SA_NDwq0cW-cmEDK7bE8k5@fL&)4epiA@_e1 zKw5|U0_dmp{}e#kxMu#gl=d${-p08ZvU6$=%2|R?a0V4EQPYDeK!o)%naDqjvz*J7 za-DihrC$#^wFIfeD_ApB?x+PPFs zZZh%|sB8no2q-Lod_GejEEt&Kd>iEAarEfEBdkD=qh~Ot-!r3I`E4v32{ateZeWla z>-S8buZEQ7I2E7qi>&|(^cb5jbz)~w0h}4GbvQ1P+k*61t&d}`Ki-J}^R)7R`ac-J z_F&s|IjJExX1AQi(yb3_O0c-f0uWU%(t*#^!~&%&pI$7N#XUUu<#g;heRLk23C$i( zTf9z6slwuk2YZo!%1FzbD5WeO>6;pcp}K$_<_K&D%-W50u@Hu^HdGvNxJ>kNU z@D8)4_I^^cF$jd)8%5ohA$`DzJ8~|ZpCkHNoNb47;>mAf?^1IMYf}%vn+t*aI_m@A zPlcVNPB;^~tN|-sg3c?$krfY}l0RsFh^)(1^O!SU&@({3Y!|Ros|v!L#f!AB$lM&5 zmDudV`yHW2uvcI+0;cRPS^S`(rSmhE<>e<4yu`C{X!oZHnmgLCioTAPEmva$(TcBR z?(v?mDY!cf8;))Fg~=^kdxVMWbKew?kddS}axUW;(^nen{7{nRn>ObY&`1{HRPZKn zYQ%XP3bGdz{U|Ya*&d!uk_z;hd9VcMU;Y^ILB3s=s zLNN*uWnnAmK)iZhkUHsNhgS_&46icD<3fd~8lB(LX3mF1QzXOqBM4hcyT4Gw3(5{O`e6vh)s9150q-7v0s6eYKWH!iz6Cx?_!B@sebnGu~2329)I$0NCS3gviEN`R)rTp z8vA?RdQ=J?@Y|h+sBmny)S1vK0Kt^Ky9Y|^!UIxWOS4v}W_8eG>rqlpKpF>FnGf?&wo0*TZ&apEDc*l2i zqXQ_r$1*#Cg|_fbDaF5*SjMbD-`F4pBbq7ImR-M3Zfz<0D>XbQyGcXtiZo-W86c)>>_eOFftLZ1rf7F7ZYf;q{DoCKJEd_ zSC3;xo<{2RW44MOX+12T;@|UeJuKsJyh1rhq&|d2V!GvF97hsJ(JR&Puvb7~y0Zrq zBH5q|?2>B#E~f02s@Ytbd*7aU0`^Q{!K?+WD-4gPSu0_dAFY9@3~aEeJTD%Yfqv1v zKh_)AX*d>zFECUKtUI@xQdo+8as!kO*5`sJA|2;iJg^_`NVk#cpD*1rGDm|kyq$-k z;2mCM976dJ;4>SxyI~B@sV|^2yU>|UN_i1CWw|tmtBCO8U4&CZ)?*r2?___(vnU~M zLkG-IBGBgEas%t+d%oSgj?Es<}{Z7Md{e=d}(wSOvU6D5!urvTwh}u1W9LuS~v~HJzL)xb;Z&sJ(qDw0Cy?a?G z5G$OGqK8t@h83(LoL9okf>SJ56)DV+27iO?XP@&NpzMff)ua%o-psXO;q-slenrnkIe&SA-2m z=%K{4Q|TD+az>k0&Zg_7wk)DXw`x^UIvU~%D!o0rq0=m0Rv1qeT#Vshpd6TCuEFzK z^O`N`$-s>1RRCWcGKS{YoP(IfyvRVZu8TW6gv#ngxqnU7K7u1Hup))9d zRvyD>cAKKONQKmS{YEqdB1_dSDYq787|3Nof-!{$@jLg&ALSYUF2tCCP#$|^B<7s8 z+ZI^k;JVC#?cmfbxwsF;$K8jgdIoY4T1-L*HSW*`I|X03G9>rw41IRDBM)z)<-w7mhM zxPgJPk01ww<>>dBM(sF|&rF4NCT`QyjX$tinz{z5T8Y?{sw-mErj(imxhrC!YF0yZ zLwhRo;fc*soV?}ZiH&Y6q6$JGD--wp%6xI262I#MW$Y16(i1y4F+fl50ATENO2(Ws zuxv!wa1JCduW)gS#c0`u&MWcyQsfb!v_=5o0PLtOn^spD|J)ZEIzY2Q4 zzBI%67cV}27~y3HF5>JaFk+UcEURo8M(E*BY#ij_mDZS2J+hXADNL5Xx}Vv*K!3$t zl@5_Q-P(W+2YY2_E1*LLBV!cRq-NBT-#RrANtco9)P&$Cd2%5J*cW~ri^-Z!{nn{r z1)-Rj4@OEU%y;?FY(Mx-H$tv4K!vu#9N)(Q4CJQmBi|IlHOtLkKv;|Sn^HK2R)PUB z$Mi5YeL(_+I3pL9%J3N)4^_Yyuel#X_9suBCcPwm| zFjYa=-h!wxIDtH2%pZnhNT){3;WS{8DLS?zumW+zp3KYCvm6VvgWJL3YG>#=Oz0dE zYk=(OjdAEm?D&66!I_|?tQ{F?OZw|s@;P?=WqK+=fgzhzXkOpnZCqg7OkehPQYzyQ zlQ-O|2Zu0o12J>D1p;oxv+L>w|6`jBCkKjL2W4jlK9G-&dB#im1E9Zje1JQ$<0Dyk zpTk`oH)4)=j`}(gc%Iad%i~gx`!p*2US>vyVn6 zpkzMxfCutPwtD#3_yW&|WM>t47n4e5 zxhd7%5VTmFGltr4P{Y&K@UWqeusHesGWr7d;NkI5m+Zh+FwBikY4B4qXW5FPgRxdA z)r*QYs3B%M5>AUDT$so3YfL!&>V+M&YJ=J#$esYn3DwWjk zygEX0#@v-wHe|`Q%tLuW@ql@-43Y+<=p)(TTacOt2CB#CE}BwDrnR$FfMIcr&JG}$ ziS1#uPXN};MjWsZ6~@`x%8Ecv0iLthmOZ&_WwH0R1k}XsVx28cAN;ue6=z2{1V^yELfe#fgv8A<(}1p_%3U)`+bq)15yE*G0(b% z`>$X+nbe9Q{n&WIa>!v4)Z>12%sW5on_KLSu zA!BT7g&OA{jI|U7QRkxb71$x#!eW@9pC7+(f)0h7j|UqDo5*8=^6~Fpuo1j;zmqcI zDVP#5lFx+f=NfXoSy}*KowhNvg>D6cm*zI`j3w?R_%W;IS1~aCteObj2f}Lu>!Ki7 zUpT;oXYmYyRAVgKZ3YKB*w^4-rI=M#*riCRGe0ln=THWB@pEuCzE|qLx4qH5O833Z zjqbVJ_cr!r`ohbxZO}Qd8gzI9%)<*gE|us|!qQOuqyf;2t;KF8!ZI#HDl*5OhZx4Y zyuuMmd<0y`WiWKMC9xq*r}7{!WUtUo@&^E&(rZTbPq2eZjqJgmh-jt+8Q zuo6?usx7l9$&9rLHp_J9a(e-Gi-z1*?lv6AWsd+KCE0-XN&l(;hgV?b)_Q%d+y%g! zi)~3TaV8X@g!0yTQqsx#hJx_M0(cANP`8o5t68Ob3fD}W{M!WM_jxQ+=3Q?eWR=O_ zSsT$O8_LX6pXIH)RVtWL`TGZSPSqbeh`73}EiSKd#HY6GonjWbH{peEE%`-eA_#=o4c5#%RZ0O7;u5rKc04unhV0#Py zIFq;v?^S^&=b=5*(72WNX{Z25I{Q_9flfrdKtu|7gW_E*Mx$Ka;L;Dk8^R`>{iPwd zoV8sLs)tA)`?CI?tLm?^e|9(?*KC$CQMX5*9O0F~tT|zeowvLy8{jX#1W%OfYvlG1 zgHZM?y&yL>OKk=}SOje9Q?(F839MCm85k`+0*qp5Z>IL!z`%Wgz?&V7Cdb@KB{%U3 zujU_@#>CtPyPOC(c;frZ_-YU(F2OcCOj|%}Qo?*{2VNrb4&1-G$J~Q2Y zN&1-rBCP@}v-lUC}EUj+kCw{&v0 z0y_t6fT^)_fZ_5u2;MF?sLFN+F)p`*fS;$jsg0os02Dl%Jd4Z>;VR3GGiGthYEV#h zKDytF#CnzxMn$q~6)F}nvP_+#z6k*lysoDCcr*K-_U{vJdb%R3>96Xz>a3rvX z$iRbB@-;tS+weikNoM!>R1H4mlV*c1;#F3)Kz2IeU#vMO)wce@z$n(*8eS7nZ<8XS z>SA4(Cf8u788mLE8l$23T`uq4mC!$x{-i!+GN7YVJ5@_T)n=m?UOnfavkpbJ3Pb9F zr1Py0QdR(x+ObknEk@KZTuO^*Fm@c-dm5u+h`If5Sh=22@->f=pYceqU;iM53;`A_ zYm)PQAX1hJyXqIaalvjxT~R0iF9JHa11xiWm&B(RVNL!Q!N<_$AJtZoZSbn@CdIVt zassfk%k(YUyi08p+Ul$^JSMM7SR9qbQc^U@KSPoSQTw0O@OHMQy=v_ynB{08&9Nov zu{|V7cq6_il@^&r;j0HSyhKTg-DiKeWE?JU~@+lWDMa!2Cq z&lV-TLZa|K--~%BtqcEM(7wK@!DNpcdR}Q)ir=lK6u7$7!$dO7Cw{R>r7`y7m@*#! z4`3x6hU3CAe7?EsA{g*q-xSt}#`6Ycyu$;r?QK}Y_a@`RRRGci1)c972Z_X1#+G1( z)xM4MUn@aWrZnn-KBnn_8VfRGL#FrWjyn`b*)VWEF675IwY%~fZdR_NpdW-}$Z zglRoaGL^(VWABpjOkx*At{p!}rU{QBJ&;E%SGFuMMcQgJC7(W-0PZB1K_Gv2Ml z9(^WHj@&YUhmOMO4vLA3#YuMnj7j_?Yr5@yU&3VdksgkeoJ9yN^T>+;-J+pVT8&<4 z@%~ylfev%s>xKPfCzu5NjNpX?m*spqzYmf9-B%FX#CLfn3nPu0WHR~y>z-$gmmecf zH!|ErwGQnVaZE@I=WCd0Zp+uR@q0987DqDZv&b{ZGi|@zkn5SnFA;@gIgl>-6imoQ z!y-(5IvVM}@dD4PKBIWXFY#9Rjuk!NNT`l>N z(uW7cIOw|xsa*iF2;p~pCy7aQwf??0as?xxEFFa1k2i3uW^I;^rM6VU6VtTLm75z}@K}fcicnby6st>B0 zVm|Zd9y8PIFcj}XIW}QK&X`#<7Q}M#3>3%s;TJVdeYl2Iv8b|*DxLiWMFNIV`(M?L zeG|CY2kJxAqV5gHy;#)eJ(G8qF{;mRO*`Q}~FV)Xn&I1(#663gcp=Qx2(fWsT|%sWB;Aa*R^Y%?28ba2B>Z z^uWD>i;q=ABT2=AKyU*L2iNTAn84T`mdZu3mWz*5&Tlvs&&KJ#sMPTbz51J))p9iI zW3kPX@wBZX8WDzz=^<^ArZvAR9m~v>?oa@Mna=;Fc5At)8oBW9rat$ZuGX7MlHOFI zzQ3#8#=efGr3qNvw?c@w**$_>FxyF#fDr9*GtX(wylBY zWi`2ba~blpzCb^~sswD>fz217tlF_p?@}0D_+8DE+fw_(YL+|{6~@(cWc9B-thR~k zhGB6mA`X>6+|=Me=4FZ5&sN(J_dg{02r>}eB$#+aoz^)G2xK^yB3Cwl0RIlPzJXy@ zf}r9+EU32PcnF0=e!xDhzDUiIfSL8Q|A-ou>A|V18*0;{x-`cp`81sOl;$PRVhAHY zLuphce1eO&SAYPPAvKqWJ_hr36A7Bx{VDkm)zbMVyvv4L0X`ui=zA4jn8A3zxBLAu zbq%>WxW10bVRUj0xq1q6so|mRbPO70<#^8Gfx$;<_Bb)R67UGY1Ejhke>Zh?Icg7#eb@)-bH7y3SEDyvGFgRx!B>2$m*i+{AfcxPLwC z{?r@}q)DgMuu!!hQ}_M3soUB>EvUN-Ul>I%xYU6`kGdLYD9Dm&iWyL6I_y%1$VJq? zN=;~$h^K#npKL4k?hyCFDCdc#3aWL4m+`3Lq(I!WI59e!QKd%8IrM%NM({fAuR_73 zuba{BDmA(LQh@s262`f0fuC2ZgOS6CkwUR+7)ZH?pgsnIetq>mf@V6(vIb&CLA8<>Rr?Eizrrkqg6CoBUgap|C@m{TUP zJ;1gd?_P!D)k9(pC)Bn|^sAJ7Qk^6k5f^=aQXSWQIg-PedP?2Yvjm8`1q8jjxL#k% z_mHDgPq_8>IrotRzx-c7j&@v)pqZ!CH9bb5GbWZ;omj%G!_gTNNj5rjVf;e?T8t)5 zjsw9A#Iwc((-5E&OxT0$#A!q@30oQ{dl?-o3T;l7bE=8#F8sIUGzu?{pw4I11x^1q zQlLv`)F+i+gK6+zYI2XC@co+@l(Y0c6>wdV|D6INtaoPLALQabyhOs71Y+sdU+S93 z0x)tOCG2<1ZkTn3yY~sS?W}q_@xSLW3G-Mt!(b6yJ*OL31PXE<_!}%@59W#IuM4nx z3j?0C=kg-_4Jg>gd<`T37hty0iiG*C(!g2wf&0U0g z`}ljUk7p@2E6Zv^qb{gn&Ht6nGZO;Mz^IA#G!)8tpls&qRJho?xqkuPg|w_InJr8@odeHmMRWGM8#sOdEJZ* zobr{4Q@*lLWd+3sm*I>}ObkwGr8bw;=q5wZ$<1nS2X~r9gD$C~l~>!-x=U(uhvT1M zZ_zw?auvc~vFJPGBQ6qozrULaNU24i%h0ERV4Rtu4mYI&**7=Qw99I|c`4v<1xP8i zZIHZy?Y%5KS;kD#%D=q~?|&)}LW(sxo|dHdBuHl&F}M+r;O++ul}CR zm-b#&BZb~8HQ(g>QwzY43X9XOsgu+Wh-k3g(zg#?xTX#cd+`w_MO3`TI2hlM z`Uiq%(D3W(F&tu_b^}$zXC^?O;3|G-!cAE*Sl)!j-@vB)zx-+54HN}!mq6=osKd>V z_`y2Ivcdt7;U_p*(06d#>ZU{5?$OA4Q_YT#sRTd3c@WK-`lT?Oh}7a>Hh)JJ`h?@= zz>Hk_;HDaHO#oQ>pep@!jgV0sx~YL)fNQ=O}<@W+7|I8tDq zKOMQHnw$I*?-7N?IYUXVMOpr7{?xTrHFwyEM}MLV{xpArKdqpaqEzbd@XoELH}T9P zEuh|`6db))t6I8xVQB39;*Di|&^aH>_Rn^`YvUotQ1sAh$I_GR+0cEVD8|vTS~bx_ zMe1#A3XZ1Ex79w%&%RWA8x`m_`O^2e9eg>qo_@jSxj46*0B_t@%aqUjXvrOHZ`p`5 zH`E04cg-8hG#JoN6DO7T^KS z0J7Ank9u)2wDEQ7CRw4RdQ@6TrJnWbVEy)|_1N=rp%(=-sAkK80^>|?Lu_tZ!PFcN zWXVR6SiS9GqwU}yU#SPwMjPY#{Q`*KOV(H*q!|$MBdRR%ZkD1Y*j52My=V!tv-CoT zTfT^%$$eDl-;wYQ6mOdaIFy~eP-{|Mr9^!Eezu5@-^R)x9I>qFOL21!l)}Ff0R{0m z5NEvh{ybqeDO|a4bSCawI`xoy0q-0qv33>qOV{sTyA$HZ;GYWHBQV3d!nI}j?7s{5>dh#{agA&FLd)X%4e5nYwWZf`S|Fsb z85YUMLUJ5en(Jqu6?@rUHpFmvS#?wS<(IsX$cw(Knr6J5K2w^E69#ib>Ki&0OCjQf z(5OTaO_a}YjH4o2H9F>AoUc&dPv5@)X@;xfAR1cZ|uC93dMT zDF5AzG%T!rdD)d|l1+7t>19i6g8TM7T|Vp^GYWD<66EVIl1vepridRX#b3lLd0FMd z{e_RLUCQ9|I;C!o(A8UMf+`Nn5#>FF7_FGvkEy41t;)-q2&=5(BdeuS;g~p@js*yd z{0-Fwh|~W1ZM)`3qVr8fg2@ca7luSwpxBPWoks&jl+w?OZU+i;@XuICym(@L3v(in z?wsXCi9zV7q`YU4SfnU__bfjZB5-tGX-`r@#XP2@eONsogo=J9FZ{+adS^q$GoKoJ@5%*aG zZN-%01+0Ms!qWrqa7HqL)%OmX5@Txyt80G&WZBQ)6}*K<@V` z-xMqM$Y7gq#{>8!+l~9VKIPxWi%Bxh5{qjg1}a%8G_8fml&6rhh1j6vd(*U*B1Ns* zW;9>mUB0fRI3fqUH6AjrBm8!-;hay>r>%sQ*#&Bo(wC7wEGS`Ihv;&(9i40~?kGP> zRGlQOLH>1h`U#nOvb|E6<3rI_k?u9Tp^ipdMdx6wulX$B;#^Hx{v9};P0OufXT-hx zmB#%qph>!L4#Ed-Hfu&7w-H?;J1h0ZfdRfFP(3^Ho{rgs&bJZmf?vH`r;|LKkyaZ% zTy&R`9}r!Y-|A`n1L9rz0M$JpteKbiqjC7iL-+viEa(3QlKN5##9GAOLQ7W3}(6Urf zu6&qDqq^W>Fgd%3FFkOLPZPz;D-m=dO&r5vTD!Z7r{#s^ox2GyS@}Mtyz4_EQC0%S zQC@dZhC|ev^bl>5>u!0Y|a|}>gl$Z&QhEn{QVzeAZb(vze^3@G0&JrIqi3Mk2%uAIq4lio? zu;>;5V%QfK8;BsMTz0uv`J{(IMDl|q_Y!Snxx8&J@s4czt_Kc(O{Xor#VBRY_44>f zL=V|iBlH8V#y%=C6&Z)NJu2co_h$7$gVPk04fcHk&7iy<%ND(;Fk5)bJLy&2S3bBv zW!WOR@pGJrsy~`^fwKGHk^2jJZ!@W)kLYN+iQb^f-{=E2F_O|A6InvSm?r%`0P36QL?#Puus8*o8#(4qd2r1|<=IBBuxcQe$51u|6B0g1CMp4(HqE|Z=uQNF#a0g%z zsDrDy2%?dH$3y*lOoML(_`d~R>SksjeLYl!%68f|RHWi4@w%ZROFlvw!$kO)_)f4} zn9smz$(k27jm+l?=v+}d1j;23wQ*(b9jN1CZ&X>k*G3dHR;146x9aIbPE_ay4gHHz z&P_KsqGv9fN6uj))gJ^tp9^hgQtdEEnisJ%jJeF=jbs@v!kD6X=DH5Yq^h)Sxai&e zX;daQhKO=S;I}>R4KY$5;tByTJJwtZhItc!AIc1LL;#!I_6K@&1h5YyZiMJv@DRLZ z$Om>#HAxN*aQ_T5^%#acr{n*>p(p*<(7)IKRAA^cu_^rDjfNhp4?VK%(hxZ8JKB8e zpe0%%NW#K*>&DHHp<`}w+{uHJ<*2g`ocw|2jFav-hUf{=YlQwdwyh&>1+)TtT3;rBL=8gfu_1v)w*>BH7cO8qTw=s~6x zy-z8K+Km*EonsMexVF`ZuR!eN#JGCZg#()gTtSY8Zc?3d70ypYeNb0kgoA0dmR=bt zE~-o=nT0`)x6aVCQKEx!Ed@JXIYZx$63NE3E!gqg89F;kSXx%jt*1L}u-UFaa%L4n z(u~OD%0=)vWUMd_rrGsHIkg=vqT1{sxr6j#lJvhw`-vi=tc?sm;nZ;P*23@AVpG z+6{)Z8VqTc9eUf+a$0T|vy>^3lsHE8O52OVr3N+f2|4Dnl`xDpH(GE(szHrRi5zwB z0t9ip*0gMlXrl}*rvqa|JWiRoJ_c*=V@k^ttqZaO9W{XASbJ2wWmw!xP=Oloe=Wh; zsLauL2`b-X3BuEN=*@b1*&TkFfg0uf{XT~8-Z+CL?3D`#@4!&os`S&~b0$6{jYuaf$-ur?`J3o{Emrx2OV4^qa{;>$ptGGap< z>*jN4F{DiQ{59b%X8IFXu;XHR%V)$uIW!DziP%%VsV0n*soVB&F^=JUdmOlL_EkDE zPNW398p(sb zLi{J;Z96a$OGOi)NZ;|NLlZ>&5N{3*fI{XV=n+>K;+S=-K|e;~J!I|Wp{hQ2nx6wJ zPiltfr&4BH(m;7Ql3Tw&824Sq{jRt_CK%pqw3kXlssFPgF5pj8VbnD@3~0+un)R#* z8*#!U?UON)b8PYY2Zy*n7>hRE)9dwf3u@3NKlVY#b&LuC&gW|ekni!k4Ctfo_jWPD z8X7LemnP7~XGLFS@)hbaQG}^CzeCY940y#A8Z}Y8t6VxuS0;)>=5J6;O~S`6;YBaJ z$c~}>$^^&HYp8mXuqwYw^W4mXarl4> z_YYpCbK}p_rJ=Mr$ENC!ot4C;ZsFU zaFaYkwDT#9EbspQTNmx!y|Ad+4hchvv2G~u9)>dTP1_j3-8uN{g>o$g18o)9H3&bE zt!*_NbG%=QOTf3FpnnM*eH30#p&WzplTyBJL+k#9Z||g||AHR0rVHh~Af|;5Zp|wS zX$xM)IjBsCm+9yW0_O_C>CP^()kW;V`EJEY0FCH+z%-GqoVC*MX(F%V3`nJYRyK@S zPMXVxJ%&>U8gZryxJ6h_g0o+`mDNZc*hfAuLYMrQ+P^5e$^B{Kiz2)wJz&U0AAI?- zBDYBAU^7H|CJOiS7lLWUi=tha2`rG8*E3jwx)loGaHPwH7e$Wpybhd|o_$Gl$&dlz z;Cm28l^yTnfiOy!EI4oPn$LyrPc6dtg1 zs^;XM;N^W^wZXs&DJufWMYKaGAEfvrz4@l-FMm&m-xLL*Zz29=zmet4j}O!x=5c6= zgPrG!cFNXd`gATle!uw9fw^LP!1n=6JrNwX$k`Eq^2Z{+ZI71_hRNdWImJ5~y9jZH z_4N_Tit8q6bu;LJ7o()Qh23cRTf!QU+tT1trSaa50e*DsEn!Z+@}dzDV*f6K62_n` z)^}&2DbUu98eDVzDXfz>U|< z6Qcr_Ll0&Yau)dNRuun^csKGq3Yq*5Zv?Upd}#MOVhBuzmh(ZVoyrIBpO~&KKoH>B zqX%YGSit(~c3|(ipS16>sEi7~%@$hd5E%gwY4hV?ZgYLzCVUi2<$3uIe%QEzRk>KkB{2Ulfe_w=#Rhgvud_skOOf1X(%7+}^cA)X^i$wp=9%TMg zm~*!L!}rAmS#Cu>B)*d$A}5I$90YclK)Sc0Nd31MtDI{`Q~oVRA-`k)zeTIab1&ds z>?z^`pc2v&Wt6Mn{BjEH+>i!WlVu^}A0zLGVXw^reYrr$`aK_?%52k}%J?X|r z;``t^Scz<=;9jtVfigXI0?M?b-U680nJG%hEjVv$!X z3lF0?2(ku88(<<=E6Fr7 zSt6z+j%sT-Co`rZK9BEoge;UHfEamkt`3MiMmUDGqdiMRrvJle%dm{6$fdwbdm6b^ zgqsclg@-oL^rfOhOE9qcYctsnMTpuvw-&*`%cV-;M@{D$i~wIafb;H_f@q3K{tR)3 z&3DN1nb>05ieBJ0IQ1D!D=Yag6IrIsxP?eU&N9(2;NRdHr7H5Np%=b?f>teq2u`^{ z2bLjVWdKkfyquNJHAgA$b2uA!)SxU3%+)^2;6+4Aj~z5FO+bwDt?p-vg7nLi8|4LPg@dNw2AM4j?1ZTBvxH zU~YqLSIYBNh`};DJj-BI(Pz+4lwr3Xt)XLO;RU?;wYo=Dx%!<5mX*u3<(4%F28HZ~8E_hU%CED& zTzCiR$t&X?q!DYyGUcV(a%G*EE;F?I7~0w8;wfeOaXMQr%mIBC*U`Cwu*;A_efKy8 zuNRMaw{T2cQa)-uthZDvGjwP^m2j0e6a=qG#C7#9&aj27n2T#gH3TI- z4J{Vg^tOf!81HLJCHxHcmC!O6Q5M8Cnts*Aq z2=aTTBWb70IAfTj=+UiWbQ1u#noV{7;KA~>TOk=u>!1N)p#^Uf_40BG+Ah+~JO=gy zAWPW6tgdx_eR!#%D2?APQo@SI*M}S9jC6$J*%CZMY+>DY(N+GME^in4k!x`4J)EVu z0Ou!O4?#v87zmi$foPhzL;Pl1jK^4n**_wPR71`mA%AdYYWc?o4UYSRM(u=YXF>jU6=sb?L~Pm>=fDKK^vc1{-0cScL1jC| zB-09fEvbSmyI`8%{ngOQIVT(rFUaIDT{CY+j$L9y@Ma7h^RzF{9*H!X2*>pnH0ozz zQLZG=te+9WN+}<d+k@h&GUqbI{~~%st`4lHcNR)G0xJ~e!~Ii@v+3nu z(A!s+sl%^gmipMwbvnn$4y5mY6`7%Z(VK$Y{Hl;XD_maQW$}_y0@L!47$NVbiHAh0 zPXqj<$Ep3l{KKj8km#a3q|xm|Fu|Prso!r1JS^N#+kb;Y{5=Z#UBvizVgx~~&!x2A zMY|?I#(bVQIO$QF?}gvR>!Aw|@bPxdpvE@q!;hs(Z^uRoIxN~*hT>Zn``GGAaC+9? z9eYoF7h?7U#CJKVeE?3GJ1o9c{`8~ZBk*{ePtx!s@T3Kvq~ass&qHb15%}hiNV4+? zIKcP&DEkj6&nx%QtUpAe=`&y$&bP8Z#JuFQ4;wO>JrN+p)lzAsW93NW-bLJF1(W}Q zF!zBl$NnjLFzwIhb}Xacqi_BcAtpSA!<2UZ2}w4mDcwf1L~f>wd2R~YpEQy!>vi`; zyA$t#H;y_AT9|`eUC43`1~xQc{^=-;|vm#sIsf{$=_l^hq<5~ zc3~J+squ(4i7uR{;ybi0TfNmyhv_i~HZN=TP}g%H@}j*o>KrI#c@!NwC%z4T-Gp4D zcWll=O-ijsir;LkFXZCWqVpnJIl6#0ofnhC`HsW)>*51daE?h{z9pQUzhMFOLN{UytvgVmM2JOSlJ?;0BjV@;@=itgv2`#I>$=U!(%CB^8h<{im7 za{&Y~KrsTYVOGAk4gM0(^^YB(48h?K63*#O6E8yH4W`2vMYqH|yL5}eT8M!%j^e;@ zRnQKb-K;&($hnv+)@m@ zh`A&N9*eYf7i>hj0kz`#tx}H9TmBuLl*h?;1 zWRfOVHkI_8yAyaxg7o2}^|}6Jxgt7PKS2A}(SDJNePh@!#_zGf;&*p9YClzPA5R}& z5zVZ#@X~YqQUG4U?p}V$?tW=)qnAdwU%JaLjm1kt_$B08$6{X-zf|ac>61n;Ww~E^ z;;Lxo(+@AD(+gKcOq1D-+9c89tKe&$@U$fzy($s{toX^uWJdMdE=umLg*WqOBH*NL zV@txFSq&6VY1bfP9;Y$aM2N2kb2F}qw5U43b^#oOF(%zcY2=dLD{QQ=7D}}Dnurc) z+X#Szesueq80>QhFYTZ~*G0Z*Ii?oAtxea(q~HoPeH>Fd6Vu7qTVsoCL*OSfDs2xxl>=W>l5Y_cA|+dyW>$d>_wgjtHiEKTsEk8X%WL)oh|(~cXW zW&1IW8VrOd$&&^dX^=C<8>-8*ER1*j7;J^0=$j&|Eq~jU&_n-reWUL#aew!rM%^aU z+c(7s(-#;L{96}piYY-4Vn|ytoQuFJ52+bVzJ)c!z4B;kLVQ@{S}O)3EZ!A$sp|grM&Af%j?T4r_Vt%}fweJr=HCWgQADZr^Sq&4x7DZorY2A~n&{O(X zo4Z#*-)|UQ*geB0b>=~xyz1kKvqw2j)c81R4*EE%xB57Cy^E|m&C-&;Zdtv#d&3`b z{puTfOsXGI*d0H@b%euakPs;Sh=zG>KhA_(>PbU(fu zMZ0{o3}v1-1(>wt@QyxUMl&#bz~#xmQTqOoP9-e*2AZ@L9Bwyht(2_)P@=CEuT*WN zY+o%qpvDVpD6pla)IZj8#G97*YC0#_C)u0RUSBPgHM4zOL4ilMhA#VRU3@@>O}bOE zpVmQn<09qxVRka$hk{ScT#J3bj05A{?Ok*H+)7t{L+P;O>32m^- zkK-z%9J}UIn5HF$>L}sWg;g{RuDQbZ8`k!x0h$)2?A}6?G;NCCd-yaPCiHx0L^Hap zX?EpXZyMD^Gs|b`2pCou!$6f>(T*&vAukMrJ$v@oaEK;6c*TH^%emZZ z7i*zAf!d=2^61h>r<8V4Yc^B=Anj%Kqs>?&a2Ka4LQ{E^oSyA~G9(J~S zLJ&}ju+F3b&9s>KCdZ9tacIh=gKMC@a5HRkw{laTVonL3^l2s5V_*O3qMiM)d4mU|Z;}`VI~?`>!wGr2%1D3|yC!!?dWN*N%a-YIs|0 z#$;C;DfdnKBuopBESZZvm*G<9JEu8sC4&!>==?){OXrKUJ51{@e@M~c8lQ#zDE=rL z{!>0JTvKE@lU|O{UR0j=4_%4S=7um24O$<^F(zDBONcv`M#QPe<3P?*%L4cD!A_q{@T1)3cK z?G6ZjEFCs$-IU%?_M)&Dt2R+~l-5=DrB|c0ROLULXj7DSNbW}OHwQm@dMj;juDxd7 z1eeAeGEngy_A;U7RU9BH#J`&-X>7EXI1nG4FWI6UCttvp4|scPX8Ss-5Ok`Ufn6Nu zdezzd=H*E8@+m{TB$cO@+xs0&PnM);$C;~A-REl&?j8+g%_6PQ`?5#V@n|iLnJ-ME z<`iSmLY0Hnlw#3(1n^A{dkM^;VvCjuJ7t>%@L#K-dNhHvp?eILR=0W@9-}29Z>k8F z7CShxWDj&y0j!Hap)5Cn79=^3j>*Z@?aXLTD8#H_(#81N53Q1*g)G_XnU2Vuh9oBwXw>$HB{dc>~+=}vL-G;CHm0sWi78w zq+Qful*C{px55~2}c0mq8vKAiJ34=1?MTYItYH|bh%cWJxT4MN2 zbjym9?1jQ<0ENv>w*S)mX&tDxjV3xLp+hr1UFV1cL#!hk z0q8{|+i3~(!~@!cKE8PW7C9c!mNJ@HVK!T}vF-l_6fvB~@Y<(9lO5yT3P2fMW88+S z2VH}Ku4}Zvtrn947_qu74u(YjFLd#4;(r_4Kdsd;)II2W<2Iuzo*qfon)xh1qd7Dt zSqlkz8$Ug$>RN$3ZVG}S7dio{yN%H`>iGtGl~yKet-`-!^Z!1!=Klj*(d{&m!qYVX zFf_sz8-4!+Tkkc3uj_3Z)lTc@la6;Eq;J}3pPR7ngiZTV4{Br6zGUhL<%a@Ohm~f* zzW_@%V5=5zE(W&pfUQgrm&ErLNzROC#@yn}X()mZY6(LaV?0NUwazF8$i#IN5Mn#Z zf!+Nu9$5XHhZT$0LmNT00XfE;_aI@*nyWV|M!|d?K3j4O=bc`lkQdu)1AMr`?h4x7 zUJDPt*dBZ1P-Dr1_4jJ&MtiNzgZS)Cl)qweR*0iquR)xBg16@3(+lzUdX{djz+eh3 z>%EaDVe)A;B=jYG-IxT!{+#e!1HDTxchFkNrR9q|X!)`US|8#Qg!8)Rx__5{)JaS6 zQa(UxSE?3osX-P-bBtD*YIn-goE-b(I9myOZDRuq&3|4f5ALGPlI28lq-hD3ssBgY zXD^f=NYnC^(0oL>*$6Po+YCyJz37_?SNKDaVdE7leh6CBD5d<{hqOs@*crrxmBwvv z_@>shpp+h3k=G>z^S2N0Wm!0cK&4L2@2(`?Da$a?T`r%U9bA`rdY5m5UVf?Tu<$_wt zIVAxY0&r%v>y9^bSto#=kLQb_e3jx~oX4StHPF--@&L3vgWm@vNg%j!_+5?Px*3h3 z*Zd$kS6(0-uF=6X6H5!raPY%gUY}Jr4TcqwTu;B>;NQ)xb=T{358K3G!@~x~weOyX zt()7!*36#T1~JLIi0>6bdvtr(EP>c^HoCq+4`LtB#$FF<-%|?@2t!lP654o;R`t{@ z^sk;;p!FxT`TkMExdu;ZZWTDS4e+vaO=|Sga{Z+a)^E{%DYu7TtrX?0xV_!o{;vn_ zf8-taM_Ts+cU*{<-lB|N0OUZUHZQr`%;7e3(B=jDq?Z;G;B3@p^flVqOY4A|to8H+ z$-VJ74?jH&wrM#9ToYkoHsowJcBFM2-$29r(yBky=CmhSGljp2K8qlYluwIuimQK^ z;=$R1-db8zDtc_qgMwcT^;6(i>$O61o5-hoYtc=fZUj*i3VH;>ISB74kJ9)@U}P<$ z{f}s^mDm`%^N9AL=_SlB1ky*3YI*HP>T?=iwgWx9j(IHvuD$}WZh@rFt4AOm^0lWP zrMB5xOg9Ek7f6`S;JW+r+W{zxAJK{1`ZJcfXHHpmPrk|pWqMJ&WG#|Pv$bZ?ub}lL zv}P&JWj$WTwFh&Fv_D%54;_M+8jGduaSb$?>aw+j5N0DRz!{dBj`sw3=k9ypy<&df z58b7sdtE94P&dl%OC^X4@EU7zBS2fzH~q92mf?|fw2u~UYKu-RkI?Nt+7d?GJ_B)y z^y6dNL+uv=V+^nlu(u6ZV@f*hhx;B3=CAb#_ptZSL1Qew{!9a{ z>O=L}T71Y+>pe8?YlOz`DJAG@Cce=Kef$0))ZOU&0Udbe`Kc?kypLv~ef_itd?ug+ ztcm{G*UVD(fu*eLujQp30-{*5+b}|w>zjNM z<2{6qJe{Nq=`zybQLrY`+8muBMdY5S-+Y-e2WYKW)b|A(jYa(~bh8oN{Di;P!GYLm z$fEv*HTOjQa?YrQpyS&tdp>*`_9$&0pe4wKbaH@JVtNKRgX?%&j#iwsGEv`f$?O^( zg_K30qkAILEiS8uNXX5O8>l@UdI}Llup5ZS=J&S67ttpJwQ%`7tsSVfGcWiS*jOq- zmhjH_<~j)cM#eg-AE<>X=hjeIt~RAg6`ehxq9I%BZhR)Og#o^*+?dNbC4E=9HnK0v_8sP z5?vXjbq!er(Z;*jH$%&Vgk8-NHhr-6sv9BYI|sw0*1l3ee)EJ8m3v4qEj?$ zn3fn72R(5QynQ1=Z>1Krk|uwJ$PE@gQ!f25Ogk&jq_W}Kx7ZUma)g$k*k@Al2rbon zMjg$j{qJcZrt27#be85ltA&-H8=*ZTo5leMM81cQ)V`EwkZF{*Mfts!c8-Ec-IC6a zf(s_Pyvb!r9Vx zI`w-}yCc6$*-vSU@aODP+AjQAH&#o>pBrPfNj&7$eii?Zwl|KCqB#Hf_wK?4!tN0R z1PGAa1qc`~C0ppjI)2@5Cp} zy4`~Fj=NKo-l9*<_~}{k3w6ovKOAXZeT&|pu5>M~G-rvv%k@)nV2OUr{n%Gx_iY$f zewO^-hn0tu&F5~zFwoukr6{S>TU|}UwN(GYb-VcYQd~Y>ue}|Y-*1`NaywjsA8!_U zcfkJs;*RFZJM_m~P-|bN--f@MpQ^vTKScrD-t4|p|Go^I|1+dv^+j&?qINMUqR(-E^P!lu4!6UXAByb}l+AiHvj}!DA$vXp& zP3%EdeYgIu>n9>h=rhHVmHI~a%;Vyi!1X-*fyjFlL$(J#5M__*w>0m*NB6ni;tO%$ zUVWMS`W#XGm_Dw#{yrVw;MwtnIPgov+52O0=9dV4@Ci}38a^)Zf8N z{3x7^^2!HNL%0PyDB{XhLwIbReo@Bpg3l`P*?avUUc}z=u)f=sEpA+o`vc3<)~(ks z1wF7HJwell%}3V5Z6&W??!i{FLH__@xc+wcL!aB1ez48H^taoZaq0DL_o1Wes$E-} zFMLeD+vPs@sMz*6t~cuzaqw|{iTmA0Mb#71r?*%ve?s5Va|PTQc+;vb;J;9e-lVVS z0-++YYm*)rp3+DTF_&a$>*Z#6@^LE{HOrVXJP;i!JWuMghNP5(#bynZmPy7W|H7mClH)Tec&qK#;t5YzvZ zk<-5x9X(7M*}M0~#HTes-*yTXH`% z8Fr5~Bxv1$0+6Q-#Kww~h&fUT!7?)sik~4ci5E)>v_6Yv3C6H~K2?gzQt|!Y!quwI z8@)u_^;>=Bh~t6Kc=Hst+>r$v)K=H1OPl0YyVxwi$!Y4u1aZal`k0L4T4;iZJg*Ovck)`? z$&JtJ3n=aAMDuCHIgL1S`OteeobA{1#fcYxH^n`n|-(FX+RD z!#Zry))t!G2Wsop@sA75Zq9L{&>V&11foV>z`RAn4PxU9`oA(TLN6EhH|ZP4;`Zq5 zykKG!Iq9dBo0#Ehdc-{nYiwuB-NVPP$MH*;Mvj%r?PGHrZ@WRvc~LK?O3x6Fy{He$ zXwjAyid`@2qvjr4s1}$hk1C*fd!DxbQJKLv3r&1XWBuVB)2*j4GcDz>c6h8O!1klS zcf7Ktu^pI)%3#3hoR(uO+8_{ZYO4e4^d; z^>3Y;@?WaLq>kpt2JkYxP>Vm~geNXF^R>hjl|~{l`P`7`l#ljCCqM3l2Pd2IEizT> z$;s+bNuOX8n&$>kMJ5Wx2QT5KgH=#2dcCZVa$mPl zl)tQ(T+r1pGE|#9B^Hd&>@C*5tY=L9b@;64gEf73qb3)kM&)wAFjg8b$d(?2sckWI z6!roAfcI`(3;C_*`}Gx{y{r%N-0et%UeSk^Jc^dve_=PZM13RDp6e+$ z|AXzceg*!KTZ@moyPMigK$`o%Tqu^jq8H}rH^4URu8rHH-WcoM7?6AXLN^>1jjzD5 z^krDIzJl4(--boq4*hoA`=9Q>_-0F3WHsy8+84gCS-)tgykAYHA;@<}PodmSV($X% zSoQJ>-w|tOt)=;Zswg#ZJigTCPPg z$>z5QH+TROPV%FkZp{3uClA)xE`C)X-lN=9X~)XNW3TFiM!Zb>4 zmcXr@tSdCvgT=59Ewx4Q(X0Bzh)dJfy73Fdyk^B(uc_f!i+ark_i0;0IyN@OCCIbO z1fD_yuQUYBYdzZfD{(wuCb%O5nav4zezNJx<{HEd zr`+9YIA(k~+SK9cQy+ogEKl$0O|H^F|c0Zern1 zeZ=%8zlL4|1zB(>S{%+0<&Q}0to93JOJ&v3`??&2=kQliOZJRK z9W#1wm1lW2*u(r}dY`Q_TPs67#O&8~e>Tq5!)(Xy&-OWbh{)@h&wXrx*zmeO-+lK2 zaq4xwr0~t_Vfik)a8hVZdVbqW(QtGyTF7^BYmzv}h*QeTafuqD@X znCO(_7dfm(DYc-Kat`Qo&eK8fo3k2vvIj=#w4kI`9nk05nT+)mpB~T$%d3+CS#Rlc z?0{rXanoD+DDMyiEPPIEd`q7%i=zeQcF zO<$dzQcURP8Z4Z^iwt@n5pC7SIchswG1ns10wKfv{%LXG`F^?L%D45Q-l0fy<#S@$ z+j_B+ku7hdE+|t+*m2R{yLc@--olQLu;Ze4nEpF@m2+`B-qDv+2^iwiHhr2C(9ouD z>!EUq4ZG%vY47R1#g*?OlT<3p-qrV}B2IlzADaqzPv4#j82x@%z`3M;g?RCOeQGN7 z^!xfmCz=Xfagc@n;UMPKsiKY@#Jx^6Ui<;>Yq~==e4y8lwyR=>CA-R(@FagJ4~-sO zq->2pMLGAzw;x`@f`G64_1b>Ap_`ccp+46A$#ut5X3F9mcJLY&4-s>^)3PLPlwR^J9IO zYO&HpJoYJOad4kY)3N9?n47o?X`po_K zT!U;t($^>(7}l7T{vM1H-0%;*#7TVrKlDTH_Bo>QsGcv2P1>{vj_Qq0`0~%8Yv)&N z|6HHr9Q*#MZ*c#4j@a@~9fOTI%{BkhcerI8tVQm9$MvBZW#&(>X)ZgiH@alH(!x0M zZ@pZmyA~H!d;)3VZe5EewCaRjA-kWo&*I!Ca6aPhlX{_(WbsM6i<9Y8$zw`q(Mi3? z(cf?qt%1(9@1)%`$?SN)w69IZE&kHJJ>+rim*_x9f9IF__mJhOSBu=Qy6B>>^su)K zIcsYatzYSH;_aLbr}W0mJ#w3eWDhapwEo?mQc&GaFiSjr8ugCiT8jqXdRpJ;9M^rV zuU3lG--%2MUWcxjJ;l|QKCFKVpvU_ICZ9EoJmkIxqUi}wALo)AExmrI$^o>VU|Mqg zA^XP!GNdJYnj+C*^mk&_p3%#Cs}O&GQ)=#!Lj-&#=7lr*w8&mWkzZq&78+zKrI>DN z*()|m#lq)$VFLm8;uyYSANXyr3sSn;fdA4Bzy7NlnYD_gzpe}5)e#vlJv}9B163x} zaiSp7CHRf5<7l6*<5=&m<3!)CV?R4i`WR=&8jFjCxALOYiIdrM96^Bv9RbI&UR_F2 zogK48gZ;WVmPw@&^%tmPxrM6p_BlF&wd)&aV9e{@`Uu9xFKw@iKa3A9HNYhzmjs5z zt>5UG>UKblw+2FmBJz#?%L#3Gl^>gqH@58^X1+2%_Ly8-Bj2k%2>vUiGtX0G%6+Im zfcznTcP%V3AAhq*Og*dTUvM=BB%Ph(4r8Dqy(-_mS}ZxM-xUFdSvvlbkF(;^0e2WP z2Qv5~sSYbSie%+b-StUUTz>2b<%FfSelt50!}$5#I&F>=aBZ#YEoPv&NQKvr3a~xgmj!u1=Ry@7$U2v?N!GDlK5&y>>NW;+ zf#3*nz1x`OwY8hKxs6rsA-xfGDejyQ9##oVdtpC@+351uE^HlSjzb~je_1K!b~6SS z^qh@)-Hg3X5tx5NMz5(*#Dq@Hpl;giDPLELhr1cqc|AxC{q2cvMs+4yGw%5eF~e(2 zyfl@oSh0D}QMJcUt9)oQ;8-a}GfZt}_>wRj8o~SgShQWx_6!nOnaF6~?94W5Xjmy0*43W^uH|j=3u^Yz~ z&&|MBdV+CW!#I~;Q?{d%yAFI2g7k9@qg+<59J0+bj9RZ3$NQcW`wXK>o}@|L-N}o@ zK%WtiRd0jfMdk)1G7Vm?sTw{3g#YXDj}n)I#IVmO^k(1~W46^kqf!=^ zmr>*#m-aGNm&mjO!4h)<(v707<;Roc$)&$sg~djhV-QAZ9qna=ZJsPKdxOhIf&Be1 zd0LijRC&80A9(8S%Qi}#Je|u%Ua2sOE-{L9OyV)ynnj->Q{a|GY{`C3|C z-HMN6-zd#p&_KrS8i$ z@|`O88)uEya@} zQr9CM-ko9HS0%RR8O1p~EL1lu{Nu8ezq)b`@u5SEbM@_)be2N0AcLXGsW70MurFuGKRYU zbA_lKWE7TfnTbUFnt2TpOS>+NsApJOG-wvYx>@p}&BIZLa`e4#kTI!rAdc_)jcqH0 z?hTqt?+%*UXWf;9ATSHPEg1Tb9PP7gvtn+vbWTgvW3EF!MPG z-N$B%oBYPDws1j~_`q*mZVRqFDGU(7fDyFG;X%#!28`eL^r9Zt;t^Ie%J{h}tNE=_ zMwaV>N@O{AZfdjh_DXTI1h)wqB*rEpXS6Y^`|%svuY{wnR4g2A+}&3*J2O37vBXR* zO@0caxG6m zz#LR~jcz@f&ZFS#bZcEYPk?XGtq0OMmOX_x>eecUN1UP#B4CqlMV$bLN5MDiR((28 zfN#;Q+tayri5YIxttII^2)<3XZcgKoKnwxfbt{|}5J-aW(5)Y&bN@s$yi>R4r1KE? zZr!>nonz7~yjQoX(s>MgpB}L;OAkmQV83par*r=#Gkid|E=lJh@K)U_P3JN2Hr=`? zohQK$>Q<5B5q7s@Vkmq_xBTf5Lg4MXm6y(A;74?;Pde8oo8hCnft&Gb3TQVZjfWmQJ}D z340Aoz8Z1f38ILQWmt#Oc>>&LSns8CEU69W7*=aK4}#|!)?dOtCtPS)JJWdxyvVR#PUlhZV#C^&&J*Azh9$k2_60|-wA2aE?}kea zYjY}qco4kIupUq6QSeEIwIQ7+z{?G5Z8{IS&2WWbNw=s|((1gCC;}=CYh`)>zOxgq zGAy|>=XnwQ9y45RSa+uL5O|GY)urUf_A@C)JHPhx1^{`Pz5ko+oVO69@(7bpS7}n%;9t5v9 ztg>_-17B`fW70Xs4dDjEDn5@#FGQK9@%JE-t>SN0yY_zmd-I#6W(lCXW-O6@1DSHO?Zo8eVNWNUlT6z zS;x|O0=(2`eFh#mFCi@pce~GOPmd4;pX9SXOy^PXa-Y?f&XeF3KC3022YcdX_gVY9 zc*Jggm{|x{`K;e{1=!rL<8Jp^yVE(W+wcy;OZdz{(kC98Yz!*ERGr(5PRB-M-+QiRv^G3H zc&|2IE~k~oui`7><4hSWt$Ul0ii~prQy4z zGRpz@=Egf0)mUv0^FkM32;j3ur}G5(4xe>lI``*@52hHGT!b^^m^tzc`*4PC&KYvd zY$wJ(I)lHrm|AX(7>C)!GIQZoWo88iRDn=$Gp0>#^SiZi)8JpZdsWa3t-9P=h%w9! zZPivd>iXN%Z}2*1xpC1EbFSXz$6#{7Z)pE_tXFV_uN3w%7aTNT zgZ6Fw5Mk;DN0_?$P#@82sxcyhXKo)n)D7#;=^9#JJk$;A_vt(Ye$=quNar!|V}=z^ z=UOhF>4x=EIuC-MiWt`O=>ahWoH49lr*o|z9_ohmR637>yM5MU=^Xn8hP^)Pk#r9C zbU4drJtTQKm6u&62=Mu=U#3UE_Eg~b%*mS?2`UFC)C% zXU#%{P=n8UxFKk&48rj~O|sRj4d89ysZPSHojY_eI&YsfF`Y*Ti^rxJ-{}>^4Y~?9 z=qYSi-|LT+;`B6Q>-DPq{Q2g;zv>h#a7KTOojICseg+s>_N6#OTY60k)6~h}kK@Unp)%3Gk^uloFza;)RruC=_p{ zgk+)kA|=2j-Rp8E>EIACIwi!0h}kJ2IYiu+68uBOLn$FNRJ@Q9VnfASDIqyje326T z!$hx2=RBcdVsuJ~4HL6dLJ~_}Q-Z%pJd_f!#P)@h5GxXIrG#XW_#!0)hl^e_obyD7 zi_s}T8zE+=1bCuvO9{~t;-Qp~7$IIr3EG9?t&|YDP<)XRk{60zGoAAUi^b@fMql4% z`5=lGn>U>4X}vmC)XX$4$66T8B_5k;m_21xF7$oJ3M7ifgjvQk1y16{i-0y#+&#+} z+XX@+#T&DXi8(Tg(nyXpLn|-0!oL&MRYsl|T4nTS+82o#RmQ|F0N3sP=Yh~D@fH9} zZr(`!*z z;~&%fn=6g6u92fA+t1+Sot@(v%jH|;!T4oU>?I=_mPp|GTa-sk>(!iDZ3J8cH8~lK zrt8PUDvAfxC!L)wt17-@t<Ic>7P`m|JMb-GsI-r|PJsH6i5&bkMGD*TEn)Dbt9U!VB@DGV`@2Tpxhj_$ zDomc>=(i}!%9LTpz9lR{VJGY`nU=bzu?TP1ca5>`!;{6a?;5$YU8tu3>PeQgs*Ttf zGY7RHCpr??y1_2Sv1;{JFK{W#Ejh8=7>kj5H)au&n>PlMW5v}q#`vO-v*eV*3`@O^ zG&9Okj z8M*HnJM!(6$c5{_;&sfnyuKH+Ep&#}*TJXxHT3)crg{5y#uB%4x}qN#)vm4!k9tJp zhsH$jnJnxs_?zb4KQxZHycUFshNgsFyx4(V`ooKE#5@=Z7`}6{?na|QmT42J zFt66Ab$P#nfYmIkZZh_{+&>#Hs(*xvtsXDV{0I|Wwx+0DWSsHh4sF7uSLI@3om0Ap z78@I#YZQaZwS zr!ik%@mgGQ-JQmw0{dL{v_0l@kINYkxmNZoZ1mpNP$>R$r}3wS_u?sZ_+t&LCQHp{ zaq_3}b3TgvEKK=@u-e@#qOI}+$#R)d5(zm8YtfPBs_oO%RLYlkd$xY!@ivAwUv3?a zXtH*jZe9a-d?-^4uQx92CBY4cuC&_U)bN@^rntV|xK@@umYOv0tT*s_6P3-GyD-DB zYmBJ;xl!VNVT@Sza|5sLL+i}Xja4r9b7PwumP2C*+B`O>$ui$A#moTOx(kb+0+=w@ zJeusR;aBJ`zK9wF3X}k+0XArxh)K<#__gRpt~7jwaic8wwW{D_-Gx|TTsu4k{5{OZ zKig|r)hc7T!?W(i1O(|++>5w$yz^dTo^zacAMQy?v-Un?gZCiPMEiID(r9ww<-eC! z8@IAc$r2;)HwNb?pp=?6VttOyMeY4YiF1OD_Zwwh350ab-eSs~{w z$oYmxjib&PR{hE-b~$<4u@N&pl+cNdn1ZCdmOh3;r{i^x+2tdzZQo-?qxT&ois|)b zkE2ugBRYldTg9>`kRj;H?q=T;#*KPQ`$9}WU9A0VYQ_vPVH2i}P};Hss@;S+^LKHK zC&GqJM!wH;;aLH{!ix(!JFmIDSnSq9*@RxMHp-sHANS*)RNlm*(<^$jRx#rKqMD2^12u8`QMG>!l(bz1D59x@~?M9f6 zn>TJZHoJPek(ti7wV%Z>S~`vQqOZpl&wkl>(23Fhvavr;<|~je%w4-Xh1~B~=4202 zL~pQo6%f)^h>+q=?(II1rpDUfN+?+jUX?Y|*>f_)!-~WQ%*7jX>`x zl9y5B(kFE)e=o7C*_g!we0D(8C;Gi=jIWVe>LmCGr(b(=qZ|TA<`4BU+ni&+&wSfC z#+#E?RdjjbzTB962>sunCM~E-^_Z=ZcKE>Rf)7S{yBlC+vQm7gzvQ%KN~6$ zm+mpH%M8lpQxG28V+`|dMrLKdwFeI%IzG1tw-p^1?!`!uj;r>ft?q>Wyx)i&dySGT zRglpE=D!2t*j_w4Qdvt3XdeBhafio=*|-lq?bC>f{^ZC$^rA20Sa!{SFy>UJVqve- z;+a!KhU+iSwu0#aQ3Nc{wkD=NT##yDr=9``AP^kq0C1> z8)h1BcZ$EDFOgx>&ag1_?p}n+r;&=s!*IUa4jBC}Jst=SHNS4{6z@UnysHZiF(Y*5 zTX5#oN<}P%c?r!4ozC6^M!jsFa^zI;ma%3+2L}Cc#vFfEyU1J#&pkerbG#kDh0zPm zitK*o@3Xb7hatb&-L*Bac7!R71TETEWVT@NNC}m+7*%~zMI0?LGm(j06uZc7G5YuN zqvuV9`bRdu)MDJ~QX>IXCCQOuWGlwDDV5L|@pP+kc^AN@v?p8PXG>`$M~l&K8$+1>0#TD_u zGxxR19U5JF(}|0~Lq40IobE9fsIcCM+jL^sKzt~|$aNPC6t(Xfb#C`SaqwNELS_8u zo0m@v_{WLi?-|qFZFyqRdxp3WX-S{ma^%7Br*&OqshNBQi;VUow8)JJtX2U0Uw;t$!R?NjE%Z09|3kyZ&L1Tq`PM%nO z&}hhesvEwF?#IHjSbuXL&N&uUB-4L;peXtP{s4LI09HgLuh*SAs>sR^|SZnD>6E=LfrIz=OoP-CqxeXU@2lgG^!>_ul~)0=v855n`VE ze+;I9H5C4enEU?4V6h(BxJY!^69l#UYXO6R$%>$Qs~cNIn+w2_cvm-BMeN7J%pb_e zlGPAv8D`D}3rRMQ*q9=-2Fx#6nAqAP^E)!VOt3|YO=#4P7nw6mLb|n7$c$j05%QK ze)3ls5~!?}hETLd?hGLF6j~mLCszkCD#a!}8eY9ccmS)zP9m%wab-M=B8!vQNI#ee z#Gk^)1@457ws5?9ne+VtvLQrUc!qcF0G-p<80^nc7#j$8EhD~-mUeNzD5)5V>F-8+0Iv_{8fK(;3F*L zlzrSnZK(N6e3zDA{8)p|h+>8t-B$WAR}u_Izo8s6329!rgh; z7>>Vn_TNtXuigI3YFA;U_TN1DhmYghe~tEEtNnMz{ww@gsZ`m2b@tyz{CyXB4^`xw zHSta{6wM`s5>{V5K?%#D)0KI0C3>PEtiZw z*k8;)V$62+7u$}&75UTvaX|k6YJfO)#8?q&k|Q-)k)fJtaqMC|ZfQj~Q@-^pdpY~Y zC^KVjY`fvbj=$aH?ihU<16cQ_Se7Oqka!0JEJ=Dk#{3g(y&T3u#BwEzP~;fFJf@f= zmd}{~5<9^{#zMr37>f}rW-Ljpgt3U9uB4Pf=jzHBi;>lh0Wi)>&pMsOozSe&PFy-Bg->Q47-Hrvcth}ag!V#FF5OA^~=v$=MHE<3^POff`k z2V+=hr!upXF%921mCbWEVK#uuyRpm0-B&hltO&vK9T|JS z6T2@OGO+`U1wFQ2D`Qw?r{cCThUo>x4oZeM;pB+|A%cgPBIX&CVmo76H=7+{EJ*Aq zV^Lzq7)ua4!B{bRUUiaF3^cSYQfPbH<57be;$wikO4 zsg4h^wM_dgS&W5<`4~$O%V7-5tT~5 z5xTQq9})YP(TiPJ&Hr*?@ZGC(maw#9#7Y@U5-Vd2E8JAvNsM7}n_}gXeTObg(`{J6 z6hp)+8N-S;6}gHrtY%ZJ+9jU+r{T|#btRrWW(^TV+mr57}I)1?8r+P4EC~F9b-{q%NR=#t7pugZO2{CSd>@;V_4IsGQBFo zVDJJPu4XJoYz<>cV(S?5=h$&KFcu=VkufZPQzzc!!dD1`)=BZ~KaD(ghgD3E$0mJC z(@9diEi5g6Z#%6<#-hZwF_t8@oiTqOJMIq2)Hp(RH3WAu#Tc>Oj3tTfWz65#PH-P% zSOKRlc0XfDVh0$D_;YQ=RtB-UO+{{F3@h6dJIGjw*dfLe#M&9dYBm-32xC#3MM6gz z#40wWc#JXs0Gpj)46Z_@cZ#tDu``VM^K89yjD?7~-LfZ?;|SSv5%el(Gygz4au#Fo z1gaDJ7)uh%VJtYv*2`rqN-U4DM1){IgW6y_av@_uVnvL_h!r!Y<=b&f7=!0eWxA9x zc>NTMlrfkjIEgX10hMAoV^V!&s8o zJjU=gveKK+Scq7du^6#h#*%@E9eELhaL%a&moOG0R>v4Nk5YQe81oOYSv_M>V#^sz z5Nn7qhllj>+rXGsWb17t7E$9If}5CPg4kxpFo~lw zxP>uzR26GvEJ1}5$Hp0X!6&S_sU{JfzR@}*0h}dq%62$g0<}bG6?qdwA z?bJE;GnOQFz#WmDfZg7Mc)e9-rj;qih_x{W_odQ1$QYJwDRzjl1hIC;{G)8WBMyt8 z^NA8X>Oin0v15#3>6SXl3C3c?PBDg+TT1T?V_31J*g3|qQY*SxUa{NLRSNzwwxXA@ zD6uTYlEi$B1;^TPa~Q*FEp_5t&$o~3N-N_*ywm?*16Hlnj+f8U3K1)0EJ3V@G5^JO z++xO}#7ZQ)fT}!6u+*c*W^6F9s4}jN|CVe8$Jt3wVoBpYM|Fwij0MNrtb#Fks+3+O zV_KQbsw7Jd1_)L&#RRb$#^9w;3C>|GN^Blua7ZY<`HaE&pjeo(2)qvp)-nk1gJO#q zgY!YLC5*xOpjaJa31Z6_gQG#|)iV~dStPWaK{yqZVgqCTOKrA_u@JG%VQ*KPWv85T)$ZpPOEJ&=7 zu_&=3#uCJe8FOsz5@KpF5F|snlqp7ul`-ZR)RP!<4C->m9D}-oF~^>+WDNGSJs7BB z&@rg18FLKk8pcvqG-FA}ie}8QnCCMVBkMSv!3F~wS-7=KF+^+;V~!=fgfYhwu4Bxx zgqJbqSiTO_5%Mk^g#;C|ixjBwlky)-wnLT9Q$`8Q`E>@-Naaw*k;BYvvvz(POoHlO4JI_B;{#*(CWh%v{sZD%Y&mhBP7G_qKaI!um2 zLj;dGP?jvQ6O1|L?kUEw*hM`n&M=0BE{dIF%&~0U-MVTZG}w&h$Wf@5!Ng!O)$L2W zyYs5zTF$rC3z@AsEP*JoT*eZ_@)&c>+kD0x^R}=X>ktwJ_T>~YMaPycW-Ll3Y6)W+ znVzMLMTwO$mLxXGVX|I=WM-B-5G+cpf-%P&tz^tGN2?ff%+YGbl4Oq7FcyTB8Ikoe zhrt+`p7R*PA`?~7*cdI1NGH!6d;trWhnMa~WeX zV)cw^cwsBUH!PF7O7TI4kDRX|GD=r5?F6yajQKCLFL4cHF=Fc&)5xyez*vabM#f^r zG}PF{pr35b&5U7fyeiu*j3tRRG8QCTa~orh{kfen$Nt;N%)s6jSlD^pAmYh%o@D-SXjCA;zvV@YD|jNy$0Rf0zti-;onp+f3ePYWCB1WuIhLZ^%X$`#9>iX6R~v91*jbE4Nzcbv zf>;h?j!BuzSct60Jcr4i#W5-K9SG)_l!c5rCS?(0j!9X}Sdc8m62=^hvXn6mR-x+g z%NPtz6p`-fJ%0U_@#uta>G2)AvVtYxCv&lqu_&=B#vHS*;u461jYy)G?sBR-;elj69c`Z39X6MGSD>pMm z$FAJMm}6HqGUm+iZez?bE4MS|n3X$HEP`f{VfPq2QxMI9?8V)TMTzZYEJZb4I#j@>8moVlhORkhL$GR(% z%y9ww$?BTK6^WHI=2&7CjKzA}C$417PexZ2V=-dYj76Nu#2N-218WXrj)66gu^<^( z^BIc~3p1vXfmF*_&}Na)A_g5xY6)YGB~`~*w7-4D%NR=%t7ptHu9h(QF zWHqf~ijH-)nlZ<^TEm#1jHY#rMTu=-%rT@kG8V)F*e840kHMCdSzj?bu3RxU z4;x4_xjK5YJNs*?FU_6+>>$Zw4cTAYW>5rIstvcH`vQV;Q6sSi#uAQRj?`PLR%_vb zrA}@yKSCFbxc(7z5~XLeC^2{Mu5)M?njtwhh&3=61(eL)r%TaaObId;Bj)bgrKe#N z1eG3RA!6>_E4Caol*S|{-){d>m7_1#zZvfLH z){tUyY~U#7bt%FGvJ+%1M9e*~OE2N*F%}#{Cmz(L7bDidn13wvFgA#}2Qx(pWtA`n z6Ue@j{4PD1K(-!ZFoA5nf-XH+K(-!ZA)6(OUDjz~_VM)-FZ+ELM7~!M*PK~9Y=!&E z`D<^R0vLG9q|`lK<+bRZZVF(mtWGgsjRKlfWn##xSiLhckPW)8%~DSsdF%JHS#72z zF6rwVMD~0S@%_GzJ)a;OE{m;^^OGIsW6ZJ5au{>Wuw2GMWM1VlmL!(XSg0&wKY$7u zOp?u2#8_y8tyj#LV@j1U79vxslrd)_u8c8f(rr?N!6fV}6n?0ju^?GO6^z9ki-|Gq zQaf%HV?kooj5)?p4KZcU`^oB=!xSCsXdYt;(wonipA4KZV^LzYjA>-xEMg3XkUe#< zgux^!)-e_$t7jQwNn-Vi9an>2$LLwkSb~h62F8M9;H=Wr1JjP|SU9V>B3U?V7>f~G z$5@Ca#5OSI7%m$bi;<18$zjrNbc~eE4g`ylL6TbDEA?pps*&pv+s2qONN^u*XDmv# z#}39c*c8fc+{vJ0eC%dSBb#C`V_pF^%kpTE-lkVv%Idl6A+ZSi%&Y*_k@U zT2v30B-3FTV{#@&J~!$aOA=eoScpuA2F7xe1XnQ_DiHq}-_!0S1fqs*KB z?Xzo1vNP7P1ROhK17k6=JvK6?k^QiVF~`o>>|(}@MiVDnxFWGe#$Y_CqS(e5j0eTG zGX~>9u^o(QG)J=2ValgRaJK`cfiujGyqB>kv3-nbH21NeF&GEx#0MCIZJ<~yV^J{W zYi(l?6C%6veHTXBQ7`=aBEjyJ@sL4=CU*Yk!@6nmtqZu3L(Z_S+M|Ybio=sEd921` zNm&i+;5Alk9%C5lC^lcQh^?sEW5rlKQw$MX&RCMhjvE;ZO|cW)#8`qDmgS@} zrrCB_tju1eVk-s-+N)HEdF{wUY;DS8;h?8r@mBjLExD*`j$2I=5gxV}82b3K?^5%Ob{{+p?H3OlGJHDPatg8H$y9E%_!V zUGYRQwa_;v($&N5ogUZveT%!snQc76nxZq?c$6_`w(%HaFtwwyZ$80TlGrK99LHgh zrW?;N#RRc)j0H#93A*`$P-0%j{4}$e#aN7(kFkg|wV1<1OAwpHn4e}5%NdIjt5D2YJ4mpS zDF(?Ztzs-jteP=2Mpef(jD?8JVGQj~>CI!ze`j3uYorLdc^AlbBgi7Bf)N^l=jOc2}87#?k^SPw83B-YAUlvo>M31SBoJFbS1 znnqUlAqE}Gxt*~nSQs0=Fwq~DRue@m1)t?;l)Ke> zv4z`9tAdzd>)m)U_AyMl?Jv?FhAg+gOk$sx2reUuJqz31eeVCbw+mbT z{TPmep7_);UR%ByI@vwqQ}66y%l)(BhutWcUgLfJF6d^;bYvQbRrz|wgz>(+kjt0G z`({kR*^$cY*Z}5wq@q$sO6nh}?UG#U8OQcHH5vF}(MYr~JpKYE{=KHQ| z^mY)cSzL?u6W7`q@j|U%Y2eP>oPgGl=UST?r}|a3-#o#0k$uN}I>FcAM&U2M#5bjP ziA!w(qqcHc`c3D{n;`GH#CK&zQxG>-&xyX<2KO+7GiPF>AlKqh_i6Rh&URiS?-^MI zTE=uCCi<>-^$@2g`X11m-1^YRP+zkHi2Kka-;{yxBbP2?MXM)UeT!wb%yC7=kjLbm z`{^WK@aCr6={>Loj%({_d=@h?X(sZljqeW@TONGagZ>n}+Q1BK z@vimB9e9~_$BAFOElWkic0sQpJh5o}*X^AvS~Y|nu3!4~Qm#D`QWd=uT1Iz?55 zFE8h%bKi)iXhuu7$eq&rG>+~R%PM?DJ%@SD3Vf`_nt&Yry23Z?Vinup*L)haEnBVp zb-vmCZ~vVKym*kQKd<$lE+W%>B!8%b7KE=WajF$%)E8Z&dl#o zJ~A`!q6~*$=9`$Az+}2hnsb>XBE%QHKUx#LS&D)9Dp zoN&h%F%$zj<&H1lsbHyyOhugqHdx0wcYHRB0=I96+Y_&32wvX~uO~i*r4k&BFJPqd zGT7|!dEz5k6!hQSdTH@OhNAgqM~){xfTf}ph&Q@YDKI8xMe~~-`JVVWF?Ob} zpIww8zZf|)RXct$8v@l%!0agY#6MQbHcA4Oc;W{ciWZt3rJnfTSd#cu$w#SF;I8d9 z&=Y@yMM(}ZJ0^MJI~WQMH9N{Z@#k48_$tY5vz)xZAKOvsi9g1oz#ZFdmnXiCp-_?8 zQRRvMlBJR;5}m13g7T}|p7>8$6fDr_nB$2rVMrTccFgm{Z)B-pXUd1FoV>tS)a?yV z{Av~juA**ldg4_K!Bf-`_Qa>LRJ3AIaD|gfsMzdSruu@tq7s zfi`>MFS1npW5xB~vGam1WUSfI=!rkcq6ACLj%}X!28I$q+dc6Ic`6r+FH)(%qtmg| z6Tgc^@sBe*c6;J=3`NJ8-9FEV|A?nDUPP*$yu`+v9s4}-xh#sm%?`6E9{c3UtU553p3UiQ>twR3@V5^2B?wDDbXy z9QDM#EJ}2e=y{c0$7@$=mx|F4>E)0-f{3-&e@4 znts_^m9J zpj+HlW9J2rBDdL5mJ$CxixTvpXUd4zFa*CsM|nnk7E8sSAv#m3L^I5eij4RK79|N( znGr8x2-6B3RT=SNEEQ}Z{m|7;Ua%IRqb4KXn?;EM&B=&oF{EXpXUd4XSSry>QE*Kv zmG0b^j>kDMG^q<~MjJ(!YiGfMowZ6i_o6dYAdS_^AOYYmxeuHny^}{&5 zccc6mj2~nBkF4e$*ZNj@+yl-umtW^wcc4{U0G08 zJqD-w=>p&L?)>Sez7d~HmtRro+xXA9_$rD!ZrYmoGykJK)u3B{7tdw%gq>*5u|%^R_?sL@^QUh3=Tc8zF$ zcd75fZbL?#_(n)O<%lPvIO5fQ@;hzX1tj>T zS$-06MV`lIaQR6V%~x`Z2Cs^WQ=#ItXmF?~xzb6)o;i#b!rP`2#hM?LKoQCCyeS!; zHx&-Ao03aNPLNzmvOm)fFC#fh@+6XzB$ty6zm!TZQb7Q1Ux7-J;gC{t70K{LDY=?t z_@R_sL$W{1mgkTR|C0)zM>0xM$@5935{g8_1gMCjwIsveq#`UL8NMbZFCiIzCMDOA z3?Gw{myrzrl9KC5hHpv9%Snb?338+@+CTt4C8e;6WcZVmyqaYAl9arLWcZPkypCk} zkd(ZEWVnx%ypd$Mj+DHKWVnq&at%;)GXeOFl)@I0;V)8hBgya;DR~>oa1$wcJIQbn zDR~FUa1SYYC&_RPDS0=^a0`XRk5>4KhQ7O5YWHc%zM@lHi%#UrKko?s<>4eOGZHJSadao1S<+irN zi|iBZcfv_NKr*fVh=f`l1uXrLMG8N)oxliNKB(j-4b5JKm(mrW*(WHfsvPa+x3 zUdiPoquDE&wR*^rwooN0pxG;hDw5Icm0V3Sn!S>1NJg_)@*I-U?3Fx^WHfsv&nFqp zUdgQ0N7X{OT2er>R|<jk&I@qhF8%Rd8SMo-Z(d?DHiDc$2wli=6O*w2K z1vGmVp^;=XdnIop8O>hF+et>VSMm;$(d?DHlVmh|CGRGgd4uJa(bz6p+Svy#PxUdMWT$?@n3q)% zoC>OSBG7WoMIc}u+=1^n^xty zhGeI{){*Sg*9MZE`r7E|Q+;eAIcUp~&}ITo1#ThPslY~(L*&liMskeg?IgqbXWtNx zKFK>BeUf*Rtf>{3=mho>fFn*Nu+ND=@_r|R{oYsT0Lf93TS-omjM-@W9-w8J2T2Z* ze2CIB@X zjbLAMQt*+MI^%usN^Li$4IVo5~OGG zGLl0i*OQFtC>4J>$q_$2oEw}7B(EYlM)GQslO(Sp*-y{zbxwSeH;@ePp*rD4lHod3 z@+Mo3XdwcdNg+n^7AFF&9cv^xNb)vEpXBW%J8R8$knAtEPq>q0cokI!b}KmoD}}&b zQqX8^**+%%$@@u;k$iyUB+0ELJL}NeocI^nCp_rHC;5<+r{H0cB+%}$=+X3?oO(KY z*N&~5F_ZAI$5pJ>zT%5DZ^Jy3qt>N``DW$K)5H}I_=5Uz%r{`1YM9fKdxUtvH#XxQ zJcGnv9`FSUZ+>%%6gmeE$v-_rd;PtF-PNbB*Iv)XEYk}36?Q)Nrs(ycufqMw9&z=9 z_~ytfIN?)RGqvkM->BgYi1`DgFg4is8>tQXc=>00rr@~chsixt1_f75o+?vV<6DSH ztfgyw*XV28Pim(8!lsRQk_n9c%i2tU~n(H?DD!aMoe=2r92~hQEb5;ySdPYkI%;sNj_I>|? z9_H=%ikr({t|ogMU@Z53+BTYR!ha5o=7MW9tDs3!lZWdO{^zHW8T|Kq#`i<_=SRe{ zXMFSImz!FoCH?L*zSj#@;DZf(WwIX&_2dQbz}(K?F`xO;v%V3LCU|>_1NJv z=@ik`)8c-7dPGBsYFN}0l4dksB2jXZWV}G4WVqZ^I9?vH^-0EiBTClD497boN)C~X z_eGSPh!DWbB6b8ayYZrklHqz&C%{W0N{*6@_e1OiNXEM%c6>6!@m`1>pJcofV#g;L z?}NOI`zad15DOER@u*uH_YUsWS1K+rgVMI5w;rWa;VHaoqnPv7BVMyna+2PHMCsUZ z=*32q&O4ZNj=3x1nBTTblKcZPuZuEj+y9YR7J-lrVm^`+Bw^HN?tDCTBrxlA}-VlyZ_W zNLBh3B!@_@BpHKJ6k+ci4nYg+(cBjuV;Wc_eGLpCC4$WDHnU zT49o-B-c9eNnQk5zH*~s#Hu1JaS|Z8&PjmeWljPl*OLs3L&ab2=#$()G6t|Jd=<$U zz$$sQ%ZjKg#0XY_HBJPQ*OBbE9SgAyBx6LY^f!_mBYBfuda^0YCjHFcIzeQ8$%y;&u2YS`7Q> z#hiX5NUPE-C>~~L)Ojl5Zu86L=3LR53|mgn6=B0X74ElPCI1g&UmhPtk^bE?laoNY zNdgH8ndu34!hIx!E1iT(a6tp&xiAnE7Q8q_B*+W|kCk0b15#cq1FjrVFsopU3N+xg z=t>rLaaVVB02Nm}P!Wg*=lwoa)sqhD@ALkVPv&{*sj8=*dg`gCo;o_bLBep!g#;w5 zAap_siZ}8&eMrK1ACJQk3FB=%4r6 zcn43=OZeqDF}(2p9VswRQ{<&vym=?`N*M3m1x03wz+-nD*0V%q?@Ac{IIsMOgpE!D z#`|`h9y{hd9dFxl816TR@va?*1K9$`n|2(A`_0oo#iMx~0sosL@R*&*AmOhh9F{QN zu;b|w3FG}bLEl;A$J=!rwj_*q>o~0Bigb6pq?d34p3o8*B%)2c5FehY(^GBnc}3&TPkcp~aSjvn8ziM7mePaK$-&o=q>|?tuCDhcC_v@+Cn?!hI#I_(l3aJ6*zs z5{^iCn1qcyK|ji-mvEVcEeVf}m*Za-&nJW@*cl`|Ny2coIfE4vhO5otX%dF3&Ee}L ztaKCbbP2=N=IOH}3|E`OH{o$Ug`3~*0x?e#gd}{cgyCBA3=1V}^bqh835O-TOu}%b zIsJ3fBXy(|AU_#?eY~@DhhemwJL% zI5>=D8K=h!9D-ijZJfn^mh055I`0@;^%ZG*#DR`GPaw83F4 zt2m5THaM)vzC4oHB)uq>^IYoSV4aQwHA<4v5FyV3?Nvz5I7Cmm$*UlE(}aX31!vxQ ziMYjbE!^;vx4Yno1HGWZ}G#0qRA0qGNt+ED7;o_t3$nw0KQgD?~zu*=G?>Go> z7=Q}j1m8z*mg)Z}Yrt3ATbNXYOk+%9+$oMR#4G)mqfDb;OPPvC)EWFwOQD?Wu#giK zO7JGUGNLF_t?{}DFEj!_42+PYPktEaATd!m_ru^da-1b_VK|LE-^UJS^!}WgAa7w? z$<3Kdn2Ct-5@Y5Zm@(v-z>6ci(6f$01ENq~rY6h0Akr0LQqErc(ariF;wXR6RGMQ2 zV0sfRmVO;T6 zXyq-+5f+5J6IFNbP3nm>2hT3l(5vF@beP3WcrIXy_^7EmT)L25qoU{soe)`0tvrir%MBW z$WE8=yLP%X@JH-)2_Li5rNMvS?*Gw3>}Y)rzQN0-K^G_a2p}A0n7ro1CX$jL;?_gj z1#U54LLcLEozh}9DgoS6Y_XV)nZB$|_j!Dxo4F?dv2QDKdjx{L>{ukvCzN zNjMx}mybY@U_inM1aVj?k^PTI5Jv<`L4|ib_p1P9iFbZ1&lzBfa3-Ht%T*WIDF2A6GS>LxpMk&P$CkzH8PdU(H$6$t&B}b zXgnVU*}NamC=oddyb_k;59itGQuN(rKVMPa5OEGk95mwH6}0XAt(esm+1h*MjAlsq zfdnx`rwUzZ#hfAflrxtvE4O4n_m!1j<1lWzxK_%I+cmf}z?JD$C=;CU*z{`%(-|`u z@55jy(sG@Xu8SezA0&*!X1uR|lCULVT-X&|BPEs~VS~fLW8pRuA;la{m9Ql<;D)X! zK#CN%b2)5_Jlm$1>9~~3({(8YT*&2cNW$GE93hyVIm(v^L*BUUE8(z&aRXN{P%K(l z2v|-akG?PGkGT#Jha4ilLCzmH$I@#kLQRt5Lp*57S?+cRfg+3sAMZ;03*4qJZe`Ok z-o;RibrFKKNk#J95Q?-fbF&b+yjtW!bV(wgO4GOu{&c$NP4y zgl)SpLBe5~K1nLva=|Rk4=5i-Oay?4S%NpM%DSK^+`~fuyE};%hGG&xq+vL(kZb8u z*_zd8P5Vn)gHwO8)=aaR7r5|s5;knV(Pmb{vj~R&rzp~D-6RPD5}qev+p66vVcV)L zlyFE|wIvdcNO+lq4QbR?NH{FvRoENHx~isS+{?}LfIaRdY)SY*3G31du9a{|!W$$U zk?>;@Hl&q&Qo=G?8QzTkH#h?x(Z5?HK|sQ_62|dB-v2u#tj7uXc?pLk{Gx;-5`J02 zwi(_l;jmQH19&b&Fd)tF8tD4u5OY%YfiHn_j{{ zNXCMXls71j35RnQ7DSw}pX`EUo^XsF8AZhCY1I46iS1dDuF!Co zZW$S%p#G{fKrgj2FbHXP<}HaC7_2lE!!KHgMW1Z}b8QP~IVz9~58<%nh~eFcE)d43 zF}7&2+KTy~w=~sFJ|MW0VaqfLhb7!m!gd%lTfzYuru0hKl5n1s%zs)ntWlBc0MRhK zWUvXZbt}^64}UJb;m^=5LSb6C)kQdyGuz!}PT<1%61GE}eeHA^(i~`~%ZO#6goAcS zbC^va1A3z*_iaZz*9VP?j6lh5Y21WJl;VgYp?^V>E4sAkf%NiYXMnqgy zy4|u+EIQD?js-kd8pi^jPe}S`zGC8OVc{=`{>~Ns-L<6>&XnbI>Qm#U?qE*G<}DvC zBBBHjRr>dc0P#wC;#i{?9WC7;gSfmK%5160Fy~kahb270PR|haOp;RV4XMVH!xQ8I z2dq?tvmqr=w}}F`OXaX5mdasAELBKAnq`DiIZUBc{bHbO9Ag^Y?x{eF|pa@wWJco7~!qB35O&+-KLlDESp|R@+Jw} zlAVXcJ36(_4n5y0;XtOSV4C^k?=A%F14lCe*85B?9ywq@t=3qXeh2&O}8}6 z$l_)4hOLn01nsr_Dyf;{M>i;!nn@YP<{9s`8R{e$e86T%!VgMV&lc%xC2WVbH^_P} z7sFThe_=t)Ck#s}+ZBR9NJoURdHQQ{P3sX(3rz!~STkUEuyMT|gp%QJVszzZS+OGK zkK5ee6FI0(g(h@Fza5Y{U6yo4dCNjC+vyVCYo`lC6FOk0OZW{5>%#pG z9U}ND^nFMo-jxK>KMx&|a9GTGp<{LdVuXa=m#{Qip%3l+dF;o7sh6eC#Em?EKnxp( zSRL-}va4UCm?x>qaomM`;jdAIb;Zsq^*VN(@c?mq+%&+8N3i66xw}dcfdklGjp3z3 zZDEI%=r~^PvRc?>jp1|=#Xw0o33z3lUVF84=W06|_WA8+AlcISrzyHVqfA zjHDii$SIP_X%I+t(BJ_z5&Ysb2&Qrx1%3@zv@0*sG#OFl+#;e%+>#dA`fDMo8q+E{ z6ti!2Ra#r91Lp+u9kzw<32^(_8;B2^EEo_9u%wZ+CTB?jl zTpI^2D8mv~s!LRq1!mwuw9-u(W95|~z8cd_8E3Vyok&9FGLZJ!!j@tTC*!RacJ+8; zIwJ%s^&ejqlmkEpU3n!4xW@1@@MF5EY6ko{SDzhz{`zmO|`U;#_JN{W3zt^AB_J{C;i;L{P{Y<>*RF;>v6sJ=G_p zMb=mw37m`=SrZ&M88xydNwF`Fbz99b9FU7Cv7GEULx>#38YCh}$1DVpc!NTaSg^(L z)cISYNOd}*NStUjD(S#mUFVo-AvF;-;+0H`wYtu43A}Y3XS|Lo_sfWqHQj*=kKno$ zv}QSwGO}dd}0LtxJFJF8%_>fKt!9Y2OKy{;vRJ1WE9F;>%fJAVvS>Ma3Ezk%6iO!lOZYVNe51b zrL4^koFXDm))og&MyIS=2Tn$)tl&-uQiiFl=N&j1sg)*%O>3}IRCI&dA zC7m6JlkIMd8Qa!9CJ*@W;!|lYiNVX+6G1O4&CzZd2(vmma6uUjv$7pX84-=&#&zV6`Ot!VoFC91w!7(nU&(L5obJPV}>7R^{@dCO#S`!vgGArM~ zkc^aBeI2;4h?ZFc9XMS?%&bBOP6o}aVR)2}#Kpy?i^!QZO12P@vr9Zb%m`v3%Na!E zEY?C9L9=iU3)&%UsEndnh@!=CGLmK?lEx*G6&(EwzKd8d@=6d%la)03Wkk)wkr)&x z4X{|nSU48L3q(}S)@7pc%g7qnr3|S{h^)o@rJ!&(F;DqgMm|Dov6ksV&n-mQVy%!1 zRtr%!UMZq%a`o9-Ic21cH>Awbo$`>OHP+n}^xG|wAvbG+qn~sU%CRQNEdBnw9yV>nAr zR|v_)a1@q7sJWOoQ23-3yxw+WbY83<6=a3?h=Kop-&vfTuy}NVy%;5ItyVs z6j(!ezYNt`2-USzB6dnFgzI=6h}O|Y#(8_Gjr}9ovX-Ur354q?)^M)Hfok;2^&0O- zgzh90$R`fESP0*tLZOiMSVssihLejj3t_w%E+7_PLHbw==WGOmlQ_oubIUHef>&PQ zP$IiKraARRivBtWPKNfZ=?+{((#>i${zZ(>y2(K(<9yaU2Tq3itXmy88Sb+dI&gB8 zXf1KzA|mW(Eps>3BW{DIsfGJri4|A`ckqqeSU9C_1G>Q@Sh*lUPd5AoMAsEAj#k?2^VhpwvDwQRVXBJ9j`z+lZINN8*ci?Q7 z1t*qc<=HL^PA$i9w#!l|aKhiQeU@PkLfdB<<-qYRH;fpJ^H_oMe7=Qo9>Xa@V%7u) z&UQm^uq8%kB@2JY!U>lclKUa31j8+c3yB>y>pBMxUBg8^-GP&$wq`kSQq4xA!9 z3~L_FWydO!+iupa4xF6dt%VMpF6Z_o4qQm$mN{?{iCf{o8Devb>;|uw>_2_@gSX^f z2cbNxZ$03^1>`jRpaW+~+*$|Do|-o}a3MK0Kjy$iG;w~&deVV37IAs>aJUSW^zuca&UUm>h|hJFNpic2rcoZJSmjyZ68Q2KB0JCL?}^`Qe7k#r~AP4sR{ z7&q08(%4*4Lyy$b5Drh^d4%aUByN%e7m~ONiR0s68kz7k2ca}Fv_sZ1LWDsHPj}#? zkqOUo;G~fW-{ioB!1q=V-()$z=b95c?V7x9#8m12QB~{-#>oYfecH+ zy$+lrcRvp}aE8Q*(IFVLcSR35=%lw4e%FBu2`?yoMEL)*brN~ZK_~<2;rAW5fY=2M zf9SwTlNvtZ!0EywhCg-S0uuLm3I73*Q1;B4S%DJdbceDSrE=(X9?b`?k?S2TtiGEY}hTE+BEs95{It zJiNkz)4Pkjs~ossKqBvTAj1;(fCCqixCb3LU7RxwuXW%861TyDvn1{@2TtBx3WlF_ zAn_0Yx67LyI6MZxaa$ZXrI*0fI&gRtfYa@C;KCC3yaR{F0XW@@92XSYj~4WaAn|$tujH5m7m&F39k{T> zedxeNdb7!&q>hvJNp?X6GY&v*0KKG~O#>ElPW)u&T8V@_lLW)fhRkp+ax7b)i@3;ni!#H2FFkd!hxSyuQu~e;=M|r9+8| z;WL%h34N$6JAWtzXFS}H?R{URPN9PwpmC2@_9&|pIUT(Ucn|W&byfy-?VL4ebZ2eQ z?9NGp{yaB@cW30bZ52M$tALJpVV%EDE$h%aP1esAeT}0dHSR}hDip~>0X$I|R{dQbiTN~ipR%{Bi={^U@FBw+o{r0Q*JzQfBF^j5+K zoNc-OOzPG2!26lhTey-a+SSG39}|mco(Z9997teA-=z9`P)C35&hz@-8nfq&zr@?i zrA)ohMfbjg|1n|%?;?JaIwX-0{yU`8U=iAgvdye0J4>`J(!W@> zcRQt9>&*&!X5#oF#Vl(!nxa0X!B7wv@)-?y%Zfi3LUhzit;@;v9g9{gf4?7z$=2$M zi&d`e7t0m%^Dah1l4~^colWf;tZ7xPqAa+@txWal%7SMh)B^}5m4$kk7pwMchc)1@ zT^vUVGnQVpW7gubrjn(~4r1kE)j`fitP>*L%mGKEnK3xj-RuLHL|`mmS>gYWA;l8( zkqHvWf7nQ0Y@ASOB!isEd3Yq#?ndV@BF-Mo<0c`@J{(P0;GrL{@)Dnbin|7 z&Z~BqzuKbOq-DVw4f+s+0fS5yfH)3^z|m_h91$+`3pjn%&nxCFCcLA;b2E!ttz29{kXY+V>9kZlm#XkxVKbt%-1$!f&Zr{hJz?Jrp|gVHXoUMF+`-m?1PNQU@>Ai zs|VY6A+^)w7y@374@7T)h>n7gY0ClpnllrekB-3Y0}cbOaW>|Udxlmt>{FEaItFAV zri>mJ|Gn{W&dRIG;_R-x6=5~bld9_R^| z*Ho-S(PdMOCK|gZN{og8SfPA=9F6FO>SyAs1m!=ZmUL)`*I?t#t1vsoNWy&?`ysWM zHgIYnpPcF7R*~s0I_;$6Q|}Ku3BZ1+Nff{daFptg z&U7?Kai)ig%zK>aXkF++Vj(@4NFrTS<}*b_L(M9pdlLDPPH7w;4h}W%Kmt8#_5Jl_ zcysYJK0#0-mjd=D+adiSNW~sq^dEz^&j05za&qt;qXNk!*fdCQ)a&B855#}(62I+q zn2tuJZcGCL``nH+D!TwU3g843xwX>+;&-b82A4Ha`o*djXaeRRF)a(sWglEj9pLWJ z$Wnhwy<>h|WHRo9V-QBlVM#m+KByBqLM!TT4mY!A=zpZhXd02IG!gy_;OHD(7rf(T z)19($Do#W4ym%d4;v&P1rY^8hMEl>v^IBcj-%xD=T;nz;Nk71 zu$2$%YQ8J};fbox6~BAF8t2x|_`}1^9FRsP!;--=1l?+f%2>g_lSClBMSI{Jy-;8C*@7b72R z1gr9>qvPrjqhtp?>R$(rL`wpzuDvjv{=2WcP|V@$E);S2`U^ww|08$$>HQbz5%sLv z0f*V%IJM)Tg2T-*g}7Mt3jcUaU6-t~xPZ{ar8)1)aJBG~tovB+;72@6(MYU!Z5Pc!uqDuC38>*Wbwt zw;iXa0&|O_la&Tff>QYX^`7n6sYB$RUek8#+wtA#d<)~Eth18#J-pjR5X|vGE>pRA zUNOzGYJwU_IupD>S%6bk?9K$WSE4Q3tqJO@NoPpc{h?88exlkfaT#)tE01R^Q5}=w zM`z*T_5>W*RL~6kvzJuRJgqoFc6&ul>vDkCfj52uPXgCt z_@J~>$UqWTVhJ;jtwv869+UUXjga_i^vXuX_%`ARWm7B1;_pV;TB612Hr`t{?e~y2 z;lpEUcyHPGuO&X@M%i7^?W@s!ucPb!XJiqvIPDNMHXdu`uG0eze;C zcdEl4AgeJzP9~=I!m6X8Yr0a1fw7%N>2Z(SJYN~NonaglwN=k(XHJy6&5!pQP5a+6 zD}rC_XGQJQ%1-g-tjOvLzj6;>ELOf`GzBnX$-2DIPQ6`@5F?Hiq^bqQ@n)X&bK<{) zX&P2sr*Iap;hiY^5;%f^Z}bO>>mN#0<6KFS#LXU8)yw0~6zLvzT2%*OVd&G;0qL0C zIg=+PlfE(TK|S>VnL2WTaNXuWF(-FSRm=%%|I{H;m_V317&q zE^UfnA*X{cGE4SC?qb!ew9=}x-xWOTap%v1R1a{I|;$~*@XPn?qo@NI^Ce@=o!;HmgkWdEw4 z(LwFt%KY)K%?xu_DJ(NbH3Z|8#5lb6gXm%U z(3{Qpq8#;>7~`jMRQ>-Z@6uVlB?!Li&`xt8c#6Q|w;i%s=no3t7-J8%8x?FW?R*n6>>7dB8;&rg@=*&7e zAuO7!B08Y}Ye}qv^2j~0!&jDP#xYL4l=yB5Y1usRwA)+KDpB&sXe+*zm{0bg^8Qks z$&brF+!&0f`8G#mI&kmn?{gJiXO=oozXB%YUHFY^VB zyVlNs?}#z%yjMlwjoQam5TiZpQVLhnx|CXimK{gSNRng)xK+4eG+&cBLp#K&-FwU4 zLhm`kJ~tun)60!@Z@fxUNr(mRsLZmsvB32b@gxf1P{qVd1YgoXZv^QBBzuG;A^7?Tugg8zn zPT>u!Z#6TrP80p=m2Efy&Us9Ji;c=tJE9}fX}~m62EWzL{N&9j+s_9~dOk71=>wWs zBIrw6(MQ^v{{;PCBz>$L9BMfX{4)|yW%F{vscd+j+Pf>40fip%$<2HNLyU%2L{kds z8=ZGTaA(2pnml!6&<)ngbQ~jreXg#By(Sk7#c@0o+leo=@!{6^nKnMs8o$!U>(~T# zl)uTw2hzv4O7Od6#o^W&j@ua&?EX3m!WSSVqZ#a>F1Dq!GT7Sy+>gA$++FQ13*mWm zlrj-gqb|Gh&1Qykf~>r&IzX5ir6a5As^<299P4;r!I0qVk`;ZC<22+$NBe_J$n2&KY)$X1!j%?GtB!p1%%U&zx;|1)}wU7Mc2TJ+k<$R7IPN%fJ zl7F$%LQJzGK95Njf%oFvGENs$nn*|U!#AQ#d>W^8`-@meL|9WdRc+PgqadMgk9Pbi zI+$im`ratqn>zAP`gK=}$5DAS#QZq#_X>y=2Jd2(@{T7Mbum!on|Zc zcPR$ef}PlN-PNos1m*1igA%*dT9>dQWxq)Vi`Tr>eW^*gHMdUT(ddo$sj*)#~s>H?HKm^YhRNtAQ=)rFP(p z;#E-N>wBqH*g1Qzmue(IOWK)bkuv7XS9>SbQOKO2Df#M{K{35ia?R&nZ>=}>Y)1cM zEm3mW+xhAcZgTmE#5VrJuSYWj7+ZYLDXg>G3RJ&Fxmu8Zlj#L&1`8CZafuSm<`-bS z3C%o%{XxbG;9J;0N^kWp0&wED9b3~|&5Z%i^;SD2LN1MENIBeF9T@}C`=}#xHj%eM z`vw>bx{|_I@9HA=3tmWww=&|O33RQ0Xn?vHp)ACCO}~L?3Z_Hu=%bHV)?n3_QG;l6;jBcX$wOOr zi3WXRnN37Wa=dB4=UYa%fm6#8CNf^{DDz4^cT>kaj0cTb+(jV<1;F#66hN!CG8^1Och zmDP-4UzgERg^I~6hj-tORhOetFaqUj3I1h{R3`Qy|+IfMXUoc5?&c1&=;@p65etJFyz_hYZr zUw4iAc~Xi_Ll@@;lqbg3PoAmX(T<+fuTw%j*xR?NPpe3-@g-xe)=t^uYaGjhx2Y@L zb-S7ScJ)}wvfa&WrLZjQTk-Pf4-TihVHdW z{oeHYW|oTIp;F!ZEb#64Z@;%4@NMxs0Q?rsgD&@{yX)KBq5kBe*4Jd;sPxI)cCbGE zPIZTyV-y^jP^OM!kVmKbkMB}PC%B)iWBDO9JMHloz-CrIZ?qCcru6Z$7wV^l)NkGH z+UMAWYITB}J;ydwt9kARpR0cv|6S>;QAO!;yElygt0CI2SF0D|&-k_-9LcPY zl62PgUUjJ3S64swUNynx{^w3M={_|tMZuCi6|A&{+^g<`+_&#!Ki#KhyO-=_+4rl% z@*jV$nOVvGyk8E#4DA-LLTmso1l$)TEjaVJ`W5%9X)gDlcd)g;SM%L}sbhP84<>7N z)Svjh`nt!}$hQ4aUEqckavoGWx!t!t%L;4MTisKhWm{^HVf?f8M{3j+uFT`fSRDO1 znTPsl&=Ksny0JNHF=u@TU>3g6ux_ooqU{0k*~2H7jPCOgTkuqBCL6p?9dPM~9TtK7 z&UNZ2`mjU&I<=7gf4xq<)_ty)O<1q~KJE;@?oj{Udi8fM_tIKcwn6PeBy%i*=(NR(K1nyF(1kTiy=Ke#(|<|$bd_<<7J>ImGJCZ;E79g-mxju={h?;~oPc=zSC z^=tp6e&upEZm(apQQhEjAK1#WH$hjP+sba*q^@umZLj}yle)}BJzkgb8>LTse8^+| zQ|ipb0GvS@i$|YQe_PPGwwXou=XpWZ=+(zv3_tp4MW|ux!p?N=gb0&Xc)i*vZ*JFd z_1FJd9gHYRB|aar?rHUEd=cdI(}<-dGv5}t(8+Av78vJbHV6N5@oe+rS;e#`z7l)l z5e!BeEDiAf1IYf=78v$q_U0CqzAI9&RUJS~uOx&FOp)D-+@C!baS>K?PD ze&-HoUP?Sv_p5y9^o>M<@rN5R8-|A-LP}%bM$Nl(Q4L$7l7j*OiB$Sa-{zd(x zFXyRdwp&q#(0+p0OAuE05E1RiXGfk_m$>nN&GYJzl)9&yGyRx9=WQy`l*DPb%JLnM|xt(+~K}Rb*Dvg|k^9Y6f3$?o3 zp(9xbyYe{{3z^yslp9%LtfMJq`Q~QU0Wj9swQUq7BbZ=ZT%W-1-KAa`XoStg(!XOZ zF;O&)7M&eyNmR5^c)qfnZx;F?nJ!=i@s?Vcrn&%VOTUO~YUf}Y_(sswRT{}A#dRum zuW6vEMZ488T}Uo|rH6Tbv)F~aSS9v!h`S-kv>Up%aW||8Ck%CGZ|_!nw{1K*5w1?k z_+H?Rd0teD`|)I)4D0a}cD?2;x$yerC`-sN8hW5|4_deqI7q7^F2m>*L8kdHsw1-M z-T+H)fE}Xx1gue5h*I~xs1DAmdm5=vBb6F}ZNdDHAyHyHrCuGH@rzBmx?b%)qA`L= z2#ht|0U=N?(eD#dAQ!9lZ6_S{65&5u8D)GMo~CP~J=<5WUeg(lh4_Hbj|EE8j}R^8 znAyg_n|0-E&`au-DepmSSx}Pmn|sth^b!V0TwNHF%6wTJoYeRNa+6CnxG*FBVre#QO3SC}@H8%mo>l8kSxBxNe){d$kugZ=QbdR1H_Hp|$QSJav5 zBvrm{3H3DRZi+IL%-(#393IM%{wf@vWOFE(>r~#3&3RS*Qwnm_@El4HrtVRvAbmH! zgp`H!`FqsTmh^BBR=-Cr!hlA_S7g&=bP%<%Nmrf;SQzNQ?2fvwpEfd>z$k3${& zOEc4`K@{VsuC|3^i*5mUf!dm+GXACMoc080osABGDVydaXBygmmm}?cS;r>3dnQP| zxTaMl?Rh1%*%hlq>0{1u6hxb?ty&!D$4(wp``se=+=%357h8DxldRWPW4mqrTUDFO zt6eW?NfYma(Cl{kmuB(w2a!G)aw1a^d`-=P2*qgXm}Z@c4!O4_*|e(*LH?Uj6hA5F z;dX=PsghM~xv$`1*GN9KE-&;P?;$HIW?9ZX5}>#7+8a^6t; z2mnT8@*55^=1h6}4R~pG0hw>AH^zYKHxWItQ_jEXD6QZvbxe*-F^4^gISHXYoG3a& zTBulFw&pEN^))oN*qk)4ONaKZ%I1 z1JC)yiK?rBzi=rY4}ML4l65?!dfi)}V1=G$gX`FH8 zze}Qw+CpJepAnDkPCA&w=eoKwN$*$g<+hXZ&BWh3GLIkaq`15^ja#D0>G(%YR)8jvITxzx_AF6$}V6u zY%7npZAq{OvD^NpcJjI55tP9Lfiq#2;k6)0x5he{=RJ-;Vteb~R6U~xZfOn4$hh3q zK%weENcrGz>Vm|ha#=IwU3F|KR$ak?N<$`!{0{Qk`mUOr_W0vC@-uLN={AI~`N9+I z*t_aAkWjzF2!SNC+YYM*_#mJ1YVt*hum(;o0yxR_&m30AdHi_!`(J7UnV91+sbw&O zI$D(n+{3^{P)Yhxb!rmljkvw-DBmW8w%q%hD7&jT%BaVwjU*r|Wur~}p*IEC>~b%>9$!Qz;?xX^KOiejE9$JPb1 zdtbfmA`kigQ+;h{jfMVcnjg2l7^9>E<@l_;sq#IH%JTN6D{ysjsYfZIQ&1KLj(c#F zEgj9L1a{vswI6!B{+QZr5alaXj9xy)H9ycCo%%BRmPX!`L4K3g4YaO!3H?=%zpO4p z%=5DfnfjjkwhNByf7A}_%zNr){9gAj^{UK6kBLzbibki>T>gH!s4x02wFmq;DrS*7 z0-j+p8}x7Wuw6vf`)YQlWOGcM(G<7*smCLT+iyY5Vw@GRiSMhyPVG(inX)D$jvQj8 zy%DE0Y=+X&M=?*n&)1c{57ewUjLTtc_y-8v3GNd0Z=+L*=%WwR;aJ{|MHTVO|NQve zZBrT&p}?esyc&H3Wy@t#|D(ysfO#;E%i$y0GZ8h|?dMs)`w3S#KAZ=`M5f> z-~ME!rhE9ZhVBQWgX0`!dmtE+eGhl2q8J*)1!E-Ce{@`(=mMVwCo!K2#YANJq}m@l zE^nR0E_1WNeguf+Fh)bakJY;~(xFsjJjlCWjNm7ftd3b9s{;}L{qAFmJhSUR!Lb8u zQoxt{1o44*w(%2nK~5|q)`E2Yq$4tt22ymj;8XS5i4iPM=$6w7G`@0Zkl!kLJg2Mo z(Vj4o_$q29BAAu9P!ui5^A?x;y&q3;nfLI6B zzEiX%??P^Q(}SHnr9PY}8^nU2slSN81fLd?SJZ^BsdWN zUr}Td?#zHAicE-0qsVsgh$7>h00o>8LhhMmXXNo?%11VgQa}1!&5iX&ps=C=XA%Ze zd%-r`$9R@`TD_{W6WUN*PRA@=+wFTp=WsNMN}_Iqi;{mHTX6d6a?04)0jJS7A->J8 zPYlMXbfx522s-M5;FZ91Izw2bCmE=0Zqa(+iIc;p)fpYIHg6Ve=cwgr53BeUz&+E;O+FzEm%BpIy(6 ze5pRB-m<=#DLr-XCIp5kq*?Wq+NbjhMj_UK_oLET-k0(B6XI_>if{EoA#2!cUtt(D zj;%lcl{&_iPC9z=>nr-4o#NiJ3_&z+Z$yyKs59OAI`;e-wQmZITrvM8veRd19MDN% z^&53S!T5Cu&wzV04*??OHW~zOO`*Y9_tXh-(qUs+XoO!+WAndJ{aq-*k0TG&ZgKaB zq86Jap-4+-&wZnIxSj(z15w@PR|s+5p*rc{S3L(x% zRNv}I`$04Zj5YcLNoMtuUr7rkv4>;@FnA#J{t96PX?eerrYD=#-G3!5kj$bj6@YNz zuMkF%2B*q^+HyHNTcEcwt4IAxTA&TP?K`!P`!8$Rli#Tmg5(5|&Wdq^WkO&yKMfJV zX^OKj!O+nfxRLpOoH3v=LZ=YqTvbOm;dibR2SP*`^T4)>bA%Fs)mGxr!Thtdnx-Q_?5x_2D-y-|{5XDKFTlI5i)I=Kx56-)*w$qqomHDf zmXE$igp*W?ui24>vW8$h==j>UT~z-SSA!|3e$7v67S5sC5%_1K>Th!_%%c>dJnKoS?QrJQk*`WTw{$$S^+;;t z*oV7l#p#clSU;iWQ&rdY!N^rdSmnEK(_TWDj;u|ATWd*XH4w*Ezr*1;pZXat|@k0xlJxv!`rQ45pN#*F6N?Tz3j?ToYTi%QZcuVUqS zOCOA8DjzHTpjoYGeMW%O6(gMj(6E;9L6ccZ8;zTt_N-qUZFB~vu=eJ%B4`y_5d3P) z9&i6~?7lWy2+{5{Wh^B{yVhOsAiF6=doktDV7&6?@ zr78MRzrN8|Hl;?Z5^rgXLMR?Rb2@G)LH_hjw36w{dRkhah^{7pw~$tG(| z)v{FjMWch)YoxNbQ?=YgXh5C*2v%KBw(F3#4L}KE{q}K-q(@mtRU4z#d|IAlei9!_ z`&bR7l_w#Lt!n=+d}U2DqX<5IQuHPK4!e~#A06>5pjNE%hAIxMU6s8a-LihmxTgL{ zC%T<$*fLG)-saB_VPnvZD_ehLwVLKl454L8B!eB+v_1j|cVM3O+JK2)KL~#wW`q7n zdF-~rsi|2E|7Yb_S2UC?R~FoixKIGFJF=?6gF_3mFE<)C;;K8DvspcjCfXbcw%0Bz zr{;$t27g2~Cq}W7M*+tnXxvr*dptDPKCS*V4*wlbN$VBer!>SDi7Or7w^155!-S-y zX}B>+CYY8#{0cWNX<6-*LcnZXnl=b#qbg0y$(5in;=UGW@~gfi)*LOL zdiiLMc0Is;owa!cKHeEM;^0ST?K0}TM(Vt$9G#b*%R6s!u11sDx?HWV(1CR5Kn~Y| z%bTMt>Y>-aaWp1ZD`>|%kr#wcWa(aQ%p4LuSr593v+w>Wnz(xmqP zL+fxUBm#vl#a>@54N?hz2KkXxkTy)Dv3*`HzYp-wmLJ_;{8aWOD7!gJL0{^h$i74x zo;;u$SU(>xWg`CBLlFHHI+4h4*HC@QlCs*T6{gBT*Z89xa6WAuM5XE)of+z!pg)E#HisAGOHpQd}pcrv~8|E*4?CU>+%YziF6Y zwYsY|2m$}5F8o$wh3g7$@nTF%3YZA$xQ&buMu;{XbNUxWa^~XxY_fSCH`l1xrbRB( zWtCoVS)L1<;fa)4UX${YL?|D1gC7qdRUat7P<dc8-L%qRhz@BiAJ;@}Yu<%jA+*mGjn?_~ zO!Jx%0`^CvXZ%W>xl6)4UFl>RPT1;gKH-G>_crf$!g!&6u@lyZnN~rxGaZEB`e1dP zTSRA)Md1U@CD4Uncg^>kPUaN_&}8sc8jZr?$TDx1F!;j4(_=1`FwfdQ+g$I2!`WsC zu!1%zdJ#L_UAt_;ocpl!%vFX&QpRrg7>^!--kIf#wtlN5c^=mrlbg!>)AgQY6W)DY zr7{3svIiRp!n+FWO}@D1UU;VPmL9#It>~fU_gF=}g(w<@{0t?_w0pEn3q2O=v5?LV z_s}Rz812EeGN-53i;p)yUc`F(UdS5C68QMGLWqQ2-&3Q*B-K6n;C;KNR+>n)l!Y@{ zdM}m1F*p&})X}Zk~mflx|CGn2rCl zr1sawMj3Mem4jS)g3tPr}#IAvkm#D=N@(eO!(>wVsV!{I{NEX4=1vEVihC%ls9h6+;HkvB`ErjWR7;9*U2h zFVOrnkt67x&3wJJ+++@fJDKB{zqgjouIa61sNX@-6nCK2&KMx9>mVKp8ZqwTyU9UsyZOdN3f2t2 zkG9$P++!6f`TLr%GJtNcU=X zXn@u?Cq%lBL%=n!@Z%r(bg_ctLisFxpwpMv6Sn=j6aY=A-g18T_E8!ytfTP1L zv)ah}^oa|e-(%xa#eI5=wIeUtxHLhhD32U@VHMjjNc&=dc*$Tr;>KtOOz1FkBZ4k# zt1-4`!Ex!L6zxI)VdfFV)FJbKBOdU=VC{b{l0Xfv*R!VzwQgNLT`3sZ56)M(=R671 zQ%6_qy`8fr`OjX_uo2hmPZz>v$J)F|W1ZTWqb?{rUf-N&zP8zK!ffn`KBMeG%%c8- zBCQ=S9RAio_VrMhGXyeBM2CYQ_nm zB!Ls_3b@tP#af>r#y3{dgZQa$YzOC`!|@~1D=N?*8N?5Hm7~BI&KPW#0ESlA#c+6{ zVwjUAFvKi$!b+hz&H!-(ey@z&O#5UXldOrL>Lh*GF)r{db6Bi5+UUhFHQV%{zx^ zNJ9SbC^HiUzK!&6F^|OX5p04XwohrVAx+$`O|PYNe`FXhb1yG5vzBNMfkM?k4^ixVP{B;xM#L&6~sm@J&A}CiRusN0^$n&J$R#AnQuU}V5pI|-f)>A z-inU3lR|7>iI&Iph`z(K2zXL71&otkQM8owhw=$2l$i5CL+MRIa-z(zV$KGhUUQ&& z0@QGPN@pK%bn?j7sZgS_3wqh;zj+Ma8L{=r737ylOG(UlA;1nD(1B&nnuHC|@=|SPoAaoaPF{Q;WIIc>?$lYLgisva zh&+P5>?0orqwF&j0GYJXBwLH%#fgD@yFHK(ItMbgxRhE7&#$Dh91%~Q#6$Lc97DlQ zp!qY&y9)L1Vh#sG#A(=bp@^8_y=^3zxo9(K;hG>@Ql{kz#{_-04i?eQ$V9M08|ARAV$WxMx<*tBvjFXsR_ zqzGyFl0z$9A?vCg>7CfKi%DpzoJ|Cw&g?tZ=*E+@(t!QTKo$*>0v&L(4yJ-UO|Wd*2F{ zFi|Vif2lDSP%t%SZn83U!vsxt|2N21OhowcsTFL?L~U5XFJ(F`GyN_>@GPufB1^ek z>*T(31?zsfHnz;!m|EH=%Hq*cwKs}Cg zYqnvdp1*Ni>$ zn9iT16}VQgX_K`4l=T>bWH8pBz|o#bkWr7j*_KJ#$Yfj%Yj2i@vP~9xFQGF_nyj@= zTnFMsAk3Mp<@R->m9#Svh(>qsb1UDh1O5JlhaX$CD%(8aqv<-mb~k9~|94gFrpa2* z4(&|^B|2FQ!OebZvi95HBUQ}|4k6CcwK2&8bK5|>55P^=tdWX>N20>7jrjB?m-$m# zXyliN+~z$pPx%WTImidf8_0@ zJIX@s&FC`Mj{jYkWPY|c*(|x)V8JW2WR)uI6fkx~*WNS2ucX(rE3^(SxBqUo^Ga<= zcfnGIc_ZZA`HOb#x#J;4962yzjUSP#>C4%K3N3ryV<@Qs7ger1*}=?#d>?(ZVc{c> zZd$kj_{w0XoLTd#hVDPm!K8eZN!95=C2Rg=uuR82*|pG@IOj&^4o~fJMM)9f?od2LLwxj`O$*anOu3Fi$OpQH8rMLBMq2 za+X_po5oQIV4~aOpnG{4n=n=DJrbqO)rZm)D|l`FcANFdJr&lfth)|kR8l%|vfn*` zZt@fZW-m-Ea&JO&Xxx)EPPm&~w!Pc!=#)L)Y5lT}vxGCJ zpeGfl3Kc7pyZj&D1;dA!&zBIh;kr;n^9FT_5~uv#QZ6vxG%d3e^&#;q-d!b`gdh{N zgH4{M6}$H?V}0*!pY5(+#%C02-KcjX9@>6*h-~gNiH~tf&v=Skg zcH^NzLrEoG0-pH!VHtb*YDCL9Ba}UGJfA zy3Ml=8R@ym8H%#NHiF}qu?MfwI9#?@*?3rt^rHLFh zwC*~5E$r%YmUbN`_MvyNitDtUJuHM?l=~;(paX8)B#Oh9%>B_ESaFgFdA5gItsvSOE>&4!= zLCbQFTgE=ULCaH73F1ZZ^u!TW#4>-2z5L~<<+oZMNwG%GpX|2ZVnXpQV-FyKSZlnL zwHubP1HZ*&RK>pft>!IoKr90WG=~@xW zdU?8*O>?}>2QOr&r>2m+8Ytw56R zVk>57ece0mWIJbIhivnm?0wJ(J zOhEIi8Mwqq3ma1H^{aZY50KM+-JR@*fHpR7Jb0vOHsa}ATZT~5aXj;Q98W$T_k}8a ztCb7d()w95wZ5Lr5g=_mk_#`8kr_ziD}(V0!WQQMu91)?Sphan1Dn16{&Rf*vH6b^Xg+@$@@y>kis z{3fk0?|yE$4zOAf`$>gQ?$ zD6U(>i-3=mvjp)T*)<#&@v_9bZ|V(3osWGBFWr(GUb(+$_mPW?{%{p8J1xfy5o zk6f`NamT*TR*t-|Sgc-7z^EOE%e)P61P2Ymhl+-tUzj_k{!rmd)VN!`%2cct8yg>d zpyKex$1D0Sc(}rMc7Of8dD^3%L@_Yivl+K)ol*{<2pds-tJbIAevJE*dCGu1yf1Xz z>uOIYmbu_yUHnFMwtseZ8g=#%#nm2VvX5@ndQCjGNKBSlO4gd=o=&`bA|*=GYTzT^ z-hK2qn4AeFmA2OVO119-{H+Cl%;QYfox(Uh21fr0MybFlx8Yn$)#CaWZ`1aAgc$-W zxY}WM)|7^f%avXou5tCk+gnY`QM%3hkXX;E?Nph4ZfK5uZ zdLd4W19vC>vbyBqY;&IZ!#Wo&+AGNFDofbHJGBYH<9DDcJyb#Vh|J@Dlu2b#xnZ0p zr}C&=Dswu@q`VR2(VL@#PtGwKf=b8vr3fkzzB}4Mc>|#J;XY$GJI51Jx9TfSfh0an$s0 z6hx<>`z~aMmTCio*MgR&_*tmAEQIfR;J*^+hHZh2+MDqEhULbNH}H9mc*VGj%ACHq zbjOWdm8EpUwd_p!OHbs5M*Ke8W!|^YW!~L3G*aa6X$BE(zW-gfIU9Lqo$nn@ zz6>+ffJN-qWm@;7SI}1UV*Un}nN?{|%k-ayfu1Eo3i#cqUx;sTModZlu%@qYg?kng zo?xH+P5CLZMP=Cj9!=JIcrMGV(uNdJJIEpOn>RkIL-TW>i2mE3iZW_=PL9uN-rkZ^;87=Ud|gQ~T}qJk#?pMiKhYY` zK3b0BcSONFcmF@it~?;B>ifU<1{eZ_c^kVh!=|8uD~hrVpyEqb%< ztiODU9@+CUep3l_yoJpYUPSmCNM#|;MFvCCm*B=Q6^Ea6AbEkYBX5|Z;U^x%F0k&= zbUE-6rj?xf3tV*GT#<)) z#Vx2S&b`^qJX0robh~^+|KNxoo^NVyE;KLkxKC9>;bMyJ(mQ0vKFT-Yb{|ncrvJi~ zb#^V^l;u+B_|=B>m~LvqY|~7E_PCFxnTFn<8e}Trny2a6ILVHmPSr}+8&*y?wYUE| zHJ!+&BhF_gO8EE;lLyYspPhjz8p<|<3Ze5cgGA#1qf_;cGo4A}XPR2u)n>y?rve>q z_;qb2&*ejER;*y$#mMM1}t<$b%KX~uqtGw^?U_q_bq3~?OtcE;h znIc-3gf2;i_moZ{&X!M&D|C6IxL}w9Vuj|ELFjB#8zZ$3&4i`s!OI`|lKp*Hs|Q>=@S zFiP7y$8^^qOdG}a7MkLP@uRdGg(f%N8+1x!fZxh}3Tu4kG2e7ts2R!5%r~V8zl>yI z3$U>I*GTrl0#mM$V1rSB3kytRg=HhzfQ6v+?npLwA!dG~MrcIZG25QQ02somnQ5r7Yy=yy#B@Y>X@nN`o+*qMLPxOf zOM&G(Ld(II7rxA4bC)6FK#sO`88}wQqnm#<4NoM^?^U`oASI+;YVr!!UMrGgg_A!&vMV(;?ydi|oc0gfG0v;y*II=28th+D9Lm zHW`HD+1kKurb9fom@PX@Z}Bdyc!z1X;5U>F+lgX$4Q2CpnpR7c6=nYCHW%9;Yg}ON z!@6sx6@r${E@`N%HQ8GHF4K8~uzIi-_$iFYT>3$!SmGX2fH%Y(aVP791^W}@QKIZU z7+t+Vu#y%_3W!1sOZSG6g!P>BL zQ!y`mn8l<6P@olAtk(h4?^4b4aE!F8NhpyfUcqDLL1^KlS#176tjDZbTKPfK1VI@1 zg4X%4X|jvZ<#}!A7p8bu;kReCt6!tI!jNaRz;CdDFPt8zbv|iYF9@v%YUjT*!9Un@ z%^+iXq(Yfa|;$H37&;|4A;VTzK8Zs zh04%L0o|8S2m!cd$7?K@ySkwYp}VMrNH$icp#i*M4# zW&%w&#S!kr#jQ3(0ks=1$8`wU3JyIM5I;SEB=jZj_ z^vigIEwp_GTh?3*Qz2D4^Sg-K={K23^t*qxY!uxg2VZIj>)aWHbE31bx1=^U%Lvk1%xj{QPaveHmH>t@Kggp z6=%D8lP^8z0Q!x9I9}h>Bm%$H@};MdM&-GNv<5u5{=Zhwm!5Fo{YrRNo*io?Hnp>o z#k1?J#7?-bT7>5tV#UGs=pvr6Sn(&%215C~_GX;;gdl{av(s(FOF~JyR^C?3brA~F zSXxJMoF@-`$w&T{vQBJYM=??uo~B*uC{E$kuBa!*)eOzeU2t)bU3Ph0wFwF0C0^K+ zs=d%fyv=)fq*Al-FLqC5Lz2XJ;kK16O%ij%CF>pb(;#cjCD=LLgqiI{&(u=*ST06( zuuO(Qdr?QNOS0J0C@0t2cN~_mLajmc*-E)cYrH8F-dWP6mCcK}4mxVkXcl@lf??Sr;}f*q*IN4jkl^#ey+qJ@rQ2N}y z=1ca=RGi5iLeD;7O&+2ou(aV~XQ8wM%N;KIdiq07wb)eQvb$(2hl?>h-$^_2k~o=v zBQnkpw4LzH4zoTqe9H#ob7p3#*`7_Iz3^P5bS9|=S~aYLFm-mjTC$F9a-*3aj;AE z!mvbkVI*2XM|NhE_`dVifzE8kXfaaSsb?Qhyj}nL7jJFPc8?a*jN`G2eHneCVT{;Q zSk#_njuCsbZ(}>p!UQk*I5A9q zuN^Ej&;=8Hy$|P-wYc%(lY;!KJ6`2W=jwcL9qqK6wKSS}4%Ii*vyU>!WPYMA2e=5sB-#HrksL#dAFWD|>me7$E?4-ehqsZ#)O0<}wdvoGOm; zt3rT=o1vduCzDC~zfY|U3@GcR6-*Uh6O1qdtV~1KZ_E=*Ul1Z=*;li0 ziW3scF3%Fvgl}W*r#fH7vR<>rG`|VRauNQ>bmf$OgvD>#ktVSl1{)g3lyMEg!OQbDqnma=499O5pG zceVYL?P|N&4{kbVz-F@@99~m8mtva{#}2(E#>#h46Seq*yRN>=FL1Ug2A&z;7Q2Pj zw6qgFhplTOyhHFW;6T*A`5aXIOdK2iw)jHSzjU~cdgkbJODts_Y*mOmpRQ+CZGm-C zr#SZe+hUj?w_?8Uh+&?ZE1Dbh0}dLr^moK2yf6nvDG<}uIGUVr#kJVg%F3O(;M@$Z z=Jz;OTp-38tH32!C9tyvVzl2a1peTMt*FYzc(DL4bO^o${0yFj&JmvxVq3DwbHo^- zAeOD4BQExQ9gDvU8!$RTfEn+KFAIOPWLw`A!#Z98pH>tcLMgFu$+nClY}KJAIH*~b zCtrF2zpsXMuRGscSJ}!j?y&4FGiaW3#h$z;VY$$?30MLRnkTjrcC^su&J%a=Ue)K& z+YJ`Dnovw_`q;z-9}@d$tZ#j0S|78NxoFHLzRSDo`J&me$0w@_vn~+5bfUEHXQ@hL zPc0Cq841%;gj?iPEtpjX)cl zV@Dcc7fwEUk-HV2kDU4}6IJ%hQn6E9A*I&UZ|9I|uB-1Dddp|*94zxG7Xb?$I;f?b zcE^y}i;n51w!wu;8AgaSOKoHO=w6b_3YUq&MyOBa1)&4mwhWV&anbDbGI73;)SQi8 zF8cEw*qh5mixAtK6)#6y4{FX1Ef8TbrA)Efikbj2&4a#=Cz3!O?Pq<-551vXGUcxA1N=7Q0dm@tuVH#+P>h4}svp zzA|~W85^=vjP*pr()0DN2w}@siV4PvP!tzK2lo9+G1BiP$QS$N|5+Poy*(3uaMIMD zL!w_1WYDV_>s*Afzhg5tyGVQmw!B0<8>Sz2Kd*-3Uf_x20t)PXh;MOsgjWl4Z;*gW z!4AE=T>-}h7Nnu7QjkUx+=;?dI?*B+qIDa;J4UkstHdF~>cl#oShllRMvv za`sWGe%}2HSRR5N`nrIt01$Y-;8$<~apgi_?^WfU3-Se7&+klgwtKahDV=-(|4?%l zxJHbX4mslOXXtA2&gN|38Zojx+Dr!r4J?O;dHz z%tD@wU}ruM$HMD2NcQ_sw0QQ8yu*g030~q7Sl)+_O#+;(ii?EX;cW6|v9s^1P|#UI zf^8k{P1$=H*Ww!y?8s*HG6~FQix}zKAG3s6=mOSZ+T#Q{8NqsO(L17f1VU6O$!>9y zU@H=$Z973_i?|R}27M&HC(Mmxw?7io{2}E+y(wbXcniY~i8nK&Cjp)HFA*cUOb)ld z+*g4SDjVid<@lz-6zV5nt+RUAa&b1|F_gFE!5oS^EZA1a`AG)=Gc(_tZ7UJmG$X|4 z0km=ouiHO83)?5MojMN!r7&-L?l*38TA3&F{8((&4qbZTdsgdaRxvM;T=pl4`AG`^ z+<7dwd4AW_&0Qw(n=b+;W!22Yx8L-#%`6kyh>s!F3y4&ofQ40=H)9`*(Vj&9lZpK1 zG^>dn{a9?{Nu&pY3}=;@ajTf%NsI-7UN$GQ-dn{JkW1(`Q5BYjv-oY|qiqswCxrk^ zE6HZtmnI^GmNLcWfyx%V0z^HWuiDvti$~ZJXFl$O&h+w~1Z-6M(9sy9hv2 z53-}<{=xU*Y`}IgB%Zig3^Obax6~HF6zdO!t8fMXe6DZMv^0NPensbkH23N9AWj`I zBNaRvg`! zxYo>-?sLgc+6bVN0_RE1r4{Tc|HPY#*MT%X4Q2y7#K^cM4uF+{dSw+1zWyZc@VDlC zAX;gVZDvJ$!G4JoNyusWL2TX*F(Hp~>S40htT?(3K2m~hZ<$aW6#W7k<4WW@p;4}1 zqM6+8XRVQ4^ZQcK7nTRxf-6fRoRx)Ti7Sq-N!(YMpV+N|CVCh!uG7p4wWWk(E=ie9 z$JM-sgsMzMzrD&Zu82b znTer5j5H*$-kKO7%nM_~G_gk>DV3rt)kT!vSuhLkHr)+F#m~!()(f21h==?L+fAeq z4|;W3aezuZlttQHrgGxj73P9xU$Jhsvtr$hqdr?M=7n!nL=-GLT9oK&8SUuJ*|WREgh5Wc zh$lMcvKZTt?)FMpK$V4K)$6;&C;hwu^aoyMI-gFj-{})voM*IPgG$9V(Q}Y^?i4&1 zVYwN~`HdKPs=ohWT=5}b>eq;}g==Z+%LbQ<;p~S}F^J}I37E$vG|b~JS(wLeF$;ab zh}~jO>OL#)b)QM-K3#1)E$ql{aSorvp87<5#^*!x9foeQk`{&uh9tJ{6HJTxnc1aJ z#DQ%Sk(eh0j(8N)9}a6N3l?Z(IX4~gLLN=rRI=nMZi_H=6J0HA+^6Ce!QaBd_F!$5 zVrIkkh?hcKkzSsgdxA##H25MSob926<6nHp%yRaMTf2XaFia);k|D%2$_Ia6AdX;< zVz%LoBbY;u_=AWK#qo^u?=3SMvQPZgr6e6|;yz^A*-RJ3yx`Fs!{(!4H z@?=XNZssm;%ks^3B;|9=#-6hyvHqWnkwID5d|k2A+aDOq-`pCzaq&mqe{QhqRN2DM z#Z4(gGwQ_IA9+`wvPX`3f1CFeWEZfw*t=S@*7bkMPOUS-Bal`(v&8#}kr{PYgZhlp z`J8%0{L=H4jJiIHx7&H>e^h+K_^KUC`|hYH^3ueNIy95&A7*_To7uG3yX({pt@aD? zHSbN>-h&HhE4>-i$2cM(g4bzD<;Cd1AoMIfNP z`K##4`wT}253?2j1dv|=vg|Tu$@uQOEQZkc>}9c=j8VBH4Z(H>v3ZDoC>Yu z6|ququeO*9`~D1SK36f#H&w5*a$gg zfYd&}+ld!`gOr(^QgG-_j}xVU*zmi!N-$zyt~wh$^!ZbK-=`-65y*^oEu(>3`=>a` z*cFj8k^7VzVk_P!1EI!c(QaaL)~GCoTVg7erSQL(g~ip1qZ&xBsTD1}XAkU3k%%5a z&d2VEZ4G==yze7OO{o~+b>ib*x+%m9mnNT>4F2=##QlPfMDlUxn=a}t=_D(`?T&rY z0~D|DQWO!A1u2HUDT4G@f~y3U=qg1trpiXRN~1ixfj4IjUvQNM8!3XSySJP4n`bWv z=NX`zZj^eMs_7`=7nEh`_VSezua@@xeliYP$D za7nTl?t0u|1(FnC_y9jPNYcylDq6>zTiMdk1)|64o7zKQ;j&a})Dy~DvJ0}5WXSTo z!@?CQ!SDor3{s?3;a(s>y&qY-k{O{p!qfv&n5OJ52#2fEqe|sQcdo=ewS{dZ$Blht z8fWYEURO3ll~%b_JaWg6RryK5T326bmt<)A$Q`Y|xnvW3F!8J`M-y1?U!L^*7Zuvd z7SgN)X&quy4_FFZ^0}`qQ2WwgE&fGG;Pr%=9RD?szpk81!M6Z zsQ7!#Z1PAchhR!lS~kFx%xnyUy{HD5=KlbLrROMVV30c5eSN_QWEMV9%Rbm(E=;wMNuga4as zn02(Iu;ACFS0n;+b9XD)2k%L#n5lPZ%~rfFrSq-X`PZe)sP!aSjxQjvvyk+X4ss*}#me`sN$d$UF7Ut(lnZAV1 z_plU@^v_z$lPG*9g5AiKa&*!SXbVPDWAyP4`e1XzY}uFedOm<*pbbIoXgx-N<;sOj0V2) zzad9BkXK1B{S~=6<-CHKS4;i>Is4`svhOVD*r|st1v4NV3&!ixV0L<~bf_VIs3RV; zn62xiul^d}lFeWLck#{HxDC>5X$ItS4*Qy+e;E3ZXY|}hna4(HJ!x4bt zLvQXXZ!Hc3kxcnNgS_~cP`W0N#nCV1LQ zb>^8|vY*W>mOj?Cz?tb#GcrX&zYnCh<$Rq>q1c&2C=#xHAgv>e62hP?2;&nZZ1_-` z7C0LTC|e2TLFM}q{0CF{f?3*T>2z3QL@Hk?S`WqHT3R0}=dMRt@)l{bP6zy!P|h?D z`w?(N2W33IMLN=Ce2qoVpz0-i7f)W$0Br_YmU5anOCy9`D{zW2Yl1Li+L6f|g`%e5b?~t04 zQryoD%Jb|FDe140d5|9fezHTFc8?*5*1=HbPAU0*h9FvK)%^uBvn@NNxk>{EEu8{E zhnl}lY8`Q3<&a1Kalc3aS+z~-%6`$L_V*ZZN~YyQN~Yz1myDCIf0WFFZ2hBTTC#_e zOv?u()BJx*1`z)r$>4PIp>(GCKS`!gS7AF}g-MMhQ`op$D7CXy*wDHgNk*rTV%M2M z9G5yJqZ81T_@2((BYjC`5ur4c;A;6!6qNTXgz1T^hi@oD~Vm_wDNw|wcig&TX~&nngBY> z>6`#Q0DR;S=5)HS^m!UMAOK9cZhR&c#}Ee=7v58!xIb>^oOkC7&h)qc{_$!1_XixD z9hSCw5Uykmz0=;xW`8b)w0&rN)H1<-AHhz3F74Inh@jKX%2pha!u~&eTs|VL*YShw zd@MaGMg70VZ7_-6W+g?>s#Pcu2!f^0Kq^S7={ti<;4Fw7Mj3x~o^ z;m~gq4t*h<(_ct$8>{_5w3C(Pd?{Jt9u5;?Aqo)7?k^=34WP=53uD6 zw!ZoQv9$^>Jyg&f-79++%UT32E{FqUZ6Al&izg zg6bdg1WX7!@QpO`e-X?4R+{jz%w7Ign*6`$%{_&!f+Z)VNB)})?)O<3!FhWgw+Wt*+@X;kgTl_Cc;&siur`dt*i_?<3uHHobe^QHJcTY=q8`K-- zwr)S5BYS9WB3R!aq#GhQtfY>N`l1Qc7qL}GC7F%0YQmDK%!kIXYtn2t-M1I3e`>!X8R&nq3xtP;&^@fqnV)okTI!lF%_m5%=} znE6%G?>dY_&-Fa@jRR+%pmR>z5|WL)ULRVXMBfQ7*}t!iw0~cHg^fOsRS)ruOMAsB zuj(~dnLM#vGhUFMcQanX5ON5+`y+mpqK&EU7`v=3v}M0a2}10MZ)+KM`mN(QI~HzopZH@bNe7%vEW!(L$v14Q$Xg z97#9=+Gp3Ko}NZClDK?>=2t5{F0`z~4MwbvqiyR7qin0N=|2knX;pY~NIs79ha#;Z zJwJjisFT`z*<(0haADesIw?{xmZ5yG^kMb&5+0;Qzyh-$OPR&?3<$t)8K60uj1uk93RX9YnGs!*mR9BFjVUjnwbaBAK zmO{3*>$gFjk;Kt@Rle-Ju4{E2I$y)?r=>hgmjC@`gd_WuBLf*-H zwnLL33%2n?;1${z248HZ@T$BK$(aZ*Rx1Tx7>DbmG4U{FEg5Kf3ba)@5g{V~XtR z>bVx}A{mU}5R&c7keg~lyUP7}o!sLf*U>?4Nh5M5f&Y3j$bH{U{ukevfCd7uJrphj zZh-bmPx;gP2oMJr?djg~aNb-^*>|#MU-BNZkAPIDG?YC<_GcfJztpiy8u4$@zRQ${ z^5F#hzX%L^T#hsl|4sthynga#JMI(6oRkw)p;tj0WJwR%n4{Qdls)X}_FTn)XY3JhSw? z8`mC>43v_6c)cfA%7gXmGFNKB)3ZTYGF}9OaG((mYKJZ}6}M%|a}<5y)_%O52NyLKU9 z0&F>Q>ioEo!BXHHJA$ny??mgVF8u-u?cq5f*usmG=pdLf@?V&tof;=^;+r{HaHbfR z*f9$K%soMr=YUe^@(gXmtMb?UaDqMthWE@8`dkF9&>}nZ>DexQes}dL2w7_nYj5Ix zN8}T{(H`FUlhB8#1$}4_e|yQL&(|naK#4uP{b#PvS14emHz)aT&(O|Jkej+@KUg}y z{PHAG<2FQFsv2sf2XaLMmTE zDt_BD>b$_S)^(Qrhl_A}Gwb}09FsxW*N?|t#q`e-L*|qx)py*RS-)Z5=qkgo6`Y0J zp{J)GPJ}a!`_samX`d&CEG%aqydytmJV&kyt!=dWcjUDOuj4H!C?_NF_d+?%I322x z2D6tgHrbUIJ}uVL=F7PT;fGCZ{c<@>ySNBXmk8k-HH4yFO(n1`ubo~adl-ywLGmzXVV{gu zXNO=kAycJW1)=`A?l&A3f|!^22Zc^bM4_Mihj zQp6_jm7_9H%Z2sZNCl7nMFoo@xgC0X`WJsuL2Ifr?Mqz+f8HxU<^vA~)n!ma&Z^h7 zmcCDJ<>Esm9NJh&+L%`%H@yc6jU=7Y?fPf(8@!*+T~>P=QKp$R zDL-ZZ=I0old{=0`-Pn83Ft~dLa}k_;Y;~3q09Sh*q3rx(7l8r`l2?LgCr;o|;yb!TmlfIU_yWAsM){bR=ixJs%nKt*^`%?1T zu(SV?-w?ijkG*hOp4>w!@y5U( zZHUg`z0QdRKkE{}9=j;_HckSS1XSe8i}L4u1I;m)LXSm89UgHe^P|mL0l=mCc(V-27Xtv#wacvnt`rVfC~ROLzEI8qv(2GAN5${Dg9)B7q{q zkXU-LJc;7y7ExM0ob}x>^x^P;#qM9qH9r^SMc$L3e;VUm+77aN(^Xl=Kb3|~^85$5 zrU1O~sT@5O^F;rDmnTv9?Ws!8oAAT;WVJm!JC_TpLX{8r!ydi^yI#0-h83Re#{-lKJz>)KVY7mtiP7j_`ll@ui`6?BS~v zP5}*^%l>-If7A6Ysd#LqoNa5OtmUiO)80x`p3^3HE7%Po*`s3cexWkThlu?G#-dX> zn`>2Xt+xnB{s?qrf%2_{uB`Tz*JZbrqo|z{n_sopK?`Zsej(oq6$y^ID>gk+Uo)rr24%wr|1p<}BnnqQYpt1ya3-gn4pyQJ;sHdC z@4PHCq03Ueq7E?8tXEXBS=sWxNO)M3dY*rWd4wymp54%s5Ao)nSl2p$rH3mPA0mAg zuZ;%djqLX;GuZfWPt8GL+)y7&b6cW2pAN}V@qrjk(p zG;)0uFE+ZFvVz8q%7d7|lkF`nx4M8_XmjOx1JxsWnkZh^f7LP-2cQKllyfpgc7-e6 zDc@Uir@B~^B!K6&R64nM6&6A19CKf-qO}sp^Ru-xZIm}$o9jt5o^a+)`iMIKEgKqn zFCOok&^&iWN97!EMEk_5K2jTzp!~-x==0oKW*U5QOc*670CzIQO!FVQ5z2R&SfR&`_F=0xWn+dBw#}j#eF9R+2uB60d&GDK8p3 zp=i7Tt@}A8M!*pN(Q`_oK`BA@B|3b5LIZsLASIKZ%rdi-7laNI*_JG2QX@d{N&J$~ zx(rr66Fh+-K6^=N#S6z?Wj9_{k{W^F|HNx1d$ z27Gp9v=Smg0(3Q}sIY!}D@cDcAE^b6QJxWmYvb62vC3rO;&|=%u}UMin-8#_b$|M0q@U{u42|?Hd>E?EOH#@-94N zAjSe0vE)d?4-m9Zb*`77HJhP4!h71`;X@rUU1lmj^1`7}EO53G82A0?S~kS{(M^Lm z!wD0*2zxx8rKw8>!tbP|A6tT8X?Wb*fcK z4OCCPt4#H*4snCq6u1>%Y0_Spt8_DX>9EdD^dp;M<&}HrMad25h6T!ZjZ&)arCeK} zL^MjVHl%3H7AhvekpsF9>XXtJE8T=cIqaRqO0vh69Bc))u-1H-!;T{?EYE=>JS9hX zJBQ^mrI$3C(s4s{Bz^2ve$XnQWg`3A10jGp}HW39RSvYq@L`hxsz`eIPJg>ODI&Wa*Ka?B-(OSiC`ARqB9r~}MJD?k zaORr&?VsZJXAZbh2b|`B+d*HHb{oEX0fQww+qYEdX;jf??GSKXYngIO@G5~Wm2hRc z-ZFWG5~0Un+0N;joW4Q{b}v`4WU{@zuzAKe48R2+D&Lq2kpdsjSVeP!y)c`V zmm0-Z>3L{BZ&u29^&W7(4qQX)5ms_W_GjPaD^1ydK2oBjdq7q@&=n?bRD#&V-EuI? zDp3~b)C=vr+S`fYW2I~Jdw86IIH_3)`9L=J;;S4SeyprA`lH_b4Ux=mE9MvXK(Y)r z>I#6aZP==Gfmr*>-g=I z$10R8VMZsLKb#cxF2{P-Ns{B-bk#mluC$6R0+x$@gzs|S5&lxdKX`<{Xb_97Py&Uy zgS1{1N^4$>vfWH~u`PrcXMFS4@rA3SSiu1$gKx`D98jY8!R+<{WhNi28!J}CzV%BI$L^d zkv(?MDTwYlZT2Z;4>~p!3g@$WeQABFlu`rjufgk6U<~bS$rqK0yh1=F3v|NmZMSi` zk)*ZqCq)&E=K%VOtOdcV}Z*`DjzlNNt7%XMjIY9+u zh@1E%TYUxF1ur3uazQalIQaLvc13BL@gjJu9M@Djjx}D{xHsl+_%5T4;sSEFF2lZm z+`1p^;X`gNI68t;w<>#ht*d||Fu8aY)`hDtW@!EXt^CIK84B`FYDYnB38+yVQ5%6H zqvfDR;ZvY?3DlN?8ihY`P}>P=W!Omh7Dr6)f$F@g${yY&8xZXAYRKZ73~hL|@~)c^ z<)99O)!tA7`cXPzdA`zA`U>Tks8l3T+_*QkEc>^?v-ov?dw9fu-Z&vnHT0VhY!5ea z=Op4{a;NTf1pgDtLkDS-s*%l2D7HT&QSv!S1^iLz*Z!iHzJ&SLD3QXyGqjW%rN-5z z4EoO!>#?Hgr{&Zub9tYz$L;+jrEpkf4Kk=I3+C1Si7rUF4yQeoLcQj>`g%Vsu#aO- z*LNj;Q@jOjiP9`+OLRobqpPH+OcvKG&Dl4+YO?3}3$M1~`)a;|+L`y6(+4@COKX(l zi(X?8c^$5eD3VngROKFdfHoq}Y7OeUU6LI%%+%8%@BKhCAb;oRPP2M?D2N(G-IQbc zshD09Wd>H^qK5HLuuCp#h-XK+=0CwY~lerRNic&wJO$Gy}5*2+uuk%z%8QbFp!m2RImN_T_Ag3>+x=!2!J)GNJF>GFKkLcWrjOlmZrsdYA~<9MGx zdt*(5wF+tqJ(|Qm5!G2?pZ2Q7wQT$Iq%>3Cg|OZA4c1Fn+``zLfyv9-uG$Gd)xwAQ=sCh^ z8k!lE-c!%f9ww<6kz;`Rt?9u+vDyIjU`OoRH>zXoJD>d?tfuq5S$tD>`fWXsl>e8{+nvwsR2&&F>2mUrtB^>?ag}u=@w)|O_$_xEdw(j zY_82jo0^Fxjz&;<)6v9dpo!B0d^Vam>3qr`d^utF25W(0v%- z=`Fi2wd|W_H7Rbx-_WM6gJ=?MqCm8r-AA@Xog_Tgo1L+!QRziVpd~L=az>c?zK5rS*HIblYM2`RS6-Wit8GFYhdOcj- zBz)S7Ncgf&5o&)K?X1$t-1Rl~cD6D?ZNmFCqauEOo={n6pwwDrwZfsbpz z&v&<7#OBRUUAUSjO7F6ZaFO~`7i&#-bQ3y#gI zG|qchI_n#&j(;$krE4c+)oncAU3;gs+Ru&erk#mb?;0c?T@Wtl*{GgqT=`czyV_Z8 z8?&&hU2S~R?ca?E!$oHdDZ+I+zDcEcrFd>C>(xaK5i(O*P8T&M54uo7t&0@)CfwtF z0Q@XGTAK!W@%r$}>yOla>!5D{9kNUeg+1k$cmb8@V~U`|egPP>f$OjYJ4m$Hssb(A zQOd^~br#UFKO`*|_qFQ0p-Ym3h`C~TH9c+t;gy0s!U_X%+LC%QmBl84Q8kriCaRr{ zt7x!Y;=<-7suOWe2s=m5B=tj=YBF;CBuPCdLo#q$B*f768b;d~NQr%vtonMS)v_0{ z*jiW8h8;^*qlFwePfk`>|2;y=0|+TVhyg;1TI{Lk0OyxFWvd$2nDX~lHB$H`g$b$Z zIH5}ln~K&OOy;a3(#Zr-~OMTBk6nxB8W^Jc*s}t>y|pB(oup zs<(xtB=*8%YFpRVN!SZwgCA4<*oTj){z7;XJM@@(R~FD6T!&!Oaagb#YM91FvQwGr zKs5!b)f?kZ9E`9rv#LUy^h|+cYIVLapo@08kGfOv{Im;}KOkU$d#h!ARg3U(7q+*r z>gS6B-h_;*@Kn_*5G@MH@7o!Kuk=+P^{O70>n=x&?;H=gm7%5g!vO2iwlnE5JWF+9 zP+T9zq1v4V@y2{z2lh~Fg)xem`C>q6W z*Qv`2dubBse9)CN`eJAH`;+Pb;VZbd9-w|jHD5wqJ=J{pQ)-MyVl5knRp}w< z)KgEXZG`Tf**j0EdyRO`x`fP=`aG>Bc~W^lJ3PD-2YYt*w7SW~6Ul{9P09iZr1$e` zk_*O%LN*7#1i&199@17SfAzGMk~z~avbB`Vn_f7GF?Epows8%xbvHO!YBc4f8$xMW z>MSFMoe~3#qtgegalC8{mC8U2-Sn^ zs)wlUfI7ndSvkZ(fs!r^QPYjBY>^OD6>F8P_S0#@?3=xrt#;4@o(NQAt1UgMqX6Ze z>Sn8AHQDMsI^!#ZWfPk>6g;m-fDD=T4R!F$1FiRqI?q#HbmT~J`(9KBftk=@YJg6j zxJVhMGdSM<*)XgTgI9*>42J0pb{OtpPyo`r;f)wPI-D2`2h<^~c&jx2CDkAZXFD*r z9Ce^@xC0xKqrM=NbYSH)kgs1?6R<)zf@Dn=nRAlg2$jd31YrWQ^L>#Yt{#sFRY; zA1Eb9R3s6KRZ^ z9os+Y-emJpVhiWZ(kG~`?nRV6 z!lq166ZD8I9ij=_H$jceYaoN`3DppB)gSfuNSi%vR}g1y9B1{kT|!*Z^+s@6o;Ipz zu5nzxr|k#CW&Pd=uE^7N3UOusX^49YzTG`-#}R417YPs3p0+O$hjx088P3ag7;)Cd zab_=D1rcm45384LFWk((uFkzze5(iRH&N}WQfYMoWqH{aue(d{w)YvrYy%8_?C?Z& zR}7_Fz@=k~8$%;`#)BDv;k5Rwc#@jzbEyrs3aN5>TT4^gqsyA4jx{=nurZU>m*rwW zm;rGy9ey0cF|BK#pf?gahP8b|9T*1nDbz;*s8DyPp+hwGIH*r*JGSKwwQblc zy^o5tSvWH`0^!;Yc%*jz+>^Tqzhyfnm6w+aF^W#GevA2SJG?UOB^qDJ74R@ih}iaxZQ z-9vJ+I#Ir}TeIS6YM|dWy-s|Kx5Ke!7MizSjxv>fKTYjPiiSe@vKG_Tb#WJCu^|cP z#$UpHzFL5166G3tzU@=FY%u z$_ENvcnd&(Wb)DUYE180>Oj7YwtklC$-{m6*4gSwBf(JGyf?Am)LOgorrOqpRwad1 zK!gIbc5~Fxd>mUnM}6L_8dK<+_(Aq8J>LbjI5zBE^%<|~8-Ttw%%08Bch$*!oYs9V zCLb=2&@_AXX&gL9GEUhs@z0~V?C!7x0XUt=x3un*G^@L0P@9VHx!wxi}RRuhGf zqX{)rct4tXGfeWvM8iKlM$o79_&{b|0-)4r4ViW4g=_G+{vO8F)9}>26j<=sokQQP z&9&W2)!Dr8cypGv9O#{zv(?KnuZ?QXE-zOn3&!Sb*!!5r{?UwWeP5j(>)G5sW$e$> zD@-u)L74VFXh$Q|AdH|h5nmvl=^%G3?N4bztDks9N}o4=gZnK?Qk&-w0lxzXuf0hXeLC>Hwpzz*&Bb zt-)Nefg&6npIxJV9H^%j1=*G^y^DpM{c(ruhTxddQLK2a8Ym2pVu#jZz(mP#{Uwmq zu2rA8N2Mx&4O*urrMCeOv}C6xH7=?tFLe009zKQ zon5E)bm_12li$?V{=Iwrj0dKBq&)}tQ}#>2ONb*AY5iuW%sbLn#={}=iF%@8A9Bj# zZDF9p%v_0*7deliW`&0FKqEJW)MDpmT>XUkeQ@2{|QF{vg!q|j8YA<_D zgOktpVEGhcW|#M15x3Q>?cS?;yXa_?3DG%Gu6DbRPIv`a3)5bxz#LMLLRsg7Y7~_W zQ}akR{GdAcJ~mDqw3n>V$wufQpj)(ohcK-Z`i8L1ha00GZa}vS=EPyO7jI@EpR398 z5LD|0yi`0MR)f?&)5-$bn9tQcar-fJA&UROSYK9szv2S0A9oR^F>LePSg|blX z*&}L#nf^2 z0Wk_^1DV@NHQtAapvlKvq8Dzt2-f?g8U;V1<4&r(4Z^npEcUb-*n)uQ$ih;DM=?-` zlxy9T!yB8wd)JS`lultwnVF40joD-aYgJ)PJFS*_t^x$DB{7p=Q@&Tbg}xF{%f1)5 zj;}q!wWls83nbg)k1#FfX6)?uYHIJN0YsN|C{oA9lr{>D)oS44X@+(Kn_g#Q$T|nF zw$bz$tK0e+ZzZ0+%WXb;m)|@!2(vJ(Of6WMj`%^1_A`LsvKnK2m7Qp%PSotlKKMZm zNCkyLJB7Cs2i@T|*Uy-f_=256At>0+&2Yz4AK1Zh<8}nOaUF?mk_7N7E%2P3$IgAP zhO_2Bs+~e9PA6{lw0(!hZN6>n*brCc$?|?wn+Dn=gcyr8(l%huUH0s4aE9LEx#J`q3d(9sA6MnxAu0OzcAHGA7aXns*aui)>yaxN-=hKA*?;sXDyrR?h_yLE@;vCP=W8s>-8O`TsFoJzfUqzY~C3xRkNVDj=5eps@qB` zw#6F7e9ofvJ?GEbo>eDDIiPIkFwAmgK{jsU;9a4Aq=i%&CWdfR1B1vn_Ai0#_*o2V z{ee@3UFblTTcsv@v;hZM7<}UV*`X?RtDZ;Ai0;^8XwGJwQ$G%P9USC)q)xsmMA~i{ zR|eiJ53+Ru6DQeY=hd~skZ5-Oy!xbY$d~oHfbq%6@Qe%U6AgjyFR0IWr1(;q<>Dv& zSn@@T7*5FX7uCo7CL@=DhDh5FDB{41AlpS_pXlZ3cqR3sI!(BtvVlLTD|Ftd6SHKs zV1`R5|0!Ptw*0BcXI>Hf=4ZN);JE&mn0F^bj)x}K|$7UL8+f&iH z*Q$G6q(LUT%0I7v<>F^ei+p{z5Uy?$1l&c(eBTqoOe}}@4Kz}`rK}Z$P)f>^%<3&BVe&qeP{` z5fY1viabI2?9~ zB7((TdVOXVJryjz3wR4T-CBz4>0cot&NmzPK?}_m5M|`QsAv5qotHsr>FSo^5nI55 zYc5f%R!xzX4sIpd+X6C>^-61TXN%KTWqVqS$+kA7dDn<|n;nK9M!zUoV@hLP>;y%* zx3s=QZ-t4+LzcC^B$u|nRC*>%MA-rc;i*+y@poIuBDT=Z?(|AK@jx`c=sK3)P0KF4 zqFd`b;3Q0#9$orlJ25*rBol8#l@6uj?c&~+Ex!pi0^2L;xt;+L^h>;m<1GSgT}mSo zgccmoDd-Ztcb(`R5Q&Fl*NHb8@}Iw6ykiS^Bk&Tn>5BZ(c(}W(PyV5dbO2nK z8`NqoMOIeU~t}2IxkafYoWe#rF76eVtbH!-R07RTrn=RO%ZI- z5p2j`7}9z~G`zmGj|m*iyKspr28nF-`%4r)SY)aDFO?1)EXsoTOPA9#{?(y0`bqI^ z3w|r%$n>Ruhmj~Cv!-}PnjgH65jcM2aZma8XDQ`u;-AOuvFw8Fe=@GAoM9029?cxNg- z^qRO{B5V2wEpLc9HeT^=v-OHO_MSe4Dy7%Nw>EXc>C%yfBEgox82Hl3`odPl9Tewf zF6JE{pj`A=g7$+WYOz@;q*YRSF`uE>TkBk?=x)=;ln2+Bkh`*`*PnBl%NKj{g_@LS>W1D2MBpI+~@= zeA-W07!YmDd@`NhX@H+13UsU-Tx4Ihbcz_OjyX+fQ$=j&-|8q9AM`6%6Jjplv*067 z*BRf3)V~SYP5&n3&fjRvRPh|2yz5M7riy`?(k+@+s}I% z%VUZfTW#dy0$MR5cmQB$xvB0=F~@qIGflXIA4B@P@0Vu1B}720A?V?8_<()9rx!gn zLv(ITaP}gaA+Bp-WEb5^pUx1y`!v8~v-*>-U)Hy}?7(nQj&9J9r`)OyGV?w{UPF3* zZ|XBs+!XvED0tpYqh^YJu?G75+q9mqUq+~Si@vjjSN#44p!IG#I8zJ?8Ha|>P+C); zSt80%KUZsdbe6cWNlxKdfW^mMqg|eOS?Z04t)%gH=J(21l(x1>@l)cI*lIn!{Oa@q z2qL5Cc8#OhDwH+D)ml4%XT54qOO5YS)1S**XkS>*MIjo`HudzlphAteVCpZ3x$_xH zBcp|e2#YM>3b5Oow+QRc*x$X`g2Bo&Z@@6%ZQ6S48QWYxwBS8`wAEI+(n?!trGw}# zcvb@n4XVq0fJ&`rP`%E22Gwh<=eQtkmGulF-nX9PT4*b*XK=sFdIn>>S=3^HcS>1A zzuVh-0oCtVK%ja~!*jYe6VI1l`KV$4kg22t=ZJ((E;OIwxkkHCgb3%UK(EuLtY^LA zX4Q2xzXL6tBibA7TqL!Exh*%H0B|kF?fg@Bc=h&I>{`Jef!^=^)162^ALu>epN_9L z71RZKzwu8mNBWgO?|%PurG24RpaywA_s?*)*9wAzycPcGE~JMBdCUFNJxC7=@|O9h zI~`g6xv7w;HG&NK)Jvt7{yHnv{TaS^TdsXIyz67cGoyvfJwY5N>6jP z(F!)S+?45`UWD|rmYZ((PmgP>6>M#}si%K>5z;GKZo0`oJ+7Tru)F0Ao4WdE6d|Ls z<)+U5>2cVp_^#+!XpBGsR~a#*`vq%!Bwl|;ckN?6qr2W_J)_%muhe1C?NhC1bo-mF zXLS4S)^nUqyU}`fs)bsT@lut6Zrr8eIbFNfdWI2;x1M2$_!PRz#v0Z$+DOORc`MD1 z=lm;ocoirMK4tnqY%k@xH*n*aPMDvL41uAHFOSf6Pk^H5SKQ%^tF2!j0R%QgY2%%L zAq`aWn^hr<)GyXEB*QTVy&_144?^hAkPN;v-yj(d8R+Sd%y-uF!w}6u>jk3Wy`MS| z3>>fX;aQgqpCB=w)3r+L8Is{oH|gn+%x8F3P08$}HAf?&c^E9gFgS97$O?WK&-V9A zw=NL9@nxSS=q?j@M8z+*wUa`M#C(|#5XIR-JCE&32<2`9X2=%TgA|GD+py4ZX|?v# zdo7FO$~(}RBJtFX9kmJQ>tOSAEq=VcDMJa=cD7ZDYw*6Kg$-Uw3k|HFR`9vj*B6Pq zVhyCNwODgASkrMmru4T(qOa|LhAN7o`<94%yD>?+*>=Tg>EkccB^*%Vuos7#G)SWf z>Y|RcXNl-&h!+asVeTyiaj{gt1S7w$09fgcUMl__?MtbGZ{9XQm&elTrQ)Xhbm;P{ z)kRN-9O56&e_8hoRv4avf&J=qmq? z?_RK;p?A+&&(OOO)-!tKGuAWo?rG~84TWp?OguKNzlu2N zXB9xFc+g4*(XZlJHFfacKIwlTo^7T7hG(4tl>No$nePcKfQx}U{L;1KRtC7_kdj^i zTs~nvLlQ%*3IIRIN=GMp)OtoIdf0-2dHGwzbGnvm!9ZH~SQr+20?rwgbo9w8?0v_U28o9XNmO;oF7=vAlhv{7iNHJz7Yb5^d?x^ z@SLvkvVfirQRjdl)fDyJ7I6^ioyM~+#eP;gDrm6ez;9Y|9lvSG@tn?<{CQR*AIDzSKUzng6(TYi>+>bb3Q8;%X~BK*9KV7p*9d&crC7A1H;YA2 z|I~adAwh)dA=qe6~!Aecn|yfGk3=oV3Fsqy|vbIMSH zDMQ)&A}xejQpywP()(~2ne2F1CvDa|({)Pg=hf3ZowS1VAn!E)^!#hJf{Y;VB>(hs zq-OI{e4B zb<&v+#Il|k>Q4WFUj>dlFLU+OzQ;3<1rw(C)P@%I)Q(3g#XK&2-`ZB3q4d;vOo%V< zNqbj`_Ut%S#YQ^mw^gEVto~wmUas$?Ts{S*HI1`DYk3#CZ?$MYsFCG3N{p^e!#HSv3LtQDixr)p`=S}|EX@qHaWyRCRg3OW{r-nKI_tw_Gx+arQo&bm?~tAh zv^(o=;Jpjbw0!kq>6r&Ju=bc)toM{jR9z~%fYmFdB1Zi;B(PC9!jGUnR;>DffPK2! zOrq?KA~mK6O$;@-MTJZv6z8T6sG^3W!QAO4(SnU)T-Xg}+F|g#sD_d^iKOtkz!!&| zTA!mlmpfiV!#4?s8c|CVH;J3uA(^w+nc0;_cFZLdo2e?BTsV_%ShVf>Dj<{A_6JhS zL`rz3S$4KrcC}Hq^WKEb(3gEJP{ZK5YE7cKo5jtxV^p~r+H#EQHj7+!NDbwDB!v2C4GsH9 zxW%6yqjXIxqx8EF%MuSIZV~YTr!yeeEuxEFBg9$((M3W$9+Y_jHF2$Hk&YT?#N$Jf z@u+c&NQ?;tMQ5X(o3PHZX;xTdIKwSWa6YGCs<6vLN4AI*$J4-JaiBNl4s~AwaG=Vh zt)fduFzHm49_XA&-vP81t>}rx*MN;`Mr;+`ZUi;lSY&216>Qe}_+YMY#JU?;Ek=f! zjJN>G`hhES_cKF7K&V-R<71JiF7;5x$0FD9DBzfhAuTNtpWc56RoOhW>SJ+xz-j38 zsgFfQI!x?zkg5fs4PtNDaeIDiSNIPRw&MB#*X>cLl-U7Ww}hFrUuO~!2ezP~Bg#c` z+k4Hl-%-K#qjf~B%fxk#14u1L$zLH`<{BHwo`X&f2=dUWa&(QGJQTJKBzN&p>Nb%Q zY|3)PHqp~oOUt*3+~ln~V*c18cAbC#rGpYa1T&CDkaKlL+!T(RuLq1tOyYKtlm9gc z;1i;^L=ro7G^EXVoAKctOyPj1qRqlPD{pn-1LB(4pw<`U>&PngV&IcoI3_m5KI4w0-rbCmLSh?rjU0Eg}ANep`jU?U-j zLBPgs$JF_D!l^##dIt+pInM40qEB~-+b#Koej>WI1Ezdnj52HQc9gO{5yQjp1cvp= zd=DxH2t)6-e@NX*ZVknZ^-RJT*a+G@yA0h2WN2&GntEV z3TB(N>|FiA+$S6ZMxT#ZIMC!H<5MwN9eac-KSc=r@H!qsGGb? zbmCsNOC%(CzJtk7l;6+Fg$}GkZ{hc9>$m5M8^mln_5x*6~t-z+T3v zBn6&|D>&pLgR|=MzY}Q66{RP>%M^%{YhQ@g>hZ%g_Y090x*9U$zV`D`I`Rbu;6$LS zm_)&qVw__EiseHP+f>7<;UH$NUfm>GTq$zY{KND|rAWzm5OCO1k%Y}0H#u7<1IC6s zH;p@lve*?e0E)tmI|4A4!h^G<3O!w4i%Z&Zgof<}zHWzcPo?PJ5?O4?Ivt_lDh#eB zhK1+@MeUUV$%iSsO7y%P$#x*-lNQRO_@4O7(IeTtaiAhL*)OZStwJOX0RztgmP6hb zz$_Ef?l5hw5}ECh9M@Lq;aLk;yLDuEEN+}F|D%3D-63-96T=<1f(M{Vy3{FD>!UdT z;PZy-)rA9l9HIsLga}WAtOl;`@BMQq0vXuP_TV9^*eAM0p_XHrtu<~qKE8VlKID~y z6uMtHg3&*!;-99Z{qQ^U7(EU|^bH3IX!I)w(Z_IR#Dj8|@a$=;tos%)yrIT2uRT%z zLS=t1!`EaeT1^|9_cUN{M*8y$I6d0^CD^)vydn5`GF$2}M?uqtnY_oQz59E{9pdcd zeI5Y20DOish6ZWX06L2OVu+StzZ=x)J36sn#I`i0_Ua)DKLE2g8#Gz;oWm^g@k2E2 zfQV+c(Ewm2DoNL>AM1Pk=MZf@0DZmd5FI%n($o=k-wiwm3}tzY=MI zJ2|B)1u1_VqNHk(psxRpa;jl_YY)-zYLTw)2Tj!&mMRX>K~A6Y9i6WhF+ruE@eg|Z zI(sL&?Q0RIE;~enzJ?{jKv9K(V)EB0Gw~pmeGM1(Zot;y*vulE(nF_z5*`0qq=-b& z#v2%hz>{DT5${aVPJBnn-v}}6B~Zp`9ltg0!Xyl^u}ue97aDgT@_A4Wh0%u}P?a&2 zH7AM(G0bKAd)onzK4=41C}25nDe5&lzxx~EXx$Akv1as;y6-_~z@+lTHzFbNCP4G} zP}2!I2npAs54cQ@wl#7z`k+Y4o{bumVAuY0H!I%#cs>VLfzOy39D*ub_&OW49h>Pa z=6M^>-`J|vo0RSPrh&3k2Zcy$BFDvFZj!BhQAL?{$Bbo_+#_x z&)<_Ke=H}n<(R+l$tHjPd`$-&^JVeG{4rmQ+XGE3N4uGL$_|O7#52IJx7(w^#obZ% zJld^^X5#YRGlzA}EOaprXj5VXFIQ`(?Q;Eq#w*W4tBEt2E%E7kCEWGCK>bY{Qn)_>9`1sJ3}&0fXEFQpp=Ovp4T76%+2E!v+raFD zKFm&Uj#SF)MD z%5V?Zu_*U-I>Jczb`XI6)ok-_Gj;i1ATX>gdP;*b-;a{qzWx?TfNdT_OpD7RD)XS{ zu0@Sj&pnOjtCYFu7H#bzqvtx!_B~$x*VO%$GJl8q{gwGk;9;&u{14n(%IrO8Dzk6< z+ECEHeGh{PKSuSTGJ+vpmp#RXa7qCp^I}J>eHMCsSrqi!tGRpnB z&LrBsfl1PbmX(0@A6k5QTZ4N2dAkERn&U0Xhqv73cysm8qMG5Y(B$o||AIGXGraXQ zdD{m(hPoQOJ@&uwHU#kgycMBLbG+?D9hOU=HpiQ%hqe=C{oAdZ$(#492HO6z-A=>6 zG*!+h_m3#YF2Pto-dg`JytQkFw-$fF+lxNDeTe6)bTU6xd$Aebj_Pucau@#>ycIRW z8=1V_pWqJti2lWV6dCRf4}w`giIl=H z;9)nkVJwL2sj++NuXDGVbO$%kef4P1PInpdS>H^j`zkw92Rb;P?arAm>)Pmw$U-rh zVXwQb-DJjUum;b&Vfbs068_!H`4=YSHIQU=GbZmURm5`AYt681bdxCenlBru`^#>& z!eq)qSRUoP2`kQ(sZp2@!4khN|(J_6$fq-_Sx5 zXN`Mm-I|b#i{;>&yaPB)kV~GQ%+nm{9`YrnpA-Vo4h*6C)CbcjJhT5b@EaO_Qluq5 zsJCi_+bS0e9P3q%fkwLTX(W61Ns;lyjbO)uz@9NnB=#844qGvb?w$qo1p z@a!mimMEH4?mEDp!PJw}Ik3zBC-KkP&<|p181$!G9_*c{r8%c=5Zk~;cYV6$!M=}L ztwH}MJfAn+b?7$^xj+JOy|nkgF$Vo!sFBl-9MBsWIIh-dbI_mef9_oYtaAw>qZZ@f!T{7xH%(K%OY;dEIW4Dk6O%P;C~y>KAH_?;n?8@ z@<+j>e`nqaSk8Z|f$@fc-(*yG=5$8c<88`ll>0TE(MY#!U{oI*!`b=JH5x_;sx}>- zSmA#!uALAIG>s!#_G$kA;nBB?pX&Vv~q4cI)qey(0u z*TP|=p* zy0z`N$gUbOvE4Z_p42*6I?N4XcoOWczLs=a4F?Z1FH zYT*Goe?b(4rJ~q{9o&}EePBNgyD0K<+8b@^t&im>wsiMVl-?V;xv<@E2&(1CcU!=C zaD!Q_5_ytct{T476QrdBUk`=_sl4a@%03G9itNA(RTx(VhI3zrs*ADAMQeFVq%10Qy2p5s*Q+yEP2|%!|tK$6y6=M;> z5W#pwE5f@61lE9oSoj<+TvLG=mM(@bAcAucm)VND>#*|l#+P)ZPB`ovkaq&2;ryTU zf2?$a(5wB9w~^Yc-@)Q(Iuz@Xvr9;~{El8Idw!@9CT#FKJiWC`UmAYLB%ONUPBz5R zte@~#en)4NZEE6$y93h%Gr9rw8eCuP$5?(x-!DzS!)7eyPW}_)^PMQj#^5JicmF5#{#ULYYtL+;{Hl~Q2Gh~llM`QO%5FRBdBf^j$IedM8@IMlaBz# z5RPfgOyRU zYYFGnSNY44+nn-Oa;avNKLP1hPallutCZiBrX@ho{>nd<@j++vK<)ok`R|34u2TLx zd=WuZhfx75fA#N1PrI+z0B&Yum0!u{J9 zK9WQQubToGYYN~;M5U*WE?{=f}|Z zBItTK+`?FtD-XKLEyQhSx?30@`V9(jR~)sM4hG3C_z1NcEE9tZki5Qs?+^!v{Z)+&Hxsc;s@g*c0s$Mh{uXw$cNJ(`y7mKQyoN48CP z=5itXXjn`6%Eg<{9eQ=b{n}m% z3zf<0mP$$wh2Yof|IsuyRK_}%0to(w_eHd9?9)AZjYZet?vwb10X$0w7IfMh7)XDH z%9ggh6x>So!CzJ@nWg^zIZbONg*v{Hmba2Ig|C2TZl)LYW)f(oD0iM&2k&6QAlDn4 z6?$XmvTVXY{;drRELv$W;6%A5Fn*2E3;7q|0)D1jMP1HabU`!s9g)cbyxSD2)hL{o z@dXWUEgivuSm~Vrce%C9QMW@=TSH14_EP9Ia-8}d7`sMBgHQK0vJ3ZakGKAoRh4w` z8aXKG!#zAYJzjk2`9a0JooWWy=AmgNYJCA6B_HC1RjGoDR}coQ?|x1*!eoWI;By+- zMox(WczsAYKGJB;SdDLUnCm&*$x-)V4A!d_AhTG~Q-zEs1t-0YPnLg4$s( zU5St)JR4e6!x1NTh~eXhgMqfv5#9&s>_IBAygx&_`+q^f?c|{3*k55hFfOcuwDc_{ z@Xh&V?O%6;wVR#ZO-NtZN_oz9s(!%XJv5`8oTgs;1to;bv=p6{m-~D3;rGKa2>&Wq znS~7)&n<$XVj+L~OQSe=o5=h8+q1*gn-7=ZBA2RHru0XY?c$8V*yp?g`-Ge!ipHAkK?tbsR>eDm zc?@;Z%@Oj&@DpIrSCD_~p|S{>q25)g3$oxP6!aBj9}va{Q@`U6ZgtUbxcUh*Q=VNs z3s{Sx2_V{ou2YY;#!y-nkNsn+zJJVi65nnZV8i|~Sn;Zi2{bBFCdOO^gOB|9z?4PG zq+x@9LEUYfUeC|<>mI|iRoBC)%M!w3KOw*oIr;Q8$^cieqICj&EQGTV0$;nuR`SZO zI+~3#-e)>OUt@~r?xyT0IV{Z*q(0$=qLl-V6)Epm9y!~)KjL>Nj1vkLZ_>rjF~87> zDCtN%3PtnB;WlwNO&rU2QIe3UdFXw(=Bul=9c`i42im&oFwt%eWh^{fH!!G^#dr`?XKjjnw4e8Po^=kLg8ayizoH@CULMsIGo>^A|A z!H#ez0hV?96Vz*(2M+bC_kBTGb~!@rvxhd=WvY799y(>0qw`ptoA9ewBTg2~Il;gp- z5dmI;<~i6w&Q;&qMWb+jP~HA19qcFvC6A)uFZS9mE zL&goh$YwP^LD~18JrouT*bkw}u@H{~^bLgh`Kg=Yee_cr6)Ojd0lsv>Br{!SKBMEY zaz+EZf@ZsW7fpqW?$0|TB%74Icntyqg_#DNMr z9*+SWs+OF90sOrR%1V#}vx!|b zcLMG;SgO}QrQ-?U(^Ww!oiO^nP(cNq;9Eaafm0sH$DlqP9@=#7xkLG+Ts}fn<$>C^ zQdjQ43UYUnPj)$-fZa9*K)RMuo~|izI2Gf>_1Zv!ySyFfqs>Hc`)FQD`C@j2Mww}A(9-w1sI%#&bVErqpeSXNvFfLb7|!Ssi%3NKPj zFjPq2USh&>K)-VkU=?#iUk09i0{XD1SbT{K(SoSvXAu$pPh@jaZ_sS^@)19Z=(f7O zjCAW*VK2MWO(y`|1yFh{K(9cz3A}Eo-m{Bxuampg&Yx1u^)e%dRYbvINS>~+Z>Inr zyJ+{H!=Z%rJ88`IGR6`0X&v#X(jQE)xm<>SW(<9F!}YRS-Bm%;l4Pnw$A#mjd}lD@ zdJi=80ItV((h)=s99w~#9rV+{$9P!H7|*+(QFvE*P~406A!xlqJq{ABPxXJYN>=2a{#BEx0v8f>Ylp-Oyb+LU?+L z=vZlWPnfQlPKYc*J*&`~RYUz|FCUkaNRt&!VfdJrb$kmml!@h3mj*|@2_C=M!%O9L zgnYdV>h%=0fOFnbpIy|v=F0u&Rr#R}`L;2x+^3KqH&)SpUL92Y@{T(Cd3C?yLbz&i zd?f8|=cZS7C`7l)1ltZOyA}2!cn6)h74BjanwV~DMuQ1KZ==pe-gz?MGxNI1Ki_Xc zaXs>*AjtJtXE=}NnF96@lZQfhPd{Ou!L!$ik2A=2!Ji=WWH~LrO(x`KZ#TwS57Lgc z%EVW65Q{-y=k4C#!_fbT#{Z!wre*ksIV0Zv2^3ju1h{9p*u&!X%sUi?5g3_=a%c#i&vS*{fS{&@SsG_dk1sFQK8+Ch_VmpFff z1%TbR%dF(jwy}2F5y_DHZZQS#E{t-X7MK_u;+?{-{oY$`-nu?EZ_p={o(|*Kvz+qM zWkTpGy=;5;J=?v=>q>bRj?`Aed2GXkdR_m3;RWZd*Ye?v<&RZzwPNuz_ zhTka*3Zqy@cfgzZ6ww;J9OZ>OxwDm6OC=3P>Kf&W^QkP%6Wame^ zS#PAp&xCG4zGVw* zMZXI5>2fN_mV>h2X8rZE7(H3?J`#NkFqTAh$(s`00yu6hAa>_&rO>bd^ zN(bYeJpJUIboPGPR{gDvf**j}`ePX-J|L5mT7j&sTqN4iMto&=fb(^yKIMyppz9!b z*bAP%j(I@Fwq!9iygI1-0T~$T!TDA87JuGMl@G}DLIVK93rL%f@=WF=6r5{5`{tJ* z&7YlFNOLhwAx5uO0`bjeC`#?kPypE%Cyg72tZiHB2ebojb{@?LeW zxV(j?{SE6arXbvZlj))Rbpj*Yk8Q>`i!fAwvY8U{WQGMZJWu9?C4%7^j4FJdtJ`L( z$dh?_W7#kbg=K#VT@LANapQoC;{!uDBpTuLz6=4OZeInH+4&Klou8lQtAZYD4-JdwBZ%jN*L|8u=pF)+3e38-n0G z%j(uZWn^5S622%FBN)Wf_ahqgFjhXikZ3bnlgu}&NQh; zQ(Zyt;(%mwnVE6(Q1DT=s6m zSSg_xIv+Gh-Cjl~2Ew7Aw9&|~eF`JTeF|0>5_)l693#d^H65ekbnaRHqvA-EW2Kq^ zmN~rXgiFT~p0!=kSi0N&%lnOV1t?#Wnb}PrwwORBz=Lkuq*A}(?{6Dv>!XMZ-?Nd_ z$7Dw8As~rHWi-9eLho9z;BKKrwf(m7E^n^oDPw(T~Z*&|WMU zd~+O@+WnZkF;<^=!vXeQi|(N#3kcB8l{NsKe@v#vK+>3l8%Gy;XAMWb>oe7T=$j>Q z>a!o0H{ZxQ06*;~)ER?kHXp`DqbPScH+EOEaWZY%k`c@URi9a8{n(p~qsOwV1+B%(|&oxdpef(DY|v0?&bgY~zL^YaLv3%M|R zyuFpJ!FJRY%OQqFHYN`O8(fXaMkSto*;oJx`LZ$1WMea@`>-+oe_*48jgTS!w83B_ z*JR_TgWOC}?wtRH4b_j0kqvAFS*@{qu*?X%i)rFHA$ZweMvi<;yS_x(5LgF3pjyN` za?E_@aU1Y7c6I6QyqTuuOA-2DBfYEg(Y4by(usVy=`A-=*bq4<>>1F@ytAQuVIzGw zMCK({aI>N>`5M3{QFlY%MiXx-qvQf9!cHQc)s|_wql|J3Fi*L6BaJDL>EX9?8LLmj zXwEL9N|bTzK)R*kdmaVY9*EHTh| zAKyS*hsq>2ge5S9r%+b?x|9;1kez@k`w4J;6b9`HcwU=m`4gBZg>9fZjg?hx8)Mjq-o4zvWlh3m1&n3RIw9!~-Q53*%+qVHmF> z4Jxw2Tqw*EKT7_l1~wSDuy$VJr*|P;$NPHc;~4Woqy- zv^w_24gb5$2|uy{xS+wjyM`yLBiGaJzhi>>4C-(}_%57CzX-#}TK*FPA5cl{B8>TP zIWT7p8iTD$J;L@J6k&Jae&DOY;Hn$O9X7qeJb-D~Qh2jr6ssAoiwW1srY+b=?%^=3 zdpI3EMlU~J(Pp9!9t3JKeGDsl9UInirroeeb;IRw_4#!)>=~J!)F1M|JWu=XYnE$! zcP76>&fn_qm`L)wQLgeCDH6}%o&5|pu>Aik%Mh{{g1Y&F8&h7P&&sqx2N<>xE)MY3 zXDYpWf`%QC(+*tjF~o1OS_K(4@B;YjOkNsfVe*k@@PT+FEq)du{^E6X>REJ_^V~6_ zAzxij4EfGxoRFt3AGFJ_r8MFnQp7|9M>**5v{rg}0~C$h3T>{(ntxeOi~j+9yPCoG zv>(251D|?oJ*AD1Bh^J~Y1Ihm^z5~CWQ5F0?F9b44?4Z~nzCX!)KwdD&R=VI80YnO zxSx23oSCnI|AYrMz7*dol+y}dSzjl40Bi1tzA-)iGxH)aMe&xbZ3@d5fLSojT`;zk z>qNh?1vTF9HQ1*OwXvI>`tm9RwuToKRSTzqz9up zE}rT=cm*PA*lqFz8m&zy^(MMuvTQx)U$B#%*3+=(XF&9t4zp!&RNARhOND!8Eb^Y!${^Kww&Euhx8$zjMk8u5ZmNgS}QPL|`VJWXnj z6TmEV%!}e(xe*^y#S3zH%%4y+#_A00dofl~buWBKsL_$HUq?AFVyX7q^|bXxnGhHV zywqW`>@a7Pye|9?NPI}Lq4N0!HmwY*ISLEVKXSUmOotP@8nPROMW}Dr(zH=B?>dVr zRug?pD6(rA9=lH2*c)8A=hs@$L+Dxp!Yf%t7DbmTSpL%?bD z`-(9#D|Bp$(I*Q_NEFJk`o7q?g>X(XOQ^a~juzbk0ArQJq%PtQ6M>AbB{a+>)55+1 znI<{z8$YB~F4TBpHKmP}wd$JH6f+L%Rw=7XPmGhHHZ@=kogWWxXAOx7knkExn;;*u zm6XnyfK?)O*9SChBDPtTP~}8YZm#!|_|ws8i;vm~a<#0UdJe{VTH+s%#i_$~O5 z_Wf#9K$}%{^wuD?GyQVE+B!#FRVQ7c&P@>C17ky#O}rtV2hw}6`^WdLO16={#`~9* zrqRZtr*$b~<|;ZqRgO_3R^d~JaN8ZLXfprTyicp%geUvU2c%BJtPoA0hry~=Qpz;M z6staB@XrCbZ*ifscoz=yG}YS}EcV6dhHHo&Uap%` zXUhF*_DTw!g+<^dutl+0IE>R2=e3&6;mS>N({R89c7!ktBZpGEXUPrOQ{9$+P=sJqKi;-)JI52T5cv+`UH2B# zm3L%J=uY5ebsFlX#JSjNvI4NIX1>P;`U9rX4;Ai(fMK5f{m?G}XUeH!E@U_!_Y}`V zIPoFSWu}jqhh37bAUEy;=XBXcxL;XGbLPpUK=7zv;?@xxTjc9%E|lb54xG7Z;=9z-aA~{m!P$vX;$4-86bWI{UZ9R5@Q}1iT6q zdq0pJvt9tH3e2JcgWR}jGSWSQSv7mqGXUo8vBu~TEPy4s869IG1{JjSLJTS(X(8s^U!&B8$>d%rv%>BN`4`9Y z@M(Adx`M7OlzD|Wqpz~iVLciqNBcohO()ZNM=(2y`!iq~qLOg-d1CW0@HI3LY?5^V zDHrJ%hTd8HCb+UhbYW6DEgbncPU@X72lIp@Z9NSv?y@fH-G2Dp7 z@@`u(l`WRT!^Q*LtIN5)J8lJ~EJ4VI$!e6d5v~aGlk?+lTD3%qq$zrJhP=zMTx!Yn zKS<{tpq5O7-lJ1X;GbkHr=+FuD0?lZ+@&%pp`Ff>-Q7n27w%=d3^BCAyQM`-F&X<9 z?<^{wP%^#z%vS(2t2el5|I$XSt6M7bEN#nMCP#&T1yS&%uSWkwe589{F&$YZQ(`_r zI&b{;^`9*x^ZR?0yc`qY1@F<^<(RDHET`SeA?h8_QB3qh-$Mk}ww!X_leuC7Yd^+A zufCa_j}x|c4_-za-or9ozhVkofgU^ZJxW?3b5bjpS$tvXC_;hLVMJ_w*QaXOkgGOxA(aVpMrxDIG7y@VH~D>~eWr$*z>Ut;L!p7$sZaO(1T0Se0Y|NtQSchTo&ugV2-tnIls;S|`?QCwxmym@^^niC zM7a5K;v>r_^h0>nE0@#A58jT}|?@#|-g$3^K`@t(PnJ4gY*scP%6CCVg-kn~S5a$j5*ijc;q%G!;Y`a*B38 zg$!2gyOvP$TG{np))@sB6=1(XbR0~v-cRCPe=ZNuUd6LvsUzKIVQTI%(eMSh7R>WY zX!%;~oQcu?3STF40)Ijoa<0Qi-d|lOTc}5u(!_P>u3s&tRqLQD z6C+{SCgM$FN}Sk6p0uq}i@IC%5}YFotXc^HF!z@mt4 z8O3bEhKFRpK4R!mV{Lx>;eIUw4me(n&!RLwznvCwv7SEmFY7n;IfAlHIB7cb>7QE- z07iTaM7_^q(Fs?2a@t)p7(d*BL-@dpTim2ct)afoF_eW@w_KT_VBiTOUG&d{ekXr3q__hq$ijx;p z-AB@q9s-0vV7aIk_oVT?*G+`v7q&RNu#U2JDEpY#TRgmSmYTWyPJ+7`G}hD*Lt4Y5EEBetRK}+bRbYPG^NN zqmE}GZ;tA6UCG>Q5OHj=gY6<*Ezogc=w0|uO?L6d%YHQb8K0K`I|RnfcPozr_`X89 z<7huVTXJD&OW+EnVD=sk0`Ll_W}m0!1@j`%FaANW~me1%P4xZBp|#rQM&h*`oh zJO_9+;coT%1J>QA%;!1=f4qo8K&+Q1vyCF3`2f)OkGtX#H&wg?)nFeXfX-KasIf0IiR}foM20%K*YlO3p=8 z@QECkh(1>W6I;R(_mAlWqFEW8SVW;aWoiNpU=`aPHhdj%r$i6n8jpPax?=Pt1vq!Y zwJ4&AJ7r#S6V!e-v0{E5aZxsTT)eu7LMw27;;J$}`*PRJr<@9zl(Y)6;{g0U_&<*? z78ng2;l2&;)%gB0A7^0}ONwZ51#Dm2g_Q9ru8e9C8mbSB%r-dIu}btw&yT!< z)xq7bh;lwd6Wq9nMtp`Mk1nK%pTVOGm`@u%lL_HTXcN}#de}5mn@@0hJ1~)tqvJ(3 zWt~}N%r2QSa3x6K8=lzz$OpOqGD)j`*CMU?;K^j2l}PuWptVU)8XsuY>)s_tIJTm# zG28CVD|R>^hm|i|aZO=RarpvD*)2Z|-VDWlWeT0xEenD_!t=XRD0dI0iBB$|1$*RZ zHS1m6Q7%(cd63W#h+x3gga2{pCFo&1!5e})&OCT;@r9xH!RFnMEe{VAgU2d#n2Dcb zxJMoOdAtNg#f@3geLapjoFC7JdxSfD0iF0<4$I(ifO~L#e^wmhLXVl?u_hq9*waTb zR)_$90&pI{#VQfT)|a~t8te;b#usv{x^X_`R?1|t6lJY?jrH{i_m25ArxFtbZ62Mf z#Hyf`&lZNA)4AYdG3>e%?a}jHO5BTy#)yS9d@nrudGl%FUhKeVqR4*ZLe4xoxL2n6 z;5D3H8*u0SRIl$>an7fdDx42#f``XM*DV;3dug^}SMGK5Xk-;8PmS~$coG&+U6o99 zSm}m5BixZD?kn$7+CFrQ>bZ1qAKI>TF6Hen@5YtejC56Cf1(q5a7 ztGlHm&4T+LM(mhrfw|1TAXAnPhasGbZOX!6<#!j3C|Y;f446x`2e2}C`&2Y!dk)R zd6ZQx`?PG(Ihs~2MYe@zO#^zk!AZDR zpN0IF{)hT&PBzwm0QD$XZ}BtcWIox=w$tk0ZD2F$&uN0{zx z;D!}Gr*rBZD*G03ils0`IL}@CE%xblM^`+Ey@M-3-uYtzx;eTFEqV|tJPoL73So}M zvpK>sGPsR50JIt+@7(tGtBX|Zz?tU~u|SrD@#zIij4Sa$Xc@DuC4LuvueWuyPA%;`rW`qo5(} z9m@8|?G6JyR1)&xrf>f}x(SA$fOjad2A<{FIaE-Cjfo~1(`rCw?c3z8K`^xf{M2GD z@cY}8jQ^Y_B>9=e;yI9y>g?@&I=&av^blxj0w0Hi{jOVK{@Q8ron5)}=g@*$tcBc4 zx?EWVm9^550*_W_Ileqi4oznnH zr@qI?JoX}w>=EwgjArEOhJP;|*p)2<)6i9_c<%p211%Vi3!4W2YtHGaUd3kWA;57( zE$33q_wYD6G*o8L^#Rn?lqV{QNw)AWMLC@p46iNy%J4qy#xf47`d$V)tb&?ZaB3qE zxJnEyM{tB)@+hL1AJB+U{E`WiO0$2!!eSyic?lno{{V#x;FNG{un306rE7PnuKhe< zjU*a<9NIE(HdP$QqS<*9#wxpQTsqYsmw!`VnoW5>%Dh&-8Kpl;EnzsYdoY`5hzG+Q zv%ByF(k*^|l4(g+!SCUj8N-b+MBMbYp~K_AngK(VKS|jU$@x$t_IRzLOgxWJac`6Q zvrH8+dew^eVjBexv;)S(?)J{2oS!jO{%sbG`WZd%*eqK9vrOR8R2PPITR;m;E1ft! z3iYo=K97cazE#H|78>e**{6QX0$mFl@G+8)81!xBY%lm9y@+7$lp z(sZOleFOT=rd21T$kkgGs#HAN5))Jo@HVWLXJFd}H%>gllvWEb1e`yL;EwW(qnjEHqf*PsIW^g z^>>+?_%qr7}&+-aktN zyp9>a395f3@;;~27#B&PIF***gL114e3*ns5c>&Clixm?pnaSx2 z)|~Xqom_v)K0OhC;Y$kx+~ctzc?WFH_dOMFAZpCVSG>{Gh!nJU56#Cwfi$*r+-DAG zbpB7cR3B@Ubs52_*)wR`W$X}+0F``!HLHh(MZR+r@v$T;0)nn*6`4&yANAD|uUg16L zVZc3tQ&;1_Ho{&|}dx!eanuHEtMWVbNK_c}O>k z&t7cL6>T7tA2GGcz?A)4Fl=N|sLdX2n?Z>-drHQ^X}~nprhUWz$8bFw|0A^i?1wyi zigxek_Yi2P{vPG7!=7%q`IJ>FgREL%Pwv=J^FM z!ZS&hy$8bck^NV6dJz^ZOtB=X_O#HGs7){Jp%JS6RvRR!+Q+Epr%_UXeUL-XGB;Y* zz;n^SvWf$Sjko^IC%~09!o>vIMZ#z(0ZZPrXIP!U)Vv&bPw>U3rqQ>@pzzzzwJ5pD@2`$8?kKJe>3zqBWdBS)! zBu}ku1$ z@;LA&9S?zgK7W%ETHt@nn>46JqkP7+u;-*0vSM9Pyg%`s1dz=wz{l1yA8XBop9gD} z#tll+ea)M6rG;H2Hk89rsC+n)olvF*ohCm9_o|=_->Y(EDy6lw#}po%YU!v^k7p<% zyq8%fcK06WO)dH>8_&Kl!dA2$^bD8;`RHrcetCUy^RgxT-vGmMKH1RMjXHeF(bp~Q z*A!X>YRm#00ai?3=f}HL#OKar2Abz zm>*y{hKAbr#ViE3yeaW3Slh91tv^O!$qA|R4uNl`Qf@1IqFOnXMz=!i&6!4XTiLVK zwNvSMD|=3Zw%z+CrMI@vQO8fC>eeufI%8NTZwtnJO-p@dz`pUAq4RaR*Vq#TTC7U> zq(1_T7-lfk@o;u=Dvi6wJ}`I=@~S6O?KSoV!Njxr$uu#{K04_m;H)uQhl8OoaRX}1 zp)LOGm;>vOuj9pvK^uEo;e%lO7)&eA@U|J&MIT1v<8ZUhQk!vVj8=lpmNt{ef(zmdOkT4_N$ zyW1Ap7l8L8q0clD5%wH)$y6E^VUG!%Hx(PY?u@W^XfYE{tP|AwaIl?+nW_wPf4eTZ zzu4ct62v#`ZzorTJ+Q?y|6hnEG(qHvw0BTjPNOT4c1L(BG+;=KF>%PRRkSN_Qc{%N z5!Myy`LM@M^pIHy(MQ>{R56w2M!|l;o^9=jvI>{Qoh3s6lfPKeK6{f+AU*6HWRVYT z;j)9K;I=h;hWf#qG(w=vLFA1!%eYWx@tc%<9m?!Qy2~unYYJ@__9XSqH|Z3YDMQ{O zvrG}njC+$D5@l8+y~r$sJp>ujo~kaGLZhWUS)DP3+|r(){>`j+oL{}!X1y=@)a#jC znqaq&3RDa5q390wp6!u0B&qR+%S9Noc-*L%OeZ?nqwhubA}j|ZRCm&b{gg{E30RC@ z5q|onWb;erd`>vhy5-)|Gb>DMW@qy75mMg)Fq;zwVnIUQk@zMW#oK6r9d*;iso zg=K%~jYio&@kVKQj6K|zfG#;5J+g#14ePy<&44QuL9I5Lt)naV`PV5c)?UCpr$l*~ zR>j&!1U^>`<#kSxH-sCh{c(f3v3vQEHZ*1mrp0#_)Al%f_Eq`U8~Ls6z+f3ddUmqB z$HIRk-v0mix*zyB=KS&Fn=}XpLA0YyE83{2RojY6iC$1d4Wgogr9n~b5pEGgH*KRW z=141SuqZ9k8kHk-kt67r9&_Ye+%0m1Cg~=bG}~mGEW-Qu`Xs6A`F`*BxQBaw=HKV< z`!h4Uot@mA++G_zf3iMr_qwMiv+ni(TzBOZ*4_(zBBvSP|UsD4kFBJo|POH$YwY1s^y{pEOpDiu!&kwt_$#{gUm{mBDw8 z(ibFuaQ{fB#u%kN13G;FNT;^5zGO7e&R-e4aVi1*)cqp?{W0724CpoYj|B9)tlu5b z*(*l^`ri9T0(v9c_6+FT?jH&0XIQ^Gpi@@{mmRIoOn!Lf@E`M>w0z}{tzI}L zz1zjNElUYZHSsD=Pg-3tT9?~@QT<}9qjhNlppyvFF~Wib+~svSiGL5~?3aPMZDBir~r9 z^z+AmOqRD#=7q1kwWNOd89VifI(_5%%HVU;^eMB+PQ9|9A2HtAIR3o5T};Ub$Zi}L z(Z_fXNd<>}!1d&Y(PEjd(+2om*S}T--`y@bmeb8uD}tMj)o(oTEcW5L#8>epAdDc4e`2!>REx$}j;&$w!hw~G6EZb+b`m9;QemY;e9@#kZ$V!;D zFqhSr9@CD~=P%g3U40K3;Fi3W8z8!U^*+Px#H6hVa%G;Y<{6K_|gP(fzvC|G>+sO9|qyHK_dJ}f)Z^m=4 zmB9mN=woM|!1_%7C2C({>L(uSSV-KKOgQiE3gR|KJ>Dh`*AlbpU#qwkP~Q_Sn4w>m z+*%oYb%uWB*e#63Z|ic+NL`ZOToIfzQy-hWy)w99Cig_2(r)$fAwE2A`tY>buq^n{ zOnv;=_tiEY>WTAP$dNHk-}uzB;5!_@Prmv=T*ZFDuV?C~Ca+i)9Djm-W%A9-f_I;w zpMK6r!0^S!@RybU{z5pP=c)&mktrRNtK?2`4XV#VD)>(zt)8FQJy4eilalob!OR@p zJ8d{mUft^&y`Y@8-^iw68dZ}syKYZjZQGci0S^D(pk1%*8UolCO_xbgQ30HkT@^wcegLl&iEAqMSzXI=>9XMIC+Tyh?(T;Q z9?>8G4l(x~=?6{O4<@4Cjdnv>y9Zf?~rLe-J2hjVK% zKDa$sKl18X!<};2MyF!;nS($e;#CE9|I2`SmmD{=qkj-*_@lt^AH>Uz>jpKu+SHdeK3 z94F1=T|XQ?I26%&G=N8z8J^K|kR=vTo(=O$y>GPKdPd-(jHol*H+7CT#gP*8=jxPb#6IAVoCT-{m z1ectupM1#sZ2xz;=^HOw%6kCysaKRz+1(%3&soQ1VM_AqS5%#-&zWkOF9lvw%cH$i zvPb>Zb5`nD_0yx_JTR3G8Tl#Fp&S3I&NPPxOXld~CdAZlr+zzS()V-KH&q1J%+Y6z zVTa&{bM*6g8;a`h(TP~Q&*%w>*jDjsJsX_)JN>M{`TxQf5+>F`Ce_`n%_svNU4_~9A)teNL=?4N$k z@9^RL3Ro9pT_&Bvvbp-q1OG-FD@I=y&AKP% z>T@PFozD` z(2jK#5pL5?tq4AJCRf{5)umH-h=Z%`53=6|*_J%}>p<|sGxe#n?j!5g-*FL0)?vdyEsmrTvX_)`I?+m@%ivnYYR?3iw}5T1%mUGO@ZKTXVL9^SFq z$7sL1B>2WWzJmC0N$@M>AIpQk%+s$PpG#4yY9~|0rA(R9~aL!rOQ`JM=im6DwefYD=VH?YyR_oJ;f0DKP zbJG69dGW36NM22xR$nmm$@_iJdg`KTo>6w|l?y_)7l- zLPPzY^x8mh`g!{Jqv+SBU*Bj*->Mf>tFpr?9JleLDYrx2>RW(AgB9oL>1raYGM_k4 z|1^11VC44kYwEV=?c=(@$n9g3s`KdW`9{)Z5>K|eI=4jn+yg;9| zS2blf1~<&ok2tw;yldo}wA1%lT|~3~+nwi9)r>vvJkJRX-+3N*hiV3Qo~~U||8042 zYN7tX^#4`eJ??l_bu8Tssz;5UVQ8S)e1${+2RmrZ`^hYZ6foDW>9V`{b% zlHV==_s?|IM_Bcbe-qiamGI0Ql=>AkSN$`p%2VZi`n|y?F68EJxY=dF&o5*ud@@qT z$qDw|vy8_7PZ>SztIDY0Q^SJt;Jo?znxgkYKL+2Ytl_VZY0nJWv*&eh1AlI7q`Uw3 zKh5sG%dVl!DIE9fS5^G|t@OP|0xmfG*F+y@>u>L`YgLO!Uy3+VLXejt9(x}DxH@$A zzi+W;bEvw-R z7B^)_Q)x9f_q@BFG<c>zjN6z*fA?Qh$b;AO`MQ4OU2~&F4P2}r zyDvj@C>M@5?hZ~{pr1VNe}&&3vt|8VJkPmPT^P6qx@zXP@(p})(%RdusyOYzr^tt! z?rG|}+ql20Xcx6ypf4DEC@uW)nlYh~ zKd$ZbsOR^Dy?SL|m{3#S)~J`BW{kFV7Huuok3NmX;p(ba4&E|4YpCM%|57dQZ>p6w zQmvEck5((QP3qsKxkpgcZ+rY4*2UOw`D&2z^2mGidN*>CTRUa->8>nZT`+a^cc)g&-(D8H<5K;UeK|~x^yha4 z-@24_c_+MJ9yh=|31fVx{SM>kM0is<1#*SucRCQ z+ljAU<-Ny=ubk^CAGy!kpz>BHz8|Fi5YiuxG~qwb(|erwt}RnRoJJ5ILJ%Lyzd5CE zNWCk#=5l?`xg){M$>Prc{FFQLa~pmsNBz{i<2#}B1h*b8?%al73+X}zOg_bjAAf~SRQ>fwa9mN^RtK)Z4 z0CBJG4>z!0ePM8}>JeI?Dq1;O(Jr+g6|ERvK73<`TBd?+!;am!gkxzyooc|H!*>Sb zHlFze`}{}cgI8XmpO{jY_T2nn@Cw~MoZ9@+75ePwHkTZiRFU^+=HYtv;hB%-9$vBk zlqrj@z2k;!$;`F#gyh5dZ#@4^;J=K`CnQh2>-f#D*I0^M>bjSeck$uj{?Uz3ZT{?@i8GUe zx86H(VbHT=;vf!)2}e=g;!<$WFUA zj&65l-jeC^h$l8fX1Ju6z1Z*kSDsP3sr>%W?W1`NZ&$}&zvscD8-L9p<@mi?kCWr_ zUwGz)-J8^bX_;4Mx(*B+xO?61{gac%B&8)CoRpn(Ow!_{8$mI(024yp_O>*jzU5%JPtzw&G{3+SB3eA5eyHb~JlSM6jIK=XAlU>I0 zZQ_)=Tt?+KvAdF8Cc3V5xf(DX6PS(0ecQx9A1=aDEWmuo0U1u^nC z`J(gmHqmdS0?%#}ALhKgO`@o6V*O1460d9%?@gQ`uoUxN-6pN*+q_NY`uNC+#aNF% zjA1oqgsA}fFyr@B^v!Kjh(lP3O>b?JFj{YuAKLFy@tY~{i*1s73;XZj_y7sLf1CK} zN^93PSxZmY*g(d{05wGiQ*PzJL28T!y3vdI=))ql{)cU{7%ePE8>_Gh*Q0}BjQ_|G zV*&%(ZPb`VCi;HbCIzVd%zkqIq#51GZ4$+XF>Nx0-o4r+>knkOcbhE2#J*ex z(a_qYRjoguP2w0zYm;KX%awLWoA^*mZ<8&UJGLz#*?dsZ$G1ry`X;nVA;vP=#8k_Z z+N2ImuCH6L{75RG)=zE|?GDBmGqDA8(7^&spcgZyv`Hz}XHj8nnMygFvCN|>2es?~ zH7DWEZj&<1okqbJ!nJCLV`&iH zYcYoP=sUShwqoK`Dt-?^ep;It=wJy3iqB{hKZ)GAZL$hO7(yHCu=vb2X;I6VT26sy zwMhns(SzpM^aN%U&=Z(@4n2TnxE@0oMr~f3*l1!a4q?2U`R_ZIjPE6CF$1d&dO|H@ z724;uNfT=4(<7LH2^>Og3EMBAN6^6>bQcl>XrLF1E+Pi78Y{8x5_&{!zl@;>F#oH) z)Epi3DHpbhqs|N05EB&yCz|NSwP;{H`f)2-=%9nHrS#CEHgRJ)=3_M$p>}PXEJhQ{ z(YTHV2Gj}?>(Rlm@_M2it;Iww4&6Z1E~6zkF$>V`V>_CtEvE-=X6P_dN*AMf8|y0x zwmawn4Bbh^v7wA2<6bI)bCXgL~H zOrMpwnw~*(4LyO8M~L!O6!a(+Mw4HUTj-#T#^Y_0eLuk(YLi;jo?-q+Nf^&D1P>52 z>p1|e7wF0d$*`7!P(h?F5EBvT^Kv$w0Lzs(oXy6ts!U+1%K|gX^;i|@Tv@jbR zFb|FYA%?K|LwXL2x6-rd{Dlgyro6z%1PO@@EJ72@(7_PepHKme*vta8{xfC)`o3h= ztf64cKpQ=n{uR>^OR*TM(1-r7+oS?btVRoKG0;S!frNuisI^c4x-o$UYL8GLW?~3) z(82<2MlTLwDSH0JG(!Vx&_oNhZ`!00)4wGM(fvKwj%wz=wyjNatEm7QSk}gnpu3$R z!TJs|z^W)wk46^{fyFqqlP*N9pDx6-I9-Sa)}o0GXkin^u?@9d^dP!X3(|uF^dMT8gAptU zkkAI{Ld?NZEW%1Ou?8))(8fk|uo;Iiidus61ZH4b4HqfQ!loZ60DV6(O)-pX(c&f6 zuE)s_1L-6j64|IFwM!nFScnN+gvH72QjHlY?b3!}OnrhN+q+%zF?>L~RH1obyVRrS z;C9iUq$dwyJ2oBKE|pkx7~8RI9NR-I>+Jz?lV~}d9nn3W*K4DRi`DXkb}7fSiS5#; z)?+hjliDSU4i2F|vt81jqM*s`Qii@M?GnP=tahnW%TwEB3#MncO9I`;w2SsMr}kq5 z?UG3%a%{WgpzpYLDZqy5?cznp(=MfG&7cKnoX{>cSd`N)7P?QQVrb8zV(4HLt4^X~ z*oD%Wszobf4BP>oI{_F<_q2E-fVL&uo{JXUPC{EINxCqKze} zolOPNQ$PjPdJJI<>oENsDu@O~uoNAvM%Q!fkLfss+321}tUbs4_mU`Ng@ubSj%Ap3 zZo8Ojy+KXYav}Szqh+`Vn=fQPbkIa?e!HwiH`ZezZp9F`U>sv=`$aT#J-2YEuMd#n z#RMHI>`MtYj9f-EV;t9G0>h|X-Yzz}u@w!BqYqP`=X#GBXrc!#oQpOVqvmBO(7*~b zu{xl3AW^F}T+uEKY8ji*eM@s|Z@Ot|M5n_Q@b%l8m08wjRyf(7&LB?d6P zf-%QjT#LpsdQ5F!PEVl^wT%pAB^5wz1u>yq#gM7>_jA5^iJp2ez*vy*n6wZZ9%k$; z&U96b9eS`B>(GbRYI+3SYuH~cqm5cMJ@GR8V-|Wb7q!P|Il6My=vuVDW}d!5 zSN)6mj@tKB2+eJ@Xfs{kPQ`I3$_XaS&~-8!(APyzVM{j+LB}EL(cD1;-z11*3^{6X zhTu)+zfB_bEqY)VHA3G2Ekxr7<|kGUQ83y+GZb%=fvZDGF@lw7C3T2}?lBz_L36JT z$!H+I)D9^}ZT}A0f*!3y(*Df;Xkh699o+wuNI!@jFb5-O9^4_?I}|*=L#oljTCADa zAqmWw)FD~#a@-LeG8b)JguWv?B!m&%ivGzR5=95o8(E&xA^GSzszdykGqpnk)gZF_Va`hO{fHjAze9>qdw~7WUfmIp1`@`a4vDK3k9LS>D;YdS7o%3wAq{9?6V_oH z#xa4;6YT#N=KYiO1Zp9=6ur0}EetE4?hx0<^yu0S$wM0p(RrSlH<7Tc4$1z6f?ny6 zGAyg_kVZ5&cZhD|n^Xv^uoB}~ht^wE9P2Rkuk80W8Kbv>7NYM1^1<8>*$<6R82e8- z4`2nR1#HHcg!5NgidCP|LiBw`417jSn`jy8f9sIN82OwQqVFGMh{iV7H?iE&A*;~D zTC~x|qV4R5?rtjfH;l1f`7=ZKxw`(RZkGrNXaDV@{hbUB+AjH6e#myIM(42YvK4d2 zZ5vIXr1UcuCY?~@-6ZQU*jwJcQhTY7H)sI;P^MJ2S1^#?>H^UDA&I4CMRY``Ls0fzd6%{`k_e5nY7L`*`^xYek z7&y$_xrR6V;DhW3q7`r-4p@X>?Yo>yz{eukEc5FoV zKiU5Wj{B0aME}zD z{6tUw5@0My_*s!Y6qWU8;8v_c2eqFWGhzKN9Dv?2ozj5i`*cbZ)?gbpr*=w~E6G*9 zZ>N-?v45x3V)_A{62sC1J0&-X2eA+86ay_R36RhZ?vxrVAKNJ{YI$6zq$Vf1axnwT zF&~Y?J7q2E<2$7u?FpT-RhiK#>0^>yg%c?N>nD*PYDaX6g-&LtI2fATDcLDWu9_?g zM)y&j67Z97rglmg?V~#-j%C^GxL1;^d0MCV&~bN49mc13N&?-UPVwwb0W&(K6pfj* z6m4u$>rbM>`y{#2un6P1ol=edQ^+54&*&60HOVz}MrS~_s6+uR*q4mX?UX`v&ZmXg zazUp=)pB8{xc5tP`Q}q|OfRM)7)Nb?wqM#Q1=xI9r&MCY<(<-qE!d1@Uh>zHTy>%p_2@c~9>R32TSN??7PyhFB~g#f==V{;LG(mfr+Cr2t5a5C`aSH2zH-JA6ZaAu zX=J#B9>erNrz}Ek84baP<>ZIv{dE1oRPZ5!6wQY_CGU_VmuGdSlw%;WhG-^H{RkPO z_82WYlrFUxD;&bqbPjx(KTL-1O%#MaEW`9y7<;s^86y}+{ZGWeVM(qSuENA?%mQ@3 z-YJ=5>B%rXKQ<}gswWX)gS(_qE#o4z4(XC=Y{FV}r*}yU z#xXUE{SNDrT;+r=S&v2r6-66uOkgYKPV5RuoJ7M!4m^r3nnb~vnA{}>8dJKY1TFMq zdKN816GP~k+9l0cb36r3rGOJyMlGjHqG;j}`cLYTw4>>v*k!febrlZs%&1zl1;jTTBnPxS}p8Kp%Rs21_xFm1tuP zS{HYTg^3%efScoQ?2=-%0;RNwgmEh^Le0;Zs||Ou<8hoq*U%EQAL$bJbXru+fjIOm z86MC6&r@*^)9gjY6o)o2WHZR`RT_p4I%vPvC7Ck`+IlLC&FI5`xtX9kfdcvaHO1&| z?2;IIF(rorQO7!TqmB94f<D*XU(=GX^JxLd%CqzrohvnFeRcJp&#nF7aTbk7JGjzT3*>1_bgq~Z+ z(4h}Y&_NS(*LO=j1{z4TkqEs=uoTlWEJOzvp;k+aF#}C><66wcdNgn=da(ul7{e+| zxs?1+M;qPfU_NRaXxOF9e~Uzg+TkS*#0HD#y^N@RnW)ExO#}~?COcwY&Ix9WBTcC7 z?MSwl3Sa>a?dwPwt^FO*uAm@vqoFxspouJw>rzz+b&KJ)(l82t>90_4A)~V%n zjPXsc^jv_1hlGQLXuL)X(84Ng#`S7DhEc0$ zOwq)YKakPuj_6qQ1{q`CW=HZ-dz0g_>Mdpq`Wjg8C!aq%Qi67gP`(Y*9vNNEsFQnpnXiY{YVGMhm0ZghOR& z{p!P4i4$H6%O*GN{EzyoOtqj546clHuuyBBuUR34zqwH_WkqGp(fxd-&f++`eac#rs&V`h&e(05di6jf3X`q4bP zhsSB?35+X`>5;JPT{f~rAq8_y?$WSdW z>=Dl@rWY1sPDziHV(97~9;0D9I;dUKBjxv#@y$KrevpFv6ome=9^v2cT^43y&RsoX zpbvehmG{UN%)>w%2|tOHKQh*V9`T}qX9sZ-1od{Io9?B_z1*-7F|_A3tsDy2-DVh5R0)IeORluV*^IEQ6aUyjhwk*V?RTL?l@hJ zb+`p>jG(@Y7(oMFk5VwEqlww54Nw6L=p+hBxN(u%0n0FLkecIAf-c9rAIRu23dSt- z{YcNC_A|2s4b+3Q6bsPz3;AFSYq3+uxp2SYSjEs+99PiWSqQ18qqsuha}KM z?QvR!Zq!nCh=B(B&_q*hM@wzrYlqlsJ34ARYELj^d+(4!H1^pc)ymWz62ZKEcSy#Q z1fRAaJ3Ps$7ArAr{~c0;J`AIS4r*yTWNnE3uo*)K?~v4|SRS`S=Ax$WkYY5j3~j8( z^22wC>uH7vGtt4hSTvsf10=j8d}v_}=1ia`)cT1#BgAhc-52 z+T2eOQSm)}VzJ+SrH=Hludp4vAtq4q*h{FA&_h0a`{PG@Ey} zV(G~{qzcVEqVq*|L@y3uDdwEYcC>IS=FZt6Em(>%wH{MyDHwIse@8*sg!yRXQx2NA z7@Gqm%1LOak+IqV>(Ih2Y6pzq5IX2NonYF)cFe_QG*CNZhm>Fr`q7!o@fbgoAu~ltH*Gp{2Ow`Wdcr>sC{piOKu2S3Q z?U0b#j`diCTd^2hUSj_HNW@tYM%|*un1|ZAbQSur0xh(#9viU%n^8BY(8~+~y0HxN z(ZnLOa4|MxIl8adA#LbfNqL(B>aLYB-b9VC0zwb-zdd0)r+RXd~>tFQr!?q|DNkJ_IY$_JT-Sp7$OC_ut|n4o!;ny#kn&{;za zpu3uuy~d3KW~25fEkXkqqlM)d$11fxNY`Q!wqV8+^h7=RJW0hcgeDpxDu&uq%>OnL zVG`-DQ<10XdUUU2tgz^Lf)1S*nSO83L$wr)by$Vg27(N$H!_51zeG%IX1zsFDqp21 zG3|9?2g@-f%#gl8#n66(`M;QixtXy=2b<9dGf&aNtT&1Jx2X{Na4XvAp!?4h^cG|O zF2RZpHle$b3ZaeZZ`0-PajHdU3;Ut_BPxVt9|fpU0|jj5REs_=LhoM~W32v|G5a&Y zgKpG6VeGIBOEH9%XxMbA@~>1JEzEd_d~VdAiB}U5c&o=5uujY zA!%FaxnGF2EzJKW5+$tgjp>y}bf@&n5ZajaKdj%YR}3t}5_Ip~D}MCu-z#|^Qo#dz zr4`+2?Dr98wnKY)xP)1ASg$mpg>7i#5E|op#oCG!dL^`$>g!MVSQiW!2uQZ_byIzT6bAGR+ zf5QHAd!+z#&ZGgTo!2XC10?M8d&S03VXq|6m`}@Xrr*WAQiwIhvsXhO4_IN z2xegjbJ0cvV_1UD;$Er2oEzy{jAIi4S=B3HG;8U~zj5#OGA%)46Z@g>PxJ_uy-rVHdILT2 zIqUz-kYdw2v>46Li7_nyqE}phXTNxWmXPor7L!^m#Rjyo2@A)@B!(eOZKkE;Vq%~^ zKE~58RA53(!k9o?t)Cd`A*qZ=b=po2biMd)%&#}H;?Gv=X#g%RezHZ>-TSdoEc zn1d!7xE4*^f)+-w0UdNu`;v-dCMGZkwWDKFfNu0+9+skkl~{~5Xrc8b^WP@X$cmwC zGFCetL(RWpJ*K1kIBJS{xCjj_!(ueihikD6>(RumSc5HSVGP5V@-;(x0u@3#CnoCy zB?39?4qxdR2cKlrK0FyAV#9vh>81KYKr-2V-Y&I7`5}L2>P&AZO3M{{(K5T4{EJc z95d02IarPbXrULIuoQ=|6159r0jVL8b^&97er!e)qZq;=9Ky`+=!rrqh{k-TABKt; zGPS&bA^M)_i=}8`H98o^A+%Augz2d)W_qGk9AJKKV_sfLS78q3VcBJ5faO?=7H-7` zY(X1i*o-M{Ok32k1>NXiJ`Q0Kx-VzQun;S-9BVKZAW=uc=cNFw!WOK@7{)QBow2=w z0?@pYE=5lXL!y@XLta(r;CgJihMq&?W==F6Y{w$3!Nq9YLa<`pZS({NY!Y!24yJBr z2R}W4vD+yC^X{Mr&|St5MA?oxSd0beLob?GiWXL)gEg2y3$?qLWtfZ2=)-7~`Cmg~ zh!r-bb#ee^q5JNbKK^x#(XVk?@Mz>G@9-l6NzgN0atJ}kj%EWuuHepqOL>mcfEgAN4NAfH+L=*iO z!y44q(e-K>Gy3VN^~3_!<6PzQ!~hyE&{LTAB0YsBhS6P1ff&Ll=4{|17ia!kBy*T7)fFjOI(6xzMucDb!!4LRg1&ShR_r!rWKrDU8+8L%Wy-uaY0u<6N}rnXby$ zIRT;l2K(<)*Z(jr8K7&?hw(Sb7@fBWI&5hmdeQw3Lx6ej)3t-N6sypO>rwlNh9oEe z=c0|pn6Z^hx-ze}$y7+TWNLclE8iKwrn0DCGLODMX{oinY7-H67PJo2=EhipK$5PB`rHjyq z^=N!Y7o&wO%I}HlpBVzo#U?b+vyBR29-0`!Flue|AUdf1!g4zmz#I(Zkf`dQOR)v3 z(7l~5#Uc!2IofDqD>k4@*dH@7)=5;O)6Lksl3f`)XgL=45p0;di~W*#pAs5q4A4-t z2bllWBytBC3$)NdcY^tw%nMpD4;!!$JwMPwG|3qyp)n4J_gDr~_JhNtY5Hf+KK=49=Z?ET0O^U#NdSbr1^-7h)7 zef&;w?N7~)W=9;#-pMnZ$u947T7WG$giXiqlr)VOlg!*HhVq1+;zw)NPN`SRC+*~s zO~w`zXwIhV4`2u|A7dx)lrq##*(oOau#JpQ~@@OVKf`#bdB5b;i4ApwvqSj*s6X>A!2O5%2kfR4p^rG9pQvy{a zYDk1Jj1g=qBYF>GhkJL54~wxH9c)zVmk^BT#gwshIl9pbFeGR!-zi(Mu9EHJDDXad z0K@1-V+B2lH7j-oBurvxB^l_nd=&+v?|!-%o3RP?2MA7dFzawy^dQlUZZyzDKjuD6 z4`5jpu{56bn1>-O#BenY!Qw~R58Xj(?3zI0aSFyVtU&W=T7cF%#x{fH7svqXY6&t7 zV-zj^JXqF5mN6G?G_VCr&_O@?Hqmofhs|m|MlmDs3el~0z_dx!6thsPBO@$BKbp7- z>o9~i)}iN5v_x&k2*%Mt<5e1V1TDpM^kFvYuhAoDVIc+_5{pO_)-yfOL=)?9EjD94 zYOm8HXkZKaFoq_kWU@c%7(q8Wn2$qPguXXu2v*@Lv@n#({7>IZ*Qgz^4Ye@S2HmI~ zNswVCT5mENFoKn6yu~S4`8F*^8`CGV+&~M_{SNz~{Vpw^!t#3*j2Zt!4`my;L0I}3%SRKS~u2_r&Hu=q<3z@o3|5!Bk4X49Bn4%^)<_fSzR-9d)v?PWWf zF$zA8=-;_h3ef0h$gnKVkW8mS1N4M)kfB3;h@n27^NFiZ0tphiNqv&-VQj|qNhLPy z)hAog-ltEr8DyB+$3vwA*M5Bx!m|DQqzUV=O>NiuB%!vWHk0K8`gqth*_D1^9}k(5 zA6BU4gZiWz6IhGkv_5|SN22;*GQ=3Rp?wG$V&qUVJb{eU$xwM%pX8u>T%Qh`Dd{@$f3gVU}`ppA@6^0X>z^MeTnWbBtp%`abNFC>DOyCqwzn{}73^(>T$f z2c5rA5c)o*g=l`#CpKDtW&7z|o`g6s^|M_7-}mwl2tm!52);^<%* z7XGV`r(ekr>rnfK3e8pXpG1NcrQgzmGwI?^4nVW3Pu5~_H?sk?o<7Mqix!~=jb4Hc z3o(Q_F)~K?&OX_KP9MRCTAU$3V;4PqHnU*weksQctO}4YQu}2+Iv7TCzkadR`a}5R z?*+8#+gD=%9^pY(?|1eu-n+*nUYphy5`F>(PS^I2UaU6q9Hs;lmhK zpriLoGgcqo&-1#RkS3AQJSsG`UlwB>mZSgJehFa{)?t;WUz*UtHmp0bUsBGc0kir= z$GkcHQifG%qCKZSAZtnF{;pr@(K)SOwxZ{BT7YGkX%PLGkG{E75R1>Gf*2{Lg6QB7 z#xL!cwDV}tW&M(c+U2wqeOQcf^r7ENK4^Ob{ZdULys%$t(RX#fG+@IbT7vc0(Gse;q+;m5sb6x?xVc{n)cVqX9z-VN+xn#xEq}jMV#Xc)QiH~w{bH%* zvVLhqCqSZ^L~(h)xGta|DwK)ZGBQS^l8n*4f{f8xNygZ)ij2{JKN+L>AQ_|Yk7SJc z!{m!qRrC>7l;WgeUX?zy|$l6vng;xzr-+OBf&MFb3gJ|9{9)SesQB|5i96^nc0J3 zT&$Ki5wvJy6&kNFi{>-`Z4zNt6xK0~upV2{{U?GDEljCU<@NsV&D=A z?j#13UBm!d-NXRaIK%*&J;Z==2Qh$Jj2KYvWV)?a8+H-{SlUMnU`9VNfaMrR2UCmb z`ZzIw7JASeAO_GLBnH%Sf*8Q6ABX|8ek2BzKM?~M8X^YJ|1&Xw-oP&e0SUJd0~kl` zQVt-MiMdH}$x+K#fWG9ocu^k{mr`uTN-Rx@OO0B;S6nQ#un~>DaMzMIGxD2Uf zOuLNvpO+e!EE3h2i^jfjF|c93xRhX;78gHy4~WYuEIu$UA@m&-mpZjREiPNs^1*S5 zp!<-xIM{%$%jtO1d0<55}bp z%O2+VYpCE8acMw%Gd;G53cX1Wq3_+exC7U+;UA2dGC~2@(G&lQOA*@NkTIt5((5*5 zI~iWjH0q#2Sky_+q1nyxsP!<$XbsX+iz(oMUE;Zc<%4#KA2SZ#CADh#&|Q*oBf&jx z7r*}{;Y`>iEy|;JN!CsD$jn_*j`sXrQsbi~3wKEb3zzSb#@}*HP0hQ6-hgbu5Ju2ApM1*c8O%i^aKV81)C#P^Fs?@%!kRfy~ zq@wrIhRuoS~;`QiZ{xu!r&T|zJ}7!VIS3kReYW7vT4Yv~DsK78YV)M23X zrU9-(1f7o-RnTHAMBmM{1T$`-0JV$}wOl$N`ck?ObJ2b4fRtir$$&JWao>OxETcdy zL*EK|6di2F@X7&6TTVqE7?7gn%>Nn^i&+uEa`Zh&g-|z%flAJBSdaF@tVd7PfF#g) zWPrC=a(S&DkWBPo4#tC20JR!gif$}L11r&oHCT?;eYD&m(WrKKoEoByQPiHGfE9Ex z=Aw;@(0r1yMR$k{F#Z%3SjqNh2BaE8&oTt7h^ck#hiT7~FIu(icR$M;s37KUWP5;w z`4SbtQfol69v~w$P=A@|M>qO0Z4*O*=BrffK`QtfLxzQ~(?Ya1(?e>xftH%|%%2%^ zOkm0%nbz+Uj2QbXJ^c_v{^@`O>PR@B5$$OHjS4)>j(;DJt>}C=Ao*29eRM!V=yVQ< zYc&;g7&~n0V=ULOyo-t|6Ep;UdkylGJKOgglqSqOXpmPtQo(}Z>TDAj1(Imol!WONtHXqQvKI)aLx z3S(&5pcJp?jQHT7q&!c{O}ZSt=tdvrV+$6c|Br*R7|S0bKa4y)$RpX5Q$<6cXZ~xe z2?|yet{IfH7pMqkVap=~4Th_!Alg`h=}*!!v^Ee6FS7n+3a;fcyosJf-z$S+qVYQU zqWK0D+Cc1tsSrlqX8(=k+dw`W1MK)`GGc`f>(Is)wfqh(e2HbuLE{5zj`f&gsjD4b zj>e~hQiU~GkDdt8{W3lCCHbI%Ls*9yn;5#U1|<&-EDVq+B(VsKunfIuqJ?#6e$6aE z_rK`sSEv}~q4h1ni*>C;Io5y2(ABZu_w*PVSb{$Eqq&U=s`YJD{7)Q@fl?CgcB23P zF?RNGQC0cl2OWk7N0}5A0l8O0MVkL z2NjK4w%C>}DpuKDDr(tci;Rkjlw3-b5vQVJYiz0cz0b@51F!w#cU~{}e9rrP&ci+T zJl%WG+>1=@rNqi_rT@Nwyg-#A%aCPA8?p&$>Z36sbCF&zk`OWoY5APCfi!(V?@%0B zujH4ct7Jbl*FZjBaRA7+uj&7JD3)(%{m43GC(?!-RQx}jtG^(>rG}7g$SS1CPPaqm zUZSlW$Nyi#krrfu^8fIi!-i}_MxVg%V|N5Kk}=YPwD{T`g~(jrBD<&9JbpnQe<;YETM-H-WqTNx0GzHon-N;lk3I2`n%j}LcWZPuBqXcORvO5})sZ;F^ zn+l(1cj$j7d^+C(L|SHGhs+JZPRXJ$yQ3eaZYCKvapd84M;6ke+Z`3iTs|V$imaP$ zcMK~396K+MBYc6~(V*lN#7E{@i2pJfT}gqFsnKMBEL&`M3?OY+*&WfZz^}GDa*=gQ z2uBv>USoH7HIqP`otMI4xYF*(dlkbJju=_DiX%qmuCY7fUgHS2*d6W2)C@cOeF^8Q zhG|ICO%xcJyPXHn4|?T(0lkI~VSWqwtleR1Bfl5n$TFn82qm|{?udMw2*`A#i+Pp%Q6B<{;~uI3ndoHmmTLIp^&p_zFj?WHaXyX?mTE-o@?>yQ3Ca_b-kN zS@sr<@;&U3@kqNNK-cnB6XxC`H~|QnTpIpwjs-ue+30mGKB;B zRP}$9FqAT6G_nqvjBG<@AZ^H8q-oV9M={cZtU#tBYmsHhCS)D59odHLLFTR|z0U|o zCL`;R8OSzdF4Bf9{!GpPYe*1~imXNEBAbw9$abV9l>(k692t!)TYJe-fHbYUZ8HO~aU2>!$+mI#d%BO6@B}XG5btC6e8Qe$}p2Gl{ zt|Z?JEk@RDA_HV@1__-_=ARGGR+y91#FDTK@ zI-CCjStg7@&$0;mrptb$R56@VN_v z@hj)OCoOfOm!Tls_sDMp4PK$4Ce14quJhMMxyr_q$FE9c`j6oWKFuWHColaNuHHlD zl@=j;9N}~QGcgSt$3L0j2;VX>9<30sbuJ%Jkv}`a=WM?3!w(X=POm!i$;YQY>U_V0 z0`jgpHNSa<&BsU`d%~n*@1y2pfrl06XoGcTA^pGhk(#k`AhkY^H<`Lkd0-QGCAxb59jVq0NT~;ck1ZNr% zDtv`XBjMD?DQ7)Hcxl*3-)|Lds6IOx0AWFi= zY0IXh<1fY59DUYd_MzIAKOk%THQjrg1&EgdCiaD8ZG}lPf~^ zhph_ec%QLBHEq?bIOUi5teZS8;qcT$(-Nzu90|Jf{f>`Mo$jJntWO@cBdz^m6`?9A zm6A%ASj0^{H0^N6)FVMvQ*Lw~c%E^+ab4nY7V_IpT?=O-He28jjtWqo*W`o7M4HZj<1@oaQr7Ndo1}ta{ z%Y~U?oeW;eVYkJr7}&+vt+JfR6}bWySxO`DV70Iq81?LQDw8Hy1Z=2)ajxYbJsvEAII*yfQVE}=%{FGChy7YsPSO&Mwdnbe$UgY$c68HkTm!OK z;v{o!fI5$^^4bV1 z`(yHf}WCfmuX9kHRzd7 z%OjU*;mcdm8)}*C)J%iZ`Rjr;KXaBBdE(riI(h%NpSy<)r;XQTG`K&>dD7Swfu2#v z2g8&-j_6*ouzHy1c};~?!|1$Dr|hy|RWMHPFw2Kkz*OBTSE~MCHFdIkvi7hsXfkR4 zS-zjFEh|b#ujFH9bxuoH-Z`+C`m>H=4^{}PhUIv$a@YW@#a&OTJTCS_TpK2af&wIe-Ka3i+sRLHtf=;h<%D?HbzdN5jV)BAT25?6W#om(LE^- zW`ae!Gt!YIF#RvGD@Y3usYQ<=JlY+uPGS=*?Jx3V5GT=&-gaEhDBCc)d)A4O3R4vq z4a++r)23>(Lo(2N2=8zos0z=8)&EsC5^k(OxBgZ3Ox2={t>`g-muJz72GPr#_)eO; z461_647qKvK@S!IYkX;RrNzShULI)xVc4g_?AR%thUHvYt#GfbVnDfs4-j7F3YYzV z(1YaeY1-7=YY0j4NKKWb5tclLwZURw1@0qF#;zMy^@_WTubdQr)bE&Y(tcxw&jG{1 z@#EGrQMuM72@`VU;xuihF>)G_UXw}FwIz3Eqc{JP!A%tjr!p>pmAp=S@Mt$>u&y`g zhsp@2?5bh4t)r`@0cM8{opvQ#VL|^oE6+{W=J*fb$^RE$=aVO%)TT)Pbj`d)pU%05 zm8g_)D)AVY<;~FzIt5k?Yjaw;>@s2TZ!uuGnX2bJmEK!tWlONOsHhfCb=&BnzX{d` zQw>Eqm0>%q3pUgX6zhS-zD;#2Bb;J(SPd-CNnFenjOXO&xH>HJ~uzHwh9$B!ichAPTE)m=b=BorT^z#^rOO;{ANZrO` zTLts`;H*3pqFv|Pjiv|2``hL$zOSDaTXx+2~=k239hLHM&`tGfme~x53J>8)}j|VcoEr&(6x9 z3bmP`2CN$~h<8U)hQY8N3>;zFoT6krVP{9LK{H@6FiwZlsk+RC#lk$BP%*3umhWL# z0rTtO!;l`V7S;e8YAq_gCRle5O(@H4XhF6EE$7b4iJ98`nO-w#5$8ryio+lXR(qbB zl?|7%=9?U@&Gt`+HTLrDOBdT1t|b;_lTgYdyz!qnhTC_kHQ>46VO_*6 zwYpo9+h&DY1K;IZ0xKJ@aGLK0_i|{&X2Z~wT7XFeHU-$ksi`<&l5Cl$1<6g3+I;V| z;yquxVnRH;S|xPxth}#j*ZKG0F?@d3Q7^aLt520EU7PJ2p^?fL^le>R6{wQ5d`+`p zq%!;|N1oHQs{?a@13+EDJ9Fe4U7O=;BU<-2XGNQ(Eeh70Q7&~9gG^L>l)czw(ChxvpQ^d>;{cW0$HTuYdsPJ`bpYV^`s`BIt3;_3OG)Msm( z0+TVd4)U2!1F6^ECJ)Wl<{R6vNcWZ(W@`tHIkPFCpRBuFTjF1X-ssPF?dCNHK2^@oA#NVJZMrOv)Mm<^ z^R!t~F_#Ix1==!0o|&tyGX~G4yM)S*b6M%-pcl`Sb@Sj&=vkUPIZun4m`LWFSe=7k&5qyD9ULwHNR2CYO>7$)K-*Q6y@0l{m=DKM4&_wWD}Y&H6;9$} zWw5-f`0$$ttA-VhVGXcSn90Mg6;=#WX)C8>mx~pRS}^tl^T!w(uAo3LKW9`|FT)rTWBK=CH*cw#Heo@d(rKbUC|Eo=+T&a*k`K(CC^?K1|} z4zqe>k^-yQ$|o&7SSGA=+vw(*2djh`+$YA2eTlNWY3O9Rn_VTaBy+T39V~zQ=(FDp ztAfRPWZVI3g?S#a71jas?4*M*za69P%tedoKx1G8EEpE!QR-M&^39{$Y$_}drUnt^ z)X`+#%1S`^2Oq_~b1#BIYU_DHIg;)(|$|<`Rn0*ZEgc-6%+u2}d zn2MvEQ(naZkFcwpFbL>30-Y=prV`YhQC;I@9L$_0Q86^~EcD`AWMhoBJfsG_b0;ef zx2+ln8CIwZih%nb^g*V7+Dcf>|?U;Sz0XpdSX2 zxwIAT!5XX^<;Epig0U7${bzD`2}jz7-u^Rrd5N~e7`=p}`nk+r%58xR^s;+p^-^uQ zu?ju8K=v&q_crv(`{d=N+K!^=rF5wKM-M&8FujnE3wyM$3|Pf4_`{063gXP0A%IU}MGN`zvu>8ju9-Hwfr(hLO-%sUxM6QR`RSXSh zF1r?3^?}g`+6l`($cLOg;@V*SGP+xMEn}94)i`r?5062>vPwQh?1ZjNB4JIibPpB> z^Ex!TPo=?3Fwb#58x{uhj9UQ9hQ)iNS5^cp2ddMeoT`OtSRJh0NnES}mUDRYvY{20 z4^wfJQ?d(|H-`1Ya$!MEE0>+&T2`#EWu7n?SORoajmyvi3pxUGSF0Kc;$byavN%p# z5S52+ImS1XJrXa0Rl)3TrXwq1C6CJ^arE~l^x|rH7CodJJ@Sc>=C5jT09N~?oR8zy zVHj(ZTE0}S(oim1{lOY)WcGEm-)wZRKaB2r1+Z)w&D`l!#gxIyVG$n9qZ(HI)JR`f zb`7w|r$?X7R#@y9)&)y>n)d6NNk1@mjG^H=hR!i87*+<0ah1<`<}9#!m^wh^RAJ&_ zZDUwE%sR}Nf0bbl&`>*iIxd98k74Dod{~&u0jCOI11qeRgUh*&=tl4QqrA6Vd$1^H zIde?i=mD${rvI6IJZiBVmj3MMW>^EufCW2qah0(VmJJ)qTa~*FmIw3fJKeD2XM5HU zPj(H<-eraw2r)B#4r;+~V)@f=_-di3+MBVLfYH+)!tPz&w?SiWPWWfx7 zmyL;x8l~tl&3wt-9Y-~TDp*^y>`T;^Bz7wO_0jFq25X14yW=>|L?RvajgdZ}@(F_V zzahpX^|TGWxK*N(v~b@n^sd$(xiLw*vZw-2>%T@XH)>&qH%HfW6D%55;E`!NtOBNc zupU@7EZWV~Fl>jlz?_wp;Cil*DB}`&tRRjgZE8_u5~u8~(QP0O77rUrNF8MwEECq~ zkzqE>t8L7<3d@EK)vAhH1{;KVw#RCi;q9L6QDb8RF!JruLsTm)6J{Id%2_4Y1&ePV zUFd#TE^Mf`sncmlW(I5Tk?)eVs~5)O343q!=$;OF9 ze>gJus5)(gm4DbHe_Fv^Lo1&A&K^0vLYoz8Uco5x@kqs`VI2X>__#-=uhiE17U0P{ z)gyN*PaB@J(>?OaO6?k7(@MI_Cq3d=sjcwMz*ByvN7me+UE^Pgr~ThOysX{%;I8@x zEzGwame<`Q|F}W>X;R7!Oq*wE=;WrHs-a9+J8Y;n6w7n7VszzHw=aRk_4LTSDcYh% zO?bS{jqa-Luv`xok4X=#6P7Nwe9Yzc7b)7@MUl)h1LsF7N@W-aGxUyJo2lAOgN4Cr zU6<13^zE;DWc(UVSv;N|JXftDP6?ifZ>Rtj z(tsy&phuowqirn;TEiszZO^Euv5~O2??$)oI9NBV%%g#(!7{!dX$Yz|vS9@<&r?zW zD}kwS<&-Rg6@T9|`oT@L3y!*b*Z|8XaGHdwHmQS)9YumOWCTc@owR-o7V z$iwTjoyI}*8bA4B9g8=89gW6cCa=dP7ri_{cC2SpLj!v4M0skxHaDOfy<`%f8XxDn z4E%DvHfveLdZ3x_ga?w-&~}y;p8HVLZjvOm`DEO7*FKip)wY%KKgg;y?RQ$5Yl}*f zVo5HYGfG;1X^a?}e4nPxHO8RVX)<>MlRzfAML#z@j%H$;2aDBZ=LT(?e>-~SY`zgM z|J)uxMfh*;2 zN)NsfJz4_Nxlx;nUc5+_r*lWU1l_(!ehv@J!9M0HP6DUY@cS5fF`WUxi_>;KWUb0(O49 zQZh}m!WOIGZ2=#z9N9gmHm5`r*|eF(M8Y{otSZ5Z;fvy*iQg6;eZ&)5l_(3gXo(@E z=!408SRO;=RIjgsrLK^Nw=jvepxal-vs*a!e#LK)Q(M?(qskkzg+Y7O|95$p{qOQ7 zlTrmKrKR#&dexQP7x9S)#vSxdR9Eujwn}-17HRClDt?{3oI&f3%-}M3y##D!-I$G@ zv0hegW~G7iFTi-Ym)7~-ESxDh%~)!c0DJ&!M(FV^%1X|=zKfnGi;3(^!A-HDHA;d-Eyle%cQJj=ndJj zJCl6s&?|o;`!ab%<;RKWxLx`bk3`SUk$~;+67-B+a@%&&sYkEdC68^Vu59Shcgo4_ zq^WO*=gPPp+QvW?x8|;MeC<|E9Sh{v9op3si)o0>7?s>}&QT$M*r7Ff|5voD{j#q^-gn!jvt@rEqS+S^Cxm_sv?tbp}>EYbvvoZ3iO;N zIkr=aTF{C<@DgdON^svdN!mYd+t35lSg;M7yqD$Mo!S!L$eqk#&FAFwPqgbK?^d3( z{HB%`xyihL$pi%RN%rMz=))C$}R%ZCm18P&fBVJ$G#nw5*; z&y2yqJLe?yC)%RW6g&;@o*TZ$rH1rOSpU1{@@c7=T%`!&pqJwxz)SWbpO!Q)Jx$RD-&|>sjZ+YZSZFXWUdi?nF z&JEeL&vx&lA;)GU9Whr0ChZTdn4WZC+QF$w5>z?m(B#9HCHt(Nb;LnJ2o|Oe^AAg!~>HLUbaHa zm4Wxt1BP})^PKna#6y#kswNyUjeA?|>`Xc|>F~rOrm6`k%9k?a8&@QE=4vyH#bnSm zSsuw{NT^o&RCz|}%`W}TT#m8_-OdU!mm%JiOHE9ZX?HPfrtw-JG;oiMks-13fuTcHYf&Scl%dT#hT=jUJXL zeRuP;Jne3}#0uG#$9?k(^puqIjsfaHxm5mYVKJ-Zg*-+IJ9^1#8TV7ll26T5q{`l( zYHu2of6B0(ChP8DXv;${+#q}I(N_C6qZe;J@936A*Xh&b>^FXb! zm!T)zdG%o6Qx`SX3+ zQg5z4_h<{k*ZHi8^+{dovv!Hkx~s9kFu|B=T$7;o=HDn+?$JVS9JgkSQMz#rHfz=D zZo`0K?jJN5 z17*tnY&Z$Nk3nZquXC%i;mt{MqkV9o5 zH&I+Gd&~WtNm2+_0H=o5cvvQ^&fAHcEFCtmxYv>G!E#{9ob4)?nbWQi)&{F~Gc`|@ z!!oY!b#0?env{2R(lNQeP;Fizpnr)xQ^*a~esueiUfv1oav2B%!*u0R`K(aeyfq8G zE4FvkGv9oe-!;9XHW`+}I$#EaD;;$}Rj`)pdWRpc=fUb>70Y|sxpYgrZjt}|Lc87= z@e8`o^|EZQ_SA-U^!7Equ3sx)AI4t~tY=-X>%pFTA0|Htm_(5C;0=2@2ExGHzzfRD-OV0|p4UZ0mKTj(3Kq9Su0! zTM}p`jgpdH=dD1)c19N{Oi$etqGRQPB(R) zl~eWK4$FN+p8X}$N+zchgB+VC^3-V74>LbKdf+gW(%wB- z195|45l{EZcct3%#&$fZ&&adC)?PDK{+i19ll=SwL4s; znL&8atBiUoJZX}%qb2V5tMFan{N0zV-=|$;tjDPQRoS|csL@K1WaOnj7y;;~0rm~_FiTjg($GD%w=rRBUS0p)ba0`$l>*<7xz_H9Ma zf4f(nE@y$)kH>tnSKcY-US3=|tIcZ!CyVifwfD-+c>G)N1i#zM@2hV49euU& zcbe|&^*dH(@Ab;Rf5&P#4NuVfy|VBzJk=_sqgRR^W3CQbnoz8bakfFV0EWSyF%N#upUoZ*GM}zW6%Q2_=GVVT{*QZ z>V(yN(kmw_C{Sbtr90Crz6V&+*W!uk?v-C1U+6-@h&FR!F>!5uz0QY(hGV>Kf8?R| zo}q`@swvuu)N-*`J`!z3XtK}=K6lO2s^IbbWxxzy^vcpot_P~{bbrm!s!&`EfAuii z*S+#+rMAf5il^Z}Y8pvc!cQf-DmAlj5dGHlZLfS&sjav?3s2a0Bi$gM6e5U}28$d= zRzLR3O^38QifkBqUFse6pu_7Bqbh9ZwwjF*J8HY} z6ykXWkH6tCMgO6f-{-l0LvmOP_Kk)0U@-j%cd-kU=f_^zazxt{)q$sSyw&-8I+dj= zm=#vzYaMt&I>Lw=cZ7=YlaMMF#|7v?{<67>DW@5|DnO1Y-LHz;H_3VQ zMQP~K6RpFm4d=nbye3(PFLBlREr2D%GG$h^7ApBiwIE|XEH_a09o3fm51>~DSvlq2 zGuhF6;iwk)6a6SliB&b`)|*koW6gH5}dH4>alu!$@7 zn<^$G9SAt+FMgH2D-RhD`y?MRtUSF{-d&^3if5HJamVQ$M+^z4iK7mpkwj{ySx4>D zXoF==w>s+G(~)ZW-LS!6dHEOvlI0i;d4>c$&XrXfx;aFm9@n{oVf-roD9 zHgQVk&`)q8h}4Wh)fIB=Nq*dFRS8^Sb;KA57`~8Jm(ME>UUpz|QpJ@0LF1CtwR3{= z+Br$SdXgr#(5!_NjoYm*omV)2QtCYI8BcO*7Fvhz!mAR7kwF8j$D1Qdr| zmE#i+7!Ud+tEukLxN%!l^?KAU&4u`Nq?xhE>L{juhuUMJYLAIQszD~I7MY}4nWo2gk>i2B-FObk0?I*?>Xw5QtxQ02k3qAT;dAUZ-lQlHW z>t)g(v?cL5=mQB>N9A~D{vLN4cBu+Vs0fj&ia5MZmh(it%Zha29&iI@$ZQwm3kARpC!rul!3wI?)H#Gp50nQ|HG9 z;|n$?pJx2BJWZXa$)s8el!uLd9H?*b<}i>M+N~E{)y_x0!d=5^hrKsI6QvOm{H)4BjYv(oKBpO z!r-UM(oH(4n?@>GhYi3oV7cftVtN0M+SG{PKhpYuVG82ZNZ&<`)Wdqv4R3XOi@8pl z9+KVp5gXOrzwOT=D4VF6o7LEK-7^d#KbP%F6v!{0(L#$_2~59^AlnQv!? znBa`tJpO3xv89RomsDJxcp&EBRY8fexN=d_q3FX4k3>~nsS+LcXSw1}+Kg@a#I)v6 zY*((XTY-uDgRz-@D+PStm5KBDNj0`%yR6Q|79||E%~5t9N7AZFbEh2pleXj3LC^T99In%5N7>N3@3A^s>8zBu+52elvFV92x$?5){nIL@9tb)( zW!2%pL*}HaiAN^gCl~6pjA^S}w;s)h1CLCqnwa3TZi3HR(@xp)XH5@CC7HT9E}HL^ z2mh=^dDqJGf7U{cgP^=ZdGF8sN;&<{bnRcrf@kTv73g()Wf%IA4)ma6tLw*ILl1(~ zGoU1&_2ZoN+~KZhSEDmL%e7OnoO+gFFb=)@L7DuV_U25}b7WsR(!(Mtk`A-MO68Ux z!>4Z@ddY!>pj3j=4!I{<_v(TlHLGFWS@|o56l_)P7GmFwy=wQ$sWi$}@-V*f&PrzG z%|!8-@l*ktvB*Bmc&ws~Y*ii3WvE1|SJ|*_KWvq|FKJT)RMR!p)5Q+UXZ5T%GSJ(P zNYwLMqJK4dRuxmT-1j^$i&!g9Jg+S^`aMsSV{+zsZ9$-wqzsQUIxr0w{?RGZU(oKD zUys4y6IR#a)qMwrcMwb>nzMbi6FxwAojmX~&puy%L7V1pc!4(hq}9>jVqe1&V_}Bh zyVqsJRkf1}i-D!7#Bhpb!3tr~PU1Rw`LN30%jy@ool%Ewu5p(Kn`ZR~3xf^Hp%=9T z?+4}di`soNOJ1bqKE(mMQ_4YB!ct*9^3w+GR)0eS19q+38)o!L3Gi9vFXfMDK>=&k zdLWTI>DwjjFWR*MZNx6aT>q2o{0ldiGylRu|If1cxb~FM?>Nc4C})nVo5$$+4H9sI zJ09uitqro^1WT|=rJs=9C%9g1MsI4AgD04W%_nFTf0y$oxKC7u-rjs-XQMXT+t|>^ zgz%O;@>lJ)Q2nn=WGCr(?n5ESD+bno(kc`Frv0U;A5X*kBefEQf#GjVw;oKzRW%$2 zZ-x&lfKx0QR@X5y3MiHg>xQK(Bb?4(1}x$ORx0RR#yfw>Nc)%T|E^8+EhMn`1FPKl zckQmwemqs3?lm^XS^OFPP70^2a{BMu_Rt(W@&9I^RErK=B!7jl($B1N`xJfF1T}Nl z0vZ8DP1-f|hotFcwCioa-BSC3VEU(ybR zw&Q6#Zyo;O2I~>89$0m+RsQ~x_C!(HOVo4U$l6+^S`90_I5Ph!)&MJoWuq&nSSzd( zrUq5z6zhWd*{qIu1#pV>!(w2baSbms_uH(z?%QeRG7JWGU>NJcEHFDP!h^-b{5~Ij zKGR_-uyzl-9GKyYk+^DnDun54Di{syxam zW`~*WqbttTOviwgC?i}Le|j@*85XU|KW>HV1p(}RV8}8#8*w}aO_!`P{Z(z|)@(dA zKa8|;l~Vz%2bPJhoML6oG@Kuqs};a0R^7}gg5@iKi{Y=KnfV`9VR(DL zDr+1pezHvd2b*82(95UDJ^x_r=|;B%$#JDe{DYbdlJEbaeLGigAx`K8*V;7ARZ%R$ zoMXFAdhvu;h03&la=Ds~-W_^k**~=f-o}c5vM8S;yI$vsm*I6R=gFzp8Q3i7G4o{H z8{D?fLT`$^Fsc&sVSe*3j5@8QFde2cR8AdS70dz)auOG-ce8FcQTW?$g9(ogJE8|(hXh@T8&mqo~%=y~Xt z+fJ-}Q(Nb4Y@88m1H}<2O@0HivXb$PjD~$!R;BDSW(v4nN zEXUtwk3xg8FTUV;Q4N1= zl3Pz|zcz-Qq}V0$^+^sP4?Xo^S^19kSdrg599r3h;R#mNcNi=U7U8a2#iC)kV^}h* z5T?SFQ!)cqGKS^CieW>YMRm(!SXbGFB3EzO>}qX8D+!fQH3o6NrEXQf#VOVR>)dx? z_#UTXt+231FN_)kyI}FKTonhd!wsYS(wVl55 zJDL41^_q`v{hh3Smxnvu=!Qx;{w^ml{#}ZHNT$7~yt{j#NQ|TzD^H&4QId(zrf1mq8t$2c- zkYn%jG&S=qsXRia1N$nFkpr@vPR8UKO4>2Agy{PsN#7XQ=* zN0Tfv^BRB!AJ94*VI@z?z7Mp$#<&m2wN55~NK0)+Pp_9_A2Kl5&|{vL*FNNlck+j{ zhZipJ=IL3TZ1q|Ck@k}XZLt1^3$EoxhHJ^77U{gTK&{Z#-Z`Fk(@p;(uYbgfKjkA% z`Ed#Fl}C zGqj&iF36W>w7=fei6{Bfkwy{5aob?AuxfOcQ_bU!Mjo4&?HYkqxar@F4uof^@YSx{ zWoz97wCbxC!tI}4kn!C-)JVru@!18rqMN(I1$g@LtnX$%uEA4zmbRii?J5qQr@MLf z5!TJ9-g7~|QJx$;CFd^4^`COjzYb4&?*(~CdHV6#tQX{sPuUfn{3(U%yC9*TX)}DY z@!0WP`o?JZ9mo7-sS?wkN=(DswuRez^KkdfZab z8i>zvg_8vf^Y3$*RJzk-{dsMLu?5x=AcxQM>${-ylyw66dbynHPLVK!sc-nh!9Cg1?goOyEFmyCV==xy`m^)D$) z(3hOn1=9DW+W3OrWRaEqtScJOBNxjf{d8edKV#z6@>xG!t_;2X8rk`kwqR}(y1vX^ z*|)l8fUWN497$Qa2=}^HUigYF8Gc{U%C7AjH8zI9nqjKk%9;6#hULcfIZ6#qOl9qp>NcyW~{IVm~(3__G$bL!n#xBy|1-(OVhrl;#c>%ZWIxw3X~1&T+=sv zyFld=NgP9JpL3CBI3u#<8*QdJ9hd=3#lY~gcuVo>S;59Oq8Fyhli%?3+ClX8RC(_k zZDUdTH(0Ol8=gN@RynYASUkFNiWS0&VL?vfV&$;1F>z~Pr7)9+T_dby3~PfGuJ7ZE z~%^>VEa@mo2`uNR(yO)y1&(y&79z^ELZugW>41I@$uu; z>mon=Aki5oNgn9cf);*!>XS3-j^X&ZSu1t>`sR z%gf(s8|TJ<2mfQA>srKpXKQGx$t7ME;e&saC3b439X;;P@|0ao%XX^zS^3`1Sd)z2 z_^gCnLeECGKP$`7LrTztpX(c5a;mAV5*G8E>{hmo=*iE?zDwH1DDx%G*74D&I06>z z!P1Ez3yU}|lfEZTIr?DJ=r}bnua`!ciqi-)yd?Wn9P{^_`Bz55RSSuLHF~f(l@F}t z6`Ay3ZCOYGdc~`K!|}S2^Jp!gUpnQ{}6H#llRkr&^BrDw3B`E`yW{u=s(hi-tCj`lqVlg>wA5&#-ZKe-=jS5_i^*_ ztK%##-*d1@JJvyG?&v!ZsLu?@L~risbMzSH53JKed@Er&r~3}vt>4ERk-fe0 zyZeUkMX4fMU=6ULQC^3|!@581lj+|2Oy6ug)t~jrwcdJyZylb(^L_G=x4zcb%bQQK zf7K@+dFwCvw&2mf>ysnnbbh;pryS44ar$iIIB#x3xC7$wWZ9jbnG!u-H~3~lS|Qht z*Y7fR;z{JJ!ee7(J_n(Xn@9|`Os1@q+>oo}==Jn^7R@z?J&HnEATe2zTk&k+RqdwbPe zq|aYpY)nPZyHaKc=usiX=-E*hhc8OicwGU@kCI&h`rOcF^d`bH;mU>a*8%fecu}t3 zODk&*&<*|r5Yxho4x4L7M0bE5WQ+*l%q^7f131`pbW^k}n4oV9X+SSqOi`WbsTM}7 zg%vNBV-v8oqo-UYCnxAT7iLYs_UenSDaL){ap?WtszlK$9^u`rK@7W!gV0e+dV$wGmlTF@UC9x7RQ9omhoapTp6fZwc)I*FZ=;`sicosbey~52)(L3U0 z2RyM>*(Y2ab@kZAW5PE_0`5&^!ydFH&9<@w4yhzl$QhbUB-++Z?A|Hi8AZF1Oz>6 zmE2>dM%&QaSDkp$tWWk1=`mBF%@>DP3-KgwhedCela~=O?lSuGW|=%$f8FRe+1o24 zQ_f7*7lg#3TQe^XuL{&@ONI4k%IqnG7otaRzc@VosD@MyOWiKFP0{BD=8|qP;SF%Z z<^nk~MW1gRz`$>Zyg5bRZOoZM?PtmIAbs=Z7W9mr7l)shsoL#?mBCcP$|+`pRl|k` zOU1m{rq~2imu|}G`~|_**T zIEZoGy+{83ip}Jfj7cR_-)Ws{WfF7RP@{A`>C9%3iO;kvTK^YIHV1| z;{K8HsN?H~wcRhrr|ENzrfF1cp?roO5{uqbI8x4RY*S%fg))1(zSG!%o>C-_OsAC? zrgNenl2g-Z@mBPPee!a!zS0=Oj;qK=C13_EJ{>*hQCToUUuUdEXP?pD8H^TQGZ-)f z<--}2H4mNZsFfl5ZvP(if?yki>jN|N^~Sgmsy|#NhhkQT-abbj3?;fD6thS<6{;ut zr=sUsZ0tw)-ArAV6=C}Q{{67j#WtS({ScvFFMc!iNMjav!V9mFB{PZNh+cD@?3<|{ z3&@=5&4$*CjyjY4_?Z@RA}w4ucpFQ?$>E@E)AWapW(|ufIj`xPeRI*xPh1o&LZ9l~ z%2@``pOBrpzKs_rG6p`$xD}z#Fq(AA`=orP>-^3FJ-l9nONx@NL6m z{=k*7zYS0H2Xq9Pf4LqjKU}Vd`leh?8~Dg=or9+ak1D2bDV`=gH%E|Y51!VK-DZXe zZ?8@~m`#=b2;E?efY{^Y`v`rPZv}ek#}`lBIYT`Uv@pR*Hrk@tcTwDUNLvD)HH~4npiT~1FmO(se zc!q8L!x+$VzP!kJ=u7<5(92fX*v{eH#TR#l9&9Xu@%zecSLlhxHuM56J(Km2nKtx_mA2tEX*4-` zUE%H30&~5kU;3|L&WnNh-5>!LeTT6UJv&8qTj+~c^oCSkK&VG0hN-PtYi+}Oo75N* z4eL)G&5~i=9!!l388EIlqpsBFZZ1I&UT1SO!PAp|aaD`Z&sAsj#7OUDZbo zEE85I3B|Lf&)wwQAmB>2ouDp)g5AlcA$wr*-NNUFbc82f5Qy)!GlU!BRb#fu~^+S+?OhP}v2;l3|{4EwHpPEFP8# zEA~h)9oCv| zvRR)Ipko-kh!cFPe6fgCbsT!mtulEr9iRl=eyeO-tj5^IBzBwX4ATPCtl^*2Z42!>=Ba^Sz!RlZ$`(fp<9MV!Qo)CAM83O9pJhye73WBJ3=OUnJ?0MC5krUSL~px8o{eDwHOEkMyGCkVHR=dh z!7hnfNvBUnuXO9#=#6f@1ijO(*Pz?odJB5+ovye&=&^3ya5aOdQ=caNSF`Gk02JJ5 zbF|48tCJ_L(5E{$1(xG&+atGKqc1VGp_}iQC$C|V5qu3Z>izP?HPnABdg=W#X&H;J zO!VseN6x$IA$hO?m>;@ws_~Yas^wuDtCm?YbmHLUdW^9UR{gMS zT+Sd+hu;6NgeU2<15{Z$@tc1o&o1Zs$&Q}`(>QRz$27epna z*AN~to&cPx=nPoHV^o9!IMqsXVe$JVF_E5Ji{80k_9oH@QWEJ&2h@q38D=HSYA0G57mq+zSF_$4uj!eTt^!eG^7?4n_9 zFm-&&skq6o9++w<$~lh>Rw}mj!}~=P%mwz#=!}bDVU?qMV+AY?Hq>oZ>#T+4S31{$ zn_JN<2+x8mr_%0%b;BZ^#Krny17nyWnU;KL_ z=ZF#utF3a5D8>x*mMYh@Sb*N+)+^BsM_s%TJ;JSbq9?m`J9@TT4_--waqF?@HEulv zy#@USJ*21rz31rYx+sI$$FORc>6mSJ_krpx4X_;8P(6a2=cx@|4);?4r|O{_Rsu6P z2^|MHu##aq-vg>Joj=nJ3_oyH;X@lnSL`<)vIUe-*H_$7Rf+hrCnO(-&L{e`(mHz9@6o=qr7z&@J!TFW6g3W7K)pgjUcMX@r<#^&gvdQhK`uxylJY64+Gzc{ibimp$_*1HWb*MR& zA*^$x7sq1|0W0XV$$wLI-oAyW=9EpYU#lMvdO(`_5TY9TT5sDgwdNAN! zY4bWg)wc{7{coGxx=z2^w-rxJw@n^jr?2u2UPoX0)Fxl9qaNe&m@ZJ*TDRGZE}B_KHs+kPbr>1rRlT$2l41ub&2-CMi#yo z)AY-HEosaXR-269z@eq%Nx5K?D>mpq^=-qG_qk1ezk%8_Y+#M^rAGG5CV@Aq`yF^P{$rDCZ{+Sq6CSVs+GPKYoEAHt$RBL-&W+si3A>RJ;`v5} zWZ;STk$Ood(_%cCc($a|3|jDX;yI#1YAwzX z!;|m*`S5h8W6%w&@|NS9=re{*r0XrGHtE}p*-9VB8>_gSZA5Q3$iB_=B`bQ6kG#B@ zLCCb3_T}@r>$&PG_pcweyB?9nleUHMdLJ3Lg>_&adX-UDZsFpu5k1*o_HE(9%dYeZ za&im#hize&njl|q(HG23MIV^(x$7DwX;QWK(V$~f+%G3kjUtzDvq=&&C{q=ByGicJ z&>u8LWN^R}<@*eEafV(!Q9`zob`E;;L|ML-J1(W@UXwl_o{dzSt%8|hT2qe&T#qiFgF!-{JIm!x7#RmGJ5Q63Ast1y&xC8V)o~*D+zv5uu^?v zkyj{fc;D4d)j^bFW1B6v-Nb{KR&=j9atuAh>n3i~%=vtHL9Fr#g0;?(zMIG=7QKge zu4U>gLrT#7B0nFV;*@PAEFzLuQeoSKUJ@yfWpZEMhTes35H`w1tACk_$%mPG)QTAN zviT$7YQRW=RltUp0*YnAYG9=*J}!;FJXr98&$&vwM9Vu-y)NC=(GK^(BrQBoDUUz%EDb;>Ccq^$JqP8HC6Wi{{z<;NwSo5BI-Gc zN`^X(Y#P}zvQ=bMWXnjGqAf+6M!AgKDk^THT18z{WXq_i$f&q;byKaPTHRz++_k%? zc6W2vZbKLfMn&;^UFUrb&i3hke1GThfYXRSd)EMSM%;J$|ywrv5MwpO}0 z(+68~@}ZHNGkj`q2Fp2_?OuzDM`2f=%-&y%1Cz5BJ^N(#$69H2N-=EP(nIXUF*t?s z^Q;TNv6QW}V+e*|*DquH?8qR)j?B(r2kp2%&4=w%>}kw&m86|t3ShJxio0v$0yBU$ zAXC1z;;$O4$->rMCB367z6xp1W^>m`dvt@a>(5~a*5Q+c(sgJ7D_goA*0y}WQXc_#F4+*B_1&FN?nz0^T>jHLgz4V-}6?W}P_DCr{K8?aIyOw|K zK))%K(sfy-SUFw7rfuLY3cI+N>~h!{m$G}V2KT|PTg7gGPihvGrAiqmTrl!+ta9mJgxI2ulxqd-@YU?%jVPf3cGf1gi`yNr zgIm~huv0Y~F>uN;7`5j20d{IWZ0U|e_(c7djcAP%9cT>)*iaQ)=74Vv?2Kx*3HI^;=iWnc zp9yt<4T8DQ_4vm7Zv?F5{zJo2!T2B>0<+Yx&m7VWceVp%K6q$kP0G`l!3dE@6wLMTp$Q|7e9CkIRz1vCZo)L# z#4~ziv_J{*tze!<*&~}U`XjKj>e!o`q@|fTn=l^g4voC4#sc4bu*yAb{AQf*JUsq! zwrVp5ZwqYS6YSf~(tH-!ENL_Q0fKwQNdXCYMf97o4BE?`7U?Xohn{2;%cOPl8(8844F;vksG+7tJAL7Ee@3mA{*8&?UeJAvhaMZnS& zFY>d3g{?jD&&rh$9O-gALnjz7L_N4F!3M#~R2kNS6`hMpt5_pg2^c@(eB=2AzXK1%$W-aVdz9Gq?+cAK$L0XYg z?PUfF7P4{I;TqotyGvCX&!r433}%O|Ifveqik~A_uKIX0RwG`zAig%fKVi*aISGD2 zu)I;`R*p+2pk)*)EDBbbz_iz)vnMbkSZM;w1#^P&%JPk?1*{CrtPoNg}}5c*}m(g+4Hs6VMZu>f5cU&BQ94o-u z!PMtJFIXFxy5jXeg)IHaM#cSyR)QcxE_z4@vQ=XHDG0H z*(R5?Q3ZN9eX40l~=;nZe*)(lorizfnDi{?YPMn&Q@Z!r0VB5FE4-gwzX#y()b0#nkScQu53fF*Df#I7x{D*!$ zH%W%n09Z>LOLI%`?FNs6^YsGmQz&2F#U&tSF?@F&8}Igpn{e^DwI}Y3lMR*yrXCh% zui+J@|*Hqx>fyH(}LYfS)+O6zh1;2oW-LaK=kPUX%RyO};^q>aV%}%!K zW;}?ay&0>W?d+?Y@%)4Xc0WFu+=U)j1sk7IuGxir8etpCxt;0eWwj%mTRvJYXI)@9 z32YE78*B*ieB*v;yO7uQ=y3|6HI4*U2d13nm(x3DY^rmR1@RHYW426Jk`?2BF<|t1 zHrI^{%|_UrH;gtYpH>54Z8z|pnW$7cEPP^(#kC(Sq)Nw`-i<~BQ_neBV8H}G6PQ1N z6@WD)Fq=Ect*Hl$70i!d8616JO0OswXIX)c%Hu0Vru^vhjr-Pu@xs->nf;>16f}3}!c?o46MnoMVVwo!~0M?km^d5{eFbmHZ8~4isi+~jUEuuWB?vwa@YdBAe2@Cr&?6Zm1*SFw9;m6pyQgdMzVw4r&u({9BX z1T1!vHi1cCop-ULw_>6$hONJw&Akmbvua?M-NQEBhFcH;*wy#+ubZ3 zZ~XWx1T%o8AydBb0_|XWFmCgWYq?;tN^n*MmH|ICs{@n3_)hYT`!(H$?o*ghNGlu* z5?DwurJIPv-C!l~<1;GXluA`%wgprBWq{Qr_~n2#D}Goz#}elQwk0?gfpvq$x&|+# z6fEn$c;*5t1S_KKl*&|tdBF-*%m)@!v8+@?HUsMKXS;956x0FRdVhRBj)2*~)O$4q z=1lN2+>Ya#;Fk?n52g$xl*MAWV??WkgKs)lg*SsPD_*BBDmiu5c@JpEvK>dU9$29_$1!g8cWiN)n zEMWC2X1D_*0<1>GvcYT*jrwIE&I}d-Q#vTVEqJDwUW(j^=>C%k2Y5fYve&roIaeg` zfaB*ms1sr@`Bx2j0kz=S;EDcC;O0N^4}uqiyOsG18J#0C3M0b)Cm9Wbm&Y=~B)c5` z{LEmu6Ne1k%UfW@IMaFf2IM(od2UoO6XJ&u&wcSdNdr&ED{KYV)Z+MyCK-vaQ$&nQ zu>>w~ZLQezg3%`Qf@gp$JEGzZ;1aln7mSyc7Knla;MSP`neNd&4J z^>y}cKS=c3g3w$u(YSe`VW;ocO2$89^v55h)Arh2Rs~?fc$I0 z^Pc&?{!QS`;LXSr{ob%4cI3c|8~(3<*o}zJKZzIwFMU?*C7PQzs}Xq`sxjk(r|~5Z z_y+Xrv&K@TauFAPZlq~PTDAb({5-mcYMEpMD{aIaSHo+HjW<~tU=&c|02^l>upzJl zg-}5?V7V`deyCbhHiBDXT%-?xl_anZuyQc;ubE1=yr2kRC19Q?h!;2nR{sL~>~1X9 z3hu`3V|+LA9$Y6lV7KgJ%V5u~hHZGUhn^D=?;IL7AFqcMtP4!(3J9C(<( z8!us%cHn67yjsA$uf#WAJ6Ic7VpofR7dOWrJ)XDbUJPPz;qM+9c}7I!{xv=UFVqBH z4IUf4oE3o8f!Sg6jc05Fi-0L}F8buomeeteWr3A^eYw)%d|(m~ky@Aizm z`GB`mCz#ZVjv$6w7FZN)=sj_ja?UvEmdFuD+LxF5&y1NOuH(ysY6u>Bv! zFZ3J0n!$Kpd~@Qj1uXCpyZ-?^BWrp9%cKKnZn}dJoiyDrr3B3W$>^-k&jwDgvQK*0 zZ;#{ti@iolbJu}*;T6l7??Dq-Em#_CzH!znnA$G{Ru0)L|VJ}3;+qPMFcM}4?GC270t+*70mzX=q-9)nG!I=XQJnb8!{X4 zIzawKZl0zB@nOWfVDrs^KQCC}=RL!|B(~{6X+eVJ z6Y#NE2v!1C&W`^OA7+|srL-yKU=3h;#Pf}x*{i_nzVBgcYo!y<_9IaJ@A$=b8(0%q zr;>zPEDToBHTuCs0pj|>f?)mZZ6gW{*Gjny@@uiT{~4_qZ>1tICzvGiMSSiLJ?w*rrFjdo zA4U`Y5Pv~x2I~UjIrEKIzYuH?iDo_`ow>ONfwV~c^;-j2K>}+5^MJ)N;``SQR+GTG zz#70}yTp6bAXt5*hkf!0zKUdg1fvcCJQ#v6Pl-VKqtb(^9SGze*7l9@?@Rs2l*LpBNSgbYj!2IOL?%g9TJSU1k+MrneipOZg(?E2k zvj=l3;>|oq5g+??1Ky`ih|e4BVJVN}IW0Q^4G5fyzydDyY&)%mmhw z;8y_VPhd8%W-vav@{Q+PMlAkwP7h#Xf@6(fv4hGJH-Oc{Pt97ud|0b3I?OnZX%PF;wUz$6rs2Zp_4WA~yH+YrzW_pk+fG2UDVv?6ffUTK>y zia>1|dw(ykVzTyPcpt|O@5LRpBG^si*z6~9cdiO{hJmelQks#{1lw=uWt(pkBc~G} zOkkEy|0JgA^e(%^#oq}i<1+r zG9<*eAYNJEoHx#sbj3KO)y&`p8NDN|TLk|?u>1@*<0)xnrjOf`dPlkkpXHjt%#+ye zr=;bXL$KQ>_tND(;&{I|JcXHMGW+2vJnwITt>kh?WdKKekI>0hA@qTbTr`5va zr?C5<#w~c`)0kzau%4&!8H)vWNfw*<40s)E=Tx@+8TdzGSIl7VKZARs8P8y*p3yt9 z!r`Mk2h2Z{{qYP|L#5oF#g;Z8ziQat*=${dwDi0-*wGVv>9S4SX1`FhpM*TR5pSB? zOOJoyje|*#8TO=~{lK^@#G2g%A43D$crN>)0WUHrfNjg|9kzq>jZaTDFg$-Y|5-dZ z;)U&;H`=Ze;_Ja&c--t+Y1*nF>}JG=!TH8}cqf==e(%WR<(x&q+QDM;4rkhD(d$*r z24)0nn$LQkl~$#e!`7R6@wMrFJ_#%emX^S@FJe5X7#}Z2g|VI&@mYZtws9?+)`an04m)Qp zJFf{dM+0pB{m&+8#_V?3A><(;ZS2ey`{ErxZA6uL_I?wt3QSEn?(3QEC5)3w*#4{8 z>X*>>8)3Ix&2D`O<%D2oJJ`OLaGzxmc7cN(cnO!RSuf#Y#=#DA{{q-m4wm^cj%hV) z(=}|}%g8efyP}M}`ZB)4ob@vL_m*C~isbkM_*_!|ij<`*2D5Hub6-K;<*3jIoX?dXj7+eM*rK!zJ<^HeAt0)@pDcQSeuGvqn%2@LfhEVzw)^NwqZM7^Njw{ z3A^li_VQn)HS;ZhMg4CW9jCni6(=wYm;YbU$)Rn)N)cJ)s7@~fD8 zjIW}dD_GB~(#Fh6*#4V)M{e#HAdgzG=*@UtG}<@}yX98)>VD*xy&q?jJK3+?cEHZt z&6fG4U76jmJMJ1C8+@+Q_|blMu`m46;#K*uJ$J|V(;_fe0xK1a?;GE^y1>d+etZm6 zgE{YJ>t2&qYzo1y_x6t5W8rDK!8*W9u=%Fs_Zp5-0?Pn1-Z#4M+%E^L7%Y~SAD?_M z=Y71-aM-Ko~S0)!MA56U%vIy3w%CH!$1Af&i<^U_M z>5co$q5{kVR?0u<;2W=@7qC6Su^wy?Ox+58F#Ut^tPRWvrgR;VUl=Suf%Stqz$Eza z&A`jo{|$WvP`!6qU>-1a!6q;-SdNmEDqR3p55{+ZZ(MB&j9=iCf%)K9#+}5MjQJy2 zi+PwQs)j=}p+Fy)=AqF;A;GU1O#cwu-GYfN1iSDdwh#95A=n=H`ryMio~NM&{e|_$ z-DJoHGlH2EFD#OvX0SZQ#=U_jR;svND;8jg<0t$&u)+T z9`*Kd`!ROIThc@G^WQ=n_Z%bL39boNXu{Pj-5uUc5z4Efi!q7RUBpm*f+S)NNNm_NXl29ZlMZ2Z*p?jWY< zLD=Q*umeGye$7G5DDSdyAL6LmVMpF&i$BEkP;Ici@3Flf;>i-zhv*IOGu=nvb+Dx% z+x`(=JJSz47-S!PBt4Yk{RpRkwqADi-|-?X!{0GL+j&=-J(f3*1!4WCy=+n&UdmF3 zfcEoVc3m63_7g^+yQ7!w=Yi}t)c1>C_FEe+Xp0fhf7#1U`dGR=r5S;ufA+GwK9=TP z7D2%G&-f`}2&@&X2Bq5$6>f0@Hri>yC3Y z9Kb>Q4%39{mR&YjYZyac#mwCAU%hnq6`5t=uMo`tJ?1pw$IIshm4b)<9e=8Efpvj3 zCY{FJ$gvu*;y=CgO(?;9VA>x>=OR8UH-mY>LTp>bbcwz2i8LW43YHt`WgmPZU3ymG zCm5&)M+Z8ug&iy(ECicxoRx#=e;RF4Cs-9&=%-$`wjED$3?UHc#tf$VYPO*r4!sze zs^-WBGxsGl5m>=t97FNE9xt#E%-fFwRcY;D_M^S@L%8taQ+zpC&R{P)|5IE>*C0^* z3$BDe#jTD20(HOlGWMx-jn4Eb`f}=i-DlF`q~&FwVI~?M9l7k}<$1t5!PKXo8nAA# z*kSU)uK`Sx!FGL)8MW|p)MqlA(SetWgkV=@v3(u*nv%W)v&z)y$QghSvn()tGw5&! zUeV%$t(_Sic?`&eEUUpxGxx9ihcrJ)7x)JXUd`U2C+dN%t@X+>%s?8t^F z-Zk~oEc_nU?k}Z@x^}SqjqK?!u@)YJ?b*ma`w|n0AG5^R*%DI=t-TpVA%fe%Si0(YV!!{-3BNShqMxyz#TZ!prKQWeVH(MhpW*0*h|;rE_Ky6Qm(EG%>Nhm z`Zt)-t>2(7cd=>TO1pGzum`Kz-fwX(&-fOrsC(GKZ?W%{up{@f)!%`)!5*w(d%wd4 zmGm8Y@q_H>cev;-g&ks1yfs4k=2B4@7pGpZvfAj#x>Z7*>%m%T+0HOJN)UEOE!)HG zZrCP#Q{@{e^EkfvGKA3)A4VI{x?>3W>GHt}9%1AEg|fY{3+vg&f8lK9huu}r?%{SA zcGXktRrqA){R{Pe8f}mK_{OJtD_H1hHtl=qVz&==OT%b9Z~JDjMlf~T2f-?yjViw) z%JboVonZFoqQfodr+niq3YON0kti6Se6`=>_`VROU;E&W*vj#j^?lM9jb$G@{Jpe& zRSlfHZ${(p95jGcf|*p)R126dfF7=7Lxr}3<-Q#qt`&t=BCZR}{|)%H^7H2JBnzm@%inkqX2!6S$vb(^H@YAck825-?{1bApv6uu3pH7#}Sf4Srjp z2vQ5^_&Cb0{f~6PY264IK8cPj4HVD+V8IU-;2kGs^bnpFyp_X>~T0ujUeFvPrSnrnC6El z?kzm=gEVPM)(@!BL5wb>TrJ--EI04hf^^JTFmpfL1 zdB8m6s8p;LtQ(9kocYH68o^BIeIw^1&H`Zi@qNRMsu9`&){xORT%=-=h#O5Yv2S=# zwO2!M3>y3B(|1vb;lJp?nMkbi%LZ$h(iivawHeHt)fe|V_d+o9)V|?%Rl#>K)&a(SPmO6az>cFJgeZx*wWtzY$=JbtBX56n8tTqP)!{!@jA)eof zeZ#E^(P)&HbaVq6=CXGVV(DN!h;B2F^&G?_QfAl%roQ1iRfP({+86Z==c||KWRr3>OXA3%|$}a;fcqUp~#d5$pmiLLT=Hc!HuT4H+)meS9MTx?S zz|sohGb{x&pWQd|p#e|p0?S^3mQn3pHCPm^QN?^83L{u!0?P$67xoRieX2q%fUSUjRdW@C zIac=JyDj9%3vqz;U)VQnQ?Uv#%SG|6fnC-Ycc#q(GuYw}lj#uVh7e$zD#HRe)?VH> zvKHkT+Q14{$2V&kSUZ^dROjH(adps|73F&^Mf?VvRkxJL=sy(ixP*0q%Hp z{2}Q8%W=fUEEN&~>jdK~F23=ChrkN28J+n!GxTEO0#i>&*iDGuVK7J@>fH`i!*;nP41Lp4B(HFPc&IfFC#TQZp)_h~U zUnyAS&Uil;SoKY+y+Z}7!R!_Bem*eA&B|Go+Mn-9GhorK__JFOtlXV26M|Vh@hl3K zc1t|d_F-s)SyX#$1k>Jz6Wa(w`MH3m%J|vL0#Q`$%HUgkX79=!7a( z0apJPoKaQG3zmCVeDl|X`P|j<$Jh^8c{f%%Xc4~gmT3bkxhLK)43>W{7Bz|&`SpY4 zct@9NJgxpPrfM*Cepz5`_fdXI`*TMVVB`Jq85V%mJ`kUw4Xm^#KEpDw{0HMJ=mE=m zC_cX$F#N`Y`n2uVGys;@_Kn;#M;4z- z3#J{xIup#PN-KeNK8ntzo-*?Q^XmHIzNTvhD+j}+t+Me7mVjCIs5=rKK?Ey%yf5yq zV|8?5Li?xmi#)vLQlr`^axm8ef+Q+0&_kU ze?~R*qZ2+IKa0Av0mFceszS_QmCwYV*$Tmi!1&cO-*~0%U?mOlXUcLg{j>4;Re|}y zT9lNOwhqkt9M*qzD%b?r{#^X|y%ntV`S{9&z`DTHr_^pRXJdSy(G1`igH@}_$N(#T zA=Ver{(Mhz0Gmf3v3xMYKFkZM#6>(Yn0ihx1seo&s``hE`!&U%0jt4kUWz}L_}qYP zFUMbCG=nw25`V@Da@HK*7dpYbe~s^4QLyS);}41UDAs!W;}^F^ux2oKhidO~0n7bZ zeyi^5TEOyKu*O&U6@xW^nN`dI)&Z8QVijQBU|A~W1?wNpZ>;ikay?+l8~E8Fd=SzF z8$YS@`p>v6rT-ZVjsW}iXZ}1B?2`BQuNuThE-5}-%;kUF$9DXJmykpd=>MdTz4eQ9 zD5diktg^fN*ek!{ZD@JFqEGbnv9Z5N*QC@VP&v@YZu(8SJH`APO8Kpir4Qj^*@Zym zP#?Q+2yZcIM4-jfzV!1D*P9+Ixtl@8%*LdTZ=jxQ2d!!Fhzj=PQR1FJjs z@Nl`fY;s_?o5A$QvE9E*8&^rc<197)@UTnOym?^G6AllTshAb4!+3buqhcjsmaI`` zLEcWV#_4RuAGo9247*ukyZ=C|g<#iYvwg7V4#D>193D>7B0=&FdV2MO2a=O_(c?%> zz|tQ$9p|#6f8Z6%9k9KN*>l5Ek1jZjTicgBxJO>B(`u46gT)ViB`?(#z%;LBnMv}_ z)K=KWZHMvG+Q-k7C$jWx`6}f-W7ec(P0e;TEm@wHS_a#=3 za$Ib8vb=oR5bW$54-adO;Wca;t>LXyLq0sEWHjln!y`XuTL6{^7IL#=$H>c5D_}=% zIXrA;$BmI?cEcEXny!_{-^LypgX(L>Bx|y6XJ3qwcj`Q_^Y3M=wDLPTt2SAaSI?#$ zBQHC)8n)@_!x+Zwk5ljvx%(LTcwGRn>>2jZG4fVj-Z9CVs%P1;I{9K@khJ2qKUemdJbR-U2jhi$d6kH*Stbhfd{n&PwB{51IsU0zx; zE{xc*$6?2uup2LBD~^-z&<(*3*!F*RoIE>8mop9t9PE#A@?o8no~#+#&W@&|QZCrq z>-VoT$m^0)!v-|VYe(>2y5q*<(0qQpyik{SJZkVacIG)(# z!@Eb~J|=L1)r0ZA#W#Mas=;bheikqvSoOPXZic*+HBFGUx-I}uD|>x{yhxWdAz5R2 zkK6N^l!3@%0R8*i8^4PVTl)dqnjx=D>4qKs@CZBq1o^~ci;%5^n=F=l1_ec4>mNpT|KRv>J+ckZ%I~Rdkl>=`O3s`jmD+a3q zOG7;0xSs>elfWtjQ#Y^|%n833%R}0FFgq%7(H{Gf~FWkpb~-4r^pvg zDV~B>>mF?iUaA8uuloo)BMYT^5$Ha2gk7B_FPYPhKuOOLx{E2kxP@;dD^Jytx<0XDZsT3V~(>)=rf#Pl+JVI&_4+ zHC5iGvrk1f$!zg78NX)$+c~Cx*vX!lBIEZArr`%5TfzKe*dx<0xpc!eXxTf{Fp1<$ zOV;?b?2l>kviW7O^HTapx;XEd9|Tq_EGpT{;~VN?}VS z*lnk_=;wr#qI2u)~4lIz6xCyKcj2Fl^uB~7}Fn)698)qS~ z>R0?HTOi z88}My+$V$WoFQlGT4B3RV2{kesmMG76`RP$&6KyMHo`U;`-j{4Iap#(&6Lkim1d%M zP3~8nmp7!=gK4LrLiC%s_h-v^c`;aC7JDaKUZFE*qq9$E<7S~;JM6%8ws;n%;Ck5g z65BaTp05kRZk5@-Su&o7ot3O9n9)C6ES`s*EvL;d1#^KFDmzUL;R0&{(+g&SRx6CH zn~nV2VHeG0PtTTDre@DZ`Z>Igc%~CShdW0euPX)%&S7)sp!_P>p%dAfIcS3+*nyMS zXLIC7baiu3uLW#-4$dbXu!~IWxg4C1vvSaLOzd!u{JO3aw)PbE@`>`xx|$O);hn)Y z%|)I;*ez$UJ#*0>gRr${vIBEbul%_<4$Im2ljJ?RFl+ntM3v@thX(`92lx$;U~8EoejZ23I-Rb9?Jj5<5}W1f7T&IP-4JzF_n#v3?c z;{`N4qplow^j>z}BCOq-Vdvh*b}z#I4Z<$IpB-3) z86a;F&PNZhV^7BVs2O(g!)*7-@~x@)Cnsy#>-vW)@FN5ARJJG&{j&;8vj@Lsf<-wOov2-ZJfGe8R)D`cutGoEek%G>7wq6` z?DbRS)tLpSq94BAKk|4RpSW#c{jan6W*l2T?DiJ?Pzh|K8U5l-*28TVw*zeD68WCY zv?Z7|TSxQY^^w5pTG`Ph=tJeOtKMhlEyc0&!`6Pt?pZ1?Pthz*)>O3hvoDw8RGyE3 z>EnJj;WYWglrjXI2%L2q&RsqPh7j0sntV!XCj!9({rDCo#?>U&cAA`(VmuAU;gf#W z3-2j~2pHQ(2W}23V+Si~?`Nmx%d@6bBTxo`=&wk9u8MqVy*Ju6gwA1A?QyLL4eBRG)J6*mp zCHHjf>_7V1m}LkwB2fG#VwT|)UbqaW@PGERnP(%ydHextN<+M$I&T^GaFbon3FqUW}+;suZlWr$1w4R?bFkT?E;M%dwjAAyC=hzkkPa z`M4xq^Kz7*%yyq8@75KZg+X@=%PhczSq{7Z7tTm{R>(6_vsR#YO&A!qE5Cin($A5P(-newC$Jgk;6%|4+c}B7 za}Mg8bq?~K#15Z>0cMBYHJL58VxTv`ZkE|DD^AjFusdb8*D4>>wOG+2bJ_jp%8OF^ zVdtDQz}yA+?UnGkvNkp2T3u8NV3134M0u_A{j=ft% z`Rt!pxD-4DSM^S~z`DSAJm2#9AF_{vWub>^?>&QUF2tI)4UX-L2G}R1@)G6SqJ~18 z+z*7A+bU0f=mOrB0FeV>oQae-*-013hI9i`4J{f_ZqRApT83XPkSEVK1LmEKDx)mz zGs~1O&_9N^nHM~eT!b%A<6U-VDpz?;$PjPMzT*NM{eIYvQ`kor;FM;$0GXb`Ca%QN zpd5B^F>UKnH>N*r;hG5Kj}ok@=j%Mu9WA_G_J%rLp|7!TSBr?asaVup6Yv2Dq~a0h$hLV3FKiG3ZAXDQo$A^La_cK=eghui(IgQu~N zF2q7D>q0Eu^V#7G&!V6^tHtC-&M4)>yzcUMz1-=Xn@c3@CTXwU;izZyLy_ zqz?kt09sN|{h3SHoJ-_?Ov}9ly`^v<_VO14fB6evTo!;EFJPI)@_93BU^lEB7xE-_KcMkq zRE5Lcr?Rz|%Jb4qC?@L?0oMyy1}GH^n6JPSnZYJ&$2A}(`_chrCf1(73!A|Vm&)4o zPDGeii6loC^UNtpy0I7?=Q2^hPZqNmSD`M2fEJs8O#*rV3ojS&J^`BnZL0;mLBI%L z=@nxCE?dm^PoBVgW7egZ2}=f)Gm6%{n4N!_ETd+{>)#B@Jkxn1l@-zlm+=|_y~DpBf3rzoYe_Ep&XoK@(9>qN}+>X;J5c-M=v zt5F2sdoN&JseoHfVQ<+0TLBw33@A@bX;+@Yj@aZg(=#r^F>?$Iw_pO&T25hST`pgq zUIFMVL$$FB+F$b6^Oxg5`T_H{h-$x`M@P3G(7Y9M2|whIrkG;4W`L+OhuM=6wN*43d2LYSQ2b2$xwc0#3=L&e{U5>f( z`T^zhaqW*Mv-MZVr>A=WyKfj6Zs2*oax#1I3VBI-5U}*d0p-Cb?E@#XpRbTNr01{3 zptuQDIu@R%oXj?t$cNI+SKwgWE_(bui`dmyqNU0JeRtq=$oJ~HMeNZl<$1cn5?n0Z z$qrm8uS(a#&iTv0a1GwFqaC}5oxDcAJ-rq%uSPWb+Y9-TkSAEt7Hx>IJSg_?nT71P zHK@1oO3W}1iJfsTWaq5KU@if4GW0IKGiw*JyVlB=rUwAa9v+|{1IMrJ^sdDo>et{z z_2|HGJsuC#{>{WrwWED)fEmwX5}ye8qKVyUm;aHTzZMsgZ;I00Cbs!1G^Go$V zAD=bWnb;QTpim6Ed&!{*xoHoQ?DNXfn$ZSws9`|WD^(o^MJL0g<$i|jK2cpS`|UR;;p*w zMEq!hJkQ+@$L{}*9t)nh3v3Wfy-*wk(;kfXOS=YFNC`{=%L3#1@QrI8SPmF(F1~SQ z1uH%{kTbHh=CB0N4#zC+g^eE@Cs^6R0ru7|`Ap@GaSK2I;DJr@yaiDN3V({PmUa_P zMqp`59(28E1S|b%fb}9#N+AMK1kUgv;6b3Gdw^ZG8G&X5^oMXTH_KB~LI`9d@Zx54 z$u<-u^$aKvv1q@W&3@Y~Z%gMHS$YSQr{J`A&Sp22$y3u^fEiJ&yYQis_L|x3nKI04 zX`4~${sHCjCGEg0cG?z9N>0H1qgadZ1M>JR_V^aeKLNnTpK;_kw9R6@TQFh@wqTcj z85p@WX~(YFz$$+kU<MzxMHL_SRNRSZ#pz-!KW{ z#-(;!Hv4U>d~SL+Qda$e)gPa2PRnMOT#Gr>0hpb1blAqvXj8HoyH>tjCtZs}dklW0 zKwg?^hh3*Tik~atKO@O5abgKq3znV2wmRjdGeg|gA07Fame;9nD@Gick?+}rnY>O} z>_?}3e0m5md8tQ-%XyRiID@5Z!>OhaSy;v$RX*F+elUZ%ufxZD_id9;I=S144xfHB zb{(L+E_(R`$u&vh_vRfaEP&M2@KMe#>u0duZSs}rxkwnuJUU#*XY6G&*cIF5C8w1G z8fP3;p1IS`n88==rnC66UCHv2V?XcUKSXrq*e2xagKr~zE3g*Srp#cUY?q(X)o;fF zxq|7Ij|2lbBdNyq9LhKbk!A+9cCFSxr>4xiYRd?FaVV4f@8Ht^7Jvvtj zpkX;6UXHB2SK5Eq_3}WHuIUEs!iDUP9rBFys_QYU7h#wAQTlEg+rL9zGE>@tgK+WD zk*T==HSB_80~r75O6?QV*aR0&bh*f>?x`^K)9usP6)t&ldNH8u(xY_Jzj7M8%_U!y z-V7MJ?5Oe-vo>oQ`!`QM1Q@+sQMxkf#PAlcvf+b1aw8Vsh~qZjxDJ8&!1M|sX4r|g z2ji0=-?(2kSO|SV?x=K%7YarupuxzSX||ALOBU68_YGz#wvFg z%z%~a**&GWtyl^>H0q$lyTH0|8@B=%5XC6STzXWwW1*cggX>;i-94?e5#QjG697+LWXEu7+*bn6-#l852`tZ@JVs;P%#QWoE`zsDLid%3d#I&HDlfi~>!-Ss2v%DQMGp~Dc z20OnJ3j-@)*PS?daL=D7upO0{a2o)%)i}$c7iyoGz`m?R@_s;b4W?#Z%?~E9nYUvJ zQFR**`opM_Qu+k8|8|t#0_c1MM~GiQ%$dM`x?O&Far5n%H})PK`G|lYReqS;z@y-? z8I*J0FT22953|?rkn_(uu_L)Nxjj|WpP~(>YFhMK*bS+uabs!*%+^#h7MI5wU=9x_ z9hs9TaGX6T&U?EuLT(zALgn1Gg`(VN%dp{VtkW5 zN|GtsE~KBrlMGJLh8JpTv!XmAI9&^0cXWCikBVfMdBA3KJ3PBC2?1}8w%w!|%JK88 zhvsr`?@8IP>vFl>l*{c%ZU$VVChXpjNek1nh}Rdpnp1+Oel?xgU$l<421mIrr7j79 zfZl?yTBT}RQZAnWoWCnXc|ul72s3s)mre5)mr}+jrR&| z%N9-36(RJthP9kGuhmwTY3i=3N4IF)lEt>%C2u&fC5c}UMaNKcA8SK%Mw07*P$N1V zc;ZXbmTY6c-6g-gAo?gm!N-!cjnCk@v^_~RNj@0uk0)s>q0uLk3V1kFpQNpY*6i=B zmOEDOx6ex|KGq$cgnhymHVU0cS}nrP$P6Vu_D}j*gmHtBZvmm+3n(1(GspZU6W0p$ zo6dDp578+%rj-4?HZ$BnCqfkj`j!?5ui%_f3BB6Gn zPN6QLRYGfpHVE|#4U*!kB@3wn_RFR!^)~BC11Y5TiKOi!pL^v!oBGfD5Yuo5d zQniItx}UUNQaTtw;;+$0j1g<9B45qVOQjlIpq$v%z93zB^7mxw&)_@MA< z7aC&nf8|N;s0eBbDQmq@gHWSTNvKJvS*TU0O{hbtOK6qQTA@CnO{9z+lrKNmcmWlj zBh)O^D%2*_A=D+*Bh)LjmTmhW#=p;nY zB2;rBWoHy>5^51@6Y3D^5?UqHE3{T)ymgku?mL^#I7A{=X>hzQ3j9#h&uoEb#CG(B)BcL_Cn|}A zIYLcB%|b0gtwM_u;)5G$hirn|g*t?WuAWTqg5n0>5;ZJ%L}*m#piqs-NH5eNG!|cb z5=~kSLj6L6Lc=Fb<@=A@i~<Vo^T2mWDQ=6P zR*`Gb|4>Upscl76tN*1%Pg8tMeLYm01a)g-p#4*Fh-p=?*q#5O8o^_#kCOlY((KPD zKBm+RxTcRToT=DOp;40vGx@MQ>BQ&)3dWkvE8Gl1y~5p~xVyc=-CjcbZ@GfhcQL8= zBGUg?ymJHjRh5!jSCdv>PFl8J#IGZ*w<+q@bYCVMt`ZJ*Qmx>YRTTbzRY0?r`~p{! zb{CU|FCq0bQhUaf+6QCGA&#`Cn;c>dm-E7(CHTMo1+SA|__g@-`uS9_X&!0mTNJMs zs+7aWbY(6%G@c}C+DeYuLSq%uhMVoK)}v`4p?tExAW<46;YPfS2DiT=KE;^h$2g^CO! zCd$vVi8N;{#YZ!RAMHPGmG&|%WiJ^J$smi|tD_1DGc z=MIQoT6Hx!qU9w}%2zahvFRe9VchQmEzz3R|us4GXp3NMWB)Lxu1YTIdpC zig#;TV-Yt~gtV75@FZ#JGo-oCl3IjHSrpC|8WAc@B`(b*^-dS*W|4Yk3w|kA^nsjZ z1ng&!T2_$OTS*P)l4{N)wF{Nbr?5w8Sg56tcW;H)fDL z$L8EWP4Pf)A>~a{lDeHD!hSMEcw)MQ!eNoXE>ua4e@&w$#E_zf z2S!Scgn+nGV(C*x3LP$PH-@Zu<|Vs_<2M)cE1^4 zmQ!+!b(S)j?yJ+{9uGQ+yF*xSDO>EWd!`6G5YLK#mvd*-E+9lx7Df<0nd2KCFHttr zGPd`3dA{46MPYs$lW)RJLq`smR;jcvG49v%O^_V@tWWka`;6!9K){qL%wW`d1wY7AScB-Y2bPqAmq&R9c?qt!q+PU=aeNm zVrGvydhU&1cm_r1YY-#PF2V-3ZCIW&)+LfZa=$V_$A)90Y)Bb)r!>!Sq_RNj3&Hss!AO z-K1Kg;=JJ4Z8rY272mkb{^(q-6bNbgw_ge5E>L35vmad`BSK(u{|6Vd#V?H)%Q>n zR0%bgk$=NhQa_Xxrp?H6`>rDrEEhRmFFbD$d>A+5TV)O(wvxB*m2z;`=o(H*4DJ4wA&q@KSBzMIr_7pb+HRJxmVP^j@<3Y)#8 zw);pu_mjFF;EIFbtRYbQAZg$s(g-6pJWOhSgw*~hX;mF*(_^HeJ*2_MNuxee!(LMJ zlcW)$P4x)#ZtGxu$Kmd{{~3x8HINQIOKN07XQtun2{x?ZA0n(zkNj>k7HoZ$~ZzVOnM;a8` z@V*FtAmTqHwS2@CN5b=W0!?kC;g3m!2T1kpq?S)fU7wLQeNGzcAk}<9n)4;8Ekqg? z8u}-NyU&8|QBr#!Y1Ls;{}Iw~KdJsGsp)4@+aRgq7gFD^q~YI4 zrQb>Ie@y24kHIi395u8o@F$TLC6fk(`o~Z>tR>axNR26^Rz0aLmDF=Asc$T4ZJN;I zNd4p7WM~YeMaK(=@uUqCNJAN)S-L>h3* zWJG3=>a$7Bvq){TNvr0NHsz3pP9)WzL^>!`GmpafMHi)Iix!Z2Or%Wa9;xYk5iTUvTtJ$$lC^3ocYD7XFuVMgOy`BH+1Y0;IW-Zi96Ye@}Pkvi9r`qq=ymWuEOQqM+GlV_G(7~<3&q*2(8s0`>{dJ@{<)oJDNo_ZfdUj+gdqbY17@L z?e~yI?-lALHQrCEd4SYZL+X5x)bM(gq)C z;0e;`UQ$Cnss1U_L7|bSDXeKA&3Ts8`W&g#{k#B;r1lp?#6Hs67fAz6q>-0M8(t=@ zdWF>5OsfAYX-KH|RSGxkCk^;X!>^IL^?xJ7)Iw@|gVggTX~SEj?E%ukw@IaUNsC%Z zJ@1i*-zT*MNu3{(wtqybZxit!E9%y`4iISiL`1Zc+CL?AeMVaQIcZY|Y2Y8E!7oU| zUy|zoNox9v)b=&0tCQ6G4XNi_uIPV(?+8S~r26kkP5&l!bdmc0LmK>n)c+%?EkauK zUsB^i(x}kzPZSPylbU--UA<7=|NT({gMFl?BcxHG(g20+M@fA@lZFRLYkwgP{7M@A zjnw!%sr3)iqG3{}hAzgvNmFS2HzgBrjUlyZNzKQQ8g(L^Lh8_y)~1pMjwKC`6`CgW zIMV1iQjLMscs!|f{1h7h_6Y=PGf3M{ARU}YnqwrjO(ykbk_M)bMzToTr;=)>lSYLa zWC~kmkUD3Q`m)_*glCZs&L)*|NNp#QR?Q`CKZ(>hkJK`s)VqMxZz3IBNNPNp)SgG` zIfb-gF=@zsDjE7Eq^6~$_R~nc`J{oWTu5pvBDG&cT6HmL(qzleFk9Qja@8hVN}s$2+98?~*!O zNsHbi^}J8&`+&4PNE-Q&H0ST6mNru7$D~yUNd2FXHno$wgP)QS{)}|+b5i3!NS$Ah z)_y58L>l-fY2+(XV<)NU8&d1Hq|$e!VWERz3OD^rQMV@aJpp4EspUVUjvq*+A4x+( z_5Y=?=^$ylP{&Uc_I8u{50Qp@NTn#Lt&h}lm@CGg{Rn~De$wCoY4j+magem=7t-2a zNdv!;MutdzzmwYjAeDwm&B}wd_+&DPZd^N(Nvp;{`S@?p5(pkc8sQJeVl(JTO{t{T zV@d5}NnL5AgF7)#@1&; zr5pbW6ex&LhQ|6QW;bi%VTsBb|6rq_Q_-iO(Hb@BVTa!2WF8X_J9wBL%=Ah==1C6{TO3>E^l7n=l5)EYsaC#r>HX#wbH42cXhWuzg53mgU~uP5mmG6)k2qA z-k^HjYGb1szE@4e)NHRhZL6hCYPC=GHmmjiZu9l~o6h4JB(|!#ZEA75THT>8?o?L> z)M!FY52}SBwLGkPyVb^s8cwPXuOZ~eW;G~{tF=99<32U~fSTT`7E)?;Lak4#q5Z0J zK%G9QmJg|mX*G02O&wKdW;6Oj?U>p)u7@|f;@<$cnHVvFpguh?b93yJR({SZvB6F=JB6m zkYqs``o3gfR8|3>691f)YN3=kRG< z#^-PaKZL9JFs|Vf_&UxSo5#P$;5-W!@FRE;Pv9l|Ag<&6xPcGiCO(8$aN4(?e;4#E zJHmnxK8nLQgQIv4j^Qmhj;C+}=dgqK1)o2~;0z1WcoJvvah$`)a31f#(|7*WeXAdpiS*--PClOml?rdK|`GIEpvm7&dRHVvabr zaRP6`jy&t%TdE6EEZB_GxF2Wn7M#OzoX1=7G~R{_csrhH*?;`+U{GYiPF%tRcnL%y;0R9Rqd1E*IERnn zJU))6@d;eOSv(W`%uh2Yvfv?H!e{UtK8wpZhb#CTuHq?N`;V_5`Om<^=eb}3Ka3Y~ z{i1$UrAuo0Qn%TB(Di>WxtecvX}kNwR{Oi1wO_SSBlNpEkIfo$G`razVBr4vR8QyU z&24t`rr9)G8;kwg-j?62_VuarwrcgNv3u3fMm5{5rZ%YFdbPezt=z3zo$B(PYH>}g zvsUdk4eA|gZMB*Tsrg&fOuJfdQ$v4g|6S&Wn*CF?{!r7uF<)W+i<e|0pLMUO-hJvkUzm4HE@oKwn!4jC+gnrbYVh?HHAPGB$llv(^DQ+* z6LYM8lfI$$T~=e4)MiEf^dmL1&P}>lUWmYeV)_f0Uc{%x0*tS>XR(IW*DNHvHJ27319V zy`Ogt+h4S`<=yXh+q)tjJD`FtZE?Fs?14zIVJoP=LF>Zho_pNFh#g%UY?2Ck%Dp;b z@9GFPSH+%jza6nhBf;jZppNTyjrt!u*u)jo>Gt1h)4s5(8F7E`&v(W;wbdkO=8k*Z zr=RHA=sHO|yf)Z`7BuXBdAVnuTS(gRRaf3|uO)X3~yEiYwYc z7_|MO+vWHdy?mk9eABF;&-riu*ZPtjJK7O!b;~x~w;g+QjoI2}j_F3P<$90z+~qbL zI~ED7~vv;j7tlrdG zTyWQp+sR0NNX!lCqU@wQHExgkchJ2xZabl8`&)}k?lK4e*IT1 diff --git a/src/DiffEngineViewer.Linux/runtimes/linux-x64/native/libdiffengine_viewer.so b/src/DiffEngineViewer.Linux/runtimes/linux-x64/native/libdiffengine_viewer.so index f4c2ad76d777604648495f4a3e0c75643b8fba24..13c484129672bfd31ff63b5d65b78c5a16dcbf6d 100644 GIT binary patch delta 540640 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

TDTJZas8!T*6gSpqM> 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 O+(!lW_UqibLH`fZEqE&c delta 518249 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Π zJPX2^=p)aw(8``}K(=T@$^{H7kYS}xtDJZ zUp8#KW{P{ZiUIo7EnxCfGt;GxeW04w0}jEE)2a#nDT}dG6V`cCtdVGbIDGnw=sZ*0m z{lOyaa2=KTTqIBPKss{4(bz7dmVaR5T1u1u0Pg&bC7r!js8F%~2OXemf3TETs~9`8 z{z#f_HFh63XPjzWSjP@712d21`y&4)jMp`Vr@ITT1t9HPH&qEOe;BJ8m5&I}JJ+T3 zKiRJ~pg1tL17QjeP6J6$Ch4fyRaVg>3jB@cqiYobrw6!!>+r`ymtO<+S;ch;HNVO# zNz2yKxT~zP+dkppETW*Z#|e4|oy+5f*(rei&Ag07PiAx#AyXxHyjb+rxs~zprbdLztgYq3oFR<-U^9L zXBdZ5^3>t&iKk+JLj~BFM*a;(y)o_oo7J_?5*nSH(CXGInwGG|p5)MioNlqI0gZ}K zG<~osOOFLaRwpw<<^+>!dSwlDLFli=(Xd+}e1o46-D2Smaq9EbD?l)}DDB#WY z1!Zm{a=8ut--BgT`!=iMwf!FhwzAteqQU~!eS~ty8)7~~UOH$iB6R_#In`y`m^#X`0KcsVaST)IWDe3cAQ)?5S;#i&aj)CYkHG(8XdU;8D-<9V!$&fo(?h&I^f2qLEZ@tCULV_OiT`Sc!3kScDV zsQawCwA_qF+-Ko3EmLL9T+v?z9UZ+7YtfYjl<x59!u8*b_4_J=m zTGd$jA+yp+H$GF$BUVNJbFoTZr-_!je=&}G#H@AFr&l!hG2DayT}fUFTkg=7oWw5v z&Cd+0>*#a3sj$+Ph`7r-j{Dvp=Hx^6_%O#9l#h<2cFX9%Q)pir(x;~|!~QqZSpFHC zf#>h(zzgOtcb+5Utple-$DiKQ`xoG<%2uP`m+;7VsTh~PWQ%mx52v8x0yPP@Slte> z)burEfV=JK*Vn9_Wj(ycbNlRa#>cOPXde5J8op&Mt$&^TL%mJ4Dfca4-M=k8d&@dn z{+X@SbM~Rsci7n$R-#?+SYyfQB^7@U6RZ0)RU)-gcDKQ=_V<3@cxGy4dOe}x$r=p;5uH6fnCUkeXWp8xY6 zD{@a$bPHVT^~PYPto!AQi2*vU$Svs5XIQkl-5~!jtZSKBqoI`)s%3EmOH{+0Oz)+* zLCyiNoGV|_rZ3DByY9s=%+7gD_B%C?ZqztfpOEO*Fz!n+eA}g&^!W=LA+67#;f1WV zG|-oB6tXswUFq4?xm)8>-J zxNQCD(AmH7eiD00PC7oL)GsFPNpVgv?$mLE&heZ^tK8MYHV&A!kpXw;ro^L=+tbyY zx09m0XrwtWr@KO{%z09Y!`SkbbB#$V#%q=8R@CB{rpAWFct4%gb(ry>p4ZXA@@`&& zhm;w&0-Th}hUHIcfNh{+5#0k%bZH1BmEf_Zdlj)=(I}knjbfV9fWF@l+F61JAT;t` z37+U$u_Dkp>z%rGlPVPmw({m+DCx2*D5a>m1#cmpw4(JE+*8VQqYD;1#?=O|#W7`u zR>i?_3Le7GMy#Y(dT%$XSd#COx>?hslDwgB8CUT<1)jn9dr@UZ#g)Betv&~Hk-`hC zD8-W3mbO{ZLQ7s&nqozVEV;YXuQc7YY7hc+Fhq9 zrFb3l2G`!xxu+%EOQjaQd3BAxl;Sg_Sp#SW<5gWA9Mv|rS^nQ|ZpW1oP-HM(L#pCT z?wmiBYI9;Tca|RSrE)U&_wy^Ie%37ve4(0>7sNl{99BY3WQ7L?d>PUkGi8?#4Uu`E z&eOOGl_cGEx@g6#OD=tgS@Z5rn|ljj!l}?im~vIqto3oqvF4Md2HsTKhS#@0*h`dx zB~UEs%2tq)^g2{Rk$DdHEp%S zmt2gX7k0cGjy!2$&;2lz413;6muI|XkF_SXbEo2t{JvD>96faeC~NdGk&nyg$kmC5 zN~LOuF00UZCoW6-IL&e5txL@T;Z*tZz9;F66CbDBOqtF+*lA5yQCoOR=ImVxY=Oq4 zxK6o;a5ZN>PAV)#2`)SoCiN^A-av}0hMc*)6EdaND9y9%CtE`P1x3X=f@_ua2&91y z-9*<*^Ci-(jWo=aKWFcEzc+=zE{LN6ZoH;duF)WpEPIHw;wehbK055iA2^l}fw5UP zFeihy<2`ce``=b(T%mnsxQ|q$3X;e2s)((2amN&;Q=B_bLE4jL?!2Z0{Cq?RmQarf3WxV>rTlu_(tUWQ!*V|AdPu|UA zmq{=>VwIpxHL6}m&DzkPp1i)p@rii8CK$5LHwWq0ttqrD@bM^h zD9g*2OFTC@5r?r_ma;S z*b1RwkQ2&`er;@2j>Adk<4a2O<3ZBNmz3?t%Snr0(hfiVPFnMV*7&9C!EV$|<5~~9p{gggWs4#$2)dCAR zHZss)oT+DjSKPdLFPzh?c&AskX896WYJoyc#Ek-15!~qKThO^cKEeJoK&3Y7oqrVT zLJaH42kKUl4}u(Wry>u=k5v#~5cZp*jb{J8F$ zKN0oSZBR5YUSOfA{`@8M2kP4tH`TxWPOZ<&D#qYSe1}eoYDAAJ^A06fK;{77m6J=& zs&GHoDhLV|khm{tq_W6OCrUZ(PP41Auvr9(L~-YlT-P#z*}UQB&L`2gvchx8y6GyDmeTQT47 zD6J~?8W_rdt;z>kr#=vXO&u#f4Giut^N_xkd+P=wA1il~N;RfB)p%2BdK}HJ#(PEm zv*Sx)+vpVZm~Vg}Rur1j5gIda5+lq(W7WXYPLfrAU(AyxKMB?ua;d^{sCF3lbzB0U zZP)=r#6h_O;!Ks@&1qB^cPzWB;X4Gceu;qrZb7JsV^uE?b%IEunmc`aP;M9>= zj4U!DPY;;R$}^!(z`1Gy63}pLUqlVUd3U$4HSY`aU#lYp`3$|fNZnhW;YVrx4_yl9 zZjgpwhI4n_A~ICx4Xt12{QwSW4)v@KydN7&E2{GZ{~e%c0CnM7$bC1q;4>frFW&(B zu85$$4%tSFupMPa?lpKB-72bCgF8qWn<=>l4=NrG?eNi1%C5mn+pZEBxU}%uDQYa} z&Q;WBJNKj;c&nC72&I2T$=`l18LO7`r6v*FK`nVdgnC5$UnT$iO| zKZO1kC0G93W~blCGLqL+3z>yb<49ide+%7NNmC&{!xNR$!SZdx0ftc!khjz$;6C zFWSkBE=}V0)UqbGl=^I-t~GgJ@v7)~M`fB{la~uXl^-EEe}$^Ey0Qq`EQD&Hq1xGY zOVL<(G(E4$&H@qeK3ubY+wl zzLj^BZd1XZ*6Gn?ek*lR|gzT#s=C{hew3`Pl0}m zi-x&+@^{0Wv;xD7#qruo(@In(2FP(`Jtf8PO11$%ck$;UniqpEn%1DJF}z7l3@#3) z6@<@&h{kv~6d)LoEw~He*)VSvUY{H%60?c_)FQ6RfOU9^atoGF$5?(us*p$J>hd|# z%sX_jF1VQk7pYx6?qGBEia^|y3z!%|Uqeq^p^5dln~me`ug}q|l|5Y{Bc4}OFu5o% zysD3(&SgW;J*2P{$IJ89Xevuf(4(F6y6+ZAaXinX`)cr{m}W#>gM0H^a zTe;2Eh-o(v)AX`f?8T8L++!dypF~1iv@wL@{W!)1@B{Vk}_Iy7Yc61%S$u*QLARWgKiofY{ny@&-&bq z*KywfM96ni)s7hgoJAN{eHR+q>_lyw^C~6x^ubce(PszJg64d<6Rdb(j=Nz%;7Z07 zq?g9Ke*%igMx6xiC>?oBtrD;mZdph(5_qETh8_5R2)$XE-gD85;^6pEXaN(U*k7ng z#5wlc9uZ6AF;c)|YM#i$bUBor$P-*)*ARP_3T99AbO4sQY`eL*3aCK;B=Sbm+9MR7 z#G65Jw;+i}fcd(XgpCv*n8f`&I?gkgiPO`An!hiMZW-NL9d&R%&e##3bo~LvCi5_t zsiKpZqHls3P5r3p{@*PJ3)-H{-K4(r=yEb|DK&XOK`pR-WmA(DyqU`sHP*cwmVy}L zm&~Fu_VlAYE%-VqmOxof=8AmI4x3UTcZwrSLSDC7TUqY2O3M!UmKc zZdmt-r}D1SwQe*hmDiD~bf>+kfK#Kcq)X!yO4{WhYgLYZwhv8D;~r7lZ=wfm2|r+o z^5-~JZw=fRQmxm1@HB5GVa&)xEzaJ}$+3cVAA|X2HoZ>cO?dN-CMhsZIc%UtEqNtr z@jkJd%0|IVB>1+`FGPwVRPmpQrSi}Z`-reUKEPfKHI@3t0dL}v*&xf#J39&o^g-jR z?DM00Eg{GGQG-^zp>6`rZN(FH<>`4VeB#HBl-!yx@|ZZ?0KW)rt;gj|_7?GOLU-~} ztR3e2j%?fTjG(ODf|6Lz@_vBF2ESMNXKX^aI4)Ux8|ar@l1UiTIL8 z8zW_O;GO(}cZp)D=W*_~!S9lxg*}O}WX2;h4z0Mwi@O&3F}cJ#@)bB_aZ5+Q&4Qde z@h!-sdZrV$y4l(Ex)b*Z9+hn{8-1pjnTMIO^iE-+MKPEoMCvX~PaD&#D5%M_R|;no z-I@2Y?7dALr+&^(%Iyr;oIOPMJM(f*bq|3KXL`@li6ybayOa3M);HWqWxMcr%h8C1 zg9DXvJ&n@4@HlB|8XfEcp{dIbQo2B@ci2H;T>;_gTPU?FZzbYxja_+J^91L2^mkY8 zAw_MaFI{;h^UqH2jFr1_XPxC;$9Dk!Nd9RnC3OcmyRgZa+npohnj1ClfiC86FwX74 zk@s-#2D;gkPXVg`(u=#AKeByCS-p6jpc3F`9^zzEp$Jk|WE2#R7CCuvoCMYf!k5!4 z0H8i?)v2)3C*;zhvog4%$-XI{P^7Jiv4Mth>2I_bGVS(>(r0#zrRGC){w$xxz-c;C66u$DDdJKh_^g5aL59OYQZlV(8X0?X0g`N-Pq2;>&Z%dt? ze%Dfc!C1Y2M)AY=DQQ4D*$#)&u0}ew7|y+YDkTXv=|scuR|A=;X@&RvY*MVM;2-&s zmJa8YU1kk5m`{U$m%0;_NF0J=4TS1*oqEJ}27a{HAJbZ!}o-P#3U)x_NLB@r)pqDGX6#y?TXP@^o{0a>CcP^f1Ju>*)d86(j5T9d81?e3X8^ssu z%Fwb=z%}y@^mG)q?!emQnZa9?|9!qnr8FX}w6Bd3*uBv(t%zB8GXblk>l0d?!H1Sa zj+of2XG*9<{-gOx^N=r&^ma6_FBxhXYmEV^*SXNFu{_35+Qitj!@%?_X4B)be1DlW z`gelEKW*?6Bee1fnJGGNgJ7Oi{p2}xB$JOq{o3QWpZUGnwq(_x+gsw@MRBNFhe(<{ zj<5A@JqDwhLFz#`!ZG;HC&wQggZ-4_&nb00KwSG58a$o{B|j80(6R4Ma?Q76no=2K z;1g%qnvK0L2|YxP7VIYi<&|Y!)lEPghXBL(I3Y@+v|F1c8U{3@Ux?R=nPR%FqiimI+J%P6fKikcKSxWSF8hsWOiYb|Y zVgDNS9P6O^na?JxxtN^T2ifv{1>}_x{6i`l)YC`dl!;7 zDbp3&KanR()*r||i#IFVMaa}Im8mW9?w1abU)0qcj1k9ogh#8r!#0|j#mhK|6v9P` zsUCq90||+AX;1sIxL8BAe54qRs^XNo9NnPKq~R;Skapa zQfFEd%K@Ym)U|s+)sfZ87Uh1FV~ZuxFFAk|Qbj3i@6&HN+@q988wJJ7OXYTL0V$`D z%*5|NwK^4`>hK<*(mbbQFrfPhU;Ec!W%)*f6}6&TQvfT`{DXV+%M|V>9-5;c~)H zu+laD3aj3)DPte^77$`q4_25`iVc5+_LA?>$0>ZbG~g9&pUPX71$cy>;W55ZIf4ah z674Y&+N$cko`R=wFJymCoW^~nv@{wqjr){;fa0q~wkNRRR;pzkDaw@4X7F8s;HOH? zVz|nRW^{HMuk9kr*FbqC8CRNWPSsLPs6|t9xl@C{W?z8?fjJq#DkXdw1+X;Yi51W< z75k-@KEVmPZGAW#N3_+FkNJZvmy3rBU(lrKyjJo1=xfv+`h7YWmZp?Hogb0=Tfk0` zbv_H;Ropt>xO)Z=-1_KKN3*eyJp>gK6fAE#^`8adF?1}Qp9N)b!g!TFgf^H?=CgTE zY3CE_Hyh+}_B7f*8#`{9G4x2xyD88e&Y<#djQme@`$_BzPa3i`p)CUrLv=F$UGh{ zKOQNRumdeXL+xjdG9H`0f2o&ly-8)k#8M5~uZ(AI@ukrxlA z{}%Evxzq5kjc}_G#@dVcDm^%~{N;Rv&W^gQ;E^^kJ!1Sw77Pv~3{36y!L)M)@Bj6A z44y~edD37CUkO%h$#gool6y--ryHNIv?O73ZSFMl{!(hU_Gzsdf!{q z>CT)4b+JjEBXk;J%FxyHa6P}Mt3tara36fj-y5LQec>`^Baig79SZU1j4L*F@CrB; zR@3NOXMyV#`Vh17)Mg_uBlU$Pb0e=Rb@QcN8+ld<>mjIisx;Nz1omxPPg=MM%H0e) zv57Y-I|6 zQG0xCORcwpy_k7{W^UyT%EKRAkPF8uK(9C9nqqek{Et<|?$)o0UCMGKj~ZY%-M8`L zx*$!xJ2#AKZsY#NkD~6~1Jr99Z?)owQE2&o z+VFoCnpKf*Z0BKWp{o1IX$LgEfj{?aUr}g$J!#ku?htqg&E@XXXk(Gucdn-PRo9!c z7bP^6?`!0C-2s(vpho>vmG7R)pnmCyB+frCRKEYhyG`3sO)B5AXC1#+`ECxSayxms z;-c4o_EI9Q15u@Dv(TWL7a$lIy>q#rRlcLnIMR!nyfWR`$*qbbj#a_QEU$L*!6hqo z6xuZVgzD6H7x$AEwx{{Kcv-6jgu1^xT!tZ7KCevqM($aBKZ@7fO;)+w&KBOHKaRXwd8(GngZxCH zd%0hMdQ>EHOkbkB1e{gSYVh=M65EM$C}IvwTuPymUlH(Jc?R%YqH-x2UYt>)b0H31szmzT+&u;jE8gFA7=vZM18S2WhgTLoecOZ3OfxTa7ZzL5ffHgY zDl3>3W;GsSfSTCz{9ZJ?#z?Dn^NrG_BMD_`Mtz5?Ji@g(52LWLJj@z^d{w4OY7=lG{GOO7y^Xew!RIo`ulo z{0J*c^zs9&!acsiYSmG}v4j){z?E4$XwN>dbK8&5fc-q7Y-J5NLFMqyvSJa7auJZ% zfV1mY!J?Fv?s*YAzH9~4$kCy=2| zgQ@y4zD)|-3$JqCtwPmgTlExcSVk*;^DJ1JVr%x3V?mi3ayA{6CEwHW1?7*=XNyxB*(dIP08&P_wkUMqEU#P;|B_d>-<#{V~10`k*?IT#-i`?r<5H>XwPZ>%5jzYKZY@p?h$Ep^(>#H zyGiZOL0uM-Yn*=$c3!F1Hrjojrv%jiFrluv4%Gt>(yrZZ#-ru2Ul7s|DS%*j`M?nL z4Bz2nlR{A!pk({2Aq~F3he++?>GcKh$H~|+f9ES~>zO#pkQfNS!C)N^HJ}T>Vk<12M3bO(<;xa_l+|KT!Mkd(LPa(Ed>b} zQ{fbD)c_oED{huZjW0v5x7(K5*%+b}M*gtqj^ZNyb^yLb7G9LYdBfrMNc68=X9&a_Swov&N6Ta2h{etQk zy{^KxhCDV$uR$m{xSkBx`A9glO}Wl{OBdJCm+QQ>^u7VLzQF^8$8z=!C?4-c(S{rR zSEd|uP_WEY zzZ-k_)Vv6%yxV-cG_)qozQZHs*DC42ssaN#E|jL9fCy4>hu6jFa*=sJn7@8Nm|L-8 z8mxXqm{Zk?5avLbhA{pAPlVZ5mA2*aK=Vca+S0u|o+Ul3O1PUb!2wWN28jW-?&+z6aUpC0iR0smpDu;fHQ0)M4l z`z#DD!i^IeZXnLvD)4Ge8u6G{!ntzM&){M3$75)iJ%g!|!YfN9S5jw%-?YV^hN3;a zzamEsBnZxjkIw}0VpAjg%!?~r3;MdKe&;9cj~tom2v z$Va;xazs=on`c-+EQmHg=04TCVNIw5%nOHN6Njbex6|A|Oc;{DP}S!kUg8^z3H@V7 zaD1)oH-^))XD}PI4>!Jk#w+M_{^a%ocFNPnj2Ao(m{OO{ycC$?CopA$3SVG~ztQUz ze|VJ3G_PLOwxvX?CRCM`xV9QTA)N>w6Rq?ByfIEKI}S_PoFpM-vJM zHg?ib_=bwY>XwIyNbE*E!BI7GAWxkfC{?^kO?C1xX}klS)5+DP`VM3v$sUrQ1C^KL zgHl&7<5NlY)s?DcCpyC>*L)(m7Lyk{&QTv=YeSRjCMTL*G=VM^lS@0bb1)%tD{YgT zuv9SaznrCFdO5=PfvrH~gQiWcl7`5E|KMpp4hbxrhL6%aL7$Q`K@CV7uEt}8CXA2neJT`3_q4yXXoVUfeTA%(kZ*P&+(MQEL_SGT;IXgN|} zh8kJORitw^G{!=nErlD%xuhH=*^Z@_CFKH{t0;|Q60y|k*aoJs!K&(i+g>`C6)o9NCGwMQ4W!s$mH%M`&p0c1&oE73|cXPvJNt(ILXVTD?RC7Cpkh&k|^9+j**)5 zq*2ZQ#%&#KahAK;*}2-9y#ezAgU+qN7C?Eur7H!v$Z1mD9yHNKo+J%3BfHY_FOqCV z8Kvb8=IaV==wWI3i21`WHnh%F4lv(^i|ej(AM+SoG;ot+%s+p&p&4#+d-Hj?C~%Wo zOPAVHQW<%Kv;x6*W#kC|U;ncac}oWRp-T)ILx2c^Yu*qj)kUDCjKBK2juhrDPu6Xv zN^56tY} zjsEkJH#x3S9{@AaqzN;_l#N~Kus1NXZ-I@r#R^9ku%8-c4qH#}yn&hT-r9VJnMYKY z*3>{tG?>2=H!5cOy`y9wd5YB2j2`*O^?vd~spLzF_XjfG?|^)(K*nb( zQv=^_AYYce;=rM zMPTIa55{>F1x7xmhe7fj-2~%^V1bdti_z0ca+GbaM`CEe#sGnh;6v>m8*5gUUrV|H z6dWoKko=p_Z=v!EU4M$NDzB1|5ao4M`JNO#kp8R&@I>sU0bwB1gZtCwFxgdFpG)V% z%D7r@=|;31FJ<*0pW5ijx(9lav`=jf=`Y_Ga&?iDJHEAh z4@$3%9jy6gBJtb#AKG18E+ZYEMb~S~^$ovolFbTd4iU~XIguAPQRO;vBdOsg8eKfaVV$GOqmK}SUy6apbw1vypC$rlf$J=>u69tkc&@K z>9=}v-BH~|X#pPPBtG%!eN}Cl-xBls-IU~4i2d=tW%LjCrgY-M6qz0Q*BnO}+x2nt zk%kRt#QFgplnU+fso9bH@Cwh;U*dX=dOfOepq(f%+*>U$tEfP>{W4sRyF9XHrJHyU zCzmYo3fVKV#|Z~REI7n~>^y`^%zB~y+o^a9^#{^zD0iaF%);H;qx>jj3XW{5wK>6jHaXMO2C}{7km^8?Z2hH;&a|n491?v4=Bv1l#m210FM&3Ud` zv3>WR?K|}B{H@~joAkM%?C6+#-A0_e5jCuHr*AK}U#AL%|Qmivse! zvF@jdKE!)bd0^-M-^#7HPQy{zF!%e)3$D|OMsm1aUp#~lWYo9fy|2@&MzWo2-1o&> znr_t3YIB`D8q0Qulpjk_oyM}Kqo^i^@WaQ|!4MkD&W>TGmz{?U{MKQW>$Dy(UH!gq zu7c@C?Qrom%0q{7PT!X({e6itrW+N~p5g|8X`G)1*+Rgj&-WGkU#EyBaN5fsq8GZT~0Nc%4N+9YrLg)O=Z_AcFScn zaYqS5^TKN}7(_C9Y%y=0cz85e?bB85voHGmP-y>QJZ)|&JDL}-{FY8Pl|4&c9xny~ zny`C3y>BWHG*1Bf^lT=VH$PGREzN5tcd$G>&e5#W^FsTr<4E6J_O_Ub`$GHlaa5_f zY;Qh3_$|dZms2cCtB>{LXl--Z-Qr!QDD)_kE;g4-yIxZ7w&Sk}P+lfLoeFwOB@*Ol zDKV4kC&(V7Dx-|jItT<4Kz~>a6|(hT@MEynkHS#J(>vm6mVO#;@pP!^>F(c#b&paFE&06+QS{D30! zd}yWLs8^y~I=~8VFh64K-9-n9O|ao?7P|0n%5dQ;lC6I-hIS-^PwQq*1&OkE>ojvm z9LSIr+D81M-At9VW`$P%>AuWQ_r5>fyZm^MQ*uIm7t!D(Ioxf-3TH5Ied<|ZGundd zqhD>lq4^8xe3I-^CLNFQcBFXw-H^e7WJPwDNS`b>Dp`NDfUmyJ3Tl}w`^AS&!gn6) zth&B|QeJra2-{P(UP39{-p0|pXsqQ){rlzGZjp8I=r>qk=6B;cTHm&u&Lzvv<)1H* z&7%JwU*`cAHS+#{$Qs2{5>QzXK~O=lAU3dKN3mk>y_pL}BpQM)R7&q7mZ^MJ?A!;@!k)^Z+xmk9PA@uUH@Cv8Cc7_jeT z_K9HMdz?gdg$ZE0)g+m2Ypo_b=+<{NN$(2Nfgh{LXVAUgtfJu){4Ub4$+ORBQQ$NE z5X)_5eTdd{X2plu2}5{@;|yAzKWcu+it6f z8MeKevsl{EvrnFVkHykWlX4KV_CxCn5rEp4WPLe7{ikwAbofn#!NaTg@AQ>DuKE)aJ=C?mH8!W z_)#bLY51S?_ut{hGxXUS__^3bM{{xT(f3leN)INJgbh&sbL;tmHr^d`;9&)GE_^T;#`5rJ(q$klu`|Y-G6pI`9gEA}cqFGked&>s z52wP$oaOb7v>UA4DZ0Vy9efOieFz3_z6ACgOX^3$A}u3>42e{#c*d;%8mcs8$BObvwJoYS6io%b}6NkaV!aRx`7^V#IFc=lfx@5^i`0~qx zg^s*u!;#ZlCi^K2$DyUmBW>0($P8O(QqY1N*qawj{x0z4(UGvX42Us$j%YU zh=7CYpMKD5)%a_^koRy90hBYLqo_@ zx}7wH_>X~Y?IC0^-F}HAo9Xrtyjq8DCq)wfvD6+(29Jdc8t(>^9b+Lc|C~X}kAu}# z$Y3&boU%ZA5l6mI9XW{98n3LAeu*Qu#)Fi0R`$G0qq)#o^hiM+X zv^uDTkyfI+lgY6ON|O>v`DtS~*&?}8fktuPLt^2Fgixik%#ibPkS&^r=7 zSxM9#SKpZ~PFA{0()b>v;xwoLm12o$8m!ayb|){VL1Ko-kV(_wD$et6Cew7tH0i%_ z@(g zy^ii2wj6{Xyn6e>Or@3ET58&p4^2<0IPLI`RE!5xeX80sQz8|Ez?4Ky_m_go)?p}r zYJ!K;$xAR5n@&xOnCT1^n{r9Z1f_Mcl2lY>mcdjs%{Bd=prkuW<=c~(S+rWTBb#R_ z4WxtZ$g^3>UP;%Etey=`cf;YGDSV!CN0KJNYdRMwm31&6nz}4db~;Kcn-O`D(pGBGjC5WEb>eXtIlM^e zEX@leMHa*4r9~L&ycn8VsW38au~I_H7e-bsR?0iyY6^9xO5(@pd#B(Nx$76f6mD-* z@^UdO(Tz=s+Y(5Bi>9RW5;*_jO-Ulvx0;YMOQ3ZwYC@csDg&kezQS{NN_**6V{&FG zT&0@^k25cWLv>CdEtbLc)e7IKGw(TZgo(Z`PFPLq# z94;!=?oBQ&hqiOM7l|McNx6n(0s&6oZovv=nzXtnnY9A0hE>l`POVU?`G)mm9gO+t z9(d#`mA*fny;h9&=Jko&N~Nd&`5v%LZ*Fw}(@MDrok8F{1$05Ui?&i}U~q6M;t-#! zPVj_Iv0f8xY4xYJw4$Y!ET!KbH{2e--KHY2w{A;6br z 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 E2Uk+Me*gdg diff --git a/src/DiffEngineViewer.Mac/runtimes/osx-arm64/native/libdiffengine_viewer.dylib b/src/DiffEngineViewer.Mac/runtimes/osx-arm64/native/libdiffengine_viewer.dylib index dbd0f0594f2b42719b9410fd65f2082eae0f9b03..36c26a94d6be525e83d35f206c625835101f0393 100644 GIT binary patch literal 426440 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%0D6pI6~h++nqhf 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

public const int StackLimit = 256; - public static void Diff(ReadOnlySpan a, ReadOnlySpan b, Span changedA, Span changedB) + /// + /// How much searching one diff may do before it settles, counted as each search's depth in + /// edits, squared, which is the diagonals that search looks at. + /// + /// Sixty seven million of them, which is about a sixth of a second. That is one search 8,000 + /// edits deep, so a block of 8,000 elements moved from one end of a sequence to the other is + /// still found, however long the sequence. And it is more than any two sequences of 10,000 + /// elements between them can need, whatever is in them, so those are always diffed minimally. + /// + /// + internal const long Budget = 1L << 26; + + /// + /// The depth every search is allowed once the budget has gone: enough to get past a few + /// hundred scattered edits and split where they have been passed. A search that settles has + /// moved on by at least its depth, so this times the length is all the rest of the diff can + /// cost. + /// + internal const int MinimumDepth = 256; + + public static void Diff(ReadOnlySpan a, ReadOnlySpan b, Span changedA, Span changedB) => + Diff(a, b, changedA, changedB, Budget, MinimumDepth); + + /// One sequence. + /// The other. + /// Set for each element of with no match. + /// Set for each element of with no match. + /// + /// The searching to do before settling. Given by the tests, along with + /// , which is the only way a search that settles can be had on + /// sequences small enough to check by other means. + /// + /// The depth a search is allowed with nothing left of the budget. + internal static void Diff( + ReadOnlySpan a, + ReadOnlySpan b, + Span changedA, + Span changedB, + long budget, + int minimumDepth) { var length = VectorLength(a.Length, b.Length); int[]? rentedForward = null; @@ -30,7 +79,7 @@ public static void Diff(ReadOnlySpan a, ReadOnlySpan b, Span cha : (rentedReverse = ArrayPool.Shared.Rent(length)).AsSpan(0, length); try { - Recurse(a, b, changedA, changedB, forward, reverse); + Recurse(a, b, changedA, changedB, forward, reverse, ref budget, Math.Max(1, minimumDepth)); } finally { @@ -50,8 +99,10 @@ static int VectorLength(int n, int m) => 2 * ((n + m + 1) / 2) + 2; /// - /// Recurses into the half before the middle snake and loops on the half after it, so the - /// stack only grows with the halves still waiting on their second part. + /// Recurses into the smaller of the two halves a split leaves and loops on the larger, so the + /// stack is never deeper than the number of times the problem can be halved. Which half that + /// is no longer follows from where the split is: one a search settled for can leave almost + /// everything on either side of it. /// static void Recurse( ReadOnlySpan a, @@ -59,7 +110,9 @@ static void Recurse( Span changedA, Span changedB, Span forward, - Span reverse) + Span reverse, + ref long budget, + int minimumDepth) { while (true) { @@ -101,18 +154,36 @@ static void Recurse( return; } - if (!TryMiddleSnake(a, b, forward, reverse, out var x, out var y)) + // As deep as what is left of the budget buys, and never less than the minimum. The + // whole of the grid when that is within reach, which is a search that cannot settle. + var deepest = (a.Length + b.Length + 1) / 2; + var affordable = budget <= 0 ? 0 : (long) Math.Sqrt(budget); + var limit = (int) Math.Min(deepest, Math.Max(minimumDepth, affordable)); + var found = TryMiddleSnake(a, b, forward, reverse, limit, out var x, out var y, out var depth); + budget -= (long) depth * depth; + if (!found) { changedA.Fill(true); changedB.Fill(true); return; } - Recurse(a[..x], b[..y], changedA[..x], changedB[..y], forward, reverse); - a = a[x..]; - b = b[y..]; - changedA = changedA[x..]; - changedB = changedB[y..]; + if (x + y <= a.Length - x + b.Length - y) + { + Recurse(a[..x], b[..y], changedA[..x], changedB[..y], forward, reverse, ref budget, minimumDepth); + a = a[x..]; + b = b[y..]; + changedA = changedA[x..]; + changedB = changedB[y..]; + } + else + { + Recurse(a[x..], b[y..], changedA[x..], changedB[y..], forward, reverse, ref budget, minimumDepth); + a = a[..x]; + b = b[..y]; + changedA = changedA[..x]; + changedB = changedB[..y]; + } } } @@ -126,24 +197,37 @@ static void Recurse( /// for the overlap depends on the parity of the length difference, because only then can the /// two land on the same diagonal after the same number of steps. /// + /// + /// After edits without an overlap the search settles for + /// . False when there is nowhere to split, which leaves everything in + /// both sequences changed. is how many edits deep it went either way, + /// which is what it is charged for. + /// ///
static bool TryMiddleSnake( ReadOnlySpan a, ReadOnlySpan b, Span forward, Span reverse, + int limit, out int splitX, - out int splitY) + out int splitY, + out int depth) { var n = a.Length; var m = b.Length; var maxD = (n + m + 1) / 2; var offset = maxD; - var length = VectorLength(n, m); - forward = forward[..length]; - reverse = reverse[..length]; - forward.Fill(-1); - reverse.Fill(-1); + // Only the diagonals this search can get to are cleared and read, the ones within its + // deepest edit of the middle and one more either side for the neighbours each step reads. + // Clearing the vectors whole cost by the length for every split, and a diff that settles + // makes a split every few hundred elements: that was the length squared again by another + // road. What lies outside holds whatever an earlier search left, so nothing may read it. + var reach = Math.Min(maxD, limit + 1); + var low = offset - reach; + var high = offset + reach; + forward[low..(high + 1)].Fill(-1); + reverse[low..(high + 1)].Fill(-1); forward[offset + 1] = 0; reverse[offset + 1] = 0; @@ -193,13 +277,14 @@ static bool TryMiddleSnake( else if (front) { var reverseIndex = offset + delta - k; - if (reverseIndex >= 0 && - reverseIndex < length && + if (reverseIndex >= low && + reverseIndex <= high && reverse[reverseIndex] != -1 && x >= n - reverse[reverseIndex]) { splitX = x; splitY = y; + depth = d + 1; return true; } } @@ -240,8 +325,8 @@ static bool TryMiddleSnake( else if (!front) { var forwardIndex = offset + delta - k; - if (forwardIndex >= 0 && - forwardIndex < length && + if (forwardIndex >= low && + forwardIndex <= high && forward[forwardIndex] != -1) { var forwardX = forward[forwardIndex]; @@ -249,15 +334,172 @@ static bool TryMiddleSnake( { splitX = forwardX; splitY = forwardX - (forwardIndex - offset); + depth = d + 1; return true; } } } } + + if (d >= limit) + { + depth = d + 1; + var furthest = TryFurthest(n, m, d, offset, forward, reverse, out splitX, out splitY, out var matched); + if (TryDisplaced(a, b, depth, matched, out var displacedX, out var displacedY)) + { + splitX = displacedX; + splitY = displacedY; + return true; + } + + return furthest; + } } splitX = 0; splitY = 0; + depth = maxD; + return false; + } + + /// + /// A run of this many elements found by is taken as the sequences + /// lining up there rather than as a line that happens to repeat. + /// + const int DisplacedRun = 16; + + /// + /// As far as a run is followed to see how long it is. Past this it is long enough, and the + /// rest of it is walked once, by whoever is handed the split. + /// + const int RunCap = 4096; + + /// + /// A better place to split than the furthest point, when a search settled having found next + /// to nothing: where one sequence's first element is in the other, if a run of matches + /// follows from there. + /// + /// A search only looks within its depth of the diagonal it started on. A block of elements + /// moved further than that, from one end of a sequence to the other, lines up on a diagonal it + /// never reaches, so it passes nothing, every point it got to is as good as every other, and + /// the split it settles for is as likely to walk away from where the sequences line up as + /// towards it. Splitting by the furthest point alone, 20,000 lines moved within 400,000 came + /// out as the 380,000 that had not moved being removed and added again. The start of each + /// sequence is somewhere in the other, since elements only one has were set aside before the + /// diff began, and looking for it is one scan. + /// + /// + /// The nearer of the two when both lead to a run, since that is the smaller block to call + /// changed. Neither when the search itself passed more than the run found, which is edits + /// scattered along a diagonal it was already following. + /// + /// + static bool TryDisplaced(ReadOnlySpan a, ReadOnlySpan b, int depth, int matched, out int splitX, out int splitY) + { + splitX = 0; + splitY = 0; + // No further than the search looked, which was its depth squared, so a scan never costs + // more than the search it follows did + var window = (int) Math.Min(int.MaxValue, (long) depth * depth); + var inA = a[..Math.Min(a.Length, window)].IndexOf(b[0]); + var inB = b[..Math.Min(b.Length, window)].IndexOf(a[0]); + var runA = inA > 0 ? Run(a[inA..], b) : 0; + var runB = inB > 0 ? Run(a, b[inB..]) : 0; + var needed = Math.Max(DisplacedRun, matched + 1); + var fromA = runA >= needed; + var fromB = runB >= needed; + if (fromA && + (!fromB || inA <= inB)) + { + splitX = inA; + return true; + } + + if (fromB) + { + splitY = inB; + return true; + } + return false; } + + static int Run(ReadOnlySpan a, ReadOnlySpan b) + { + var length = Math.Min(RunCap, Math.Min(a.Length, b.Length)); + var run = 0; + while (run < length && + a[run] == b[run]) + { + run++; + } + + return run; + } + + /// + /// Where to split when the search is not to go on: the point furthest along that either path + /// reached, counted from the corner that path set out from. The elements between that corner + /// and the point are a small diff, already known to be a few edits, and the rest is searched + /// again from there. + /// + /// Any point inside the grid splits the problem into two that together are a correct diff, so + /// nothing here can produce a wrong one. What is lost is that the two together need not be the + /// smallest. A corner is the one point that will not do, since one of its halves is the whole + /// problem again. + /// + /// + /// is how many elements the path to that point passed as the same + /// on both sides: what it got to, less the edits it took, on each side. + /// + /// + static bool TryFurthest( + int n, + int m, + int d, + int offset, + ReadOnlySpan forward, + ReadOnlySpan reverse, + out int splitX, + out int splitY, + out int matched) + { + splitX = 0; + splitY = 0; + var best = 0; + for (var k = -d; k <= d; k++) + { + // A diagonal that ran off the grid holds a point outside it, and one never reached + // holds -1. Neither is somewhere to split. + var x = forward[offset + k]; + var y = x - k; + if (x >= 0 && + y >= 0 && + x <= n && + y <= m && + x + y > best) + { + best = x + y; + splitX = x; + splitY = y; + } + + x = reverse[offset + k]; + y = x - k; + if (x >= 0 && + y >= 0 && + x <= n && + y <= m && + x + y > best) + { + best = x + y; + splitX = n - x; + splitY = m - y; + } + } + + matched = Math.Max(0, best - d) / 2; + return best > 0 && + best < n + m; + } } diff --git a/src/DiffEngine/TextDiff/TextDiff.cs b/src/DiffEngine/TextDiff/TextDiff.cs index 610403b56..265bb58d6 100644 --- a/src/DiffEngine/TextDiff/TextDiff.cs +++ b/src/DiffEngine/TextDiff/TextDiff.cs @@ -3,6 +3,14 @@ namespace DiffEngine; /// /// A line diff of an expected and a received text. Lines compare exactly, whitespace and case /// included, and split on \r\n, \r or \n. +/// +/// As few lines as possible are reported as changed, with one exception: two texts of more than +/// 10,000 lines between them that share thousands of lines in a different order, 8,000 or more +/// of them out of place. Finding the fewest there takes from a fraction of a second to minutes, +/// so past about a sixth of a second of looking the diff settles for one that is correct, each +/// side being exactly its lines in order, and may report a line as changed that it could have +/// matched. +/// /// public static class TextDiff { From c217f5eb11a0ad0b20403df0c3763c05bfcb4a91 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:00:23 +1000 Subject: [PATCH 37/73] Build a screen when the state changes, not once a frame The loop presents sixty times a second, ten when hidden, and built the screen for every one of them. A screen is a function of the session state alone, the state is immutable and only ever replaced, and for a window somebody is reading it is replaced now and then. So nearly every frame built the whole queue's labels, groups and tooltips, and walked every selected row, to arrive at the screen already in hand, and each head then compared it with the last one field by field or encoded it again from scratch. ScreenCache keeps the last state and its screen, and the loop and a head's modal loop ask it. Handing back the same Screen is also how a head learns that nothing changed: the WinForms head and ScreenPayload both stop at the reference. The WinForms head keeps a screen that compared as the same as its last one, where it used to keep the older of the two and compare again on every frame after. A frame of a drag still builds a screen, since each one moves the selection's end, and the status line's count of what is selected walked every selected row through two flattenings. Rows a selection takes whole are now counted off the row as it is. ScreenPayload found each segment's byte offset by counting the row's bytes again from its start, which for a row of CJK, a segment a character, was the row's length squared. Segments come in the order of the text, so the offset is carried along. FrameBenchmarks, what an idle frame costs, before and after: 100 pending 29 us 158 KB 2 ns 0 B 500 pending 147 us 787 KB 1 ns 0 B 2,000 pending 1.09 ms 3.2 MB 2 ns 0 B SelectionFrameBenchmarks, with everything in a pane selected. The frame that builds a screen, which is each frame of a drag: 20,000 lines 2.9 ms 3.2 MB 0.31 ms 7 KB 100,000 lines 15.1 ms 16.6 MB 2.5 ms 7 KB and every frame after it, for as long as the selection stands: 20,000 lines 2.9 ms 3.2 MB 1 ns 0 B 100,000 lines 15.1 ms 16.6 MB 1 ns 0 B ScreenPayloadBenchmarks. Its rows are 300 characters here where the commit that added it had 100: a row is encoded as far as the window is wide rather than the pane, and at 100 the offsets were too small a part to see. Both columns are of this version, the first from the commit before this one: a changed screen, plain text 46 us 41 us a changed screen, CJK 7.4 ms 4.6 ms the same screen, plain text 46 us 3 ns the same screen, CJK 7.8 ms 3 ns All with other builds running on the machine. --- .../FrameBenchmarks.cs | 10 +- .../ScreenPayloadBenchmarks.cs | 7 +- .../SelectionFrameBenchmarks.cs | 10 +- .../ScreenCacheTests.cs | 134 ++++++++++++++++++ .../ScreenPayloadTests.cs | 102 +++++++++++++ src/DiffEngineViewer.Tests/SelectionTests.cs | 71 ++++++++++ src/DiffEngineViewer.Windows/ViewerForm.cs | 14 +- src/DiffEngineViewer/Native/ScreenPayload.cs | 37 ++++- src/DiffEngineViewer/ScreenCache.cs | 36 +++++ src/DiffEngineViewer/SelectionText.cs | 45 +++++- src/DiffEngineViewer/ViewerProgram.cs | 17 ++- 11 files changed, 463 insertions(+), 20 deletions(-) create mode 100644 src/DiffEngineViewer.Tests/ScreenCacheTests.cs create mode 100644 src/DiffEngineViewer.Tests/ScreenPayloadTests.cs create mode 100644 src/DiffEngineViewer/ScreenCache.cs diff --git a/src/DiffEngineViewer.Benchmarks/FrameBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/FrameBenchmarks.cs index 8877af810..a9bab8735 100644 --- a/src/DiffEngineViewer.Benchmarks/FrameBenchmarks.cs +++ b/src/DiffEngineViewer.Benchmarks/FrameBenchmarks.cs @@ -34,8 +34,16 @@ public void Setup() state = built; } + readonly ScreenCache screens = new(); + // One screen from one state: what every frame paid, and what a change to the state still does. - [Benchmark] + [Benchmark(Baseline = true)] public object BuildScreen() => ScreenBuilder.Build(state); + + // What the loop asks for each frame now: the screen of the state, which is the one in hand + // whenever the state is the one the last frame had. + [Benchmark] + public object FrameWithNothingChanged() => + screens.For(state); } diff --git a/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs index 304031c27..2f1fcd648 100644 --- a/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs +++ b/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs @@ -6,7 +6,9 @@ // segment. A row of CJK is one per character, and each segment's byte offset was found by counting // the row's bytes again from its start, so such a row cost by the square of its length. // -// A window the size of a 4K display: 426 cells across and 130 down at the 9 pixel cell. +// A window the size of a 4K display: 426 cells across and 130 down at the 9 pixel cell. Lines of +// 300 characters, since a row is encoded as far as the window is wide rather than the pane, so a +// long line is where a row's length shows. [MemoryDiagnoser] public class ScreenPayloadBenchmarks { @@ -52,7 +54,7 @@ string Rows(bool changed) var builder = new StringBuilder(); for (var row = 0; row < 400; row++) { - for (var column = 0; column < 100; column++) + for (var column = 0; column < 300; column++) { if (Text == "cjk") { @@ -62,7 +64,6 @@ string Rows(bool changed) else { builder.Append((char) ('a' + (row + column) % 26)); - builder.Append(' '); } } diff --git a/src/DiffEngineViewer.Benchmarks/SelectionFrameBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/SelectionFrameBenchmarks.cs index ab0b2afc5..b9c900d5f 100644 --- a/src/DiffEngineViewer.Benchmarks/SelectionFrameBenchmarks.cs +++ b/src/DiffEngineViewer.Benchmarks/SelectionFrameBenchmarks.cs @@ -30,10 +30,18 @@ public void Setup() } } - [Benchmark] + readonly ScreenCache screens = new(); + + // What a frame of a drag still pays, since each one moves the selection's end. + [Benchmark(Baseline = true)] public object BuildScreen() => ScreenBuilder.Build(selected); + // And what every frame after ctrl+a pays, for as long as the selection stands. + [Benchmark] + public object FrameWithNothingChanged() => + screens.For(selected); + static string Text(int lines, int changeEvery) { var builder = new StringBuilder(); diff --git a/src/DiffEngineViewer.Tests/ScreenCacheTests.cs b/src/DiffEngineViewer.Tests/ScreenCacheTests.cs new file mode 100644 index 000000000..550d7640f --- /dev/null +++ b/src/DiffEngineViewer.Tests/ScreenCacheTests.cs @@ -0,0 +1,134 @@ +/// +/// A screen is built when the state is another one, and not otherwise. The loop presents sixty +/// times a second, so anything built per frame is built for a window nobody is touching. +/// +public class ScreenCacheTests +{ + [Test] + public async Task The_same_state_is_the_same_screen() + { + var cache = new ScreenCache(); + var state = Scrollable(); + + var first = cache.For(state); + + await Assert.That(ReferenceEquals(cache.For(state), first)).IsTrue(); + await Assert.That(ReferenceEquals(cache.For(state), first)).IsTrue(); + } + + [Test] + public async Task Another_state_is_another_screen() + { + var cache = new ScreenCache(); + var state = Scrollable(); + var first = cache.For(state); + + var scrolled = cache.For(ViewerSession.Apply(state, CommandKind.ScrollDown)); + + await Assert.That(ReferenceEquals(scrolled, first)).IsFalse(); + await Assert.That(scrolled.Left.ScrollTop).IsEqualTo(first.Left.ScrollTop + 1); + } + + /// + /// Only the state last asked about is kept, so going back to an earlier one builds it again, + /// and what comes back says the same thing. + /// + [Test] + public async Task A_state_come_back_to_is_built_again_and_says_the_same() + { + var cache = new ScreenCache(); + var state = Scrollable(); + var first = cache.For(state); + cache.For(ViewerSession.Apply(state, CommandKind.ScrollDown)); + + var again = cache.For(state); + + await Assert.That(AsciiRenderer.Render(again)).IsEqualTo(AsciiRenderer.Render(first)); + } + + /// + /// The loop itself: five frames with nothing in any of them are five presents of one screen. + /// + [Test] + public async Task Frames_with_nothing_in_them_are_handed_the_screen_of_the_frame_before() + { + var window = new Recording(5, _ => Idle); + + ViewerProgram.Run(new(Scrollable()), server: null, link: null, window.Open); + + await Assert.That(window.Presented.Count).IsEqualTo(5); + await Assert.That(window.Presented.All(_ => ReferenceEquals(_, window.Presented[0]))).IsTrue(); + } + + /// + /// And a frame something happened in is followed by another screen, which then stands until + /// something else does. + /// + [Test] + public async Task A_frame_something_happened_in_is_followed_by_another_screen() + { + var window = new Recording(4, _ => _ == 1 ? Idle with { Key = CommandKind.ScrollDown } : Idle); + + ViewerProgram.Run(new(Scrollable()), server: null, link: null, window.Open); + + var presented = window.Presented; + await Assert.That(presented.Count).IsEqualTo(4); + await Assert.That(ReferenceEquals(presented[1], presented[0])).IsFalse(); + await Assert.That(presented[1].Left.ScrollTop).IsEqualTo(presented[0].Left.ScrollTop + 1); + await Assert.That(ReferenceEquals(presented[2], presented[1])).IsTrue(); + await Assert.That(ReferenceEquals(presented[3], presented[1])).IsTrue(); + } + + /// + /// Forty lines in a body of sixteen rows, opened at its first change on line 3, so there is + /// somewhere to scroll to. + /// + static SessionState Scrollable() => + Fixtures.File(Fixtures.Long(true), Fixtures.Long(false)); + + static readonly ViewerInput Idle = new(CommandKind.None, -1, -1, 0, false, Fixtures.Columns, Fixtures.Rows); + + /// + /// Keeps every screen it is handed, and closes after a number of frames. + /// + /// How many presents before the window says it has closed. + /// What the poll after each present reports, by how many there have been. + sealed class Recording(int frames, Func input) : IViewerWindow + { + public List Presented { get; } = []; + + public IViewerWindow Open(string title, int width, int height, bool hidden, WindowPlacement? placement, out string? error) + { + error = null; + return this; + } + + public bool Present(Screen screen) + { + Presented.Add(screen); + return Presented.Count < frames; + } + + public ViewerInput Poll() => + input(Presented.Count); + + public void SetHidden(bool hidden) + { + } + + public void Focus() + { + } + + public void SetClipboard(string text) + { + } + + public bool Capture(Screen screen, int width, int height, string pngPath) => + false; + + public void Dispose() + { + } + } +} diff --git a/src/DiffEngineViewer.Tests/ScreenPayloadTests.cs b/src/DiffEngineViewer.Tests/ScreenPayloadTests.cs new file mode 100644 index 000000000..b4993a6e1 --- /dev/null +++ b/src/DiffEngineViewer.Tests/ScreenPayloadTests.cs @@ -0,0 +1,102 @@ +/// +/// What the macOS and Linux heads are handed: a screen as flat buffers. Nothing on Windows reads +/// them, so these read them the way a shim does, by offset and length. +/// +public class ScreenPayloadTests +{ + /// + /// A row is written once, as UTF-8, and its segments are byte ranges of that. Each range has + /// to be the bytes of the characters the segment is, whatever came before it in the row: two + /// cell characters, characters outside the BMP, marks that attach to the one before, and a + /// surrogate with no partner, which is written as the three bytes of a replacement character. + /// + [Test] + public async Task ASegmentIsTheBytesOfItsOwnCharacters() + { + string[] lines = + [ + "plain ascii", + "漢字 then ascii then 漢字", + "tab\tseparated\t漢", + "thumb \U0001F44D\U0001F3FD family \U0001F468‍\U0001F469‍\U0001F467 done", + "é and ─│┼ and → ←", + "lone \uD800 surrogate 漢", + "漢" + ]; + var screen = ScreenBuilder.Build(Fixtures.File(string.Join("\n", lines), "other")); + var payload = new ScreenPayload(); + + payload.Build(screen); + + var checkedSegments = 0; + for (var index = 0; index < screen.Left.Rows.Count; index++) + { + var text = RowText.Clip(RowText.Flatten(screen.Left.Rows[index].Text), screen.Columns); + var row = payload.Rows[index]; + var segments = CellGrid.Segments(text); + await Assert.That(row.SegmentCount).IsEqualTo(segments.Count); + for (var position = 0; position < segments.Count; position++) + { + var segment = segments[position]; + var encoded = payload.Segments[row.SegmentOffset + position]; + var bytes = Convert.ToHexString(payload.Strings.Slice(encoded.TextOffset, encoded.TextLength)); + var expected = Convert.ToHexString(Encoding.UTF8.GetBytes(text.Substring(segment.Start, segment.Length))); + await Assert.That(bytes).IsEqualTo(expected); + await Assert.That(encoded.Column).IsEqualTo(segment.Column); + // Inside the row's own bytes, which is the only text a shim may read for it + await Assert.That(encoded.TextOffset).IsGreaterThanOrEqualTo(row.TextOffset); + await Assert.That(encoded.TextOffset + encoded.TextLength).IsLessThanOrEqualTo(row.TextOffset + row.TextLength); + checkedSegments++; + } + } + + // Most of these rows are several segments each; a screen that came out as one a row would + // have checked nothing. + await Assert.That(checkedSegments).IsGreaterThan(15); + } + + /// + /// The loop hands over the screen it handed over last frame for as long as nothing happens, + /// and encoding that one again was most of what an idle frame cost these heads. Seen by what + /// it allocates: an encode cuts every row that is not plain text into a list of segments, and + /// a screen already held is not looked at. + /// + [Test] + public async Task TheScreenAlreadyHeldIsNotEncodedAgain() + { + var rows = string.Join("\n", Enumerable.Range(0, 40).Select(_ => $"漢字 {_} 漢字")); + var state = Fixtures.File(rows, "other"); + var screen = ScreenBuilder.Build(state); + var another = ScreenBuilder.Build(state); + var payload = new ScreenPayload(); + payload.Build(screen); + + var before = GC.GetAllocatedBytesForCurrentThread(); + payload.Build(screen); + var held = GC.GetAllocatedBytesForCurrentThread() - before; + + before = GC.GetAllocatedBytesForCurrentThread(); + payload.Build(another); + var encoded = GC.GetAllocatedBytesForCurrentThread() - before; + + await Assert.That(held).IsEqualTo(0); + await Assert.That(encoded).IsGreaterThan(0); + } + + /// + /// And a screen it has not been handed before is encoded, even one that says what the last + /// did: the buffers after it describe that screen. + /// + [Test] + public async Task AnotherScreenReplacesWhatWasHeld() + { + var payload = new ScreenPayload(); + payload.Build(ScreenBuilder.Build(Fixtures.File("one\ntwo\nthree", "other"))); + await Assert.That(payload.Rows.Count).IsGreaterThanOrEqualTo(6); + + payload.Build(ScreenBuilder.Build(Fixtures.File("one", "one"))); + + // One row a side + await Assert.That(payload.Rows.Count).IsEqualTo(2); + } +} diff --git a/src/DiffEngineViewer.Tests/SelectionTests.cs b/src/DiffEngineViewer.Tests/SelectionTests.cs index 8d02e1cc7..9751c6e15 100644 --- a/src/DiffEngineViewer.Tests/SelectionTests.cs +++ b/src/DiffEngineViewer.Tests/SelectionTests.cs @@ -445,6 +445,77 @@ public async Task Select_all_ends_on_the_last_cell() await Assert.That(Copy(state)).IsEqualTo("\U0001D400ab"); } + /// + /// The status line counts a selection without building its text, and counts the rows a + /// selection takes whole without measuring them against its columns. What it says has to be + /// what copying hands over all the same: tabs as the four cells they are drawn as, a wide + /// character and a character with its marks as the characters they are, filler rows left out. + /// + [Test] + public void The_summary_counts_what_copying_hands_over() + { + string[] pieces = ["a", "bc", " ", "\t", "漢", "é", "\U0001F44D", "\uD800", "─", "\r"]; + var random = new Random(8); + for (var iteration = 0; iteration < 2000; iteration++) + { + var left = Lines(random, pieces, random.Next(1, 9)); + // Lines of its own on the other side, so the side selected in has filler rows in it + var right = Lines(random, pieces, random.Next(1, 9)); + var state = Files(string.Join("\n", left), string.Join("\n", right)); + var rows = state.Current!.LeftRows.Count; + state = Drag( + state, + PaneSide.Left, + random.Next(rows), + random.Next(12), + random.Next(rows), + random.Next(12)); + var status = ScreenBuilder.Build(state).Status; + if (state.LiveSelection is not { IsEmpty: false } selection) + { + continue; + } + + var copied = SelectionText.Of(selection, state.Current!); + var expected = Summary(copied); + if (SelectionText.Summary(selection, state.Current!) != expected || + !status.Contains(expected)) + { + Assert.Fail($"left: {string.Join("|", left)} right: {string.Join("|", right)} selection: {selection} status: {status} expected: {expected}"); + } + } + } + + static string Summary(string copied) + { + if (copied.Length == 0) + { + return "nothing selected"; + } + + var lines = copied.Count(_ => _ == '\n') + 1; + var length = copied.Count(_ => !char.IsLowSurrogate(_)); + var characters = $"{length} character{(length == 1 ? "" : "s")}"; + return lines == 1 ? $"selected {characters}" : $"selected {lines} lines, {characters}"; + } + + static List Lines(Random random, string[] pieces, int count) + { + var lines = new List(); + for (var line = 0; line < count; line++) + { + var builder = new StringBuilder(); + for (var piece = random.Next(0, 6); piece > 0; piece--) + { + builder.Append(pieces[random.Next(pieces.Length)]); + } + + lines.Add(builder.ToString()); + } + + return lines; + } + /// /// What ctrl+c puts on the clipboard, or null when it puts nothing there. /// diff --git a/src/DiffEngineViewer.Windows/ViewerForm.cs b/src/DiffEngineViewer.Windows/ViewerForm.cs index 680ef59a7..c68e56233 100644 --- a/src/DiffEngineViewer.Windows/ViewerForm.cs +++ b/src/DiffEngineViewer.Windows/ViewerForm.cs @@ -518,10 +518,20 @@ public void Raise() public void Apply(Screen screen) { - // ScreenBuilder allocates a fresh Screen every frame, so record equality would never hit. - // Without this the window repaints sixty times a second while sitting idle. + // The loop hands over the screen it handed over last frame for as long as nothing has + // happened (ScreenCache), which is nearly every frame, and those stop here. + if (ReferenceEquals(last, screen)) + { + return; + } + + // A new screen need not be a different one: a state can change in a way that does not + // show, and record equality stops at the lists, which compare by reference. Without this + // such a frame repainted the whole window. Kept as the last one either way, so the frames + // after it stop at the reference above. if (Same(last, screen)) { + last = screen; return; } diff --git a/src/DiffEngineViewer/Native/ScreenPayload.cs b/src/DiffEngineViewer/Native/ScreenPayload.cs index 84bd14b85..d48bbfc82 100644 --- a/src/DiffEngineViewer/Native/ScreenPayload.cs +++ b/src/DiffEngineViewer/Native/ScreenPayload.cs @@ -21,9 +21,29 @@ sealed class ScreenPayload int menuRow; int menuPane; int pendingCount; + Screen? built; + + /// + /// What was encoded, for the tests: a shim reads these through pointers, and nothing here on + /// the managed side reads them at all. + /// + internal ReadOnlySpan Strings => CollectionsMarshal.AsSpan(strings); + + internal IReadOnlyList Rows => rows; + + internal IReadOnlyList Segments => segments; public void Build(Screen screen) { + // The loop hands over the screen it handed over last frame for as long as nothing has + // happened (ScreenCache), and a screen is immutable, so the buffers already hold this one. + // Encoding it again was most of what an idle frame cost here. + if (ReferenceEquals(screen, built)) + { + return; + } + + built = screen; strings.Clear(); rows.Clear(); segments.Clear(); @@ -220,19 +240,30 @@ DeviewPane AddPane(Pane pane, int columns) /// /// The row's , as byte ranges of the UTF-8 the row's text was /// just written as at , so no text is written twice. + /// + /// Segments come in the order of the text, so where one starts in bytes is where the last one + /// ended plus whatever lies between them, and the row is measured once. Each used to count the + /// row's bytes again from its start, which for a row of CJK, a segment a character, was the + /// row's length squared. + /// /// void AddSegments(string text, int textOffset) { + var measured = 0; + var bytes = textOffset; foreach (var segment in CellGrid.Segments(text)) { - var start = textOffset + Encoding.UTF8.GetByteCount(text.AsSpan(0, segment.Start)); + bytes += Encoding.UTF8.GetByteCount(text.AsSpan(measured, segment.Start - measured)); + var length = Encoding.UTF8.GetByteCount(text.AsSpan(segment.Start, segment.Length)); segments.Add( new() { - TextOffset = start, - TextLength = Encoding.UTF8.GetByteCount(text.AsSpan(segment.Start, segment.Length)), + TextOffset = bytes, + TextLength = length, Column = segment.Column }); + bytes += length; + measured = segment.Start + segment.Length; } } diff --git a/src/DiffEngineViewer/ScreenCache.cs b/src/DiffEngineViewer/ScreenCache.cs new file mode 100644 index 000000000..643bd9899 --- /dev/null +++ b/src/DiffEngineViewer/ScreenCache.cs @@ -0,0 +1,36 @@ +/// +/// The screen for the session's state, built once per state rather than once per frame. +/// +/// The loop presents sixty times a second, and a state changes when something happens, which for a +/// window somebody is reading is now and then. is immutable and only +/// ever replaced, so the same reference is the same screen. Building it again every frame was the +/// whole queue's labels, groups and tooltips, and a walk over every selected row, to arrive at the +/// screen already in hand: 2,000 pending entries were two megabytes of garbage a frame, from a +/// window nobody was touching. +/// +/// +/// Handing back the same is also how a head learns that nothing changed +/// without comparing two of them or encoding one: the WinForms head and +/// both stop at the reference. +/// +/// +/// One thread's. The loop and a head's modal loop both run on the thread that owns the window. +/// +/// +sealed class ScreenCache +{ + SessionState? state; + Screen? screen; + + public Screen For(SessionState current) + { + if (screen is null || + !ReferenceEquals(state, current)) + { + screen = ScreenBuilder.Build(current); + state = current; + } + + return screen; + } +} diff --git a/src/DiffEngineViewer/SelectionText.cs b/src/DiffEngineViewer/SelectionText.cs index 32682f24d..24eff5f34 100644 --- a/src/DiffEngineViewer/SelectionText.cs +++ b/src/DiffEngineViewer/SelectionText.cs @@ -137,10 +137,16 @@ public static string All(QueueEntry entry, PaneSide side) => /// selection: the heads that can draw a highlight also draw this, and the one that cannot /// still says a selection exists and how much of one. /// - /// Counted from the spans rather than by building the text, because this runs every frame for - /// as long as a selection exists: ctrl+a over a large file built megabytes of string sixty - /// times a second only to measure it. The counts are what would produce - one - /// line per non-filler row, joined by one newline each. + /// Counted from the spans rather than by building the text, because this runs for every screen + /// built while a selection exists, which a drag makes one a frame: ctrl+a over a large file + /// built megabytes of string only to measure it. The counts are what would + /// produce - one line per non-filler row, joined by one newline each. + /// + /// + /// Only the two rows a selection ends in are measured against its columns. Every row between + /// them is selected whole, so what it adds is the characters it flattens to, which can be + /// counted off the row as it is. Flattening each of them, twice, to find the span that covered + /// all of it was what made a selection of 100,000 lines cost a whole frame to describe. /// ///
public static string Summary(TextSelection selection, QueueEntry entry) @@ -159,6 +165,13 @@ public static string Summary(TextSelection selection, QueueEntry entry) } lines++; + if (index > startRow && + index < endRow) + { + length += FlattenedCharacters(row.Text); + continue; + } + // Characters rather than cells, which a wide character is two of var text = RowText.Flatten(row.Text); var span = Span(selection, selection.Side, index, row.Text); @@ -217,6 +230,30 @@ static int Characters(string text, int from, int to) return count; } + /// + /// The code points would leave of a row, without making the row: + /// a tab is the four spaces it is drawn as, a carriage return is dropped, and a line feed is + /// the space it becomes. + /// + static int FlattenedCharacters(string text) + { + var count = 0; + foreach (var character in text) + { + if (character == '\t') + { + count += 4; + } + else if (character != '\r' && + !char.IsLowSurrogate(character)) + { + count++; + } + } + + return count; + } + static int ClampRow(int row, IReadOnlyList rows) => Math.Clamp(row, 0, Math.Max(0, rows.Count - 1)); diff --git a/src/DiffEngineViewer/ViewerProgram.cs b/src/DiffEngineViewer/ViewerProgram.cs index fa1b42a29..58553fdad 100644 --- a/src/DiffEngineViewer/ViewerProgram.cs +++ b/src/DiffEngineViewer/ViewerProgram.cs @@ -285,9 +285,11 @@ internal static int Run( return 4; } + // One for the loop and for a head's modal loop, which draw the same window on one thread. + var screens = new ScreenCache(); if (window is ILoopHooks hooks) { - hooks.Frame = () => ModalFrame(host, window, link, preferences); + hooks.Frame = () => ModalFrame(host, window, link, preferences, screens); hooks.SessionEnding = () => { host.Mutate(_ => _ with {Closing = true}); @@ -326,7 +328,7 @@ internal static int Run( { using (window) { - Loop(host, window, link, reader, windowCommands, runner, preferences); + Loop(host, window, link, reader, windowCommands, runner, preferences, screens); // While there is still a window to ask. Not from the finally: a loop that threw // has a window in no state worth opening the next one from. Remember(window, preferences); @@ -367,7 +369,7 @@ internal static int Run( /// A frame from inside a head's modal loop (): what the loop does /// with input, without the present, which the head is already inside of. ///
- static Screen ModalFrame(SessionHost host, IViewerWindow window, OwnerLink? link, ViewerPreferences preferences) + static Screen ModalFrame(SessionHost host, IViewerWindow window, OwnerLink? link, ViewerPreferences preferences, ScreenCache screens) { var state = host.State; var input = window.Poll(); @@ -377,7 +379,7 @@ static Screen ModalFrame(SessionHost host, IViewerWindow window, OwnerLink? link preferences.Remember(state); } - return ScreenBuilder.Build(state); + return screens.For(state); } /// @@ -419,7 +421,8 @@ static void Loop( DocumentWatch? reader, ConcurrentQueue windowCommands, AcceptAllRunner? runner, - ViewerPreferences preferences) + ViewerPreferences preferences, + ScreenCache screens) { while (true) { @@ -461,8 +464,10 @@ static void Loop( return; } + // The screen of the state last presented, for as long as that is still the state: see + // ScreenCache. A frame in which nothing happened builds nothing. var state = host.State; - if (!window.Present(ScreenBuilder.Build(state))) + if (!window.Present(screens.For(state))) { return; } From 1c59b3c7ad11a647ee456888590ed74e74554b81 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:00:36 +1000 Subject: [PATCH 38/73] Bound what the watch over an owned queue's files costs TrackedWatch stats every pending file five times a second for as long as the viewer runs: two stats a move. Its doc said a queue is small enough for that not to be measurable, which holds to about a hundred entries. A thousand pending pairs, which one serializer setting can produce, were two thousand stats a pass. And a viewer hidden behind a tray, which is how it spends days, kept the same five passes a second: OwnerLink drops to one when hidden and DocumentWatch stops, and this had no Hidden at all. A pass now looks at the entry on screen and at up to a hundred of the others, taking those in turn from where the last pass left off. A queue of a hundred or fewer is looked at whole every pass, exactly as before. A longer one takes a few passes to go round, so a row that is not on screen follows its file within seconds rather than within a fifth of one. The one being read is still looked at every pass, and a snapshot, which has no file, takes nothing from what a pass looks at. The loop tells the watch when the window is hidden, as it tells the other two, and the passes are then a second apart. Not stopped: an entry whose received file has gone is still pending while it is in the queue, and the queue is what gets staged when the viewer leaves. TrackedWatchBenchmarks, one pass with nothing changed, before and after, with other builds running: 100 pending 3.5 ms 3.5 ms 1,000 pending 35 ms 4.2 ms Which at five passes a second is 175 ms of every second before and 21 after, and at one a second hidden, 4. --- .../TrackedWatchTests.cs | 104 ++++++++++++++++++ src/DiffEngineViewer/TrackedWatch.cs | 87 +++++++++++++-- src/DiffEngineViewer/ViewerProgram.cs | 10 +- 3 files changed, 186 insertions(+), 15 deletions(-) diff --git a/src/DiffEngineViewer.Tests/TrackedWatchTests.cs b/src/DiffEngineViewer.Tests/TrackedWatchTests.cs index 1f2735143..d276c7c83 100644 --- a/src/DiffEngineViewer.Tests/TrackedWatchTests.cs +++ b/src/DiffEngineViewer.Tests/TrackedWatchTests.cs @@ -214,6 +214,110 @@ public async Task AnUnreadableFileIsNotReReadEveryPass() } } + /// + /// A queue longer than a pass looks at is looked at in turn. A thousand pending pairs were two + /// thousand stats a pass, five passes a second, for as long as the viewer ran. + /// + [Test] + public async Task AQueueLongerThanAPassLooksAtIsLookedAtInTurn() + { + var host = OwnedAll(5); + var watch = new TrackedWatch(host) + { + Budget = 2 + }; + // The last in the queue, which a pass that starts at the front does not get to + File.Delete(host.State.Queue[^1].LeftFile!); + + watch.Pump(); + await Assert.That(host.State.Queue.Count).IsEqualTo(5); + + watch.Pump(); + await Assert.That(host.State.Queue.Count).IsEqualTo(4); + } + + /// + /// And one no longer than that is looked at whole every pass, as every queue used to be. + /// + [Test] + public async Task AQueueNoLongerThanAPassLooksAtIsLookedAtWhole() + { + var host = OwnedAll(5); + var watch = new TrackedWatch(host) + { + Budget = 4 + }; + File.Delete(host.State.Queue[^1].LeftFile!); + + watch.Pump(); + + await Assert.That(host.State.Queue.Count).IsEqualTo(4); + } + + /// + /// The entry on screen is the one being read, so it is looked at every pass, wherever the turn + /// has got to. + /// + [Test] + public async Task TheEntryOnScreenIsLookedAtEveryPass() + { + var host = OwnedAll(5); + var watch = new TrackedWatch(host) + { + Budget = 1 + }; + // The turn moves on past the first entry, which is the one on screen + watch.Pump(); + watch.Pump(); + await Assert.That(host.State.Selected).IsEqualTo(0); + await File.WriteAllTextAsync(host.State.Current!.LeftFile!, "rewritten by a later run"); + + watch.Pump(); + + await Assert.That(host.State.Current!.LeftText).IsEqualTo("rewritten by a later run"); + } + + /// + /// A snapshot has no file to look at, so it takes nothing from what a pass looks at: the pairs + /// behind a queue's snapshots are still all reached. + /// + [Test] + public async Task SnapshotsTakeNothingFromWhatAPassLooksAt() + { + // Two snapshots ahead of three pairs, and a pass that looks at three files + var state = Fixtures.Inline(Fixtures.Patch("OneTests.cs", 10), Fixtures.Patch("TwoTests.cs", 20)); + for (var index = 0; index < 3; index++) + { + var (temp, target) = Pair($"Sample{index}.Test"); + state = ViewerSession.EnqueueTracked(state, TrackedEntry.ForMove(temp, target)); + } + + var host = new SessionHost(state); + var watch = new TrackedWatch(host) + { + Budget = 3 + }; + await Assert.That(string.Join(" ", host.State.Queue.Select(_ => _.Kind))).IsEqualTo("Inline Inline Move Move Move"); + File.Delete(host.State.Queue[^1].LeftFile!); + + watch.Pump(); + + await Assert.That(host.State.Queue.Count(_ => _.Kind == QueueEntryKind.Move)).IsEqualTo(2); + await Assert.That(host.State.Queue.Count(_ => _.Kind == QueueEntryKind.Inline)).IsEqualTo(2); + } + + SessionHost OwnedAll(int count) + { + var state = SessionState.Start(ViewerMode.Inline, Fixtures.Columns, Fixtures.Rows); + for (var index = 0; index < count; index++) + { + var (temp, target) = Pair($"Sample{index}.Test"); + state = ViewerSession.EnqueueTracked(state, TrackedEntry.ForMove(temp, target)); + } + + return new(state); + } + static bool WaitUntilBlocked(Thread thread) { var watch = Stopwatch.StartNew(); diff --git a/src/DiffEngineViewer/TrackedWatch.cs b/src/DiffEngineViewer/TrackedWatch.cs index abdc99f57..f2fc67a01 100644 --- a/src/DiffEngineViewer/TrackedWatch.cs +++ b/src/DiffEngineViewer/TrackedWatch.cs @@ -13,9 +13,12 @@ /// image snapshots is not work to do between two frames. /// /// -/// Deliberately not a file system watcher. The stat is what the attached path already pays, it -/// needs no handle per directory and no debounce, and a queue is small enough that the difference -/// is not measurable. +/// Deliberately not a file system watcher. The stat is what the attached path already pays, and +/// it needs no handle per directory and no debounce. What it costs is kept small instead: a pass +/// looks at the entry on screen and at of the others, taking those in turn, +/// and the passes come a second apart while the window is hidden. A thousand pending pairs, which +/// one serializer setting can produce, were two thousand stats five times a second for as long as +/// the viewer ran, and behind a tray that is days. /// /// sealed class TrackedWatch(SessionHost host, DocumentPlugin? documents = null) @@ -26,11 +29,33 @@ sealed class TrackedWatch(SessionHost host, DocumentPlugin? documents = null) ///
public static TimeSpan Interval { get; set; } = TimeSpan.FromMilliseconds(200); + /// + /// Whether the window is hidden, set by the render loop as it hides and shows it. Nobody is + /// reading a hidden window's rows, so its files are looked at as often as an attached viewer + /// lists its owner while hidden. Not stopped, because an entry whose received file has gone + /// is still pending for as long as it is in the queue, and the queue is what gets staged. + /// + public bool Hidden { get; set; } + + public static TimeSpan HiddenInterval { get; set; } = OwnerLink.HiddenInterval; + + /// + /// How many pending files one pass looks at, besides the one on screen. A queue of no more + /// than this is looked at whole every pass, as every queue used to be. A longer one is looked + /// at this many at a time, so a row that is not on screen follows its file within a few + /// seconds rather than within one pass. + /// + public int Budget { get; init; } = 100; + + // Where in the queue the next pass takes up. A position rather than a key, so an entry that + // leaves moves it by one, which costs some entry a pass and no more. + int next; + public void Run(Cancel cancel) { while (!cancel.IsCancellationRequested) { - cancel.WaitHandle.WaitOne(Interval); + cancel.WaitHandle.WaitOne(Hidden ? HiddenInterval : Interval); if (cancel.IsCancellationRequested) { return; @@ -63,22 +88,39 @@ public void Run(Cancel cancel) /// under the same key in between: dropped by key, the new pair went with the old one's missing /// file, and stayed gone until the test failed again. /// + /// + /// The entry on screen every pass, since it is the one being read, and then the others from + /// where the last pass left off, until of them have been looked at or + /// the queue has been gone round once. + /// ///
public void Pump() { var gone = new List(); var changed = new List<(QueueEntry Seen, QueueEntry Fresh)>(); - foreach (var entry in host.State.Queue) + // One read, so the entry on screen and the queue it is in are of the same moment + var state = host.State; + var queue = state.Queue; + var current = state.Current; + if (current is not null) { - if (entry.Kind == QueueEntryKind.Move) - { - Move(entry, gone, changed); - continue; - } + Look(current, gone, changed); + } + + if (next >= queue.Count) + { + next = 0; + } - if (entry.Kind == QueueEntryKind.Delete) + var looked = 0; + for (var visited = 0; visited < queue.Count && looked < Budget; visited++) + { + var entry = queue[next]; + next = (next + 1) % queue.Count; + if (!ReferenceEquals(entry, current) && + Look(entry, gone, changed)) { - Delete(entry, gone, changed); + looked++; } } @@ -91,6 +133,27 @@ public void Pump() host.Mutate(_ => ViewerSession.Refresh(_, gone, changed)); } + /// + /// Whether the entry is one with files to look at, which is what a pass has a budget of. A + /// snapshot has none: it is in the queue as the patch it arrived as. + /// + bool Look(QueueEntry entry, List gone, List<(QueueEntry Seen, QueueEntry Fresh)> changed) + { + if (entry.Kind == QueueEntryKind.Move) + { + Move(entry, gone, changed); + return true; + } + + if (entry.Kind == QueueEntryKind.Delete) + { + Delete(entry, gone, changed); + return true; + } + + return false; + } + readonly ReadRetry retry = new(); void Move(QueueEntry entry, List gone, List<(QueueEntry Seen, QueueEntry Fresh)> changed) diff --git a/src/DiffEngineViewer/ViewerProgram.cs b/src/DiffEngineViewer/ViewerProgram.cs index 58553fdad..f1f639989 100644 --- a/src/DiffEngineViewer/ViewerProgram.cs +++ b/src/DiffEngineViewer/ViewerProgram.cs @@ -312,9 +312,10 @@ internal static int Run( : Task.Run(() => link.Run(cancel.Token), Cancel.None); // Only for a queue this process owns. A displayed one is re-read by OwnerLink already, and // its files belong to the owner, which is what decides when an entry stops being pending. - var watching = server is null + var watch = server is null ? null : new TrackedWatch(host, documents); + var watching = watch is null ? null - : Task.Run(() => new TrackedWatch(host, documents).Run(cancel.Token), Cancel.None); + : Task.Run(() => watch.Run(cancel.Token), Cancel.None); // Whoever owns the queue: every viewer reads and draws the documents it shows itself, since // the files are on this machine and the wire carries only their paths. var reader = documents is null ? null : new DocumentWatch(host, documents); @@ -328,7 +329,7 @@ internal static int Run( { using (window) { - Loop(host, window, link, reader, windowCommands, runner, preferences, screens); + Loop(host, window, link, reader, watch, windowCommands, runner, preferences, screens); // While there is still a window to ask. Not from the finally: a loop that threw // has a window in no state worth opening the next one from. Remember(window, preferences); @@ -419,6 +420,7 @@ static void Loop( IViewerWindow window, OwnerLink? link, DocumentWatch? reader, + TrackedWatch? watch, ConcurrentQueue windowCommands, AcceptAllRunner? runner, ViewerPreferences preferences, @@ -439,6 +441,7 @@ static void Loop( // A focus shows the window as well as raising it link?.Hidden = hide; reader?.Hidden = hide; + watch?.Hidden = hide; if (command == WindowCommand.Focus) { @@ -526,6 +529,7 @@ static void Loop( window.SetHidden(true); link?.Hidden = true; reader?.Hidden = true; + watch?.Hidden = true; continue; } From d9238be87cd44b35798d471b27ccb4c1ad164655 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:00:53 +1000 Subject: [PATCH 39/73] Carry out a group's accept as a batch, off the render thread An accept-all was moved to AcceptAllRunner because applying a queue takes as long as the queue is long: an entry is claimed under the session's lock, applied outside it, and recorded under it again, so the window keeps drawing and arrivals keep being answered. "Accept all in" a header was left behind. It applied every member inside one transition, on the render thread and under that lock, and each move it swept could retry for a second. In a queue of one solution that header's group is the whole queue, so it was the freeze the batch was written to remove. A group's accept is now the same batch over the group's keys. The click begins it, and the loop hands it to the runner as it does an accept-all. The status line counts it off, and nothing else that changes the queue is taken while it runs. ViewerSession.Apply still carries the whole thing out in one call, as it does for an accept-all, which is what the tests drive. Being the same batch, it goes by the batch's rules, and one of them differs from what a group accept did. A snapshot the applier would not take now stays in the queue with what the applier said, where a group accept used to drop it as a single accept does. InlineQueue.AcceptInBatch gives the reason: dropped out of a batch, it is an entry nobody saw go, with no literal written and nothing left to say so. The group's deletes are held either way, and what still needs review is counted over the group's own members, as it was. What is left of the one-transition sweep is the bulk discards, which wait on nothing: SweepTracked is DiscardTrackedIn, without the parameters only an accept used. GroupAcceptBenchmarks, "Accept all for" a test, written into one source file by the real applier. How long the click holds the render thread, before and after: 20 snapshots 55 ms 2 us 200 snapshots 1,296 ms 19 us And how long until the last snapshot is written: 20 snapshots 51 ms 46 ms 200 snapshots 1,252 ms 1,285 ms The same work, as it should be, done elsewhere. The batch does allocate more over its length than the one transition did, 139 MB against 29 for the 200, since each entry it records rebuilds the queue: what an accept-all already paid. With other builds running on the machine. --- .../GroupAcceptBatchTests.cs | 200 ++++++++++++++++ .../TrackedFileTests.cs | 5 +- src/DiffEngineViewer/AcceptBatch.cs | 11 + src/DiffEngineViewer/ViewerProgram.cs | 16 +- src/DiffEngineViewer/ViewerSession.cs | 226 ++++++++++-------- 5 files changed, 345 insertions(+), 113 deletions(-) create mode 100644 src/DiffEngineViewer.Tests/GroupAcceptBatchTests.cs diff --git a/src/DiffEngineViewer.Tests/GroupAcceptBatchTests.cs b/src/DiffEngineViewer.Tests/GroupAcceptBatchTests.cs new file mode 100644 index 000000000..c774059cf --- /dev/null +++ b/src/DiffEngineViewer.Tests/GroupAcceptBatchTests.cs @@ -0,0 +1,200 @@ +/// +/// "Accept all in" a header is an accept-all over that header's members: the same batch, an entry +/// at a time and outside the lock, with fewer entries in it. It used to be one transition that +/// applied the whole group before it returned, which in a queue of one solution is the whole +/// queue, on the render thread. +/// +public class GroupAcceptBatchTests +{ + /// + /// What the window does with the click: begins the batch, and writes nothing. Real actions are + /// what a click is dispatched with, so anything applied here would be an attempt on a source + /// file that does not exist, and would show as a failed entry. + /// + [Test] + public async Task The_click_begins_a_batch_and_applies_nothing() + { + var open = OverSolutionA(TwoSolutions()); + + var clicked = ViewerProgram.Apply(open, Click(open, "Accept all in SolutionA"), link: null, new NoWindow()); + + await Assert.That(clicked.Batch).IsNotNull(); + await Assert.That(clicked.Batch!.Total).IsEqualTo(2); + await Assert.That(clicked.Batch.Current).IsNull(); + await Assert.That(clicked.Queue.Count).IsEqualTo(3); + await Assert.That(clicked.Queue.All(_ => _.Status is null)).IsTrue(); + await Assert.That(clicked.Menu).IsNull(); + await Assert.That(ScreenBuilder.Build(clicked).Status).IsEqualTo("Accepting 1 of 2"); + } + + /// + /// Carried out the way the loop has it carried out, the lock is free while each member is + /// applied, and the batch reaches the group's members and nobody else's. + /// + [Test] + public async Task The_batch_is_applied_outside_the_lock_and_stops_at_the_group() + { + var open = OverSolutionA(TwoSolutions()); + var host = new SessionHost(open); + var seen = new List(); + var actions = Fixtures.Applied with + { + ApplyInline = _ => + { + // Another thread, standing in for the render loop, since the lock lets the thread + // that holds it back in + var drawn = Task.Run(() => host.Mutate(state => state)); + if (!drawn.Wait(TimeSpan.FromSeconds(10))) + { + throw new("The lock was held across an apply."); + } + + seen.Add($"{ScreenBuilder.Build(drawn.Result).Status}: {Path.GetFileName(_.SourceFile)}"); + return InlineApplyResult.Applied; + } + }; + host.Mutate(ViewerSession.BeginAcceptGroup); + + var message = new AcceptAllRunner(host, actions).Drive(); + + await Assert.That(string.Join("\n", seen)).IsEqualTo( + """ + Accepting 1 of 2: ATests.cs + Accepting 2 of 2: OtherTests.cs + """); + await Assert.That(message).IsEqualTo("Accepted 2"); + await Assert.That(host.State.Queue.Select(_ => _.Name)).IsEquivalentTo(["BTests.cs:3"]); + await Assert.That(host.State.Batch).IsNull(); + } + + /// + /// What still needs review is counted over the group. A conflict in another solution is not + /// this accept's to report, as it was not before. + /// + [Test] + public async Task A_conflict_outside_the_group_is_not_counted() + { + var state = ViewerSession.EnqueueInline( + TwoSolutions(), + Fixtures.Patch(Fixtures.SolutionFile("SolutionB", "Tests", "BTests.cs"), 3, "\"x\"", "z", framework: "net9.0")); + await Assert.That(state.Queue.Single(_ => _.Name == "BTests.cs:3").Conflicted).IsTrue(); + + var accepted = ViewerSession.Apply(OverSolutionA(state), CommandKind.AcceptGroup, Fixtures.Applied); + + await Assert.That(accepted.Message).IsEqualTo("Accepted 2"); + } + + /// + /// And one inside it is, and is left for a reviewer. + /// + [Test] + public async Task A_conflict_inside_the_group_is_counted_and_kept() + { + var state = ViewerSession.EnqueueInline( + TwoSolutions(), + Fixtures.Patch(Fixtures.SolutionFile("SolutionA", "Tests", "OtherTests.cs"), 2, "\"a\"", "c", framework: "net9.0")); + + var accepted = ViewerSession.Apply(OverSolutionA(state), CommandKind.AcceptGroup, Fixtures.Applied); + + await Assert.That(accepted.Message).IsEqualTo("Accepted 1, 1 conflict needs review"); + await Assert.That(accepted.Queue.Select(_ => _.Name)).IsEquivalentTo(["OtherTests.cs:2", "BTests.cs:3"]); + } + + /// + /// The batch's rule for a snapshot the applier would not take: it stays, saying why. A group + /// accept used to drop it as a single accept does, which out of a group of thirty is an entry + /// nobody saw go, with no literal written and nothing left in the queue to say so. + /// + [Test] + public async Task A_snapshot_that_was_not_written_stays_and_says_why() + { + var actions = Fixtures.Applying(InlineApplyResult.NotFound("no Verify call")); + + var accepted = ViewerSession.Apply(OverSolutionA(TwoSolutions()), CommandKind.AcceptGroup, actions); + + await Assert.That(accepted.Queue.Count).IsEqualTo(3); + var members = accepted.Queue.Where(_ => _.Name != "BTests.cs:3").ToList(); + await Assert.That(members.All(_ => _.Status!.Contains("no Verify call"))).IsTrue(); + await Assert.That(accepted.Queue.Single(_ => _.Name == "BTests.cs:3").Status).IsNull(); + await Assert.That(accepted.Message).IsEqualTo("Accepted 0, 2 not written"); + } + + /// + /// Nothing else that changes the queue is taken while a group's batch runs, the same as while + /// an accept-all does: the two are one mechanism, and a second one begun over the first would + /// claim entries the first is part way through. + /// + [Test] + public async Task A_second_accept_is_refused_while_a_groups_batch_runs() + { + var running = ViewerSession.ClaimNext(ViewerSession.BeginAcceptGroup(OverSolutionA(TwoSolutions()))); + await Assert.That(running.Batch!.Current).IsNotNull(); + + var again = ViewerProgram.Apply(running, Key(CommandKind.AcceptAll), link: null, new NoWindow()); + + await Assert.That(again.Batch).IsSameReferenceAs(running.Batch); + await Assert.That(ViewerSession.BeginAcceptAll(running)).IsSameReferenceAs(running); + } + + /// + /// A header with no menu open over it has no group to accept, and the state is left alone. + /// + [Test] + public async Task With_no_menu_open_there_is_no_group_to_accept() + { + var state = TwoSolutions(); + + await Assert.That(ViewerSession.BeginAcceptGroup(state)).IsSameReferenceAs(state); + } + + // Each from one framework, so the same call site reported by another with other content is a + // conflict rather than a re-run. + static SessionState TwoSolutions() => + Fixtures.Inline( + Fixtures.Patch(Fixtures.SolutionFile("SolutionA", "Tests", "ATests.cs"), 1, framework: "net8.0"), + Fixtures.Patch(Fixtures.SolutionFile("SolutionA", "Tests", "OtherTests.cs"), 2, "\"a\"", "b", framework: "net8.0"), + Fixtures.Patch(Fixtures.SolutionFile("SolutionB", "Tests", "BTests.cs"), 3, "\"x\"", "y", framework: "net8.0")); + + static SessionState OverSolutionA(SessionState state) + { + var rows = QueueProjection.Visible(state, ScreenBuilder.BodyRows(state), out _).ToList(); + return ViewerSession.OpenMenu(state, rows.FindIndex(_ => _.GroupName == "SolutionA")); + } + + static ViewerInput Click(SessionState state, string label) => + Key(CommandKind.None) with + { + ClickedMenuItem = state.Menu!.Items.ToList().FindIndex(_ => _.Label == label) + }; + + static ViewerInput Key(CommandKind key) => + new(key, -1, -1, 0, false, Fixtures.Columns, Fixtures.Rows); + + sealed class NoWindow : IViewerWindow + { + public bool Present(Screen screen) => + true; + + public ViewerInput Poll() => + default; + + public void SetHidden(bool hidden) + { + } + + public void Focus() + { + } + + public void SetClipboard(string text) + { + } + + public bool Capture(Screen screen, int width, int height, string pngPath) => + false; + + public void Dispose() + { + } + } +} diff --git a/src/DiffEngineViewer.Tests/TrackedFileTests.cs b/src/DiffEngineViewer.Tests/TrackedFileTests.cs index e061fc911..a1d155dc0 100644 --- a/src/DiffEngineViewer.Tests/TrackedFileTests.cs +++ b/src/DiffEngineViewer.Tests/TrackedFileTests.cs @@ -330,9 +330,8 @@ public async Task ARefusedPatchStillLetsAMoveThrough() } /// - /// The same guard on the group sweep. It reaches it differently: a group accept takes its - /// entries one at a time, so a refused patch leaves the queue rather than staying in it with a - /// status, and the sweep cannot read the outcome off the queue it is handed. + /// The same guard on a group's accept, which is the same batch over fewer entries: its deletes + /// wait on its own snapshots, counted from the attempts it made. /// [Test] public async Task ARefusedPatchHoldsTheDeleteInAGroupSweepToo() diff --git a/src/DiffEngineViewer/AcceptBatch.cs b/src/DiffEngineViewer/AcceptBatch.cs index 72e8b8834..a550e8161 100644 --- a/src/DiffEngineViewer/AcceptBatch.cs +++ b/src/DiffEngineViewer/AcceptBatch.cs @@ -16,6 +16,17 @@ /// How many the batch set out with, for the progress it reports. record AcceptBatch(IReadOnlyList Remaining, int Total) { + /// + /// The keys a group's batch is over, conflicted members included, or null for a batch over the + /// whole queue. "Accept all in" a header is the same batch with fewer entries in it, and what + /// it reports as still needing review is its own members and nobody else's. + /// + public IReadOnlySet? Only { get; init; } + + public bool Covers(string key) => + Only is null || + Only.Contains(key); + /// /// How the snapshots have gone, which is the first half of what the batch says when it is done. /// diff --git a/src/DiffEngineViewer/ViewerProgram.cs b/src/DiffEngineViewer/ViewerProgram.cs index f1f639989..f5f5e5771 100644 --- a/src/DiffEngineViewer/ViewerProgram.cs +++ b/src/DiffEngineViewer/ViewerProgram.cs @@ -709,11 +709,19 @@ static SessionState Dispatch(SessionState state, Command command, OwnerLink? lin if (link is null) { // Only begun here. Applying every entry inside this frame held the window for as long - // as the queue was long; the loop hands the batch to a worker instead. - if (command.Kind == CommandKind.AcceptAll && - state.Mode == ViewerMode.Inline) + // as the queue was long; the loop hands the batch to a worker instead. A group's + // accept the same, since in a queue of one solution its header's group is the queue. + if (state.Mode == ViewerMode.Inline) { - return ViewerSession.BeginAcceptAll(state); + if (command.Kind == CommandKind.AcceptAll) + { + return ViewerSession.BeginAcceptAll(state); + } + + if (command.Kind == CommandKind.AcceptGroup) + { + return ViewerSession.BeginAcceptGroup(state); + } } return ViewerSession.Apply(state, command, ViewerActions.Real); diff --git a/src/DiffEngineViewer/ViewerSession.cs b/src/DiffEngineViewer/ViewerSession.cs index baa3aaee6..1c552f1a0 100644 --- a/src/DiffEngineViewer/ViewerSession.cs +++ b/src/DiffEngineViewer/ViewerSession.cs @@ -789,76 +789,72 @@ static SessionState AcceptInline(SessionState state, ViewerActions actions) } /// - /// Accepts every member of the group a header's menu described, skipping conflicted entries - /// the way accept-all does. By key rather than index, because each accept rebuilds the queue - /// underneath the next. + /// A whole group accept in one call, for a caller that already holds the state: what + /// is to an accept-all, and the same batch underneath. + /// + static SessionState AcceptGroup(SessionState state, MenuState menu, ViewerActions actions) + { + // For the reason AcceptAllInline gives + if (state.Batch is not null) + { + return state; + } + + state = BeginAcceptGroup(state, menu); + while ((state = ClaimNext(state)).Batch?.Current is { } entry) + { + state = ApplyClaimed(entry, actions)(state); + } + + return state; + } + + /// + /// Starts an accept of every member of the group the open menu's header describes, without + /// applying anything yet: an accept-all over those members and nothing else, carried out the + /// way says. The state as it is, less the menu, when there is no + /// group to accept. + /// + /// It used to be one transition that applied every member before it returned, on the render + /// thread and under the lock every arrival waits on. In a queue of one solution that header's + /// group is the whole queue, so it was the freeze the batch was written to remove. + /// /// - /// A solution header spans tracked moves and deletes as well as snapshots, so the sweep does + /// A solution header spans tracked moves and deletes as well as snapshots, so the batch does /// too. Skipping them would make "Accept all in ..." quietly mean "accept the snapshots in /// ...", which is the divergence the unqualified accept-all already avoids. /// + /// + /// Being the same batch, it goes by the batch's rules: a snapshot the applier would not take + /// stays in the queue with what the applier said, where a group accept used to drop it as a + /// single accept does. That holds this group's deletes either way, and counts only this + /// group's own attempts in doing so. + /// /// - static SessionState AcceptGroup(SessionState state, MenuState menu, ViewerActions actions) + public static SessionState BeginAcceptGroup(SessionState state) { - var all = Members(state, menu); - var members = all - .Where(_ => _.Kind == QueueEntryKind.Inline) - .ToList(); - var queue = Pending(state); - var accepted = 0; - var notWritten = 0; - var failed = 0; - var conflicted = 0; - string? failure = null; - foreach (var member in members) + if (state.Menu is not { } menu) { - if (member.Conflicted) - { - conflicted++; - continue; - } - - var before = queue.Count; - // The applier's own answer, kept as it goes past. A group accept goes one entry at a - // time, so a stale one leaves the queue here the way a single accept does, and the - // count of accepts would otherwise include a snapshot written nowhere - which is - // exactly what the sweep below must not take as licence to delete anything. - InlineApplyResult? applied = null; - queue = queue.Accept(member.Key, patch => applied = actions.ApplyInline(patch), out var outcome); - if (queue.Count < before) - { - if (applied?.Status == InlineApplyStatus.NotFound) - { - notWritten++; - failure = outcome; - continue; - } - - accepted++; - continue; - } + return state; + } - if (outcome is not null) - { - failed++; - failure = outcome; - } + state = state with { Menu = null }; + if (state.Mode != ViewerMode.Inline) + { + return state; } - return SweepTracked( - state, - Rebuild(state, queue), - // The wording accept-all uses, from where accept-all gets it, so a group sweep and a - // full sweep cannot read differently - InlineQueue.AcceptAllMessage(accepted, notWritten, failed, conflicted, failure), - actions, - discarding: false, - TrackedKeysOf(all), - // Its own members only: a stale one has left the queue, and one that failed is still - // in it, beside other entries' statuses from other accepts - refused: notWritten + failed > 0); + return BeginAcceptGroup(state, menu); } + // By key rather than index, because each accept rebuilds the queue underneath the next. + static SessionState BeginAcceptGroup(SessionState state, MenuState menu) => + BeginAccept( + state, + Members(state, menu) + .Select(_ => _.Key) + .ToList()); + static SessionState DiscardGroup(SessionState state, MenuState menu, ViewerActions actions) { var all = Members(state, menu); @@ -872,12 +868,11 @@ static SessionState DiscardGroup(SessionState state, MenuState menu, ViewerActio queue = queue.Discard(key, out _); } - return SweepTracked( + return DiscardTrackedIn( state, Rebuild(state, queue), $"Discarded {keys.Count}", actions, - discarding: true, TrackedKeysOf(all)); } @@ -1003,7 +998,20 @@ static SessionState AcceptAllInline(SessionState state, ViewerActions actions) /// honest way to pick a side. They are counted into the message once the batch has finished. /// ///
- public static SessionState BeginAcceptAll(SessionState state) + public static SessionState BeginAcceptAll(SessionState state) => + BeginAccept(state, null); + + /// + /// A batch over the whole queue or over some of it. One method with a name of its own, rather + /// than an optional argument on , so that one is still a + /// transition a host can be handed as it is. + /// + /// The state to start it in. + /// + /// The keys to accept, for a group header acting on its own members. Null accepts everything, + /// which is what the unqualified accept-all means. + /// + static SessionState BeginAccept(SessionState state, IReadOnlyCollection? only) { if (state.Mode != ViewerMode.Inline || state.Batch is not null) @@ -1011,10 +1019,15 @@ public static SessionState BeginAcceptAll(SessionState state) return state; } + var batch = new AcceptBatch([], 0) + { + Only = only?.ToHashSet() + }; var keys = new List(); foreach (var entry in state.Queue) { - if (entry is { Kind: QueueEntryKind.Inline, Conflicted: false }) + if (entry is { Kind: QueueEntryKind.Inline, Conflicted: false } && + batch.Covers(entry.Key)) { keys.Add(entry.Key); } @@ -1022,13 +1035,18 @@ public static SessionState BeginAcceptAll(SessionState state) foreach (var entry in state.Queue) { - if (entry.Kind is QueueEntryKind.Move or QueueEntryKind.Delete) + if (entry.Kind is QueueEntryKind.Move or QueueEntryKind.Delete && + batch.Covers(entry.Key)) { keys.Add(entry.Key); } } - var batch = new AcceptBatch(keys, keys.Count); + batch = batch with + { + Remaining = keys, + Total = keys.Count + }; // Nothing to apply, so nothing to report progress on: finished where it started if (keys.Count == 0) { @@ -1052,7 +1070,22 @@ public static SessionState BeginAcceptAll(SessionState state) /// Entries with nothing left to apply are passed over rather than claimed: one that has gone /// since the batch began - settled, discarded, its file taken away - and one a second /// framework has since made a conflict of. A delete is held rather than claimed once a - /// snapshot in the batch was not written, for the reason gives. + /// snapshot in the batch was not written. + /// + /// + /// A snapshot moving inline arrives as two unrelated entries: the patch that writes the literal + /// into the source, and a delete of the verified file it replaces. A bulk accept ran the delete + /// whether or not the patch landed, so a patch the applier would not take — a call site that + /// cannot host a Snapshot call, a source that moved since the run — cost the snapshot both + /// copies at once. Nothing ties a delete to the patch it belongs to, so every delete of the + /// batch waits on every patch of it. Blunt, and deliberately so — the entries held are still + /// queued, still shown, and still acceptable one at a time. Moves are left alone: a received + /// file promoted over a verified one is the snapshot arriving, not the last copy of it leaving. + /// + /// + /// Counted from the attempts the batch made (), never read + /// off the queue. Every status an entry carries looks the same there, and reading them held a + /// group's deletes over a failure in another solution, left by an accept long before this one. /// ///
public static SessionState ClaimNext(SessionState state) @@ -1213,14 +1246,16 @@ state with /// /// The batch done: the sentence a bulk accept ends with, and nothing left saying one is /// running. Conflicts are counted here, as whatever the queue still holds with more than one - /// variant, which includes any a second framework made while the batch ran. + /// variant, which includes any a second framework made while the batch ran. A group's batch + /// counts its own members only. /// static SessionState Finish(SessionState state, AcceptBatch batch) { var conflicted = 0; foreach (var entry in state.Queue) { - if (entry is { Kind: QueueEntryKind.Inline, Conflicted: true }) + if (entry is { Kind: QueueEntryKind.Inline, Conflicted: true } && + batch.Covers(entry.Key)) { conflicted++; } @@ -1254,46 +1289,33 @@ static List Without(IReadOnlyList queue, int index) => static SessionState DiscardAllInline(SessionState state, ViewerActions actions) { var discarded = Pending(state).DiscardAll(out var message); - return SweepTracked(state, Rebuild(state, discarded), message, actions, discarding: true); + return DiscardTrackedIn(state, Rebuild(state, discarded), message, actions); } /// - /// The tracked half of a bulk command, worded the way an owning tray words its own: the inline + /// The tracked half of a bulk discard, worded the way an owning tray words its own: the inline /// summary, then ", plus n files" with what stayed pending counted rather than hidden. Both - /// sweeps say the same thing about the same files, whichever process is holding them. - /// - /// - /// The keys to sweep, for a group header acting on its own members. Null sweeps every tracked - /// entry, which is what the unqualified bulk commands mean. - /// - /// - /// Whether the inline accept this sweep follows left a snapshot unwritten, which holds every - /// delete it would carry out. + /// say the same thing about the same files, whichever process is holding them. /// - /// A snapshot moving inline arrives as two unrelated entries: the patch that writes the literal - /// into the source, and a delete of the verified file it replaces. The sweep ran the delete - /// whether or not the patch landed, so a patch the applier would not take — a call site that - /// cannot host a Snapshot call, a source that moved since the run — cost the snapshot both - /// copies at once. Nothing ties a delete to the patch it belongs to, so the whole sweep of - /// deletes waits on the whole batch of patches. Blunt, and deliberately so — the entries held - /// are still queued, still shown, and still acceptable one at a time. Moves are left alone: a - /// received file promoted over a verified one is the snapshot arriving, not the last copy of it - /// leaving. - /// - /// - /// Counted by the caller from the attempts it made, never read off the queue. Every status an - /// entry carries looks the same there, and reading them held a group's deletes over a failure - /// in another solution, left by an accept long before this one. + /// Only discards go this way now. A bulk accept is an , an entry at a + /// time and outside the lock, because accepting is where the time goes: a discard throws a + /// received file away or untracks a delete, and neither waits on anything. /// + ///
+ /// The state the discard was asked of. + /// Its queue, with the snapshots already discarded. + /// What the snapshots' half of the discard said. + /// What throws a received file away. + /// + /// The keys to discard, for a group header acting on its own members. Null discards every + /// tracked entry, which is what the unqualified discard-all means. /// - static SessionState SweepTracked( + static SessionState DiscardTrackedIn( SessionState state, IReadOnlyList queue, string message, ViewerActions actions, - bool discarding, - IReadOnlyCollection? only = null, - bool refused = false) + IReadOnlyCollection? only = null) { var remaining = new List(queue.Count); var swept = 0; @@ -1307,15 +1329,7 @@ static SessionState SweepTracked( continue; } - if (refused && - entry.Kind == QueueEntryKind.Delete) - { - kept++; - remaining.Add(entry with { Status = deleteHeld }); - continue; - } - - if (TryApplyTracked(entry, actions, discarding) is not { } failure) + if (TryApplyTracked(entry, actions, discarding: true) is not { } failure) { swept++; continue; @@ -1330,7 +1344,7 @@ static SessionState SweepTracked( /// /// The files clause of a bulk command, after the inline summary: ", plus n files", with what - /// stayed pending counted rather than hidden. Shared by the group sweeps and the accept-all + /// stayed pending counted rather than hidden. Shared by the bulk discards and the accept-all /// batch, so the two cannot word the same files differently. /// static string WithFiles(string message, int swept, int kept) From 08d8b12eb76a0d4837a885e226a29408f63594bc Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:08:32 +1000 Subject: [PATCH 40/73] Ask the embedded font which characters draw a cell wide CellGrid draws a run of characters the embedded font has as one string, and anything else a segment a character, each laid out on its own by every head and encoded on its own for two of them. Which characters the font has was a guess written as four ranges: Latin with its extensions, Greek, Cyrillic. The guess was wrong both ways. It left out everything else the font has, so a table drawn in a snapshot, rows of box drawing, was a segment a character, as were arrows, mathematical operators and typographic punctuation. And it took in characters the font does not have, a Latin Extended-B letter or an old Cyrillic one, which a head then drew from some other font at some other width in the middle of a run, moving everything after it off the grid. FontCoverage reads the answer out of the font's own cmap and hmtx tables: a glyph, at the advance every other glyph of the font has. Asked of the bytes rather than listed, so replacing the font file cannot leave a list behind that describes the old one. Bytes that are not a font cover nothing, and every character is then drawn on its own, which is slower and still right. Three things stay as they were. A character the grid gives two cells is on its own whatever the font has, since the grid decides and the font has a one cell glyph for a few of them. A mark attaches to what it follows. And a surrogate with no partner is on its own: it is read as the replacement character, which the font has, and is not one. A row made only of what the font draws a cell wide is now measured the way a row of ASCII is, with no walk through its clusters. Before and after, with other builds running. CellGridBenchmarks, the segments of a hundred rows: plain text 4 us 3 KB 3 us 3 KB box drawing 181 us 319 KB 15 us 3 KB CJK 189 us 89 KB 98 us 89 KB ScreenPayloadBenchmarks, a changed screen the size of a 4K display, which now has a row of box drawing as one of its texts: box drawing 3.82 ms 2.9 MB 0.26 ms 15 KB No pixel baseline of the WinForms head changed. The macOS and Linux baselines are taken on CI. --- .../ScreenPayloadBenchmarks.cs | 8 +- src/DiffEngineViewer.Tests/CellGridTests.cs | 130 +++++++++ src/DiffEngineViewer/CellGrid.cs | 89 +++++-- src/DiffEngineViewer/FontCoverage.cs | 249 ++++++++++++++++++ 4 files changed, 453 insertions(+), 23 deletions(-) create mode 100644 src/DiffEngineViewer/FontCoverage.cs diff --git a/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs index 2f1fcd648..e3b4de9e4 100644 --- a/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs +++ b/src/DiffEngineViewer.Benchmarks/ScreenPayloadBenchmarks.cs @@ -12,7 +12,9 @@ [MemoryDiagnoser] public class ScreenPayloadBenchmarks { - [Params("ascii", "cjk")] + // Box drawing is what a table drawn in a snapshot is made of. The embedded font has it, so + // whether a row of it is one segment or one a character is CellGrid's to decide. + [Params("ascii", "box", "cjk")] public string Text = ""; readonly ScreenPayload payload = new(); @@ -61,6 +63,10 @@ string Rows(bool changed) // CJK Unified Ideographs, two cells each builder.Append((char) (0x4E00 + (row * 7 + column * 13) % 2000)); } + else if (Text == "box") + { + builder.Append(column % 6 == 0 ? '┼' : '─'); + } else { builder.Append((char) ('a' + (row + column) % 26)); diff --git a/src/DiffEngineViewer.Tests/CellGridTests.cs b/src/DiffEngineViewer.Tests/CellGridTests.cs index afcc51cfc..c37ebdb0d 100644 --- a/src/DiffEngineViewer.Tests/CellGridTests.cs +++ b/src/DiffEngineViewer.Tests/CellGridTests.cs @@ -54,6 +54,136 @@ await Assert.That(CellGrid.Segments("ab中ćd")) public async Task CyrillicIsARunLikeAscii() => await Assert.That(CellGrid.Segments("Привет, мир")).IsEquivalentTo([new CellGrid.Segment(0, 11, 0)]); + /// + /// Whatever the embedded font has is drawn in runs, from whichever block: a table drawn in a + /// snapshot is rows of box drawing, and was a segment a character. + /// + [Test] + public async Task BoxDrawingArrowsAndPunctuationAreARunLikeAscii() => + await Assert.That(CellGrid.Segments("├── a → b … “c” ≤ d")) + .IsEquivalentTo([new CellGrid.Segment(0, 19, 0)]); + + /// + /// A character the font does not have is drawn from whatever font the machine finds for it, at + /// that font's width, so it is never inside a run. That holds in the blocks the font mostly + /// covers too, where it used to be taken on trust: Latin Extended-B's ƀ and Cyrillic's Ѡ. + /// + [Test] + [Arguments("aƀb")] + [Arguments("aѠb")] + public async Task ACharacterTheFontLacksIsASegmentOfItsOwn(string text) => + await Assert.That(CellGrid.Segments(text)) + .IsEquivalentTo, CellGrid.Segment>( + [ + new(0, 1, 0), + new(1, 1, 1), + new(2, 1, 2) + ]); + + /// + /// The font has a glyph for the high voltage sign, a cell wide, and the grid gives it two as + /// it does every emoji. The grid decides, so it is drawn on its own and what follows is where + /// the grid says. + /// + [Test] + public async Task ACharacterGivenTwoCellsIsOnItsOwnWhateverTheFontHas() => + await Assert.That(CellGrid.Segments("a⚡b")) + .IsEquivalentTo, CellGrid.Segment>( + [ + new(0, 1, 0), + new(1, 1, 1), + new(2, 1, 3) + ]); + + /// + /// Half a surrogate pair is read as the replacement character, which the font has a glyph + /// for. The text still holds half a pair, which no font has, so it stays out of a run. + /// + [Test] + public async Task ASurrogateWithNoPartnerIsASegmentOfItsOwn() => + await Assert.That(CellGrid.Segments("a\uD800b")) + .IsEquivalentTo, CellGrid.Segment>( + [ + new(0, 1, 0), + new(1, 1, 1), + new(2, 1, 2) + ]); + + /// + /// A row of nothing but what the font draws a cell wide is measured as a row of ASCII is, with + /// no walk through its clusters: as many cells as characters, and each character at its own. + /// + [Test] + public async Task ARowTheFontDrawsThroughoutIsMeasuredAsPlainTextIs() + { + const string rule = "├──┼──┤ → é"; + + await Assert.That(CellGrid.Cells(rule)).IsEqualTo(11); + await Assert.That(CellGrid.Snap(rule, 4)).IsEqualTo(4); + await Assert.That(CellGrid.Index(rule, 4)).IsEqualTo(4); + await Assert.That(CellGrid.Snap(rule, 40)).IsEqualTo(11); + await Assert.That(CellGrid.Index(rule, 40)).IsEqualTo(11); + await Assert.That(CellGrid.Segments(rule)).IsEquivalentTo([new CellGrid.Segment(0, 11, 0)]); + } + + /// + /// And one wide character in such a row puts it back on the grid a cluster at a time. + /// + [Test] + public async Task AWideCharacterInSuchARowIsStillCounted() + { + const string rule = "──中─"; + + await Assert.That(CellGrid.Cells(rule)).IsEqualTo(5); + await Assert.That(CellGrid.Index(rule, 4)).IsEqualTo(3); + await Assert.That(CellGrid.Segments(rule)) + .IsEquivalentTo, CellGrid.Segment>( + [ + new(0, 2, 0), + new(2, 1, 2), + new(3, 1, 4) + ]); + } + + /// + /// What the grid asks the font: every printable ASCII character, since a row of those is drawn + /// as one string without asking; what it has past ASCII, and past the basic plane; and not a + /// character it lacks, nor a mark, which it has at no width at all. + /// + [Test] + public async Task TheEmbeddedFontSaysWhatItDrawsACellWide() + { + for (var character = 0x20; character <= 0x7E; character++) + { + await Assert.That(FontCoverage.Has(character)).IsTrue(); + } + + await Assert.That(FontCoverage.Has(0x2500)).IsTrue(); + await Assert.That(FontCoverage.Has(0x2192)).IsTrue(); + await Assert.That(FontCoverage.Has(0x044F)).IsTrue(); + await Assert.That(FontCoverage.Has(0x1D538)).IsTrue(); + + await Assert.That(FontCoverage.Has(0x4E2D)).IsFalse(); + await Assert.That(FontCoverage.Has(0x0180)).IsFalse(); + await Assert.That(FontCoverage.Has(0x0301)).IsFalse(); + await Assert.That(FontCoverage.Has(0x1F600)).IsFalse(); + await Assert.That(FontCoverage.Has(0x10FFFF)).IsFalse(); + await Assert.That(FontCoverage.Has(-1)).IsFalse(); + } + + /// + /// Bytes that are not a font say nothing is covered, rather than throwing out of the first row + /// to be drawn: every character is then a segment of its own, which is slower and still right. + /// + [Test] + public async Task BytesThatAreNotAFontCoverNothing() + { + await Assert.That(FontCoverage.Read([]).Has('a')).IsFalse(); + await Assert.That(FontCoverage.Read([0, 1, 0, 0, 0, 200, 9, 9, 9, 9, 9, 9, 9, 9]).Has('a')).IsFalse(); + var truncated = EmbeddedFont.Bytes().AsSpan(0, 2000).ToArray(); + await Assert.That(FontCoverage.Read(truncated).Has('a')).IsFalse(); + } + /// /// A column inside a wide character moves to its end, so a selection takes it whole or not at /// all, and the index it maps to is after the whole character. diff --git a/src/DiffEngineViewer/CellGrid.cs b/src/DiffEngineViewer/CellGrid.cs index d15c67c0d..f0ea57a14 100644 --- a/src/DiffEngineViewer/CellGrid.cs +++ b/src/DiffEngineViewer/CellGrid.cs @@ -146,14 +146,22 @@ public static int Index(string flattened, int cell) => } /// - /// Printable ASCII throughout, which every head draws one cell a character with nothing to - /// work out. + /// Characters every head draws one cell each with nothing to work out, throughout: a row that + /// is one run, as many cells as it has characters, each character at the cell of its index. + /// Printable ASCII, which is nearly every row, and whatever else the embedded font draws a + /// cell wide, so a row of box drawing costs what a row of letters does rather than a walk + /// through its clusters. /// static bool IsPlain(string text) { foreach (var character in text) { - if (character is < ' ' or > '~') + if (character is >= ' ' and <= '~') + { + continue; + } + + if (!SimpleUnit(character)) { return false; } @@ -162,6 +170,41 @@ static bool IsPlain(string text) return true; } + /// + /// Whether one UTF-16 unit is a character that can be part of a run: see . + /// Never half of a surrogate pair, so a row of these is as many characters as it is long. + /// + static bool SimpleUnit(char character) => + (simple.Value[character >> 6] & (1UL << (character & 63))) != 0; + + // The basic plane's answer to Simple as a bit a character, worked out the first time a row + // that is not ASCII is measured: asking costs a category lookup, a walk of the wide ranges + // and the font's own answer, and every character of every such row asks. + static readonly Lazy simple = new(SimpleUnits); + + static ulong[] SimpleUnits() + { + var units = new ulong[1024]; + for (var value = 0x20; value <= 0xFFFF; value++) + { + if (value is >= 0xD800 and <= 0xDFFF) + { + continue; + } + + var rune = new Rune(value); + // Printable ASCII whatever the font says, since a row of it is drawn as one string + // without asking, by a head left with a font of its own as much as by one with ours + if (value <= 0x7E || + (!ZeroWidth(rune) && !Wide(rune) && FontCoverage.Has(value))) + { + units[value >> 6] |= 1UL << (value & 63); + } + } + + return units; + } + readonly record struct Cluster(int Start, int Length, int Width, bool Simple); static IEnumerable Clusters(string text) @@ -173,8 +216,14 @@ static IEnumerable Clusters(string text) var rune = Read(text, ref index); // A mark with nothing before it for it to sit on still takes a cell, or it could be // neither drawn anywhere nor selected - var width = !ZeroWidth(rune) && Wide(rune) ? 2 : 1; - var simple = Simple(rune); + var mark = ZeroWidth(rune); + var wide = !mark && Wide(rune); + var width = wide ? 2 : 1; + // A surrogate with no partner is read as the replacement character, which the font + // has. What is in the text is still half a pair, which no font has, so it is drawn on + // its own like anything else a head has to find a glyph for. + var lone = char.IsSurrogate(text[start]) && index - start == 1; + var simple = !mark && !wide && !lone && Simple(rune); while (index < text.Length) { var next = index; @@ -223,24 +272,20 @@ UnicodeCategory.EnclosingMark or /// /// A character the embedded monospace font has, and so draws exactly one cell wide in every - /// head, which lets a run of them be drawn as one string: Latin with its extensions, Greek and - /// Cyrillic. Everything else is drawn on its own, at its column, because where a fallback font - /// would put the character after it is not something the grid can know. + /// head, which lets a run of them be drawn as one string: Latin, Greek and Cyrillic as far as + /// the font goes, and its box drawing, arrows, mathematical operators and typographic + /// punctuation. Everything else is drawn on its own, at its column, because where a fallback + /// font would put the character after it is not something the grid can know. + /// + /// Asked of the font () rather than listed. Only of a character that + /// takes one cell: a mark takes none, and a character the grid gives two cells is given them + /// whatever the font would have drawn it in, so neither can be part of a run. + /// /// - static bool Simple(Rune rune) - { - var value = rune.Value; - if (ZeroWidth(rune)) - { - return false; - } - - return value is - >= 0x20 and <= 0x7E or - >= 0xA0 and <= 0x24F or - >= 0x370 and <= 0x3FF or - >= 0x400 and <= 0x52F; - } + static bool Simple(Rune rune) => + rune.IsBmp + ? SimpleUnit((char) rune.Value) + : FontCoverage.Has(rune.Value); /// /// East Asian Wide and Fullwidth, and the emoji blocks, by range. Not the whole Unicode diff --git a/src/DiffEngineViewer/FontCoverage.cs b/src/DiffEngineViewer/FontCoverage.cs new file mode 100644 index 000000000..948797726 --- /dev/null +++ b/src/DiffEngineViewer/FontCoverage.cs @@ -0,0 +1,249 @@ +using System.Buffers.Binary; + +/// +/// Which characters the embedded font draws a cell wide: the ones it has a glyph for, at the +/// advance every other glyph of a monospace font has. Read out of the font's own tables, once. +/// +/// This is what needs to know to draw a run of characters as one string, +/// and it used to be a guess written as four ranges: Latin with its extensions, Greek, Cyrillic. +/// The guess was wrong both ways. It left out everything else the font has, so a row of box +/// drawing, arrows or typographic punctuation was cut into a segment a character, each laid out on +/// its own by every head. And it took in characters the font does not have, a ƀ or a Ѡ, which a +/// head then drew from some other font at some other width in the middle of a run, moving +/// everything after it off the grid. +/// +/// +/// Asked of the bytes rather than written out as a table, so replacing the font file cannot leave +/// a list behind that describes the old one. +/// +/// +static class FontCoverage +{ + static readonly Lazy embedded = new(() => Read(EmbeddedFont.Bytes())); + + /// + /// Whether the embedded font has a glyph for the code point that is one cell wide. + /// + public static bool Has(int codePoint) => + embedded.Value.Has(codePoint); + + /// + /// The basic plane as a bit a code point, which is where nearly everything asked about is, and + /// the few ranges past it in order. + /// + internal sealed class Coverage(ulong[] plane, (int First, int Last)[] beyond) + { + public static readonly Coverage None = new(new ulong[1024], []); + + public bool Has(int codePoint) + { + if (codePoint < 0) + { + return false; + } + + if (codePoint <= 0xFFFF) + { + return (plane[codePoint >> 6] & (1UL << (codePoint & 63))) != 0; + } + + foreach (var (first, last) in beyond) + { + if (codePoint < first) + { + return false; + } + + if (codePoint <= last) + { + return true; + } + } + + return false; + } + } + + /// + /// The coverage of a font file. Nothing, rather than a throw, for bytes that are not a font + /// this can read: every character is then drawn on its own at its column, which is slower and + /// still right. Internal so the tests can hand it bytes that are not the embedded font. + /// + internal static Coverage Read(byte[] font) + { + try + { + return Parse(font); + } + catch (Exception exception) + when (exception is ArgumentOutOfRangeException or IndexOutOfRangeException or InvalidDataException) + { + return Coverage.None; + } + } + + static Coverage Parse(byte[] font) + { + var cmap = Table(font, "cmap"); + var hhea = Table(font, "hhea"); + var hmtx = Table(font, "hmtx"); + // The advances are a list one per glyph for the first so many glyphs, and the last of + // them stands for every glyph after that + var metrics = U16(font, hhea + 34); + if (metrics == 0) + { + throw new InvalidDataException("The font has no horizontal metrics."); + } + + int Advance(int glyph) => + U16(font, hmtx + 4 * Math.Min(glyph, metrics - 1)); + + var plane = new ulong[1024]; + var beyond = new List<(int First, int Last)>(); + var mapped = new List<(int CodePoint, int Glyph)>(); + Mappings(font, cmap, mapped); + var cell = -1; + foreach (var (codePoint, glyph) in mapped) + { + if (codePoint == ' ') + { + cell = Advance(glyph); + } + } + + foreach (var (codePoint, glyph) in mapped) + { + if (glyph == 0 || + Advance(glyph) != cell) + { + continue; + } + + if (codePoint <= 0xFFFF) + { + plane[codePoint >> 6] |= 1UL << (codePoint & 63); + } + else if (beyond.Count > 0 && + beyond[^1].Last == codePoint - 1) + { + beyond[^1] = (beyond[^1].First, codePoint); + } + else + { + beyond.Add((codePoint, codePoint)); + } + } + + return new(plane, beyond.ToArray()); + } + + /// + /// Every code point the font maps and the glyph it maps to, in ascending order, from the + /// widest subtable there is: the one that can name code points past the basic plane when the + /// font has one, and the basic plane's own otherwise. + /// + static void Mappings(byte[] font, int cmap, List<(int CodePoint, int Glyph)> mapped) + { + var tables = U16(font, cmap + 2); + var segmented = -1; + for (var index = 0; index < tables; index++) + { + var subtable = cmap + (int) U32(font, cmap + 4 + index * 8 + 4); + var format = U16(font, subtable); + if (format == 12) + { + Groups(font, subtable, mapped); + return; + } + + if (format == 4) + { + segmented = subtable; + } + } + + if (segmented < 0) + { + throw new InvalidDataException("The font has no character map this reads."); + } + + Segments(font, segmented, mapped); + } + + // Format 12: runs of code points, each run mapped to a run of glyphs. + static void Groups(byte[] font, int subtable, List<(int CodePoint, int Glyph)> mapped) + { + var groups = (int) U32(font, subtable + 12); + for (var index = 0; index < groups; index++) + { + var group = subtable + 16 + index * 12; + var first = (int) U32(font, group); + // No further than Unicode goes, so a table that says otherwise is not walked + var last = (int) Math.Min(U32(font, group + 4), 0x10FFFF); + var glyph = (int) U32(font, group + 8); + for (var codePoint = Math.Max(first, 0); codePoint <= last; codePoint++) + { + mapped.Add((codePoint, glyph + codePoint - first)); + } + } + } + + // Format 4: segments of the basic plane, each mapped by an offset or through a table. + static void Segments(byte[] font, int subtable, List<(int CodePoint, int Glyph)> mapped) + { + var count = U16(font, subtable + 6) / 2; + var ends = subtable + 14; + var starts = ends + count * 2 + 2; + var deltas = starts + count * 2; + var offsets = deltas + count * 2; + for (var index = 0; index < count; index++) + { + var first = U16(font, starts + index * 2); + var last = U16(font, ends + index * 2); + var delta = U16(font, deltas + index * 2); + var offset = U16(font, offsets + index * 2); + for (var codePoint = first; codePoint <= last && codePoint != 0xFFFF; codePoint++) + { + int glyph; + if (offset == 0) + { + glyph = (codePoint + delta) & 0xFFFF; + } + else + { + glyph = U16(font, offsets + index * 2 + offset + (codePoint - first) * 2); + if (glyph != 0) + { + glyph = (glyph + delta) & 0xFFFF; + } + } + + mapped.Add((codePoint, glyph)); + } + } + } + + static int Table(byte[] font, string tag) + { + var tables = U16(font, 4); + for (var index = 0; index < tables; index++) + { + var record = 12 + index * 16; + if (font[record] == tag[0] && + font[record + 1] == tag[1] && + font[record + 2] == tag[2] && + font[record + 3] == tag[3]) + { + return (int) U32(font, record + 8); + } + } + + throw new InvalidDataException($"The font has no {tag} table."); + } + + static int U16(byte[] font, int offset) => + BinaryPrimitives.ReadUInt16BigEndian(font.AsSpan(offset, 2)); + + static uint U32(byte[] font, int offset) => + BinaryPrimitives.ReadUInt32BigEndian(font.AsSpan(offset, 4)); +} From b8b1d319a09299f8147fa365fa7553466fef3adc Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:11:00 +1000 Subject: [PATCH 41/73] Take the four macOS baselines again, drawn without ligatures FileDiff, Images, ImagesEnlarged and Selection still showed the title's <> as the one glyph it was drawn as before calt and liga were turned off. Each was within the pixel tests' threshold of what the head now draws, so they passed and CI uploaded nothing to approve. The commit before the benchmarks dropped them for one run, and these are that run's received images. Each differs from the baseline it replaces in one place, 84 pixels at the title's <>, x 183 to 206 and y 8 to 25, and nowhere else. --- .../PixelTests.FileDiff.OSX.verified.png | Bin 0 -> 37437 bytes .../PixelTests.Images.OSX.verified.png | Bin 0 -> 40662 bytes .../PixelTests.ImagesEnlarged.OSX.verified.png | Bin 0 -> 65594 bytes .../PixelTests.Selection.OSX.verified.png | Bin 0 -> 40635 bytes todo.md | 1 - 5 files changed, 1 deletion(-) create mode 100644 src/DiffEngineViewer.Tests/PixelTests.FileDiff.OSX.verified.png create mode 100644 src/DiffEngineViewer.Tests/PixelTests.Images.OSX.verified.png create mode 100644 src/DiffEngineViewer.Tests/PixelTests.ImagesEnlarged.OSX.verified.png create mode 100644 src/DiffEngineViewer.Tests/PixelTests.Selection.OSX.verified.png diff --git a/src/DiffEngineViewer.Tests/PixelTests.FileDiff.OSX.verified.png b/src/DiffEngineViewer.Tests/PixelTests.FileDiff.OSX.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..e2208c0c13f1b59530740c5d01903defb10225d2 GIT binary patch literal 37437 zcmeFaWn5Hk8$Burj~GZQN-8Lblpx(IodOC15|R>vGz{&dbSPZ|NJQ_ z&YU@$h;`;H_!kS>mWci9w>WZ%XMcUhu7GyDwla}-=8WhWX|V@S9I=*1&wtkLM)Dqq z^La_Vd0#6>s6uFCipO3m`6Z*bA*;}=*a&2$CK6Zb3df7&J$tmb))nuhuWXaVKIqr~C?0kueALW0G z=!U4r87yoZJi=cep5VY#wVfXPww3V4`}25Fj&%R*_Ui*V9$pmZnS7bw_b0r!LH+BH zzxKuBBqY3Naz-!wzt2c`Gx`S-Kk=m48juza5W z=bb>O6-A^*YVXHsT-)DSOPFm>&}se{#Q0d(_jZJoB$eHh{Yiheu3^h6tsmhAqe|Gq z0#vsLZH1|}%jQ41#IR-v{l~ZzsU|8W2%9YBl(to#YmXQDQk-78w>!oHFPn>ZPW$^Z z|DBw?Zx>94icA(VvvOso>I2OdiY|}4Pk)e1bKMy&4O!DU-i$htn)1*V`Qv-R%cwOfN#-)im zoxtISGN8sm1nm0*mV5k5KG zddK=)R`?>k=bKmV;h@Px-wORdbExC4=NQsCT^k8wv2FXZRvDX%L=T}RylGgA*v9jE zRW(z;{(Ua}V694ompQ#>uxGv{6#0XaAQ^i_VI_;xNtKe>jQ#9%GgL$(tW@*L=uG~k{3?dmW zWkFk}WqlEv7SZ7hmD$LXK&>Y`aIQck^2%aC!|E~Wt{=6~29rxzaXwq*9v8W$ z#Osx!ZiQxhangHD)Z64HO<{}+*@bOQ+6m69WrMMNZtvQ=qmARECuNN&Rm_C<%5u~t z;MCUNZ)O;`$1f}wwznw+dgxvfI#{uEkJWbF?(H*BTN_y2A6)pp^MWPeYlJXaZ+O9G z6H_`EwT#XavYwdWc7@_k{r|4SA%?s`quA6y?x8zN_{8~dqhLw=IbT-G)e#?DG!Lr> zd!+n*gv1)&>{bpw$()H=w26h++`4d3jBsVS_+*+a&_}_=x2;=-DJKj+&m2-}VXIvvp*5dKCvh@zG(8@6S7@V_WH53^W`&) zc_d>h-^t~UK%!-cCj2Vs731UVN30r{=Ly3}Ga}5yg*W`|abjs-Z!M%Jr2S1G%)4Yo z^!1a*mhYWmNgCHMZMVG{Qk{DJ1qW!DoT%;-aZC}pre5VVZR_FN=VAdAPgHRrury`w`*qf3ybCiJ1!5zBt8>nNE z89MGq+shi>G;WUQct35%;@NKV7v#&A{>JkXCuGQW+s@K4d=Sga3{%J{Xu7*F9je$i z7EF}le?!eo#o=h#cKRSMqFq-u!G9)FM;LC~C9UpZkKFE)-8e~qCQ;3u)Vy($BgHa9 z(y+Vy_Kny-Av{qZ=da6@QTShd*XlN?1iZRxcXqCYgf`Gj9_ZQ*_^f$tz&RzpRBY5! zgk#qd#!}f2++6xW*zHpblhYv*36k`F_dPvA|L%2e$4+yC(0L`Rel3U8-8vDNdTnI$ z?u<|+YK{?`vhyMxEL_Zwt!_j7mK#;>@k5$nI$a_i?NtyRNOcS<_gXE}eAZpozn&W` z!yvr?!&k)`f! z5UZxAaU)%~vUGAXEmK8RoJZUXU<>W+rmuW2xjq9<(#HB!R+#9ePn8tWH4|nbupSxT z;1f;zdMHL^<+Un;1fTfegQ zPSc{y@MAY!JBYz7R1PCn3t+W1!oGnyM5SKMaygeP;T?yC!6TQ6z=`L{lEH0noI5q| zym{QqC>$55l1Sc{{%qx!RTh4}#ImR<^qSrMdsS*7(Mo zk`I%1F5H{jc=IzEsVN+ei@3#IyYzCa;qW#%UW!Ig<7M+{k=DQD^sY(ZP)}ZbY^y%*yoM~K zJ~MuDyi=GcHcf`a)ti54o9z2TI>l$d_Fljusng7;nO-!(#&=6vu)NxPYg}oYNRf=2 zXTC3T+E?S35*|BgDeV6Sz~HI49{B;Tz`e?zl3xA%%owT}1us}$I6 z@6c}qGBnjb&Y@MtIhw2?_Iw|G-9IJ8M>;JTdisVOl6$>%(H@4qh325 z%IX@0BD1Q#+Vql?R$_kflthNiwBl-rYkF6)-s5%E5+=?nR|HpW1X>zweJY}VsRlQ8 zI9#^vIk@ML?Y72scxkqQ+0W47c$xWvPX9m9a9$gm=#kIbVK3v_GbQ9Jt4a%Qaw4LH zsKQ$`C4^Od5<9!|h97pYeHz84{9mGCzI!jmxgYQOuf${Xdb!n#6^f^8(^&U+2A89#^a%s72)T#ftwKf(;)BT~pY0G?#14dW(wz^Y=5yoC;P}SP%Hqy7G zWj|;*Xi&?3-lD=?-|-2~%S}<8c*}rTe`(8P=FaX}9k5oq$B)saE)Md|tH*=l5SavS$YXRBSw*{^lwF+L{zAAsKz4ke-;r&IbHzU--LlOt88RJwTil!8W1Vx4;6P9u&dIIKjPBRF zro)-#tv$0h+q~|x)1HwYAHzb2*Z<6vF`>TAgzd>nOW1v*Hq<&xrNwS2 zTDcG_)bWkjr6r$+-TKJ&U5@LDkv`I*TckPxlNns>lHcFod{iLKr6~|V-_BIY*&vqp zp&f+9_({g=AKYt5XZ+ZT*gu%HbQ8Jni3KT@?9x&O*Ww>uizf~qdS!k&)G7)8C)`9lI2^^L!Q$P1yrHh6eKW3qP_b&3=v)tedX>vQnbyw|6^9 zO`18`Th81vDyBJoBA+Fvfh3mpF^S^6%**TI9jgGKx1j6TU&)Ui6?PM?)o3i69X&4! zQ)AiNT`o#_De^Do9>Sdzcw}q-Jt2Z(9BWE)bCJ_={m1eGZ>JTVTXrzRSnbm8Qa?gx z`{TO`3wx0_WQ+!#otnB%w{*a_qj%LuLqgt2mLzha`uGa=GL>rjv{e?9y|-4DnGy zhPRsr1|r7~7XWDdzWiFJi*5 z=_7eYP0^er6h-a$!*gMO3DM4`qz;WH4UffhBXXN)F}TDiXN2_^m%#ycE5ydjImZ~~ zmIdN1SS?N_`&To;N**u#x)Q1Ufb9Y5xoM$DJsp+3+RBoYYphpxuDd%mCFF)7O6?X3 zLkk*{hPQ;X>ngbt{AV|_Zqp>dXK_~O{#|JNo>7~0ur0~-H$Gf~fCDhX;7`&Wd8M`q zRyU4B^sqimW)!mLJo=C!sbw(hAHhmk!$^CF!>lj+9lc>=d!VSKOWCVyL`^%TMFAfP zI%6lkj2~HCW%Og~W551VQzeWqeu>i1f>r!&CNeYt+~Ku8;^4;?xq?t^K^7V5u=M-! z2l7~Khx(I$k&wK`9bu_9aJ5ZXK)&CAWvwQyU0cxElo5d3$qWj$+rO^*PJ$?k(wC+% zmb^EQckR<4HNDeUTD-2;dMz$GmF9}C>DuXZN>I2$BDrOTVP$1M#M~^L!Rk{4C*u*7 zoyoYJP%*Ni1+GS8sfg~pY@wWOC?=9*q{IUXI}sOkXQ&*0oxLCCF);c;pZ=O^Dp8>F{AH3KJ(iz{=fbQ z=U!NxQnCaK`Wxdvsqxo`L@7^S5(e%VWcoB`lOEk~7t#U8z0|nSR=hU$FG9gwy{7~& zjvTpR{)b=3`3XDc+pw|eN6XNo0>2;WlZS_NGBY>vKN;%u!>BqC7zFw&o&Sycr=v%H z1!x*!brQedr@%#&25cd_;9b7axn@UH{zL|uWgT#WGY+bE-ms1J&da@ z-G^Z}x*Hc?x|8ahqv|aI@`GQMzS`-ji_fDh7V-d{zE5S_@xbKW6;-M3GXSN0`C3%Ns_sg6x1tF0yTw7p zR-5d7qZTPLZO0c`2#5luZ%j3$gYci*JExk^p|tm8Zh;FL7h46am0)o-w&EfdKrYK{ z2VQum=9G@{i|ZP+#qljvpC!mv`>wH>;qVZjX^4jF2H#s~m@kk3oKgV5aTZf{+N^sh)T3?bvtqlVE@k&<;f$U~W=ZSY@ z$~eJe02+$J5J&slW`%py&dVRt6cff)J)|XP3Z*8V2SDf2U`agcG%c`)Kb9S)9ij%= z%yb_R^7w7uJw=TO~h_hN{En zsuZ)_GJ1R(VL@^I`7T+u)}X+%!F;n(MUb#UrsKlCQgw1Xh#=z`cd@Z|S$5xQlbnsV)G}MB2`O^j2*v11g2eh+2HabL&P_v(7Px7MKGI#|LZeJn8=reBbh4zJE~} z@O>|(8QQ=KpC3ae>F|h^>-Tg;RnedNrBu@7q>bTrs_1>7O37cm$}F{UQ8~U%aI1wB zKZQ4~&t=nw1zLlNhuEXVN1Y!|BKo_6Ofp_69Vuuy&4hQ$vLSn3I%oE|6p3VtBO%4c zlLL=az+1W{bmNqw*G7&=(YWotK;P!q%s6QOZ=yaJ@DEW3;tYaVQE2-KY|@vZfNjlv zzdNB|LTCebpTK?hQADqTz)F}z5M}h@>=S98QCk%>u8>#!2$)ja*rZmkDJixx1b2V@ zJy_Oza-CgI>}rqW?u2*Y#G_{BLOJd^$>$L zXa-KX*+DYh2@4{Xs#|$jZ*L}2kpXV2jHc^{E#*We1(G%IcA917l*n|V{d<&!tpd=J zcch>=^qAYz$T>oz1kBJ|{qYY6VQ1ha4+t{v8oghPEzpa#xbmZSd1i zDt)p(<}mKccuaIW%TpDdbgtK;fv7jbdvV}g@JfsA$TJvX0EKW~oNU&mEc9mKvh<73)(}6J39*Y<9_66tL zr1aLiS=k}DI;)ijtINv8(N}YeiB~dm|0T@&{+6t1N^#%fb>amuA$B@yCF;t{7#{2pv(alPhs(#}Ja zOQTA5!~2+$lto_|{m+k4CEry5Vz}}6l8T?MbUdwNSGr-^tZ860tJl;TZ zuDh{>_D9?Oik&s|C38Sai?Y&KZox`Mzn%L3YqfX{vI5bop z(zr4BQPYM&+TI9+GLa--Z|IJrzG;0ypbEJuUe6+6! zEayE!c7yxWRJMywDwRK+f#fls-bKO55j@c+CmbrW!h2k?nqU@uiFQU2`ZCOmt;K!v z9*75o@XCYi#WRX=!|T+Whx~fiZL-AJLg|8dX^+6vl%{b%w30MnB7hS1oib4eb9dXG zsu`zVwUdLA(h0_6N>=+%UF+41-NOj0WOUgb(lR%5w zm~?l}F-k(l0f@!vDhhn5WAWGYl;L{9LG!Ke&&dL~Z*C^*cm8Wqx=g&Pj_bBLM~91$ zj>KBPZfa6KDapI~w+6k8v(&!6P2_3c^}FSHUU4A28hD-q5^&$Rt%bfYN0?`JiT4QA z%@k|em~Q?0B3sgjD~dPCgl|Z;Y1!g5ECVnXu;h!AeY*SqtqJif~gn2{h*pvvQ zW8%VuhP)uh085wi<2LO=h0&e*#2tclB8wY6F;R2|fIC7}4zulhF@lKQE=rQG62buM zIQv~6qdW0pY`WqZ6!o2JcEP90g}C63<|Pt8$;o!k>FcxYj&V4^qs!7wO>CzL=aN71`j!u2rQA? zs(#yxPnwIr2`(pJPGX&u7U2E-NQE3ZwP9oCZaS9a&Ab`r+|HNG;h#8W%F7MyF6_Le=4_6=>JQESs1`amjj&!AmviW>T% z5Rm+fvUzG8st!hb5IR+)I@$Uh9VKaZwyHhP7IN@JHYm%o^sY)vfXRHx%vbV`_Y0Mb z2$vZC(&AyTsmBDTF*D(L&ww5Ox4e9pR}ca9TxB6VQ8jVrJfi+IGrswY>!BNdaXrs> zxG^g)LTIQTyuW_mXgVv9b(m!2Wz-8@d4N=wNsE3{E!Ob?lgiWJUzl?)4J3_ zy}8&lr#tAL`Pvb00<IeE8J%L$Ja zRXAs=R4!hSFZO-Wlug7hN|a~?Fnhh0`A_<(oM|F;`Oa_T#6#49_$8W=Z}j{(vEg@H++)T97uWm)Zr?YB_* z7j8dfGB|PeuS-(i)UcOB?k7iu+l(q{DInWtX{#Qrl ze!an0-xoDrsSp>_a$YH30F|gL2RRm|@!fhJ<>zJ)&8(-elmlgVZ5XJUc7t+$4BYM8 zc?N?A0SPCEbK%Phd^2Gvs9fgHR>?bD(#-nBU?-I3H5gi>na2LD8BAH!srRW`YcA2w zm40(pP(gaZ*e0;uqf%(b?U3z?nFEQ;V0?#Y44n{n8KAk+!`d<9H7y7*yL#R&JQ!+T z>5CXsaDX-$sJTd@c`U~&P=H{n_0fQm5v+`*>TuHp;Hq|P3?uRTc(=xz06}?Quhz%5 zjc+cc>UbLgRX-I#;ZLK4lF!;;CQ3s)yQoWM;Zt&u4B!ec%K=v?ER*a5Vm{~VAJt6@ z5Y_zq96@e&ga5PO6(>IrMK{Y%*<0n;c;q^@(4ZLkVt@SPXx#QIE?ElT@5Wp3WdMfo z339R<_|8$;KEB%FcP8+(%vSE_f%ZmAsyVTJ!N8u~bkWGA7n|*xOz5X5T}*Y!zgCcj z2(Ju`7CCahEWf^P}|@u3-;Ab+BfAwe$Iyg+)$ z;>$``igYM>Yhixiuz8_8w+sCm#9x9j1yZQs9Y{4cT>=siU!6`0m^qc5Q}$y{bJ^bC zp;|FSjBLTYPkE}UetQMr?*$+XTcF}X6@~f4d4|)_Jg|_!e^&Fsql4s4qxCmXe7ZnJ zc#koT*YH6wUWC{_cpimkBv5x7RW8*;3p!c*QPVp4Z39L1zD|xw*@PE`5ti@akIzPC z*sOa_#msbg5VvQ37D7YwHFW+1fKhnLmj(wxa#cau@AZ{dK1B|jorb%_8=f!EzH|rb z3<@2>0#021&cmaT_S5X%)?ELWrZ>137jq=v-<;j{X*A91zTYmWf*hJ$iWhQD10qk- zm=!)k%hFgt6}G(?PCiQ&SWxjI!WcPZnq^q?x84z$x(X1Ft8D%mbMHJ(oT%y^qQTW` zj=`jZ6d*}4eCnIGBd&3RJO-QkE_;J43f~2PqmEi?Xxok>cb{a*)(i5e(stH&TJCKDVkX0#xX! zrRj#9Tp#(C&om?UO#ty!D`QxueEE87JoWUm8_<0zjs`Y0(k8(ItDkLwaizbR-fc97 zU0sdoc5=+XoaNXc=t;JTJm5_vJJ!c({P85S*jKU$(G_BY2{iF zMD9T0X+GZEM&oeBe95?G$^kqUq`~At=@YeaR5{Y@d}b|c`D>L2X@-$n+_7s@z_svl zo06VD+3n1xY;(iCgP5w;D(rAI+_yL4hBPElk8Rbz||0}7UaL# z;99FANYC!xq?kRY*y5W$nGHNUgCy>HtKm`0cEFXQuvW39a67?^jTJamNVkfogLN!E zkMm=)$DJ$>bc0XIky4)n!Wx6eRj{=zq!e0k3jkK^|1u767@uYpFfTw33S~&p8N?&kl7fRzM~oE z00bZ-&*;)I7!zazVPuYxv65R3)@=nwq)4I8^bGx1r!poK={t_^bRRrb$A~uEp44_o zw#9a0jbW#tyP`K>)wOI-0J<_&TLm=&13%wU+LzYHdvod6Hn$)rlXkpS4sg;K_xrIT zU&*sC8+Rl=SYfr%M63xyQ*E9cd-k)2%l4kTM)xJE1eY|kUvk&j;*M;U(^}!WkmlS1yYvce*jJnWM;#Sc=X#ZJXdc5-BK>;!GINmCT?_G@MI;s z=Ud;j{!}ux{}?T`zgrV+QeAzen|#SURQSZ@0ctYUCIW>9w^#nQjcW-~2qYg9)#nDUh0*IY zsa1mPw^yo$|1$aEacr_!M9{^mFJbUCPNYA44xPFAgmvJXKO#VjXQiT5W1+h&A=R1M z?e>>;uXIke*~0;$5*>jRW#dBK<2iNVtjjcEMn`LLC~pzudm24y%(RqY1Hv`?O0Xl{ zC8`43zWV5U3vh{XGL~YI&SGY%7{-@p#{g=*9P@geTo-^YYzBkMMK9v@iB3 zM^6oWUORFaz9$c}lPI59txB`&rwr-SepOb4Qg+QM+{ENTJmy}bNI5Z}vq?v?URa?dP9ZdmcxyVrl( zT1^Ro=D=Y)v)!GhN%Nk2#062bKcs0q$a3HDrG{nbsM+^&8_I&ij`Db#qjM?IC-YWa zovD7hwTN7I4xx<^&4s4ec(ME7f~ZB8ic>2jK5mf+xgT@ISnm)GP@6w3Wef`(`1d1W=xmV4 z1$(=WeW*Y0h#YHZv5f?Fh1iL3xE`IDhf#l8@;zu;sylRyh-}4xlJfX!krQ0g=`q!3 zCI&H^O}nUxb8Bh%Jj3@}V-KtrtEM>?k_n7Ct!?Lqdn|piOt$Sx6fEW8kDn2Q_K&%U zv>up0n3-khKhhV}D>hv6N_fI;$fh07QCKk1TW-Ux<^IgjRZ8pLbe-C`tj-hs&OlHn zUKlOE$$zwuQjldEv5hs4ZErJJ=$f*~_-rl})*}b+AZL*p+FARMrSh zB9j`CjHj*oUdmtmWR};yHq&meg1yjMCvZjuo_=Z}ya6(bh8vA-F}k6pe5`oy*8aGF z{Q>884nfzNg^uI5V~ru2k2@kef(d%_Z4N<0+@Q41G`ijp1aHWlA-BeX@{KJnq>!Ul zM|oNgP|3^#>rEHkrE642?@2NAl zF0QQg$S;#`MT#LlT&wIZlngHS)jiis5!8((Zo=X3wWF?8vKX3K>b^daZjyQ>GGh!L zK~W?YqeM3S;q)?9Kn9m@JhXAHagRJHOGm5qo*1bmJVm-%m5O9GUqNIwt0EB-=+ub$ zQ2QaHR#d&fNo;+ed>c*Z4|hSyj+CJm3|4=st~-%S$db^#5d6$$Ib;))QqMyfmc1mjdl(|9PPh#l;w!Dv8lshg5U19q7S}_Breq6cD2CRPASK}pW8cHlb#B!d3 zMutUD2*@-H%?u@T3m~u7g#^fRsf#v6wjf?L#8#5q7EwW<+mYMYXr4LrhAH>|>DKr-(a*q^O$-?m-|8|o6hPV z^{y}FADtr$lC@ca#bc^pqKQ{MsULY?er5Y6xRdUn-?~!&_$HxZwr|6ax?B1y(i=Uo z!NSq~@yz_oBaQ(&Ez!zHq>1$$h~gIZ^ULjR19YQ;t99nICH0#HfzX5~Pp>|#TuK?+ zI_?v)tfX=ny)sNwY~3?-{E17X0i&(#TycbTr3a3=K)85bi}g()3+@$DmWRgYBgCA{ z@Q(qYkYA);DDAuZ_tLD>!iPSZ{Dj74WAvNDW09+#Q@!o zIKUch_|e6hx{pWmK1L_zkj~oL@hVB61D#4rHOaIz^ z^pIhL;U|OpxrZmmdCu$iOiV8+Mq4Og=mG#D)_4J#&Wl+kl6;FYj2I*=>OeGa9eib# z^~#*^@6dP>2S?7YF#J9Sv_nAV^uuFipdp5+#_2(%>gP7hhdRhz@_q$qwc(%^_qnK% zKGybeP{A+X3MYi2DuPcDd!i7wyu$uayd2qF8Q52!oL#T>q4+K+e1`!4UKL9bGMPIY zSW_|Hdms{-!$1*5;I8K0PYv%jAs|8zZZpziuIXi}Xz<5J-fo>uHvHQYpxFLg!@BV{ zli`T&-}qhY6E)o|r6VCgYf~T8uJs4~1T08UZ8upRDHAtfQ#>7iLtKeoA$nt=b*3Uk zR)V`!;cqba=ShzXV?m<2<~Ykr-wMpOM28x+$HR|us*d+fQo~hc0BbXg;WAV89&ZKG zKsvO@*(8AALP;oTb17#>=6ClMeSaUx)SV;W)GJx}Fc_6_&zdi0q zG{Xxu0RVL;u4F*Zzvqj?8uxZKkhJCam$D1HN-MW>NULJR^A>>W_dWLtRt6YMW>;XG zhMEBeOLp5MD^aPawUgtug?Q&x=>%7_dWq1c?*Tu0K)+j6^Hn%}Yc|$WwQbO4tF?P? zE+Ii1_yU$I6$CeGNw?8GDvIX?pN3U{nIPIv_6)MEfKrd<5JfLUR99lvzCx2KQQDJL zz`GGLYDiGL3R?xD(XuQo6nkZ012BE#y#}sH1mwD@_Q2Y<4)FN?%x@*VM52k0|(>3&X{(IN);!eO3Lrlq${syvGm+?@m`#1j5`29P+O~^52uq zJy7!~IMak4w$x$!f_F(=_cmJ6@1v5{n9j+5Kl4lCuL*eZ0hD|N)=*1K!NEzBT4l&& zJOWhUvmv#$w258&l+G34K{8a>3^Fqg6Mzdu*CGfQ=ZKs{X=ktavQ`p}%+K2bowUE1 z1Ljr41*vdQM-lKS?2J0-Xn^*CZgAhN%z4B@e6+pz2{N7fx4jN)i<8eaau1t_T6~`H zGIz&e){Bo=LR1NBCfs}Ru+N4LmQzH(0>nkY)y5T#RT%S2xvC+YWs6LNs~0l{^O0d!~J`-A7SLAC@0Ya=%) zLv^8|`8qNkxhzB_%rJor6B>V)j*FN(44tEDbJ##@QS1~Q^)`iKz7r72G_NkyN^&kU z67P`NgiSNTGDg6o9efOr8oz~ZaG`}%9WWh(H)}MWqd`X$$2n=Y*Dcb-!&{_NEy<;g zeVUf=G6}`VX9#L{>IO+fDAWld!lEg$p86uQvJ~UiNH}HUO?MKHJ{~F6@8obmAqUip zP7X_u>y^qDzS@@|vq}t)rFQBeJ3>Nm)xj!do}~-43cwt0Z{rda{I-&+Q&(Yqzw(-zK}4v*s6UR;#e7= z3+S8~>#^{G0(zH7gR?DBK$IY7d|ya9o&qGhEldTAwDGWX8MfdOhbE||1CcvN-b&kU z{kB)m6OmMUuew^XQld|eK>F|cY&F$Y*eHdozm+X@Y<_AytR=+^AnNX##$j*3C=~i*|R~a?M!e?!G#AjOSk)}p3NmEyxN zd${f`((;BLYL+Vr07cJBK&C8Wc*72rEedA(f!=R!5e6<#&mt_UhijD)n-hOd#&>F} zQ5g6YEc*AX-j7%-6T;NyG0p)T?J#Lmc9Dbd%o2VafI{~KGe@{d=f_F_p78Uw7wAm zr4>UzKAFiz4mKo8d8WhBTA`(%ICwQsw=-M4P#K2>a`iT`7gsn!%}^XPz+(s%C7P&7 zD0c{lK{;8Y4Ri}WbK+3kKK^Vkh|NbGPWkBXF}H)2PavL^#4}W!iN!G)J5T zQ}1B&5})R6xf}82+*Xsd_4eVWu~5+?V=V82EQBgrFW8n*)9;N+JWiU|g;Gc1gb2GB zFyXN;fbN@CSmCtcCv6EQT8~bmjQ!4Ufiq+eLO|BzEXnE}hIGn{^~j46MKPx}!^aOX zlZv?V)fJ4a8ACWr~ly`ydzRw9c7B?)d{Q^^?y z8Vo=XO^gHMHIvPgic!Tk&)W{(S4uIeY5w^nRifIXcK z!ceAvfs&^<%MIOvPjy;9<VDq8YA1kA4!1?V8Dee zDXib2n>b5H>REcGoFZi?XLbV!bkQ!*%p6#k0=1|9qm*eq^+A$48dQWzn#RGL?fWp; z?0t6)yoSY6XuSyMp_R4NA z3X3Ruxv2NYhjSw7z$B4q4XvIiP#{1w!Hy@vucaV>w>VzqzCXj}9-UjczqmZ&aspC8 z)#hPd|-BD5^Ig#o~$5@5_0GJ|LeibP`2`54Cxe}ZUxn_3Dw@+IU1PL>FiA!3de zaIiSIZ+^=g7|hs4K`+?gc!kqe7s!q}>h1uVEy43ac`+SocY+#Y7C=LY4AjMgeDRP@ zB0y>`&PHK>N#`V{4b)#is6F=LGzv6)3CseMu{>1H@{8x{#Q;xGP%Fie%~Zl@Ql1uc0JGaZ zHFM{DrB49OMO$r8*8Z9l2$wZbIe^dxN~z7!hX6alaqmtxyGW)2kE8%->9JF{hn&n2 zCjfePy+i|!Cf`8g?&4S7lpHJ^0~%qniXhK1gj)oJu?g7C=igjp{oY3>nh$70%6vZ2 zSN|Y6U_Z6JddFA$_6KUG=?~e0Q2E53AfLqxJze7r)#r|p7Vp!>cyx4Y9anQ!sz+y zAJUKJCZ(%}A$0$&{Vh~m|}o1VS&J1A0yx<;=tPjAh&Bh@A=H=+SE=}* zEZ!b)t<9!WoQ$iWRG+7=BQfd;y5)Ym96OnG3Yf?4AN|D$XHeaWionvdR=_8Bl|Rv< z2J*R^zZslAPf`B=fU? zrs&=*s$+g^>dwceW`2^y2(T)*6?8yORzXer>^;zk)!S7>X_zo$dR-w$@$F~CGeNJE zyaek?K<$oY{Bim2Wo0o~E&MhKabJTa5OB?{%l^U!?57CTHjIL6HjUBEyi|#6`!aJiM z9iUL0mK?-?HJC0K`()u~ArUu{!^&tvc)A?AJt|2=9m z%10pz{0k{icau4$-wXBYnf82YqFeb=TANhm3_2MsSN)*FJ-+P8 z%5y87ayc-P;|-ZV?K5Jv6F|_0sF;0S>__eTv*)BMB2F`-=O)m?!Vqm?QPASP8VJh% zNmi>NYEVLm;V_gz7satU{cYiQn&Redp*m!)3@HS9wN$I$$FXV_TVNU$@WLd)kDEQ= zA(*nD=PGTYx3ois$-xKgEEy&DTrbDj3mle4{r%jLCjOZz- z_(wlU`~u$0VH+7^pMY5q|7`aVZN)~K2^ZWt7X*S76vr=y+mC#Fr*T`H z?NlI7TD!=J%g4VP0JdF_7YB{ zp;QKuZ^-G0oXY+w?7&q(4z=m?S3U(EB^PWP`Q)H3oFb5v)1hW%kWj2&6`O2SK(U$% zeJk4b<1Cs!k57y1~4S1f)JL+hxy_ND6d&=tI;b7HW^j zya(e|-d9jGtoGcy8F4!Dq6}o920MKv#qo4F!m+gqyc;>1nL{BHOhA%kFty2IPsRc; z2%8q|NHQT8si3As8Uis2gWc8wfw(psD`0+|qyoHw zBT?JUs&%mk7}m|TLl$4LD@udIBD9frzlOMI*0^l0{2Ix*t6(HYwv%m7M^Y7Ha!_lE zA4Bhx^e92D`YUWfJp;G$l!6vl*eM}5!nR-Ow+l=?nx#J@i>)?DMs1orG7^{-F?1J` z4;>nTVf0D6e%%!{xdfL@Y2+)ad=7vNi-3lqR^Yd%3_RV7q@fk{uM-zJt*5`6Z}z)r z%8^slSgWcVhMTKg+P)6n^-($e)4?-84Gna~8`9IYQ}h5DXl?Lzg`&mGELBkV0{Ai= zdIJfbg{>_N^qq8*n`M8H|3R+Uzz5n$RBAqQvU{50JgtP9shbh*M@xfzy}?(2Y+nH~ z!(gbr+tHFvy8A(?yDTKyNs_6#{hVqKz=?6cHbr3K5wiq{a|>p2pUQ!+1oO6nI!Zcr zo$tFFQ{6zo7@BB-7$MX{#t)g{mN3R*5~oZy6p$g(AXyJ;IKz-ZSa~h5yDR5vt@?QHpl7&SR(`_y?II?i++pxBCG6=3lN z{fV2W5`+6Goy)09$%G2UoLTFEeFge5#QtA)ZIK3f6Fi6SJ*-;KPqye2v$L2;__sH8fKch%0aLU|yYRAY7 zVOC~6AV1zRCK4#8gnk6s^Rj0y$E|cK9EG2@TmER#NM{)ZhOMWRzsKdbfO_4|<`h4r zd8f|}dR%^>k&v-ZZS~(Rrz3eDbTG<1Gx3xAH-uxJE-4d86xoQ8-xCG#1-z)Rye?7< zFU1@JvpeA(Rp5kurc;I)zSGObaE#le;JhzV89DxA8*~kivq1qNztZ~mhDRAtCQ$w+ zqhj#;jXeV@zMkt0#_awdHxc$2ocC>b+V}t11`VocJ{X9){U-S7<^4li?|cO3JCAF{bvRITzr2* z(9cl$Cj^})gFiXoXQ=#>gin!#=bt2u0Zll6P|)c(;QfK2KSSjo7pw*7r{!7;TBSrj?BK}LS{G*2cl!yOF5&!q4 zi1m|F2OahT%I#r~Vcn3%K@Y6Z!t?Yo1{~J{&U4dC-7vWM_KelpNxxe+-x3l(c{EM;YjGzF&!r9a>pw`g^_M!Ua6J3-&Sezsvis;4rSPy}y?mNJ$B!NS8U~e=o1> zgTw6aXZ}yM;m(bFi~}YyzgJgKR|um}+fV0#<)2gl?6Ay6Koe+bkc=8BE;M>4?vBN_aW48SWR|40UZBmqE$`gP#M)}?;d1sv;aW-vy zy7Vke=UzK<5IuXYnw`bK>-Jnj*Giz+7I*BYjcM7(gNR<>+w!CTaLhxcC{G!nvC1G* zbN=IIpb~C%5FVbK{o6tB|E%XirMz$)9QtsWtmf}pEfo=A)G}Tn!LOIs{Q7@)&*RD6 z-Hs^veMAIkZ`>OsGNSp}xAJRuyeGtjQBM|gSc?U$4N&<@=b+ zuSTDLK21w@JqUCsP596S4OGhX7MbB(9&L<>d;RTv%~|SokBKAD!1)@ymSSyM(sI8L zYTlbL(>WMgN3OYAcH2?5@QfX;I?zy~^StpRk;{hO&`V5fyoFI8CqSzw#W83(!Ut`U zHQom!bHYrm2j9pl?^VolA=I5#y)RxE*$8r=%ymF6deVitge`X5 z!K-diyXxTGC6*;$7Q^?MnV3k2_iJEFi!L4d;D1bjuRS_kFNj2%Yl=8jJuz}F)qxGU zfI-z=!glyvL*)hf8BJ4@XbyjztC1Am{186pFYdeEE%-%lU;$*&+Z8Mo^TB(`iE{=w4=A%Hdv@h8`Fo%6uC&&_@A zhwtb6KobxsjxT&B&NlT&AV5LX==#L@-!#?bF1*IA&4x_lcp5~xp=o%wYh(J}Wx&Fc z`T#ILh(QgPM2IqWoNRd2X_!jbn1MTLR4bf>70On-?ellL5ii)t7BV$QmMSgxjIQ%7 zA5;fyd>!`?1A^Mo&k>R6p}4mz0Q(@;w?|{`?E_`leD3mhMv0$y?FAfvSLQp7lcI1Y z`dwWlLS3IU?uN;M zzSPfl$d#rMfNr5IU%*&f&kP@Aq7-1j-d^p{l)d=eT=SD7r@MdM2(PdXL>6_>hq9h< z_c_jH4Ul+RO~j!%v%Xa;b|YgR5XdLT4U+Ib`HmeZIE+Lkd1EIg4K66p z090@L%uqIm0z4*Jxg8A=41=fKNDXX#)AbK2SlTTKMfJr}APMNEkX79IvDVsrEvZ`hw?{GpCAKsFH z08C!@S~hX|yRto$MA*J6KUVNfTS90FO2p*c35g3?i>{GzZ`cXrndl4;&S^4skKeZ1 z^uu&ciUo4=x=Pc>xKu5QUW6@o#8NOoG;DeoxBoQvLd`0)&DfS^}Gbl{dH zxY@s5?@zD47_hieCMhPh(8YpACT4CP$Oh4?eQ-O{yW;23Bxv?%aCzmoREYLDCWT50 zun|k%I-eb#Y{-i>z-V_coMwFBU3D~&v#4r_c)Cx9^rIZE^gwQPH5)M=xKa;#WLai^ zz{)^ld(fZi`huT%ztkmsSeUqaw{*tY*po=W2ac$B1X)w_umj8BR^Ck)r+wYN`xk(` z63mN)MdZ3>1R~X~Y*((XkStmJqfHN74m~wERV3-Vfrmnrf5fkls~)?2cqZ6eLu(%g z@L4vzSwyT)Q8>e#^9=pflVFvxGhRXuutSY`;umuljIJ_GLaWz zSbgw!Y}ajf)prV-vgp?ika^=8;={GKEA$`d1T{kLm@LzcuNSh}R;!3*sOG_sylH>& zk&a?0V6io>^D}r$&(;s*pkRE~0ucP`g?}}eRJrHG_lix`vhMu~zI7S^eRbb?>Yg)i zDtd9zR{!Xw&M%wTisQiQL;w8>XYw#K?D%)p=l1kuZE@^y~RH?BoghFRo6x z6WI232p1pxmo3v_!K{-=Odnivw~qBIoz$7mwru{qr^6DEMMgE{%@gwyGx4i$bTdX5 zeEo|+_RyroobCv}l9Qw3&+FLLx}&2C`;^?}33jh#Bh9^QxwFD3=9yRjD;os4rj+D& z_1UdbO=5E-c~3DYU^?;5YPA9vTy}a`*kep2m9(9^O3Z#T3Oqx-maG({X`FIS7QFQL zP4RJh7^gNQ*-{r8y=beYb0D3J#Rzzm6Vfgrkc_(nYwoGCA`+7rN{~Gt6F&N)Nd#~@m@JMBK1E=y%w%e^o7M@{@JYmHgN}M#q z;XX2{3O{o8BA5V-Hk{*Dve$3L(ZU+Tu+WV=PYc9DoiRZVv=wpk0PhBQZ>8VO`|j&F z;90-g3TE+^Yh#b@JuKgD8A6&zFlq&PCqInr?V@V~Y;`qzkm5s^z0tEUr$FtGw8KcSHP2HvQ)j^Yueb?^VdS%$!!Bte82CJMk$?qpVFL}qi`;@x zvlGwv_~1ODUbmGnT(Q-%&DV>WN9@ZsEW4}Rn@TiU@P*z~Z8p^?ABd;PThIbrx-)T(tl%=PEe#yn5Msd)CuV7|8<8Wb!v~eA&og?m1O2KtLau`H&>~AI4Z7;Nu*Lo?U?~r|k$$BibdWNx^jGiR+8ClGa(zNb| zsG8!ZqW8YZRj=k>)fcxwXi0HS>mkJyY5|74&Kt?uXh}q^4DI!zCF(Svr`bh%yw{nh zEp+j)`qoI_w;3%US3y)JnwP}}B|mHM!{P|hzVGn@K`=dp+gz67VuW^~rF1NXl*Jov zbwVvxDSiZ>Viq-c@!fKk3>B||S%a>4!LbN$@!o)IJPtkaGF>i`2-4MKje=hac z%@+WPmLDOl1U zE)}AWz_7cK`lkKuQFg|Py$g&}>CLTfH2B2Km)nzhTW&?^$uu0$U!}Lt=a1u!$`0v=%^~Tk^2;%Zb!4IuMvrg;+f<= z7=g(#a+~&@7J!GIG{=@nysKqX(@N!}@%)^h8XYiapIvP@`hJR>^v`i4S^?>1GTiMk zpPfa`OUL!J-qP@)iKd=Dwqd$t;XW~?(YzN&3p&V5pTxer?GXVdsC0^{xHDX*?9Gtv zQBq`a`@Yylx?k5kJONwjP8|%~mcG)xpKBhEXL}MgbM~FoN$%0^-bVnkSeJk zZb>l_4e}%FX{k7|FM8ADip+Him>J=Zho^R z9qkj<@cK|ys3K%m3=0(`DLkv|k4~jkxU+~CZR0nu52p!>#z7l>!|Tzh3sswo8$F3| znNN{5LDD*D^}+Y#2a&NE%*&fO!|3ju9UK$$dqiwqW?UDj%f#IJk{;){PqTSgSpw15 zXs~4!51tl*hwg*lMN=G}!RsHViA)3}qJQ6-t(Nz}!l0ll{J?~}!5+4i|D3AauSKEB zt2Vl((Zmy*mBB}}C(6&?eWd?bW zH7cv|32%`p0ds$-91?(z|FW&R^Ecjd2zV}Sc|t> z@Hs%4@K!cLT-xQiWO$`bWczUblHOKVkp3-Ov~6YZo>Ek5V(Q!Z)%e zh&Y~DZwHtrdUU1v`kasZKQ0RShk8&(S|YX@ID6mmp(+J!RZRB&QPqL$fs=HF@1xZU zAggSB4wTmV#r!$VWpe6i?()cJQbW$rDp2%Gb|rIph6{z$Us>7Egm*b!GM)RqTYuJ9 z{Yn76U}2?4Y(6VNuf~Tm%)w83w(`kA&cl!v4Uya> zw8T_wU8LMeZw~pmKIVE7o=UpZx8Y9QZH(8$2jmO;o|&8QPGwYbB#eJnQ2;Iyi2PiZgYiv z8*eZEsfbN;`txeGbP4x?cBA)D<)n3SOgB-dpdx5^c%&poI%XC0?I+|{k0E~eZ~XVH zN?0ViAQTx29gI=hAZdLJbSA&-{O0F1gGiZ)bS2u0BXFOY7vu_TW5hxtZc;z*zL%$2oxXiNa;x`z1}sa$le7 z46oc+RFpjH!HlBmT;7}T_P4HXMZ5VFmHFO+)5(*ktOpyVw=@DRS~6+8R#^CueZXzW=u{MIVCEn+fG$I!TjMgR%jISVz{edBW_ZjDZl2MWGG*&VgaRH@-H*4r zIBDpfqAkEybPDvI!MR;zl5N1r!@Yu#EoXN)l{3^GyR`i2xqavr7?KmO5#5ZH%$fd` zM2eV8a`6bU+0{12@R}23sloYTuxH-UE?-9W_NNM};5)sX_ka^$U}qx3ys>pt-pp~l zi#zK237b%vXX&3z&{ z<1%n(9(5(>58p;9Qs&)zo#uXPak7uF4PnXo-Q7ry#t5F9!L?1iIS5tXyc~rWEPD|> zi+- zY1zz9Ouc05~tT(3)Cb!nMm8F)5c{!y)E z3Dd+`S&C+_afrlxw^4Qh>`EOQ8$NAzpk_m-be*;s99w=VnNevg#0-~}?>U2$RlueV|8E8T7z1_1i7&w~%cy~%Ghvs?dwo-;1a)EqUoSoQ5N%Na)zm6mzRF@TI5S{KPF;;T*KqHChJzEopV~0QtXGPWfJx;!JV5mGC!2l^;-b+H#5Z>;s29i3+B*+JsQu0E5wN&?gCjj41D2c6pYh9 z{q?ygv7_EkOAARnCO!uS97rFapnp~71jjNg&}Fk{t0T+0A5$FET9W64P=J1Inw!W6 z5x`^NQHR~5 zExOlW;M17m{l`_$`)eT|I%_BZc;HO%|=?JMj%W2W?9gqasqpjR%fruNG% z)&AXgH*vhyU((8mt8@AHyTAf(-G;u@wll|;QxozZjH4loRutTPPP7-Uu&+ Sk8S~8F6TUcu04D0?*9VDdi5y) literal 0 HcmV?d00001 diff --git a/src/DiffEngineViewer.Tests/PixelTests.Images.OSX.verified.png b/src/DiffEngineViewer.Tests/PixelTests.Images.OSX.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..57d6584d9f67edd3333a1d170654f864836ca073 GIT binary patch literal 40662 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 literal 0 HcmV?d00001 diff --git a/src/DiffEngineViewer.Tests/PixelTests.ImagesEnlarged.OSX.verified.png b/src/DiffEngineViewer.Tests/PixelTests.ImagesEnlarged.OSX.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..4f18c02a68ebf30599083145a1416f50be3dca12 GIT binary patch literal 65594 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

>c9{89CocAMTG?uS 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 PhCU2*jPF<9g@*kX)(PQd literal 0 HcmV?d00001 diff --git a/src/DiffEngineViewer.Tests/PixelTests.Selection.OSX.verified.png b/src/DiffEngineViewer.Tests/PixelTests.Selection.OSX.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..95c31ff32a81533d5521b26340a50f8383f01ca3 GIT binary patch literal 40635 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 sMC5qSr9R&I^$+LxfA~N3AM1MtE0qNef -> == ...` in a text file are each drawn as separate characters. -- [ ] Four OSX baselines still show the title's `<>` as the one glyph it was drawn as before ligatures were turned off: `FileDiff`, `Images`, `ImagesEnlarged` and `Selection`. Each differs from what the head now draws by that glyph alone, which is inside the pixel tests' SSIM threshold of 0.999, so they pass and CI uploads no image to approve. `Minimal` did fail, at 0.9982, and its baseline is the image from that run: it changed at the title's `<>` and at the `...` of its folded rows, and nowhere else. To bring the four up to date, delete them for one run and approve what it uploads. (read: the run's log and its one received image) - [ ] A live resize still draws the rows sliced for the old size until the mouse comes up. That half of the tracking loop bug needs a frame callback in the C ABI. A press in the scroller's slot followed by a drag is still AppKit's loop too. (left by the fix) - [ ] The managed side still slices the body for a footer of one row. This head has 64 pt to spare, which is three rows of buttons or two and a status line; past that the last one or two body rows are not drawn. (left by the fix) - [ ] Every auto-repeat of a held `a` or `d` is now handed over, including ones queued during a stall. `event.isARepeat` would drop them. The Windows item under Smaller is the same hazard. (left by the fix) From e340bae0fea924cf78da9b5ebbc05a6a4e8e57e1 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:11:15 +1000 Subject: [PATCH 42/73] Describe the model's performance changes, and the benchmarks, in claude.md The screen cache and what it asks of a state, the line diff's three steps in front of the textbook Myers, a group's accept being the accept-all batch, the watch's budget and its hidden interval, and where CellGrid gets what can be drawn as a run. And how the benchmarks are run, why they run in process, and why there are three projects of them. --- claude.md | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/claude.md b/claude.md index e54c7c1bd..4b748cab8 100644 --- a/claude.md +++ b/claude.md @@ -24,8 +24,15 @@ dotnet test --project src/DiffEngine.Tests/DiffEngine.Tests.csproj --configurati # Or run the test project directly, which is the fastest loop and takes the same filter src/DiffEngine.Tests/bin/Debug/net10.0/DiffEngine.Tests.exe --treenode-filter "/*/*/ClassName/*" + +# Benchmarks, one project per assembly they reach into. --filter takes class or method globs +dotnet run -c Release --project src/DiffEngine.Benchmarks -- --filter "*TextDiff*" +dotnet run -c Release --project src/DiffEngineViewer.Benchmarks -- --filter "*Frame*" +dotnet run -c Release --project src/DiffEngineViewer.Windows.Benchmarks -- --filter "*" ``` +**Benchmarks:** BenchmarkDotNet, run in process with a short job, both set in each project's `Program.cs`. Its default toolchain generates a project under `bin/` and builds it with one `OutDir` for everything it references; DiffEngine references the three viewer heads for build ordering, all three are named `DiffEngineViewer`, and they overwrite one another there, so the default cannot build. Three projects because of what each has to see inside: the library, the viewer's core (which links the library's sources, so one project referencing both finds every shared type ambiguous), and the WinForms head (which only builds for Windows). Each is signed and named in `InternalsVisibleTo`. A benchmark measures the product's own code path, and where a fix replaces a path rather than adding one, the benchmark is committed before the fix so the earlier number can be had again from history. Three iterations settle a cost that is out by multiples and not one that is out by a tenth: pass `--iterationCount` for that. + **Test runner:** TUnit runs on Microsoft.Testing.Platform rather than VSTest, which changes two things about the commands above. Filters are treenode paths given after `--`, as `/Assembly/Namespace/Class/Test` with `*` for any segment; VSTest's `--filter "FullyQualifiedName~ClassName"` matches nothing and exits 5, so a filtered run that reports no failures may have run no tests. And `--nologo` makes any run report "Zero tests ran" and exit 5, whatever else is on the command line, so leave it off. **SDK Requirements:** .NET 10 SDK (see `global.json`, at the repository root rather than under `src`). It also carries `"test": { "runner": "Microsoft.Testing.Platform" }`, which is what puts `dotnet test` on the runner described above. The project uses preview/prerelease SDK features. @@ -132,6 +139,7 @@ is awaited, assigned, returned or passed takes only the call. - `Definitions` - Static collection of all supported diff tool definitions. Each tool is defined in `Implementation/` folder. - `Definition` - Record type describing a diff tool: executable paths, command arguments, supported extensions, OS support, MDI behavior, auto-refresh capability. - `DiffTool` - Enum of all supported diff tools (BeyondCompare, P4Merge, VS Code, etc.) +- `TextDiff` (`TextDiff/`) - The line diff behind a failure message and behind every text pair the viewer shows, which links these files. Myers in linear space over line ids, with three things in front of the textbook. Lines only one side has are marked changed and taken out first (`LineDiff.DiffShared`), since they cannot be unchanged and Myers costs by edits: a re-indented snapshot was all edits, four seconds for 40,000 lines. A diff has a budget of searching (`MyersDiff.Budget`, about a sixth of a second), counted in work rather than lines so that nothing quick is given up on for being long; past it a search settles for a split, which is still a correct diff and may not be the smallest. And a search that settles having passed nothing looks for where the start of each side is in the other (`TryDisplaced`), because a block moved further than the search went lines up on a diagonal it never reached. Up to 10,000 lines between the two sides a diff is always minimal. - `ResolvedTool` - A diff tool that was found on the system with its resolved executable path. - `BuildServerDetector` - Detects CI/build server environments to disable diff tool launching. @@ -150,6 +158,13 @@ is awaited, assigned, returned or passed takes only the call. structure, which is what makes the text snapshots meaningful and keeps three renderers honest. - `ViewerProgram.Run(args, OpenWindow)` owns the loop for all heads. A head is a `Main` that chooses a renderer; nothing else about the app is per platform. +- The loop presents sixty times a second and builds a screen only when the state is another one. + `ScreenCache` keeps the last `SessionState` and its `Screen`: a state is immutable and only ever + replaced, so the same reference is the same screen, and building one a frame was the whole + queue's labels and tooltips, megabytes a second, from a window nobody was touching. Handing a + head the same `Screen` is also how it learns nothing changed, with no comparison: the WinForms + head and `ScreenPayload` both stop at the reference. So anything a screen depends on has to be + in the state. A spinner or a picture landing is a head's own business and redraws on its own. - Windows renders with **WinForms** and loads no native library. It is pumped through `Application.DoEvents` rather than `Application.Run`, so the shared loop stays shared. Only the grid is owner drawn: the footer, the context menu, the pane scrollbar and the tooltips are real @@ -196,7 +211,12 @@ is awaited, assigned, returned or passed takes only the call. snapshot with `InlineQueue.AcceptInBatch` rather than all at the end - and `OwnerLink.Run` lists beside an in-flight send rather than after it, so an attached window follows the owner's batch. While `SessionState.Progress` is set the status line shows it and the window refuses anything - `ChangesQueue` names. + `ChangesQueue` names. "Accept all in" a header is the same batch over that header's members + (`BeginAcceptGroup`, `AcceptBatch.Only`), not a transition of its own: in a queue of one solution + the header's group is the whole queue. So it goes by the batch's rules, a snapshot the applier + would not take staying in the queue with what the applier said, and it counts as still needing + review only its own members. Only the bulk discards are still one transition, since a discard + waits on nothing. - Images (`Images/`, extensions in `DiffEngine/Viewer/ImageExtensions.cs`, linked into the viewer so the tool registration and the renderer cannot disagree) are a side, not a mode. `FileSide.Read` decides text or picture **by extension**, because the expected side of a new snapshot has no bytes @@ -322,6 +342,12 @@ is awaited, assigned, returned or passed takes only the call. is one segment at column 0 - so a character a fallback font draws at its own width moves nothing after it, and the highlight, the hit test and the copy count the same cells. Selection ends snap to cluster boundaries (`CellGrid.Snap`), so a wide character is taken whole or not at all. + What can go in a run is asked of the embedded font (`FontCoverage`, out of its cmap and hmtx): + a glyph at the cell's advance. It was four ranges written down, which left out the font's box + drawing, arrows and punctuation, a segment a character each, and took in letters the font lacks, + which a fallback font then drew at its own width mid run. The grid still decides width: a + character it gives two cells, a mark, and half a surrogate pair are never in a run. A row of + nothing but run characters is measured as a row of ASCII is, with no walk through clusters. - An entry opens at its first change, not line 1: every path that changes what is being read goes through `ViewerSession.Open`, so none resets to row 0 on its own. The minimal view ("Changes only", `SessionState.Minimal`) is a second `DiffView` built with each entry - changes plus @@ -348,7 +374,10 @@ is awaited, assigned, returned or passed takes only the call. `OwnerLink.ReadChanges` has always done the equivalent for a displayed queue, on the same 200ms cadence and the same `FileStamp` test, which is why the two are worth reading together. A pass that finds nothing must return the identical `SessionState`, or the open context menu closes - five times a second. It stops short of the tray's third rule, dropping a pair whose two files + five times a second. A pass looks at the entry on screen and at up to `Budget` (a hundred) of + the others, in turn, so a queue no longer than that is looked at whole as it always was and a + thousand pending pairs are not two thousand stats a pass; hidden, the passes are a second apart, + as `OwnerLink`'s are. It stops short of the tray's third rule, dropping a pair whose two files became byte equal: that check exists because an external diff tool might have converged them, and here the viewer is the diff tool. They are ordinary `QueueEntryKind.Move`/`Delete` entries — the same ones an attached viewer draws for the tray's — so nothing about how they look or what their menu offers From 4d725b40865b3968087fb8288de68e84e4d1f934 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:21:00 +1000 Subject: [PATCH 43/73] Measure what a bulk accept costs apart from the applying Making a group's accept the accept-all batch moved it off the render thread, and GroupAcceptBenchmarks showed it allocating five times what the one transition had. This measures why: the batch's own bookkeeping, with an applier that answers at once and touches nothing. AcceptAll 200 snapshots 35 ms 89 MB AcceptGroup 200 snapshots 35 ms 87 MB AcceptAll 2,000 snapshots 3.7 s 8.8 GB AcceptGroup 2,000 snapshots 5.1 s 8.6 GB It grows with the square of the queue. An accept-all has paid this since it became a batch, and a group's accept now pays it too: as one transition, by the same benchmark on the commit before that change, a group of 200 was 0.13 ms and 0.6 MB, and one of 2,000 was 2.5 ms and 20 MB. --- .../BatchBookkeepingBenchmarks.cs | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/DiffEngineViewer.Benchmarks/BatchBookkeepingBenchmarks.cs diff --git a/src/DiffEngineViewer.Benchmarks/BatchBookkeepingBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/BatchBookkeepingBenchmarks.cs new file mode 100644 index 000000000..8f2505e5a --- /dev/null +++ b/src/DiffEngineViewer.Benchmarks/BatchBookkeepingBenchmarks.cs @@ -0,0 +1,66 @@ +using BenchmarkDotNet.Attributes; + +// What a bulk accept costs apart from the applying: the claims, the records and the queue rebuilt +// after each. The applier here answers at once and touches nothing, so everything measured is the +// session's own work, which is done under the lock the render loop takes. +[MemoryDiagnoser] +public class BatchBookkeepingBenchmarks +{ + [Params(200, 2000)] + public int Entries; + + SessionState all = null!; + SessionState group = null!; + + static readonly ViewerActions applied = new( + static _ => InlineApplyResult.Applied, + static (_, _) => + { + }, + static _ => + { + }); + + [GlobalSetup] + public void Setup() + { + var directory = Path.Combine(Path.GetTempPath(), "deview-benchmarks", "bookkeeping"); + var state = SessionState.Start(ViewerMode.Inline, 160, 50); + for (var index = 0; index < Entries; index++) + { + state = ViewerSession.EnqueueInline( + state, + new(Path.Combine(directory, "BenchTests.cs"), 10 + index, $"\"old{index}\"", $"new {index}") + { + TestName = "Bench", + MemberName = "Bench" + }); + } + + all = state; + // One file and one test, so the queue is one group under one header, which is row 0. + group = ViewerSession.OpenMenu(state, 0); + if (group.Menu is null) + { + throw new("No menu opened over the first row."); + } + } + + [Benchmark] + public object AcceptAll() => + Done(ViewerSession.Apply(all, CommandKind.AcceptAll, applied)); + + [Benchmark] + public object AcceptGroup() => + Done(ViewerSession.Apply(group, CommandKind.AcceptGroup, applied)); + + SessionState Done(SessionState state) + { + if (state.Queue.Count != 0) + { + throw new($"{state.Queue.Count} of {Entries} were left: {state.Message}"); + } + + return state; + } +} From e936d5ddb376dab55c85af8f0056c0bb915b6e44 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:21:00 +1000 Subject: [PATCH 44/73] Keep a batch's bookkeeping from growing with the square of the queue A batch records each entry as it lands, and each record did what every inline transition does: rebuilt the whole list from the whole queue, ordered it twice, and then, the entry on screen having gone, asked which entries are visible, which described every row of the queue with its label and tooltip to learn which had one. Per entry, so 2,000 snapshots were 3.7 seconds and 8.8 GB of garbage beside the applying, under the lock. Three changes. The record step still asks InlineQueue.AcceptInBatch what became of the entry, but of a queue holding that entry alone, and does what it says to the list as it stands: the entry taken out, or given its status. Taking an entry out of a list that is in order leaves it in order and touches no other entry, so there was nothing for the rebuild to find. One implementation of the batch's rules, as before, and no projection. Which entries are visible is answered by the same walk of the queue that builds the rows, without describing them. It is asked on every step through the queue as well as after every entry a batch takes out. With nothing folded it is not asked at all when an entry goes, since nothing can be hidden. What groups an entry under its test, a lower cased path and a string, is worked out once an entry rather than each time the queue is ordered or projected. BatchBookkeepingBenchmarks, before and after, with other builds running: AcceptAll 200 snapshots 35 ms 89 MB 0.25 ms 0.7 MB AcceptGroup 200 snapshots 35 ms 87 MB 0.28 ms 0.8 MB AcceptAll 2,000 snapshots 3.7 s 8.8 GB 14 ms 36 MB AcceptGroup 2,000 snapshots 5.1 s 8.6 GB 15 ms 36 MB --- .../BatchBookkeepingTests.cs | 141 ++++++++++++++++++ src/DiffEngineViewer/QueueEntry.cs | 13 ++ src/DiffEngineViewer/QueueProjection.cs | 75 +++++++--- src/DiffEngineViewer/ViewerSession.cs | 45 +++++- 4 files changed, 250 insertions(+), 24 deletions(-) create mode 100644 src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs diff --git a/src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs b/src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs new file mode 100644 index 000000000..0c81a4ae9 --- /dev/null +++ b/src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs @@ -0,0 +1,141 @@ +///

+/// What a batch does to the queue besides applying it. Recording an entry takes it out of the list +/// or marks it where it stands, and finding what is visible walks the queue without describing +/// it: each used to rebuild or describe the whole queue an entry, which for 2,000 snapshots was +/// seconds and gigabytes beside the applying. Both have to come to what the long way round gave. +/// +public class BatchBookkeepingTests +{ + /// + /// Every other inline transition rebuilds the list from the queue and orders it. A batch's + /// record does neither, so after each entry it records the list has to be in the order a + /// rebuild would have left it in, whatever became of the entry: written, refused, or failed. + /// + [Test] + public void AfterEachEntryTheQueueIsStillInOrder() + { + var random = new Random(11); + for (var iteration = 0; iteration < 200; iteration++) + { + var state = ViewerSession.BeginAcceptAll(Mixed(random)); + var actions = Fixtures.Applied with + { + ApplyInline = _ => random.Next(4) switch + { + 0 => InlineApplyResult.Failed("the file is held"), + 1 => InlineApplyResult.NotFound("no Verify call"), + _ => InlineApplyResult.Applied + }, + MoveFile = static (_, _) => + { + }, + DeleteFile = static _ => + { + } + }; + while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is { } entry) + { + state = ViewerSession.ApplyClaimed(entry, actions)(state); + if (!QueueProjection.Order(state.Queue).SequenceEqual(state.Queue, ReferenceEqualityComparer.Instance)) + { + Assert.Fail($"Out of order after {entry.Name}: {string.Join(", ", state.Queue.Select(_ => _.Name))}"); + } + } + } + } + + /// + /// And what it leaves is what the batch's own rules say of each entry: one that was written is + /// gone, one that was not is still there saying why, and nothing else was touched. + /// + [Test] + public async Task EachEntryIsLeftAsTheBatchRulesSay() + { + var state = Fixtures.Inline( + Fixtures.Patch("OneTests.cs", 10), + Fixtures.Patch("TwoTests.cs", 20, "\"a\"", "b"), + Fixtures.Patch("ThreeTests.cs", 30, "\"c\"", "d"), + Fixtures.Patch("FourTests.cs", 40, "\"e\"", "f")); + var untouched = state.Queue.Single(_ => _.Name == "FourTests.cs:40"); + var actions = Fixtures.Applied with + { + ApplyInline = _ => _.LineHint switch + { + 20 => InlineApplyResult.Failed("the file is held"), + 30 => InlineApplyResult.NotFound("no Verify call"), + _ => InlineApplyResult.Applied + } + }; + + state = ViewerSession.BeginAcceptAll(state); + while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is { } entry && + entry.Name != "FourTests.cs:40") + { + state = ViewerSession.ApplyClaimed(entry, actions)(state); + } + + await Assert.That(state.Queue.Select(_ => _.Name)).IsEquivalentTo(["TwoTests.cs:20", "ThreeTests.cs:30", "FourTests.cs:40"]); + await Assert.That(state.Queue.Single(_ => _.Name == "TwoTests.cs:20").Status).IsEqualTo("the file is held"); + await Assert.That(state.Queue.Single(_ => _.Name == "ThreeTests.cs:30").Status!).Contains("no Verify call"); + // The very entry, not one rebuilt to look like it: nothing about it changed + await Assert.That(state.Queue.Single(_ => _.Name == "FourTests.cs:40")).IsSameReferenceAs(untouched); + await Assert.That(state.Batch!.Tally).IsEqualTo(new AcceptAllTally(1, 1, 1, state.Batch.Tally.Failure)); + } + + /// + /// Which entries have a row is asked without describing the rows, on every step through the + /// queue and after every entry a batch takes out. It is the same walk, so it has to give what + /// the rows that are drawn give, with nothing folded and with each header folded in turn. + /// + [Test] + public async Task WhatIsVisibleIsWhatHasARow() + { + var random = new Random(12); + for (var iteration = 0; iteration < 50; iteration++) + { + var state = Mixed(random); + await SameAsTheRows(state); + foreach (var header in QueueProjection.Rows(state).Where(_ => _.GroupKey is not null).ToList()) + { + await SameAsTheRows(ViewerSession.ToggleGroup(state, header.GroupKey!)); + } + } + } + + static async Task SameAsTheRows(SessionState state) + { + var drawn = QueueProjection.Rows(state) + .Where(_ => _.EntryIndex >= 0) + .Select(_ => _.EntryIndex); + + await Assert.That(string.Join(",", QueueProjection.VisibleEntries(state))).IsEqualTo(string.Join(",", drawn)); + } + + /// + /// Snapshots across two solutions and outside any, some of them several to a test, so there + /// are solution headers and test headers to order under, with a move and a delete beside them. + /// + static SessionState Mixed(Random random) + { + string[] solutions = ["SolutionA", "SolutionB"]; + var patches = new List(); + for (var index = random.Next(3, 12); index > 0; index--) + { + var file = $"Tests{random.Next(3)}.cs"; + var source = random.Next(3) == 0 + ? file + : Fixtures.SolutionFile(solutions[random.Next(2)], "Tests", file); + patches.Add( + Fixtures.Patch( + source, + 10 + patches.Count, + $"\"old{patches.Count}\"", + $"new {patches.Count}", + testName: random.Next(2) == 0 ? $"Test{random.Next(2)}" : null)); + } + + var state = Fixtures.Inline([.. patches]); + state = ViewerSession.EnqueueTracked(state, Fixtures.Move(solution: "SolutionA")); + return ViewerSession.EnqueueTracked(state, Fixtures.Delete(solution: "SolutionB")); + } +} diff --git a/src/DiffEngineViewer/QueueEntry.cs b/src/DiffEngineViewer/QueueEntry.cs index 04ab79260..8b136dca2 100644 --- a/src/DiffEngineViewer/QueueEntry.cs +++ b/src/DiffEngineViewer/QueueEntry.cs @@ -70,6 +70,19 @@ record QueueEntry( ? null : DiffView.Build(DocumentRows.Build(LeftDocument, RightDocument), fold: false).Full; + // Once as well, and copied by a `with` as the views are. Every entry is asked for it each time + // the queue is ordered or projected, and building it is a lower cased path and a string a time. + readonly string? testGroup = Kind == QueueEntryKind.Inline && TestName is not null && Patch is not null + ? $"{Patch.SourceFile.ToLowerInvariant()}|{TestName}" + : null; + + /// + /// What makes two snapshots one test's: the file and the test's name, or null for an entry + /// that is in no test group. One test is one group only within one file, so two tests that + /// merely share a name in different files do not coalesce. + /// + public string? TestGroup => testGroup; + static (DiffView Full, DiffView Minimal) Views( string leftText, string rightText, diff --git a/src/DiffEngineViewer/QueueProjection.cs b/src/DiffEngineViewer/QueueProjection.cs index 45e1300bd..a21d59c4c 100644 --- a/src/DiffEngineViewer/QueueProjection.cs +++ b/src/DiffEngineViewer/QueueProjection.cs @@ -99,7 +99,21 @@ public static IReadOnlyList Order(IReadOnlyList entries) /// The full row list: headers inserted, labels indented, collisions disambiguated, conflicts /// marked. Assumes the queue is already ed, which every mutation ensures. ///
- public static IReadOnlyList Rows(SessionState state) + public static IReadOnlyList Rows(SessionState state) => + Rows(state, described: true); + + /// + /// The one walk that decides which rows there are: what gets a header, and what a fold hides. + /// + /// The state whose queue is projected. + /// + /// Whether the rows are to be drawn, and so want their labels, tooltips and group members. Not + /// for , which asks only which entries have a row: that is asked + /// on every step through the queue and after every entry a batch records, and describing every + /// row to answer it was a kilobyte and more an entry each time. The same walk either way, so + /// what is visible cannot be decided twice. + /// + static IReadOnlyList Rows(SessionState state, bool described) { var entries = state.Queue; if (state.Mode == ViewerMode.File || @@ -118,7 +132,7 @@ public static IReadOnlyList Rows(SessionState state) } var showSolutions = solutions.Count >= 2; - var labels = Labels(entries); + var labels = described ? Labels(entries) : null; var rows = new List(); var index = 0; @@ -137,12 +151,15 @@ public static IReadOnlyList Rows(SessionState state) if (header) { var folded = state.Collapsed.Contains(bucketKey); - rows.Add(new($"{Marker(folded)} {bucket} ({bucketEnd - index})", false, null, QueueRowKind.Header) - { - GroupName = bucket, - GroupKey = bucketKey, - GroupMembers = Enumerable.Range(index, bucketEnd - index).ToList() - }); + rows.Add( + described + ? new($"{Marker(folded)} {bucket} ({bucketEnd - index})", false, null, QueueRowKind.Header) + { + GroupName = bucket, + GroupKey = bucketKey, + GroupMembers = Enumerable.Range(index, bucketEnd - index).ToList() + } + : undescribedHeader); if (folded) { @@ -168,12 +185,15 @@ public static IReadOnlyList Rows(SessionState state) { var groupKey = $"test|{group}"; var folded = state.Collapsed.Contains(groupKey); - rows.Add(new($"{indent}{Marker(folded)} {entries[index].TestName} ({groupEnd - index})", false, null, QueueRowKind.Header) - { - GroupName = entries[index].TestName, - GroupKey = groupKey, - GroupMembers = Enumerable.Range(index, groupEnd - index).ToList() - }); + rows.Add( + described + ? new($"{indent}{Marker(folded)} {entries[index].TestName} ({groupEnd - index})", false, null, QueueRowKind.Header) + { + GroupName = entries[index].TestName, + GroupKey = groupKey, + GroupMembers = Enumerable.Range(index, groupEnd - index).ToList() + } + : undescribedHeader); if (folded) { index = groupEnd; @@ -184,13 +204,19 @@ public static IReadOnlyList Rows(SessionState state) { // Under a test header the test name would repeat, so the entry falls back // to its call site — and its tip leaves the name out for the same reason. - rows.Add(EntryRow(entries[index], index, $"{indent} ", entries[index].Name, state, true)); + rows.Add( + labels is null + ? Undescribed(index) + : EntryRow(entries[index], index, $"{indent} ", entries[index].Name, state, true)); } continue; } - rows.Add(EntryRow(entries[index], index, indent, labels[index], state)); + rows.Add( + labels is null + ? Undescribed(index) + : EntryRow(entries[index], index, indent, labels[index], state)); index++; } } @@ -198,6 +224,13 @@ public static IReadOnlyList Rows(SessionState state) return rows; } + // What a walk that is not to be drawn puts where a row would be: that there is one, and for + // an entry which. + static readonly QueueItem undescribedHeader = new("", false, null, QueueRowKind.Header); + + static QueueItem Undescribed(int index) => + new("", false, null, QueueRowKind.Entry, index); + /// /// A disclosure marker, in both states. One that appeared only when folded would leave nothing /// on screen saying a group can be folded at all. @@ -217,7 +250,7 @@ static string Marker(bool collapsed) => public static List VisibleEntries(SessionState state) { var visible = new List(); - foreach (var row in Rows(state)) + foreach (var row in Rows(state, described: false)) { if (row.EntryIndex >= 0) { @@ -344,13 +377,11 @@ static QueueItem EntryRow( } /// - /// One test is one group only within one file: two tests that merely share a name in - /// different files must not coalesce. + /// See , which works it out once an entry rather than once + /// an asking. /// static string? TestGroup(QueueEntry entry) => - entry is { Kind: QueueEntryKind.Inline, TestName: not null, Patch: not null } - ? $"{entry.Patch.SourceFile.ToLowerInvariant()}|{entry.TestName}" - : null; + entry.TestGroup; /// /// The path an entry's label can be grown from: the source file for an inline entry, and the diff --git a/src/DiffEngineViewer/ViewerSession.cs b/src/DiffEngineViewer/ViewerSession.cs index 1c552f1a0..a03a021a6 100644 --- a/src/DiffEngineViewer/ViewerSession.cs +++ b/src/DiffEngineViewer/ViewerSession.cs @@ -1176,6 +1176,15 @@ public static Func FailClaimed(QueueEntry entry, str /// A snapshot's outcome, by the batch's rules rather than a single accept's: see /// . An entry that changed while its patch was applying, /// because a re-run replaced it, keeps its new content and is not counted. + /// + /// The rules are still asked of an , but of one holding this entry + /// alone, and what it says is done to the list as it stands: the entry taken out, or given the + /// status. Every other inline transition rebuilds the whole list from the whole queue, and a + /// batch did that once an entry, so its own bookkeeping grew with the square of the queue: + /// 2,000 snapshots were 3.7 seconds and 8.8 GB of garbage beside the applying. Taking an entry + /// out of a list that is in order leaves it in order, and no other entry is touched, so there + /// is nothing for a rebuild to find. + /// /// static SessionState RecordInline(SessionState state, QueueEntry entry, InlineApplyResult result) { @@ -1185,7 +1194,31 @@ static SessionState RecordInline(SessionState state, QueueEntry entry, InlineApp } var tally = batch.Tally; - var pending = Pending(state).AcceptInBatch(new(entry.Variants, entry.Status), result, ref tally); + var queue = state.Queue; + // By its variants, which is how the batch finds what it started on. A snapshot's only: + // every move and delete has none, and may well share the one empty list. + var index = -1; + for (var position = 0; position < queue.Count; position++) + { + if (queue[position].Kind == QueueEntryKind.Inline && + ReferenceEquals(queue[position].Variants, entry.Variants)) + { + index = position; + break; + } + } + + if (index >= 0) + { + var claimed = queue[index]; + var outcome = InlineQueue + .From([new(claimed.Variants, claimed.Status)]) + .AcceptInBatch(new(entry.Variants, entry.Status), result, ref tally); + queue = outcome.Count == 0 + ? Without(queue, index) + : Replace(queue, index, claimed with { Status = outcome.Items[0].Status }); + } + return Remove( state with { @@ -1195,7 +1228,7 @@ state with Current = null } }, - Rebuild(state, pending), + queue, state.Message); } @@ -1824,6 +1857,14 @@ static SessionState Toggle(SessionState state, string key) /// static int? NearestVisible(SessionState state) { + // Nothing folded, nothing hidden: every entry has a row, the selected one among them. The + // answer the walk below would give, without the walk, which is every entry of the queue + // and is asked after each entry a batch takes out. + if (state.Collapsed.Count == 0) + { + return null; + } + var visible = QueueProjection.VisibleEntries(state); if (visible.Count == 0 || visible.Contains(state.Selected)) From 857dabd7c2a427ea2c84045513cd48d57dbd1bb5 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:51:51 +1000 Subject: [PATCH 45/73] Measure opening a pair of documents, to the right side's first page and to both sides drawn DocumentWatchBenchmarks opens a received and verified pair as the viewer does, hashed and with its text unread, and drives DocumentWatch itself until it has nothing left to do. It draws with the documents folder a viewer loads, PDFium and Morph, rather than a stand-in. The benchmark project puts that folder beside itself by importing Documents.targets, which is a reference for build order and a copy of the folder with the natives of the machine building it, 38 MB here, and no package of its own. Two things are timed, being the two a reader waits for. The right side's first page is how long the right pane is a spinner. That run stops drawing once the page is in the state, by throwing from the next page to land, since nothing else stops a call into PDFium or Morph and the pages after it would be most of the number. Both sides complete is when the status line can say which pages differ. Before the fix that follows, the left side is drawn to its last page before the right is started, so the right side's first page costs every page of the left: RightSidesFirstPage .pdf 10 pages 811 ms 102 MB BothSidesComplete .pdf 10 pages 1,438 ms 186 MB RightSidesFirstPage .pdf 50 pages 4,143 ms 477 MB BothSidesComplete .pdf 50 pages 8,316 ms 934 MB RightSidesFirstPage .docx 10 pages 1,949 ms 24 MB BothSidesComplete .docx 10 pages 1,694 ms 25 MB RightSidesFirstPage .docx 50 pages 9,325 ms 66 MB BothSidesComplete .docx 50 pages 8,025 ms 70 MB A Word file's pages all land together, once Morph has laid the whole document out, so its two rows are the same work. The gap between them is the machine, which was building other things while this ran: single runs of the 50 page rows ranged from 7.1 to 9.6 seconds. --- .../DiffEngineViewer.Benchmarks.csproj | 13 + .../DocumentWatchBenchmarks.cs | 253 ++++++++++++++++++ 2 files changed, 266 insertions(+) create mode 100644 src/DiffEngineViewer.Benchmarks/DocumentWatchBenchmarks.cs diff --git a/src/DiffEngineViewer.Benchmarks/DiffEngineViewer.Benchmarks.csproj b/src/DiffEngineViewer.Benchmarks/DiffEngineViewer.Benchmarks.csproj index 0fa41dcfb..b085457d6 100644 --- a/src/DiffEngineViewer.Benchmarks/DiffEngineViewer.Benchmarks.csproj +++ b/src/DiffEngineViewer.Benchmarks/DiffEngineViewer.Benchmarks.csproj @@ -9,6 +9,12 @@ true $(MSBuildThisFileDirectory)..\key.snk + + $(NETCoreSdkPortableRuntimeIdentifier) + osx;$(DocumentsRids) @@ -22,4 +28,11 @@ + + + diff --git a/src/DiffEngineViewer.Benchmarks/DocumentWatchBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/DocumentWatchBenchmarks.cs new file mode 100644 index 000000000..4ecf680e2 --- /dev/null +++ b/src/DiffEngineViewer.Benchmarks/DocumentWatchBenchmarks.cs @@ -0,0 +1,253 @@ +#nullable enable +using System.IO.Compression; +using System.Text; +using BenchmarkDotNet.Attributes; + +namespace DiffEngineViewer.Benchmarks; + +// A pair of documents opened in the viewer, received beside verified, timed to the two things a +// reader waits for: the right side's first page, and both sides drawn, which is when every page +// that differs is known. +// +// Through DocumentWatch itself, a job at a time as its tests drive it, and with the documents +// folder a viewer loads rather than a stand-in for it: PDFium for the PDFs, one lock and all, and +// Morph for the Word files. So this times the renderers as well as the order they are asked in, +// and a Word file's pages all land together at the end, which makes its two rows one number. +// +// Nothing here is a viewer's own. The pair is written to a temp directory, and the copies and the +// pages go to the plugin's cache, which is a temp directory this process makes for itself. Both +// are deleted when a benchmark is done. +[MemoryDiagnoser] +public class DocumentWatchBenchmarks +{ + [Params(".pdf", ".docx")] + public string Extension = ""; + + [Params(10, 50)] + public int Pages; + + DocumentPlugin renderer = null!; + DocumentPlugin documents = null!; + string directory = ""; + string left = ""; + string right = ""; + volatile SessionHost? host; + volatile bool untilTheRightSideHasAPage; + + [GlobalSetup] + public void Setup() + { + renderer = DocumentPlugin.Find() ?? + throw new InvalidOperationException("There is no documents folder beside the benchmarks. DiffEngineViewer.Benchmarks.csproj imports Documents.targets to put one there."); + // The renderer a viewer loads, behind one more delegate. See Render. + documents = new(renderer.Text, Render); + directory = Directory.CreateTempSubdirectory("deview-benchmark-documents-").FullName; + left = Write("sample.received", changed: true); + right = Write("sample.verified", changed: false); + } + + [GlobalCleanup] + public void Cleanup() + { + // The cache goes with the plugin that made it + documents.Dispose(); + renderer.Dispose(); + Directory.Delete(directory, true); + } + + // How long the right pane has nothing but a spinner in it. + [Benchmark] + public int RightSidesFirstPage() + { + var state = Open(untilTheRightSideHasAPage: true); + var drawn = Drawn(state, state.Current!.RightDocument); + if (drawn == 0) + { + throw new InvalidOperationException("The right side drew no page."); + } + + return drawn; + } + + // How long until the status line can say which pages differ. + [Benchmark] + public int BothSidesComplete() + { + var state = Open(untilTheRightSideHasAPage: false); + var entry = state.Current!; + var (leftPages, rightPages) = DocumentPages.Of(state, entry); + if (leftPages is not { Complete: true, Failure: null } || + rightPages is not { Complete: true, Failure: null } || + leftPages.Pages.Count != Pages || + rightPages.Pages.Count != Pages) + { + throw new InvalidOperationException($"The pair did not draw as {Pages} pages a side: {Describe(leftPages)} and {Describe(rightPages)}."); + } + + return DocumentPages.Differing(entry, leftPages, rightPages).Count; + } + + // The pair as it arrives, hashed and with its text unread, and then the watch until it has + // nothing left to do. + SessionState Open(bool untilTheRightSideHasAPage) + { + // Nothing kept from the run before. The text, the copies and the pages all go, as they do + // when a pair leaves the queue. + documents.Keep(new HashSet()); + this.untilTheRightSideHasAPage = untilTheRightSideHasAPage; + var entry = QueueEntry.ForFiles(left, right, FileSide.Read(left, documents), FileSide.Read(right, documents)); + var opened = new SessionHost(ViewerSession.EnqueueFile(SessionState.Start(ViewerMode.File, 160, 48), entry)); + host = opened; + var watch = new DocumentWatch(opened, documents); + while (watch.Pump()) + { + } + + return opened.State; + } + + // The renderer a viewer loads, with one thing added. A run that is timing the right side's + // first page stops drawing once that page is in the state, by throwing from the next page to + // land on either side. Nothing else stops a call into PDFium or Morph, and left to finish, + // the pages after the one being timed would be most of what was measured. + int Render(string path, string pages, string projection, Action landed) => + renderer.Render( + path, + pages, + _ => + { + landed(_); + if (untilTheRightSideHasAPage && + host is { } opened && + Drawn(opened.State, opened.State.Current?.RightDocument) > 0) + { + throw new OperationCanceledException("The right side's first page has landed."); + } + }, + Enum.Parse(projection)); + + static int Drawn(SessionState state, DocumentFile? side) => + DocumentPages.Of(state, side)?.Pages.Count ?? 0; + + static string Describe(Rendering? rendering) => + rendering is null + ? "not drawn" + : $"{rendering.Pages.Count} pages{(rendering.Complete ? "" : ", still drawing")}{(rendering.Failure is null ? "" : $", {rendering.Failure}")}"; + + string Write(string name, bool changed) + { + var path = Path.Combine(directory, $"{name}{Extension}"); + File.WriteAllBytes(path, Extension == ".pdf" ? Pdf(Pages, changed) : Docx(Pages, changed)); + return path; + } + + // What one page says: a heading and a dozen lines, the same on both sides but for one page in + // ten, which is the usual shape of a document snapshot that failed. + static IEnumerable Lines(int page, bool changed) + { + yield return $"Page {page + 1}"; + var ending = changed && page % 10 == 3 + ? "and this page has changed since it was verified." + : "the quick brown fox jumps over the lazy dog."; + for (var line = 1; line <= 12; line++) + { + yield return $"Line {line} of page {page + 1}: {ending}"; + } + } + + // A PDF written out by hand, A4, a content stream per page. + static byte[] Pdf(int pages, bool changed) + { + var builder = new StringBuilder("%PDF-1.4\n"); + var offsets = new List(); + + void Add(string body) + { + // ASCII throughout, so a character offset is a byte offset + offsets.Add(builder.Length); + builder.Append($"{offsets.Count} 0 obj\n{body}\nendobj\n"); + } + + var kids = string.Join(" ", Enumerable.Range(0, pages).Select(_ => $"{4 + _ * 2} 0 R")); + Add("<< /Type /Catalog /Pages 2 0 R >>"); + Add($"<< /Type /Pages /Kids [{kids}] /Count {pages} >>"); + Add("<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>"); + for (var page = 0; page < pages; page++) + { + var text = string.Concat(Lines(page, changed).Select(_ => $"({_}) Tj T*\n")); + var content = $"BT /F1 11 Tf 56 780 Td 16 TL\n{text}ET"; + Add($"<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842] /Resources << /Font << /F1 3 0 R >> >> /Contents {offsets.Count + 2} 0 R >>"); + Add($"<< /Length {content.Length} >>\nstream\n{content}\nendstream"); + } + + var table = builder.Length; + builder.Append($"xref\n0 {offsets.Count + 1}\n0000000000 65535 f \n"); + foreach (var offset in offsets) + { + builder.Append($"{offset:D10} 00000 n \n"); + } + + builder.Append($"trailer\n<< /Size {offsets.Count + 1} /Root 1 0 R >>\nstartxref\n{table}\n%%EOF\n"); + return Encoding.ASCII.GetBytes(builder.ToString()); + } + + // A Word document written out by hand, A4, a page break after each page's lines. + static byte[] Docx(int pages, bool changed) + { + var body = new StringBuilder(); + for (var page = 0; page < pages; page++) + { + foreach (var line in Lines(page, changed)) + { + body.Append($"{line}"); + } + + if (page < pages - 1) + { + body.Append(""""""); + } + } + + body.Append(""""""); + + using var stream = new MemoryStream(); + using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, leaveOpen: true)) + { + Part( + archive, + "[Content_Types].xml", + """ + + + + + + + """); + Part( + archive, + "_rels/.rels", + """ + + + + + """); + Part( + archive, + "word/document.xml", + $""" + + {body} + """); + } + + return stream.ToArray(); + } + + static void Part(ZipArchive archive, string name, string content) + { + using var writer = new StreamWriter(archive.CreateEntry(name).Open()); + writer.Write(content); + } +} From ed7499b9a567154e49dec69a117ea0701eacc71e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:07:37 +1000 Subject: [PATCH 46/73] Draw both sides of a document at once, each call with a clock of its own DocumentWatch drew the left side to its last page before it started the right, so the right pane was a spinner for as long as the whole of the left took, and which pages differ was not known until both were done. The two sides of the entry on screen are now drawn together, by a call each. Two Office files take a core each. Two PDFs share PDFium's lock, but it is held only while a page is rasterised, and encoding the png, which is most of what a page costs, is outside it. So they take turns a page at a time and are both done in little more than the time one took. RightSidesFirstPage .pdf 10 pages 811 ms -> 263 ms 102 MB -> 37 MB BothSidesComplete .pdf 10 pages 1,438 ms -> 982 ms 186 MB -> 186 MB RightSidesFirstPage .pdf 50 pages 4,143 ms -> 283 ms 477 MB -> 39 MB BothSidesComplete .pdf 50 pages 8,316 ms -> 4,337 ms 934 MB -> 934 MB RightSidesFirstPage .docx 10 pages 1,949 ms -> 977 ms 24 MB -> 24 MB BothSidesComplete .docx 10 pages 1,694 ms -> 994 ms 25 MB -> 25 MB RightSidesFirstPage .docx 50 pages 9,325 ms -> 4,842 ms 66 MB -> 66 MB BothSidesComplete .docx 50 pages 8,025 ms -> 4,934 ms 70 MB -> 70 MB A PDF's right side no longer waits for any page of the left but its first. What is left is the text of both sides, a page of the left, a page of the right, and the benchmark letting each side finish the page it has in hand as it stops. Allocation is the work, and both sides drawn is the same work, so it falls only where a run stops sooner. Both runs shared the machine with other builds. What was the one job's is now each call's: - The clock. A call is given up on once it has gone Timeout with nothing coming of it, by its own count: one side landing pages says nothing about the other having stopped. - Being left behind, which was a generation shared with whatever ran next, so giving up on one side would have dropped every page the other went on to land. It is set under the lock a page is published under, which also closes a gap that was there before: a page landing as its call ran out of time could reach the state after the failure, and leave the pane drawing a document nothing more was coming of. - PDFium being held is a count rather than a flag. Both sides can be left behind, and the first of them to return says nothing about the second. Two PDFs that stop together need telling apart. When one stops inside PDFium the other stops at the lock, and from outside both have only stopped landing pages. The one inside is the one whose pages stopped first, since the other came to the lock afterwards, so the first to run out of time is given up on. The second is not: it is put back as though it had not been started, with nothing recorded against it, and is drawn again once PDFium is free. That rule needs the first to have a page behind it, so two PDFs are started one behind the other, the second once the first has landed a page. Started together, a right side that stopped inside PDFium at once would leave the left, waiting on the lock since it began, as the one that ran out of time first. A call that was left behind is now stopped where its next page lands, by throwing from the page callback, which is the one place it can be. It used to run on to its last page, and a PDF kept every other PDF waiting until it had. A side that cannot be started yet, its copy not written or PDFium not free, no longer holds up the other: that one is drawn in the same turn, and the turn still says why the first was not and comes round again for it. Nothing is started for an entry the reader steps to until the calls in hand are done, as before. They cannot be stopped part way through a page, and two more beside them at every entry stepped through would each take a turn at PDFium ahead of the entry on screen. PagesLandOneAtATime asserted the order this changes, a job for each side, and now asserts one job for both. The fake renderer's hook says which document a page belongs to, since the two sides are on two threads. And TwoDrawnAtOnceDrawAsEachDoesAlone pins what all of this leans on, with the real documents folder: PDFium, Morph, Svg.Skia and GeoConvert each draw the same bytes when called twice at once as when called alone. --- .../DocumentRendererTests.cs | 47 ++ .../DocumentWatchTests.cs | 521 +++++++++++++++++- .../MapProjectionTests.cs | 7 +- .../Documents/DocumentWatch.cs | 456 ++++++++++++--- 4 files changed, 923 insertions(+), 108 deletions(-) diff --git a/src/DiffEngineViewer.Tests/DocumentRendererTests.cs b/src/DiffEngineViewer.Tests/DocumentRendererTests.cs index 6aff5d2e2..01b2fbdcd 100644 --- a/src/DiffEngineViewer.Tests/DocumentRendererTests.cs +++ b/src/DiffEngineViewer.Tests/DocumentRendererTests.cs @@ -242,6 +242,53 @@ public async Task ACorruptDocumentFailsAlone() await Assert.That(Render(WritePdf("fine.pdf", "alpha")).Count).IsEqualTo(1); } + /// + /// The watch draws the two sides of an entry at once, so the renderer is called on two threads + /// at a time, and each call has to draw what it draws alone. A page that came out differently + /// for having been drawn beside another would be reported as a page that differs. + /// + [Test] + [Arguments(".pdf")] + [Arguments(".docx")] + [Arguments(".xlsx")] + [Arguments(".pptx")] + [Arguments(".svg")] + [Arguments(".geojson")] + [Arguments(".fgb")] + public async Task TwoDrawnAtOnceDrawAsEachDoesAlone(string extension) + { + var bytes = extension switch + { + ".pdf" => SamplePdf.Build("alpha", "bravo", "charlie"), + ".svg" => Encoding.UTF8.GetBytes(FileTypeLaunchTests.SvgOf("red")), + ".geojson" or ".fgb" => FileTypeLaunchTests.MapOf(extension, moved: false), + _ => File.ReadAllBytes(Sample($"sample{extension}")) + }; + + string Copy(string name) + { + var path = Path.Combine(directory, $"{name}{extension}"); + File.WriteAllBytes(path, bytes); + return path; + } + + var alone = Hashes(Render(Copy("alone"))); + var left = Copy("left"); + var right = Copy("right"); + + // More than once, since two calls that only sometimes get in each other's way are the + // kind there would be + for (var round = 0; round < 3; round++) + { + var drawn = await Task.WhenAll( + Task.Run(() => Hashes(Render(left))), + Task.Run(() => Hashes(Render(right)))); + + await Assert.That(drawn[0]).IsEquivalentTo(alone); + await Assert.That(drawn[1]).IsEquivalentTo(alone); + } + } + /// /// The whole of it as a viewer runs it: a pair read through , then the /// watch reading their text and drawing their pages through the real folder, until there is diff --git a/src/DiffEngineViewer.Tests/DocumentWatchTests.cs b/src/DiffEngineViewer.Tests/DocumentWatchTests.cs index 114215c64..f4bde253e 100644 --- a/src/DiffEngineViewer.Tests/DocumentWatchTests.cs +++ b/src/DiffEngineViewer.Tests/DocumentWatchTests.cs @@ -6,6 +6,11 @@ /// page whose colour comes from the line. Two documents' pages therefore differ exactly where their /// lines do, which is the property the real renderer's determinism gives the viewer. /// +/// +/// Nothing in it stands in for PDFium's lock. All the watch can see of one PDF stopped inside +/// PDFium and another stopped at the lock is two calls that no longer land pages, so that is what +/// a test arranges, by holding each side's pages back as they are about to land. +/// /// public class DocumentWatchTests : IDisposable @@ -46,11 +51,17 @@ public async Task PagesLandOneAtATime() var watch = new DocumentWatch(host, documents.Plugin); watch.Pump(); - // Left, then right, a job each, each page published as it lands - documents.Landing = () => landed.Add(Pages(host.State, host.State.Current!.LeftDocument).Count); + // Both sides in the one job, each page published as it lands + var received = host.State.Current!.LeftDocument; + documents.Landing = _ => + { + if (_ == Hash(received)) + { + landed.Add(Pages(host.State, received).Count); + } + }; await Assert.That(watch.Pump()).IsTrue(); await Assert.That(landed).IsEquivalentTo([0, 1, 2]); - await Assert.That(watch.Pump()).IsTrue(); var state = host.State; var left = DocumentPages.Of(state, state.Current!.LeftDocument)!; @@ -58,6 +69,84 @@ public async Task PagesLandOneAtATime() await Assert.That(left.Complete && right.Complete).IsTrue(); await Assert.That(DocumentPages.Differing(state.Current!, left, right)).IsEquivalentTo([1]); await Assert.That(DocumentPages.Current(state)).IsEqualTo(1); + await Assert.That(watch.Pump()).IsFalse(); + } + + /// + /// Both sides are drawn at once, a call each. One after the other, the right pane was a spinner + /// for as long as every page of the left took, and which pages differ was not known until both + /// were done. + /// + [Test] + public async Task BothSidesAreDrawnAtOnce() + { + var (host, documents) = Owned("alpha\nbravo\ncharlie", "alpha\nBRAVO\ncharlie", ".docx"); + var watch = new DocumentWatch(host, documents.Plugin); + watch.Pump(); + + // A page lands only when the other side has one to land beside it, which never happens + // when one side is drawn to its last page before the other is started + using var together = new Barrier(2); + var met = new ConcurrentBag(); + documents.Landing = _ => met.Add(together.SignalAndWait(TimeSpan.FromSeconds(10))); + + await Assert.That(watch.Pump()).IsTrue(); + + await Assert.That(met.Count).IsEqualTo(6); + await Assert.That(met).DoesNotContain(false); + var state = host.State; + var left = DocumentPages.Of(state, state.Current!.LeftDocument)!; + var right = DocumentPages.Of(state, state.Current!.RightDocument)!; + await Assert.That(left.Complete && right.Complete).IsTrue(); + await Assert.That(DocumentPages.Differing(state.Current!, left, right)).IsEquivalentTo([1]); + } + + /// + /// Two PDFs are drawn at once as well, but the second is started behind the first's first page + /// rather than beside it. Which of two that have stopped is inside PDFium is told from whose + /// pages stopped first, and before the first has landed a page there is nothing to tell it by. + /// + [Test] + public async Task TheSecondPdfIsStartedBehindTheFirstPageOfTheFirst() + { + var (host, documents) = Owned("alpha\nbravo\ncharlie", "delta\necho"); + var watch = new DocumentWatch(host, documents.Plugin); + watch.Pump(); + var left = host.State.Current!.LeftDocument; + var right = host.State.Current!.RightDocument; + var startedBesideTheFirstPage = false; + var drawnBesideTheLastPage = false; + documents.Landing = _ => + { + if (_ != Hash(left)) + { + return; + } + + switch (Pages(host.State, left).Count) + { + case 0: + // Long enough for a second call to have been started, were one going to be + Thread.Sleep(100); + startedBesideTheFirstPage = documents.Renders > 1; + break; + case 2: + // The left's last page waits for the right's first, which never comes when + // the right is waiting for the left's last + drawnBesideTheLastPage = Soon(() => Pages(host.State, right).Count > 0); + break; + } + }; + + await Assert.That(watch.Pump()).IsTrue(); + + await Assert.That(startedBesideTheFirstPage).IsFalse(); + await Assert.That(drawnBesideTheLastPage).IsTrue(); + await Assert.That(Pages(host.State, left).Count).IsEqualTo(3); + var drawn = DocumentPages.Of(host.State, right)!; + await Assert.That(drawn.Complete).IsTrue(); + await Assert.That(drawn.Failure).IsNull(); + await Assert.That(drawn.Pages.Count).IsEqualTo(2); } ///
@@ -95,6 +184,60 @@ public async Task OnlyTheEntryOnScreenIsReadAndDrawn() await Assert.That(host.State.Current!.LeftText).IsEqualTo("charlie"); } + /// + /// Stepping on while an entry is being drawn starts nothing for the one stepped to until the + /// two calls in hand are done. They cannot be stopped, and two more beside them would be four + /// at once, with two more again for every entry a reader steps through. + /// + [Test] + public async Task NothingIsStartedForTheNextEntryWhileOneIsBeingDrawn() + { + var release = new ManualResetEventSlim(); + try + { + var documents = new FakeDocuments(); + disposables.Add(documents); + var first = TrackedEntry.ForMove(Write("first.received.docx", "alpha"), Write("first.verified.docx", "bravo"), documents.Plugin); + var second = TrackedEntry.ForMove(Write("second.received.docx", "charlie"), Write("second.verified.docx", "delta"), documents.Plugin); + var state = ViewerSession.EnqueueTracked(SessionState.Start(ViewerMode.Inline, Fixtures.Columns, Fixtures.Rows), first); + state = ViewerSession.EnqueueTracked(state, second); + var host = new SessionHost(ViewerSession.SelectKey(state, first.Key)); + var watch = new DocumentWatch(host, documents.Plugin); + watch.Pump(); + using var drawing = new CountdownEvent(2); + documents.Landing = _ => + { + drawing.Signal(); + release.Wait(); + }; + + var pump = Task.Run(watch.Pump); + await Assert.That(drawing.Wait(TimeSpan.FromSeconds(30))).IsTrue(); + host.Mutate(_ => ViewerSession.SelectKey(_, second.Key)); + + // Long enough for the entry now on screen to have been read, were it going to be + await Task.Delay(300); + await Assert.That(pump.IsCompleted).IsFalse(); + await Assert.That(documents.Texts).IsEqualTo(2); + await Assert.That(documents.Renders).IsEqualTo(2); + + documents.Landing = null; + release.Set(); + await pump; + while (watch.Pump()) + { + } + + await Assert.That(documents.Texts).IsEqualTo(4); + await Assert.That(documents.Renders).IsEqualTo(4); + await Assert.That(host.State.Current!.LeftText).IsEqualTo("charlie"); + } + finally + { + release.Set(); + } + } + /// /// Nothing left to do is a pass that does nothing: no job, and the state as it was, so an open /// menu stays open through it. @@ -232,7 +375,7 @@ public async Task ACallThatNeverReturnsIsLeftBehind() Timeout = TimeSpan.FromMilliseconds(200) }; watch.Pump(); - documents.Landing = release.Wait; + documents.Landing = _ => release.Wait(); watch.Pump(); @@ -247,6 +390,143 @@ public async Task ACallThatNeverReturnsIsLeftBehind() } } + /// + /// A side that hangs takes nothing from the other, which is drawn to its last page meanwhile. + /// + [Test] + public async Task ASideThatHangsDoesNotStopTheOther() + { + var release = new ManualResetEventSlim(); + try + { + var (host, documents) = Owned("alpha", "bravo\ncharlie\ndelta", ".docx"); + var watch = new DocumentWatch(host, documents.Plugin) + { + Timeout = TimeSpan.FromSeconds(1) + }; + watch.Pump(); + var left = host.State.Current!.LeftDocument; + var right = host.State.Current!.RightDocument; + documents.Landing = _ => + { + if (_ == Hash(left)) + { + release.Wait(); + } + }; + + watch.Pump(); + + await Assert.That(DocumentPages.Of(host.State, left)!.Failure).IsEqualTo("gave up after 1 seconds."); + var drawn = DocumentPages.Of(host.State, right)!; + await Assert.That(drawn.Complete).IsTrue(); + await Assert.That(drawn.Failure).IsNull(); + await Assert.That(drawn.Pages.Count).IsEqualTo(3); + } + finally + { + release.Set(); + } + } + + /// + /// Each side is given up on by its own count. The left landing page after page does not keep a + /// right side that has stopped from being given up on, and giving up on the right takes + /// nothing from the left, which lands every page it has. + /// + [Test] + public async Task EachSideIsGivenUpOnByItsOwnCount() + { + var release = new ManualResetEventSlim(); + try + { + // Sixty pages a twentieth of a second apart is three seconds of landing pages, against + // a second for a side that lands none + var (host, documents) = Owned(string.Join('\n', Enumerable.Range(1, 60)), "alpha", ".docx"); + var watch = new DocumentWatch(host, documents.Plugin) + { + Timeout = TimeSpan.FromSeconds(1) + }; + watch.Pump(); + var left = host.State.Current!.LeftDocument; + var right = host.State.Current!.RightDocument; + var givenUpOnWhileTheLeftWasLanding = false; + documents.Landing = _ => + { + if (_ != Hash(left)) + { + release.Wait(); + return; + } + + if (DocumentPages.Of(host.State, right) is { Failure: not null }) + { + // Nothing left to wait out, so the rest land at once + givenUpOnWhileTheLeftWasLanding = true; + return; + } + + Thread.Sleep(50); + }; + + watch.Pump(); + + await Assert.That(DocumentPages.Of(host.State, right)!.Failure).IsEqualTo("gave up after 1 seconds."); + await Assert.That(givenUpOnWhileTheLeftWasLanding).IsTrue(); + var drawn = DocumentPages.Of(host.State, left)!; + await Assert.That(drawn.Complete).IsTrue(); + await Assert.That(drawn.Failure).IsNull(); + await Assert.That(drawn.Pages.Count).IsEqualTo(60); + } + finally + { + release.Set(); + } + } + + /// + /// A call that was left behind is stopped where its next page lands, which is the one place it + /// can be. It used to run on to its last page. + /// + [Test] + public async Task ACallLeftBehindIsStoppedAtItsNextPage() + { + var release = new ManualResetEventSlim(); + try + { + var (host, documents) = Owned("alpha\nbravo\ncharlie", "delta", ".docx"); + var watch = new DocumentWatch(host, documents.Plugin) + { + Timeout = TimeSpan.FromSeconds(1) + }; + watch.Pump(); + var left = host.State.Current!.LeftDocument; + var landings = 0; + documents.Landing = _ => + { + if (_ == Hash(left)) + { + Interlocked.Increment(ref landings); + release.Wait(); + } + }; + watch.Pump(); + + release.Set(); + await Until(() => documents.Returned == 2); + + await Assert.That(landings).IsEqualTo(1); + // And the page it was stopped at is not taken, having landed after it was given up on + var rendering = DocumentPages.Of(host.State, left)!; + await Assert.That(rendering.Failure).IsEqualTo("gave up after 1 seconds."); + await Assert.That(rendering.Pages).IsEmpty(); + } + finally + { + release.Set(); + } + } + /// /// A long document lands a page every so often for longer than the timeout, which is how long /// it may go with nothing coming of it, not how long it may take. Counted from its start, it @@ -262,7 +542,7 @@ public async Task ADocumentThatKeepsLandingPagesIsNotGivenUpOn() }; watch.Pump(); // Three pages at 0.8 seconds each: longer than the timeout in all, well inside it apiece - documents.Landing = () => Thread.Sleep(800); + documents.Landing = _ => Thread.Sleep(800); watch.Pump(); @@ -288,7 +568,7 @@ public async Task APdfWaitsForTheOneLeftBehindAndIsThenRead() Timeout = TimeSpan.FromMilliseconds(200) }; watch.Pump(); - documents.Landing = release.Wait; + documents.Landing = _ => release.Wait(); watch.Pump(); documents.Landing = null; var right = host.State.Current!.RightDocument; @@ -318,6 +598,131 @@ await Until(() => } } + /// + /// Two PDFs take turns at PDFium's lock, so when one of them stops inside PDFium the other + /// stops at the lock, and both run out of time. Only the first is given up on. The second was + /// stopped by nothing of its own, so it is put back as not started, with nothing recorded + /// against it, and is drawn once PDFium is free. + /// + [Test] + public async Task APdfStoppedBehindTheOtherSideIsNotFailed() + { + var release = new ManualResetEventSlim(); + try + { + var (host, documents) = Owned("alpha\nbravo", "charlie"); + var watch = new DocumentWatch(host, documents.Plugin) + { + Timeout = TimeSpan.FromSeconds(1) + }; + watch.Pump(); + var left = host.State.Current!.LeftDocument; + var right = host.State.Current!.RightDocument; + // The left side lands a page, which is what starts the right, and neither lands + // another: all that can be seen of one PDF inside PDFium and one waiting for it + documents.Landing = _ => + { + if (_ != Hash(left) || + Pages(host.State, left).Count > 0) + { + release.Wait(); + } + }; + + watch.Pump(); + documents.Landing = null; + + var givenUpOn = DocumentPages.Of(host.State, left)!; + await Assert.That(givenUpOn.Failure).IsEqualTo("gave up after 1 seconds."); + await Assert.That(givenUpOn.Pages.Count).IsEqualTo(1); + await Assert.That(DocumentPages.Of(host.State, right)).IsNull(); + + var wait = watch.Turn(); + + await Assert.That(wait).IsNotNull(); + await Assert.That(host.State.Message!).Contains("sample.verified.pdf is waiting for an earlier PDF"); + await Assert.That(DocumentPages.Of(host.State, right)).IsNull(); + + release.Set(); + await Until(() => + { + watch.Turn(); + return DocumentPages.Of(host.State, right) is { Complete: true }; + }); + + var rendering = DocumentPages.Of(host.State, right)!; + await Assert.That(rendering.Failure).IsNull(); + await Assert.That(rendering.Pages.Count).IsEqualTo(1); + await Assert.That(host.State.Message).IsNull(); + } + finally + { + release.Set(); + } + } + + /// + /// Both sides of an entry can be left behind, and PDFium is not free until both have returned. + /// The first of them back says nothing about the second, which a PDF started then would wait + /// on with nothing to bound it. + /// + [Test] + public async Task APdfWaitsForEveryCallLeftBehind() + { + var releaseLeft = new ManualResetEventSlim(); + var releaseRight = new ManualResetEventSlim(); + try + { + var (host, documents) = Owned("alpha\nbravo", "charlie"); + var watch = new DocumentWatch(host, documents.Plugin) + { + Timeout = TimeSpan.FromSeconds(1) + }; + watch.Pump(); + var left = host.State.Current!.LeftDocument; + var right = host.State.Current!.RightDocument; + documents.Landing = _ => + { + if (_ != Hash(left)) + { + releaseRight.Wait(); + } + else if (Pages(host.State, left).Count > 0) + { + releaseLeft.Wait(); + } + }; + watch.Pump(); + documents.Landing = null; + + // The left side's call comes back, and the right side's has not + releaseLeft.Set(); + await Until(() => documents.Returned == 1); + // Long enough for the watch to have heard that it did + await Task.Delay(200); + watch.Turn(); + + await Assert.That(host.State.Message!).Contains("sample.verified.pdf is waiting for an earlier PDF"); + await Assert.That(DocumentPages.Of(host.State, right)).IsNull(); + await Assert.That(documents.Renders).IsEqualTo(2); + + releaseRight.Set(); + await Until(() => + { + watch.Turn(); + return DocumentPages.Of(host.State, right) is { Complete: true }; + }); + + await Assert.That(DocumentPages.Of(host.State, right)!.Failure).IsNull(); + await Assert.That(documents.Renders).IsEqualTo(3); + } + finally + { + releaseLeft.Set(); + releaseRight.Set(); + } + } + /// /// The viewer's own copy of a document could not be written: something had the file, the disk /// was full. That says nothing about the document, so nothing is recorded against it. The @@ -380,6 +785,30 @@ public async Task ADrawingWhoseCopyCouldNotBeWrittenIsNotLeftAsStarted() await Assert.That(rendering.Pages.Count).IsEqualTo(1); } + /// + /// A side that cannot be started says nothing about the other, which is drawn in the turn that + /// says why the first was not, rather than once whatever was in its way has gone. + /// + [Test] + public async Task ASideThatCannotBeStartedDoesNotHoldUpTheOther() + { + var (host, documents) = Owned("alpha", "bravo", ".svg"); + var watch = new DocumentWatch(host, documents.Plugin); + var blocked = Block(documents, host.State.Current!.LeftDocument); + + var wait = watch.Turn(); + + await Assert.That(wait).IsNotNull(); + await Assert.That(host.State.Message!).StartsWith("Could not read the documents: "); + await Assert.That(DocumentPages.Of(host.State, host.State.Current!.LeftDocument)).IsNull(); + var rendering = DocumentPages.Of(host.State, host.State.Current!.RightDocument)!; + await Assert.That(rendering.Complete).IsTrue(); + await Assert.That(rendering.Failure).IsNull(); + await Assert.That(rendering.Pages.Count).IsEqualTo(1); + + Directory.Delete(blocked); + } + /// /// The turn comes round again for as long as the copy cannot be written, and says why once: /// said on each, it took the status line back from whatever the reader did in between. @@ -498,6 +927,30 @@ public async Task TextWaitsForAnAcceptAll() static IReadOnlyList Pages(SessionState state, DocumentFile? side) => DocumentPages.Of(state, side)?.Pages ?? []; + static string Hash(DocumentFile? side) => + side!.Value.Hash!; + + /// + /// Whether something comes true while a page is held back for it. On the thread that is + /// drawing, so it waits rather than awaits, and gives up rather than hold a failing run + /// forever. + /// + static bool Soon(Func condition) + { + var timer = Stopwatch.StartNew(); + while (!condition()) + { + if (timer.Elapsed > TimeSpan.FromSeconds(10)) + { + return false; + } + + Thread.Sleep(10); + } + + return true; + } + string Write(string name, string content) { var path = Path.Combine(directory, name); @@ -536,17 +989,28 @@ public FakeDocuments() => public string? RenderFailure { get; set; } /// - /// Called as each page is about to land. + /// Called as each page is about to land, with the hash of the document it is a page of, + /// which is how a test tells one side from the other: both are drawn at once, each on a + /// thread of its own. /// - public Action? Landing { get; set; } + public Action? Landing { get; set; } + + int texts; + int renders; + int returned; + + public int Texts => Volatile.Read(ref texts); - public int Texts { get; private set; } + public int Renders => Volatile.Read(ref renders); - public int Renders { get; private set; } + /// + /// How many of the calls to draw have come back, however they ended. + /// + public int Returned => Volatile.Read(ref returned); string Text(string path) { - Texts++; + Interlocked.Increment(ref texts); if (TextFailure is not null) { throw new(TextFailure); @@ -557,23 +1021,32 @@ string Text(string path) int Render(string path, string directory, string projection, Action landed) { - Renders++; - if (RenderFailure is not null) + Interlocked.Increment(ref renders); + try { - throw new(RenderFailure); + if (RenderFailure is not null) + { + throw new(RenderFailure); + } + + // The copy being drawn sits in a directory named for the hash of its bytes + var hash = Path.GetFileName(Path.GetDirectoryName(path))!; + var lines = File.ReadAllLines(path); + for (var index = 0; index < lines.Length; index++) + { + var colour = SHA256.HashData(Encoding.UTF8.GetBytes(lines[index])); + var page = Path.Combine(directory, $"page_{index + 1:0000}.png"); + File.WriteAllBytes(page, SamplePng.Build(8, 8, colour[0], colour[1], colour[2])); + Landing?.Invoke(hash); + landed(page); + } + + return lines.Length; } - - var lines = File.ReadAllLines(path); - for (var index = 0; index < lines.Length; index++) + finally { - var colour = SHA256.HashData(Encoding.UTF8.GetBytes(lines[index])); - var page = Path.Combine(directory, $"page_{index + 1:0000}.png"); - File.WriteAllBytes(page, SamplePng.Build(8, 8, colour[0], colour[1], colour[2])); - Landing?.Invoke(); - landed(page); + Interlocked.Increment(ref returned); } - - return lines.Length; } public void Dispose() => diff --git a/src/DiffEngineViewer.Tests/MapProjectionTests.cs b/src/DiffEngineViewer.Tests/MapProjectionTests.cs index bb9a0f4db..6bd7d6a8d 100644 --- a/src/DiffEngineViewer.Tests/MapProjectionTests.cs +++ b/src/DiffEngineViewer.Tests/MapProjectionTests.cs @@ -373,7 +373,12 @@ public FakeMaps() => int Render(string path, string directory, string projection, Action landed) { - Projections.Add(projection); + // Both sides are drawn at once, each on a thread of its own + lock (Projections) + { + Projections.Add(projection); + } + var colour = SHA256.HashData(Encoding.UTF8.GetBytes(File.ReadAllText(path) + projection)); var page = Path.Combine(directory, "page_0001.png"); File.WriteAllBytes(page, SamplePng.Build(8, 8, colour[0], colour[1], colour[2])); diff --git a/src/DiffEngineViewer/Documents/DocumentWatch.cs b/src/DiffEngineViewer/Documents/DocumentWatch.cs index dca4f3561..fdaea6a04 100644 --- a/src/DiffEngineViewer/Documents/DocumentWatch.cs +++ b/src/DiffEngineViewer/Documents/DocumentWatch.cs @@ -1,14 +1,22 @@ using System.Globalization; +using System.Runtime.ExceptionServices; /// /// Reads the text of the queue's documents and draws their pages, on its own thread, for the entry /// on screen and no other. /// /// Not the entry after it as well, though stepping to it would then find it ready. A call into -/// Morph or PDFium cannot be stopped once it has started, so a document drawn ahead was one the -/// reader then waited behind whenever they picked any other entry, and a core spent on something -/// nobody had opened. One that is stepped to is read and drawn then, with the spinner the heads draw -/// for standing in for its page meanwhile. +/// Morph or PDFium cannot be stopped part way through a conversion or a page, so a document drawn +/// ahead was one the reader then waited behind whenever they picked any other entry, and a core +/// spent on something nobody had opened. One that is stepped to is read and drawn then, with the +/// spinner the heads draw for standing in for its page meanwhile. +/// +/// +/// Both sides of that entry are drawn at once, by a call each. Drawn one after the other, the right +/// pane was a spinner for as long as every page of the left took, and which pages differ was not +/// known until both were done. Two Office files take a core each. Two PDFs take turns at PDFium's +/// lock a page at a time, but it is held only while a page is rasterised: encoding the png is most +/// of what a page costs and is done outside it, so two PDFs also take little longer than one. /// /// /// The other half of 's bargain. Reading a file has to stay cheap, because it @@ -29,13 +37,18 @@ sealed class DocumentWatch(SessionHost host, DocumentPlugin documents) /// /// How long a document may go with nothing coming of it - its text, or its next page - before it - /// is reported as failed and left behind. Code in this process cannot be stopped, so this does - /// not stop it: it only keeps the documents after it moving. + /// is reported as failed and left behind. A call cannot be stopped part way through a page, so + /// this does not stop it: it keeps the documents after it moving, and the call ends where its + /// next page would have landed. /// /// Not how long the whole document may take. A long one lands a page every so often for longer /// than any one limit, and counted from its start it was given up on part way through, with /// pages still arriving. /// + /// + /// Counted by each call for itself, since the two sides of an entry are drawn at once: one side + /// landing pages says nothing about the other having stopped. + /// /// public TimeSpan Timeout { get; init; } = TimeSpan.FromMinutes(2); @@ -46,22 +59,19 @@ sealed class DocumentWatch(SessionHost host, DocumentPlugin documents) public bool Hidden { get; set; } /// - /// Moved on when a job is left behind, so pages it lands afterwards are dropped rather than - /// published over whatever replaced it. + /// How many PDFs that were left behind have not returned yet. PDFium is serialized behind one + /// lock, which a call holds while it rasterises a page, so a PDF started while there is one + /// could wait on that call with nothing to bound it. A count rather than a flag, because both + /// sides of an entry can be left behind, and the first of them to return says nothing about + /// the second. Taken down from the pool as each call returns. /// - int generation; + int pdfiumHeld; /// - /// Set while a PDF that was left behind is still inside PDFium, which is serialized behind one - /// lock: a PDF started now would wait on that call with nothing to bound it. Written from the - /// pool when that call returns. + /// When a PDF that was left behind last returned, which is when PDFium was last given back. + /// Written from the pool. /// - volatile bool pdfiumHeld; - - /// - /// When something last came of the job in hand: when it started, then as each page landed. - /// - long progressed; + long pdfiumReleased; /// /// What the last turn that could do nothing said, so that it is said once. @@ -100,13 +110,9 @@ public void Run(Cancel cancel) Unsay(); return worked ? null : Interval; } - catch (NotYetException exception) - { - Say(exception.Message); - } catch (Exception exception) { - Say($"Could not read the documents: {exception.Message}"); + Say(Reason(exception)); } // Longer than an idle pass waits: what was in the way is usually still there a moment @@ -114,6 +120,15 @@ public void Run(Cancel cancel) return Interval * 5; } + /// + /// What is in the way of a job, as the status line says it. A job that has only to wait says + /// why in its own words; anything else thrown is something that stopped it being read at all. + /// + static string Reason(Exception exception) => + exception is NotYetException + ? exception.Message + : $"Could not read the documents: {exception.Message}"; + /// /// Why a turn could do nothing, in the status line. Once for as long as it stays the reason: the /// turn comes round again every second, and a message set on each would take the status line @@ -155,13 +170,14 @@ sealed class NotYetException(string message) : Exception(message); /// - /// One job: the first thing the entry on screen wants that is not there yet. True when there was - /// one, so the loop goes again without waiting. Public for the tests, which drive it directly - /// rather than waiting on a thread. + /// One job: the first thing the entry on screen wants that is not there yet, which is its text + /// and then its pages. True when there was one, so the loop goes again without waiting. Public + /// for the tests, which drive it directly rather than waiting on a thread. /// /// The state is read afresh for every job, so a reader who steps on part way through a document - /// has the next one started as soon as the job in hand is done, rather than after the rest of the - /// one they left. + /// has the next one started as soon as the job in hand is done. Not before: the calls in hand + /// cannot be stopped, and a reader stepping through the queue would leave two more drawing + /// behind them at every entry, each taking its turn at PDFium ahead of the one on screen. /// /// public bool Pump() @@ -221,10 +237,23 @@ Extraction Extract(DocumentFile side) } string? text = null; - var failure = Run(side.Format, () => text = documents.Text(source)); + string? failure = null; + // Reading text lands nothing, so its wait is counted from the start + var call = new Call(side.Format, _ => failure = _); + call.Start(() => text = documents.Text(source)); + Await([call]); return failure is null ? new(text, null) : new(null, failure); } + /// + /// The pages of both sides, a call each, waited on together. The same bytes on both sides are + /// one drawing. + /// + /// A side that cannot be started yet says nothing about the other, which is drawn all the same. + /// Why it could not be is thrown once the other is done, as it would have been on its own, so + /// the turn comes round again for it. + /// + /// bool Draw(SessionState state, QueueEntry entry) { if (state.Drawing == DrawingView.Text) @@ -232,24 +261,75 @@ bool Draw(SessionState state, QueueEntry entry) return false; } + var sides = new List<(DocumentFile Side, string Key)>(); foreach (var side in Sides(entry)) { if (DocumentPages.Key(side, state.Projection) is { } key && - !state.Renders.ContainsKey(key)) + !state.Renders.ContainsKey(key) && + sides.All(_ => _.Key != key)) { - Render(side, key, state.Projection); - return true; + sides.Add((side, key)); } } - return false; + if (sides.Count == 0) + { + return false; + } + + ExceptionDispatchInfo? refused = null; + + Call? Start((DocumentFile Side, string Key) drawing) + { + try + { + return Render(drawing.Side, drawing.Key, state.Projection); + } + catch (Exception exception) + { + if (refused is null) + { + refused = ExceptionDispatchInfo.Capture(exception); + // Said now rather than when the turn hears of it, which is after the other + // side's last page + Say(Reason(exception)); + } + + return null; + } + } + + if (sides is [var first, var second] && + first.Side.Format == DocumentFormat.Pdf && + second.Side.Format == DocumentFormat.Pdf) + { + // Two PDFs are started one behind the other, the second once the first has landed a + // page. They share PDFium's lock, and when one of them stops inside it, which one is + // told from whose pages stopped first: see LeaveBehind. Started together, neither + // has a page to go by, and a second that stopped inside PDFium at once would leave + // the first, waiting on the lock since it began, as the one that ran out of time. + var lead = Start(first); + Await(lead is null ? [] : [lead], () => Start(second)); + } + else + { + Await([.. sides.Select(Start).OfType()]); + } + + refused?.Throw(); + return true; } + /// + /// Starts drawing one side, and returns the call that is drawing it. Null when there was nothing + /// to start: the file no longer holds the bytes the side describes, which is recorded as why it + /// was not drawn. + /// /// /// What the pages are kept under, which for a map is its hash and the projection it is drawn /// in: the same bytes are drawn again for each one the reader switches to. /// - void Render(DocumentFile side, string key, MapProjection projection) + Call? Render(DocumentFile side, string key, MapProjection projection) { // Everything that can say "not now" comes before anything is recorded. A rendering marked // as started is never started again, so one that then could not be - its copy not written, @@ -258,7 +338,7 @@ void Render(DocumentFile side, string key, MapProjection projection) if (Copy(side) is not { } source) { host.Mutate(_ => ViewerSession.Rendered(_, key, new([], true, "the file changed while it was being drawn."))); - return; + return null; } var directory = Path.GetDirectoryName(source)!; @@ -271,38 +351,55 @@ void Render(DocumentFile side, string key, MapProjection projection) } host.Mutate(_ => ViewerSession.Rendered(_, key, Rendering.Started)); - var token = Volatile.Read(ref generation); var pages = new List(); + var call = new Call(side.Format, Ended, Withdraw); + call.Start(() => documents.Render(source, directory, Landed, projection)); + return call; void Landed(string file) { - if (token != Volatile.Read(ref generation)) + var landed = call.Land(() => { - return; - } - - var page = Page(file); - RenderedPage[] landed; - lock (pages) + pages.Add(Page(file)); + var soFar = pages.ToArray(); + host.Mutate(_ => ViewerSession.Rendered(_, key, new(soFar, false))); + }); + if (!landed) { - pages.Add(page); - landed = pages.ToArray(); + // Nothing more is wanted of a call that was left behind, and between two pages is + // the one place it can be stopped. It used to run on to its last page, and a PDF + // kept every other PDF waiting until it had drawn all of them. + throw new OperationCanceledException($"{Path.GetFileName(side.Path)} was left behind, so no more of it is drawn."); } + } - // Something came of it, so the wait for the next page starts over - Volatile.Write(ref progressed, Stopwatch.GetTimestamp()); - host.Mutate(_ => ViewerSession.Rendered(_, key, new(landed, false))); + // Both on the loop's thread, once the call has returned or been left behind. Nothing + // lands after either, so the pages are no longer anyone else's to change. + void Ended(string? failure) + { + var complete = pages.ToArray(); + host.Mutate(_ => ViewerSession.Rendered(_, key, new(complete, true, failure))); } - var failure = Run(side.Format, () => documents.Render(source, directory, Landed, projection)); + void Withdraw() => + host.Mutate(_ => Withdrawn(_, key)); + } - RenderedPage[] complete; - lock (pages) + /// + /// A drawing put back to not having been started. No rendering at all is what says a side is + /// still to be drawn, to and to the spinner alike, so the pages it had go + /// with it and are drawn again from the first. + /// + static SessionState Withdrawn(SessionState state, string key) + { + if (!state.Renders.ContainsKey(key)) { - complete = pages.ToArray(); + return state; } - host.Mutate(_ => ViewerSession.Rendered(_, key, new(complete, true, failure))); + var renders = new Dictionary(state.Renders); + renders.Remove(key); + return state with { Renders = renders }; } /// @@ -365,8 +462,8 @@ static RenderedPage Page(string file) } /// - /// A PDF waits while one that was left behind is still inside PDFium, here, where the reader - /// can be told why, rather than on PDFium's lock with nothing to bound it. It is read once that + /// A PDF waits while one that was left behind has not returned, here, where the reader can be + /// told why, rather than on PDFium's lock with nothing to bound it. It is read once every such /// call has returned. /// /// Not a failure of this document, so nothing is recorded against it. It used to be one: every @@ -376,65 +473,258 @@ static RenderedPage Page(string file) void AwaitPdfium(DocumentFile side) { if (side.Format == DocumentFormat.Pdf && - pdfiumHeld) + Volatile.Read(ref pdfiumHeld) > 0) { throw new NotYetException($"{Path.GetFileName(side.Path)} is waiting for an earlier PDF that is still being read, since PDFium reads one at a time. Restart the viewer if that one never finishes."); } } /// - /// One call into the documents assembly, left behind once has passed with - /// nothing coming of it. Null when it finished, otherwise why it did not. + /// One call into the documents assembly, and what the loop knows of it from outside: when + /// something last came of it, and whether it has been left behind. A call has these to itself, + /// because the two sides of an entry are drawn at once: one side landing pages says nothing + /// about the other having stopped, and giving up on one must not drop what the other goes on + /// to land. /// - string? Run(DocumentFormat format, Action job) + /// + /// The call finished, with why not when it threw, or was given up on, with that as why. Called + /// on the loop's thread. + /// + /// + /// The call was left behind for no reason of its own, so what it had started is put back + /// rather than failed. Null for a call with nothing to put back. + /// + sealed class Call(DocumentFormat format, Action ended, Action? withdraw = null) { - Volatile.Write(ref progressed, Stopwatch.GetTimestamp()); + readonly Lock gate = new(); + readonly TaskCompletionSource landed = new(TaskCreationOptions.RunContinuationsAsynchronously); + long progressed; + bool leftBehind; - // On the pool, whose threads are background ones, so a call left behind cannot keep the - // process alive once the window has closed. - var task = Task.Run(job); - try + public DocumentFormat Format => format; + + public Action Ended => ended; + + public Action? Withdraw => withdraw; + + public Task Task { get; private set; } = Task.CompletedTask; + + /// + /// Done once the call has landed its first page. + /// + public Task Landed => landed.Task; + + /// + /// When something last came of it: when it started, then as each page landed. + /// + public long Progressed => Volatile.Read(ref progressed); + + public void Start(Action work) + { + Volatile.Write(ref progressed, Stopwatch.GetTimestamp()); + // On the pool, whose threads are background ones, so a call left behind cannot keep the + // process alive once the window has closed. + Task = Task.Run(work); + } + + /// + /// Something came of the call, which makes known, and the wait + /// for the next thing starts over. False, with nothing published, once the call has been + /// left behind. + /// + /// Under the lock takes, so a page cannot reach the state after + /// its call was reported as given up on. One that did would put the pane back to drawing + /// a document nothing more is coming of. + /// + /// + public bool Land(Action publish) { - while (true) + lock (gate) { - // Counted from the last page to land. Reading text lands nothing, so for that it - // is counted from the start. - var remaining = Timeout - Stopwatch.GetElapsedTime(Volatile.Read(ref progressed)); - if (remaining <= TimeSpan.Zero) + if (leftBehind) { - break; + return false; } - if (task.Wait(remaining)) + publish(); + Volatile.Write(ref progressed, Stopwatch.GetTimestamp()); + } + + landed.TrySetResult(); + return true; + } + + public void LeaveBehind() + { + lock (gate) + { + leftBehind = true; + } + } + } + + /// + /// Waits on calls until each has returned or been left behind, and tells each how it ended as + /// it does, so a side that is done is not held up by one that is not. + /// + /// + /// Starts one more call to wait on, once the first has landed a page, or has returned without + /// one. Never, when the first is left behind before either: what it would start is a PDF, and + /// PDFium is then not free for it. The next turn finds it still to be drawn, and says so. + /// + void Await(IReadOnlyList calls, Func? follow = null) + { + var running = calls.ToList(); + var lead = running.FirstOrDefault(); + while (true) + { + if (follow is not null && + (lead is null || + lead.Landed.IsCompleted || + lead.Task.IsCompleted)) + { + if (follow() is { } followed) + { + running.Add(followed); + } + + follow = null; + } + + if (running.Count == 0) + { + return; + } + + if (running.Find(_ => _.Task.IsCompleted) is { } returned) + { + running.Remove(returned); + returned.Ended(Thrown(returned.Task)); + continue; + } + + // Asked before the clocks are read. A PDF that returns in between has noted when + // before it is counted as gone, so a call is never found out of time against a PDFium + // that was given back that instant. + var pdfiumWasHeld = Volatile.Read(ref pdfiumHeld) > 0; + var (call, remaining) = running + .Select(_ => (Call: _, Remaining: Remaining(_))) + .MinBy(_ => _.Remaining); + if (remaining > TimeSpan.Zero) + { + // Until one of them returns, or the one nearest to running out of time would, or + // the first lands the page another is waiting to be started behind. Any other + // page landing does not end the wait, so how long is left is worked out afresh + // after it. + var wake = running + .Select(_ => _.Task) + .ToList(); + if (follow is not null) { - return null; + wake.Add(lead!.Landed); } + + Task.WaitAny([.. wake], remaining); + continue; + } + + running.Remove(call); + LeaveBehind(call, pdfiumWasHeld); + if (call == lead) + { + follow = null; } } + } + + /// + /// How long a call has left before it is left behind: from the last thing + /// to come of it. For a PDF, from when PDFium was last given back if that is later, since until + /// then it may have been waiting on the call that had it. + /// + TimeSpan Remaining(Call call) + { + var since = call.Progressed; + if (call.Format == DocumentFormat.Pdf) + { + since = Math.Max(since, Volatile.Read(ref pdfiumReleased)); + } + + return Timeout - Stopwatch.GetElapsedTime(since); + } + + /// + /// Why a call that has returned did not finish, or null when it did. + /// + static string? Thrown(Task task) + { + try + { + task.Wait(); + return null; + } catch (AggregateException exception) { return (exception.InnerException ?? exception).Message; } + } + + /// + /// Stops waiting on a call that has gone with nothing coming of it. It is + /// reported as given up on, what it lands from here on is dropped, and it is stopped where its + /// next page lands. + /// + /// Except a PDF that ran out of time while another, left behind before it, had still not + /// returned. The two sides of an entry take turns at PDFium's lock, so when one of them stops + /// inside PDFium the other stops at the lock, and from here both have only stopped landing + /// pages. The one inside is taken to be the one that ran out of time first: the other was + /// still landing a page, or had only just been started, when the first took the lock, and + /// came to it afterwards. So the second is not given up on. It is put back as though it had + /// not been started, to be drawn again once PDFium is free, with nothing recorded against it, + /// since what stopped it was not about it. + /// + /// + void LeaveBehind(Call call, bool pdfiumWasHeld) + { + call.LeaveBehind(); + var pdf = call.Format == DocumentFormat.Pdf; + if (pdf) + { + // Counted first, so a call that returns in between is one the continuation still + // takes off + Interlocked.Increment(ref pdfiumHeld); + } - Interlocked.Increment(ref generation); - if (format == DocumentFormat.Pdf) + call.Task.ContinueWith(_ => Returned(call), TaskScheduler.Default); + + if (pdf && + pdfiumWasHeld && + call.Withdraw is { } withdraw) { - // Set first, so a call that returns in between is one the continuation still clears - pdfiumHeld = true; - task.ContinueWith(Released, TaskScheduler.Default); + withdraw(); + return; } - return $"gave up after {Timeout.TotalSeconds.ToString("0.#", CultureInfo.InvariantCulture)} seconds."; + call.Ended($"gave up after {Timeout.TotalSeconds.ToString("0.#", CultureInfo.InvariantCulture)} seconds."); } /// - /// The call that was left behind has returned, so PDFium is free and PDFs can be read again. + /// A call that was left behind has returned. If it was a PDF, PDFium is free of it, and once + /// every such call has returned PDFs can be read again. /// - void Released(Task abandoned) + void Returned(Call call) { - // Read, so a call that ended by throwing is not left as a fault nothing observed - _ = abandoned.Exception; - pdfiumHeld = false; + // Read, so a call that ended by throwing is not left as a fault nothing observed. One that + // was stopped where its next page landed always ends that way. + _ = call.Task.Exception; + if (call.Format != DocumentFormat.Pdf) + { + return; + } + + // Noted before the count comes down, so whoever finds PDFium free also finds since when + Volatile.Write(ref pdfiumReleased, Stopwatch.GetTimestamp()); + Interlocked.Decrement(ref pdfiumHeld); } /// From 4eb2242832afad43c4f1f143b1468e08d2c9267d Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:23:12 +1000 Subject: [PATCH 47/73] Say that both sides of a document are drawn at once In claude.md, how: a call each with its own clock, why two PDFs are started one behind the other, and that a call cannot be stopped part way through a page rather than not at all. In the viewer's page, what a reader sees of it: the right side's pages beside the left's, and each side given up on by its own two minutes. And the benchmarks among what imports Documents.targets. --- claude.md | 13 ++++++++++++- docs/mdsource/viewer.source.md | 2 +- docs/viewer.md | 2 +- src/DiffEngineViewer.Documents/Documents.targets | 3 ++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/claude.md b/claude.md index 4b748cab8..098a5db9b 100644 --- a/claude.md +++ b/claude.md @@ -264,10 +264,21 @@ is awaited, assigned, returned or passed takes only the call. is not about it. The same goes for a copy that could not be written. Both throw out of `Pump` before anything is marked as started, and `Turn` says why, once, and tries again - the loop never ends on a fault, which used to stop every document until the viewer was restarted. + - Both sides of the entry on screen are drawn at once, a `Call` each with a clock and a + left-behind flag of its own. Drawn one after the other, the right pane was a spinner for every + page of the left. Two Office files take a core each; two PDFs take turns at PDFium's lock, which + is held only while a page is rasterised, so they too finish in about the time of one. Two PDFs + are started one behind the other, the second once the first has landed a page, because blame + is told from whose pages stopped first: when one stops inside PDFium the other stops at the + lock, and the one that ran out of time first is given up on while the other is put back as + not started, with nothing recorded against it. `pdfiumHeld` is a count of PDFs left behind and + not yet returned. A call left behind is stopped where its next page lands, by throwing from + the page callback, which is the one place it can be. - `FileSide.Read` only hashes a document, because it runs on the listener thread a test process waits on. `DocumentWatch` (owned, attached and file modes) does the slow part, for the entry on screen only - never the next one ahead of time, because a call into Morph or PDFium cannot be - stopped, and one drawing ahead was one the reader waited behind when they picked another entry. + stopped part way through a conversion or a page, and one drawing ahead was one the reader + waited behind when they picked another entry. It works from a copy taken under the cache's hash directory, checked against the hash, so nothing holds a lock on the user's file and what is drawn is what the hash says. Text replaces the entry once both sides are read diff --git a/docs/mdsource/viewer.source.md b/docs/mdsource/viewer.source.md index c20075668..206149378 100644 --- a/docs/mdsource/viewer.source.md +++ b/docs/mdsource/viewer.source.md @@ -298,7 +298,7 @@ A document opens at its first page that differs, the way a text comparison opens The status line says what is known about the pair as it becomes known: `reading text` and `drawing` while that happens, which page is showing and which differ, `every page draws the same` when the files differ only where nothing shows, and `documents are identical` when the bytes match. Each pane's header names the page it shows, `received.pdf (page 2 of 5)`, or `(no page 6)` when that side has fewer. -Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: a document is given up on once two minutes pass with nothing coming of it, neither its text nor another page, and a PDF opened while that one is still being read waits for it rather than failing. A copy that could not be taken, because the disk was full or something held the file, is said in the status line and tried again. One that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. +Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. The two sides of a pair are drawn at the same time, so the pages of the right appear beside the pages of the left, and which pages differ is known as they are drawn rather than once both are done. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: each side is given up on once two minutes pass with nothing coming of it, neither its text nor another page, and a PDF opened while that one is still being read, the other side of its own pair included, waits for it rather than failing. A copy that could not be taken, because the disk was full or something held the file, is said in the status line and tried again. One that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. A file that is not the document its extension says is ordinary — a test that failed part way through writing its snapshot, an empty file, an error page saved as a PDF — and is reported rather than drawn. The status line says so once, about the file: `could not read report.received.docx: Not a readable Word document: it is not a zip archive, or was cut short`, or `The file is empty`. Its pane shows what the file is and how large instead of text, its header says `(not drawn)`, and the other side, if it is whole, is still read and drawn. Nothing about it carries over to the next document. diff --git a/docs/viewer.md b/docs/viewer.md index 8fe00da8d..38aca53e3 100644 --- a/docs/viewer.md +++ b/docs/viewer.md @@ -305,7 +305,7 @@ A document opens at its first page that differs, the way a text comparison opens The status line says what is known about the pair as it becomes known: `reading text` and `drawing` while that happens, which page is showing and which differ, `every page draws the same` when the files differ only where nothing shows, and `documents are identical` when the bytes match. Each pane's header names the page it shows, `received.pdf (page 2 of 5)`, or `(no page 6)` when that side has fewer. -Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: a document is given up on once two minutes pass with nothing coming of it, neither its text nor another page, and a PDF opened while that one is still being read waits for it rather than failing. A copy that could not be taken, because the disk was full or something held the file, is said in the status line and tried again. One that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. +Reading and drawing happen on a thread of their own once the window is up, so a long document never holds a test run waiting on the viewer, and never holds the window either. Only the entry on screen is read and drawn: with several documents pending, the rest wait until they are opened, rather than keeping the thread busy with documents that may never be looked at. While a page is still being drawn, a spinner turns where it will appear. The two sides of a pair are drawn at the same time, so the pages of the right appear beside the pages of the left, and which pages differ is known as they are drawn rather than once both are done. Each document is read from a copy the viewer takes, never the file itself, so it cannot hold a lock that stops it being accepted. They run inside the viewer's process: each side is given up on once two minutes pass with nothing coming of it, neither its text nor another page, and a PDF opened while that one is still being read, the other side of its own pair included, waits for it rather than failing. A copy that could not be taken, because the disk was full or something held the file, is said in the status line and tried again. One that crashes PDFium or Skia takes the window with it, and with no tray running, any inline snapshots the window was holding. A file that is not the document its extension says is ordinary — a test that failed part way through writing its snapshot, an empty file, an error page saved as a PDF — and is reported rather than drawn. The status line says so once, about the file: `could not read report.received.docx: Not a readable Word document: it is not a zip archive, or was cut short`, or `The file is empty`. Its pane shows what the file is and how large instead of text, its header says `(not drawn)`, and the other side, if it is whole, is still read and drawn. Nothing about it carries over to the next document. diff --git a/src/DiffEngineViewer.Documents/Documents.targets b/src/DiffEngineViewer.Documents/Documents.targets index c7106ecb8..c6861063f 100644 --- a/src/DiffEngineViewer.Documents/Documents.targets +++ b/src/DiffEngineViewer.Documents/Documents.targets @@ -8,7 +8,8 @@ It is the same switch the Mac and Linux heads already use to keep their own natives out of the bundle. - Imported by each head, by DiffEngineTray and by DiffEngineViewer.Tests. Each says in DocumentsRids + Imported by each head, by DiffEngineTray, by DiffEngineViewer.Tests and by + DiffEngineViewer.Benchmarks. Each says in DocumentsRids which RIDs it ships natives for. The other runtimes folders are left out, which is safe because the running RID is the only one probed: deps.json still naming a folder for another OS costs nothing, while a missing asset for the running one would stop the folder loading. From e658eb5bde1da8f5847e7fb57a8a441e98ee2ac1 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:45:24 +1000 Subject: [PATCH 48/73] Wait for a decode without holding the thread it needs Four ImageCacheTests failed together on CI's windows job, each having waited ten seconds for a decode to be posted back. Nothing in that run touched the WinForms head or its tests. A window's decode runs on the pool. So does every test, in parallel, and nine of these blocked where they stood until the decode posted back: each held a pool thread while waiting for work that needed one. Once every thread the pool had was held that way the work had nowhere to run until the pool grew another, which it does slowly, and on a runner of four cores busy with the other test projects ten seconds went by. The run before it passed with the same project taking 35 seconds, against under ten here, so it was already near. The tests now take what was posted from a channel and await it, which gives the thread back. The limit is a minute, since all it bounds is a test that would otherwise never end. The project runs in 5.5 seconds here where it took 9.5, which is the threads these were holding. --- .../ImageCacheTests.cs | 94 +++++++++++++------ 1 file changed, 66 insertions(+), 28 deletions(-) diff --git a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs index 05e590f02..6a5d18dd9 100644 --- a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs @@ -1,3 +1,5 @@ +using System.Threading.Channels; + /// /// The decode the WinForms head puts under an image pane's rows. /// @@ -77,13 +79,13 @@ public async Task RemembersAFailure() public async Task ADecodeWithSomewhereToPostItIsHandedBack() { var path = Write("posted.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); var loaded = 0; await Assert.That(cache.Get(path, null, () => loaded++)).IsNull(); - await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); - handBack!(); + var handBack = await posted.Take(); + handBack(); await Assert.That(loaded).IsEqualTo(1); await Assert.That(cache.Get(path, null, () => loaded++)!.Width).IsEqualTo(8); @@ -97,15 +99,15 @@ public async Task ADecodeWithSomewhereToPostItIsHandedBack() public async Task ADecodeForAPictureNoLongerOnScreenIsDropped() { var path = Write("left-behind.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); var loaded = 0; cache.Keep([path]); cache.Get(path, null, () => loaded++); - await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); + var handBack = await posted.Take(); cache.Keep([]); - handBack!(); + handBack(); await Assert.That(loaded).IsEqualTo(0); await Assert.That(cache.Composite(path, new(8, 6), (_, size) => new(size.Width, size.Height))).IsNull(); @@ -121,21 +123,21 @@ public async Task ADecodeForAPictureNoLongerOnScreenIsDropped() public async Task APictureThatComesBackAfterItsDecodeWasDroppedIsDecodedAgain() { var path = Write("came-back.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); var loaded = 0; cache.Keep([path]); cache.Get(path, null, () => loaded++); - await Assert.That(posted.TryTake(out var dropped, TimeSpan.FromSeconds(10))).IsTrue(); + var dropped = await posted.Take(); cache.Keep([]); - dropped!(); + dropped(); await Assert.That(cache.Loading(path)).IsFalse(); cache.Keep([path]); await Assert.That(cache.Get(path, null, () => loaded++)).IsNull(); await Assert.That(cache.Loading(path)).IsTrue(); - await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); - handBack!(); + var handBack = await posted.Take(); + handBack(); await Assert.That(loaded).IsEqualTo(1); await Assert.That(cache.Loading(path)).IsFalse(); @@ -150,18 +152,18 @@ public async Task APictureThatComesBackAfterItsDecodeWasDroppedIsDecodedAgain() public async Task APictureBackOnScreenBeforeItsDecodeLandsKeepsThatDecode() { var path = Write("back-in-time.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); var loaded = 0; cache.Keep([path]); cache.Get(path, null, () => loaded++); - await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); + var handBack = await posted.Take(); cache.Keep([]); cache.Keep([path]); // Nothing new is started for it await Assert.That(cache.Get(path, null, () => loaded++)).IsNull(); - handBack!(); + handBack(); await Assert.That(loaded).IsEqualTo(1); await Assert.That(posted.Count).IsEqualTo(0); @@ -199,15 +201,15 @@ public async Task APictureIsComposedOncePerSize() public async Task AComposeWithSomewhereToPostItIsHandedBack() { var path = Write("composed-posted.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); await Assert.That(cache.Get(path, null)).IsNotNull(); var loaded = 0; await Assert.That(cache.Composite(path, new(4, 3), Build, () => loaded++)).IsNull(); await Assert.That(cache.Loading(path)).IsTrue(); - await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); - handBack!(); + var handBack = await posted.Take(); + handBack(); await Assert.That(loaded).IsEqualTo(1); await Assert.That(cache.Loading(path)).IsFalse(); @@ -222,20 +224,20 @@ public async Task AComposeWithSomewhereToPostItIsHandedBack() public async Task AResizeShowsTheLastSizeUntilTheNewOneLands() { var path = Write("resized.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); cache.Get(path, null); cache.Composite(path, new(4, 3), Build, () => { }); - await Assert.That(posted.TryTake(out var first, TimeSpan.FromSeconds(10))).IsTrue(); - first!(); + var first = await posted.Take(); + first(); var small = cache.Composite(path, new(4, 3), Build, () => { }); var meanwhile = cache.Composite(path, new(6, 4), Build, () => { }); await Assert.That(ReferenceEquals(meanwhile, small)).IsTrue(); await Assert.That(cache.Loading(path)).IsFalse(); - await Assert.That(posted.TryTake(out var second, TimeSpan.FromSeconds(10))).IsTrue(); - second!(); + var second = await posted.Take(); + second(); await Assert.That(cache.Composite(path, new(6, 4), Build, () => { })!.Size).IsEqualTo(new(6, 4)); } @@ -248,7 +250,7 @@ public async Task AResizeShowsTheLastSizeUntilTheNewOneLands() public async Task AComposeForAPictureNoLongerOnScreenIsDropped() { var path = Write("composed-left-behind.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); using var reading = new ManualResetEventSlim(); var width = 0; @@ -268,8 +270,8 @@ public async Task AComposeForAPictureNoLongerOnScreenIsDropped() () => loaded++); cache.Keep([]); reading.Set(); - await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); - handBack!(); + var handBack = await posted.Take(); + handBack(); await Assert.That(width).IsEqualTo(8); await Assert.That(loaded).IsEqualTo(0); @@ -284,7 +286,7 @@ public async Task AComposeForAPictureNoLongerOnScreenIsDropped() public async Task AComposeThatFailsIsNotTriedAgain() { var path = Write("uncomposable.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); cache.Get(path, null); var attempts = 0; @@ -295,8 +297,8 @@ public async Task AComposeThatFailsIsNotTriedAgain() }; cache.Composite(path, new(4, 3), failing, () => { }); - await Assert.That(posted.TryTake(out var handBack, TimeSpan.FromSeconds(10))).IsTrue(); - handBack!(); + var handBack = await posted.Take(); + handBack(); await Assert.That(cache.Composite(path, new(4, 3), failing, () => { })).IsNull(); await Assert.That(cache.Loading(path)).IsFalse(); @@ -307,6 +309,42 @@ public async Task AComposeThatFailsIsNotTriedAgain() static Bitmap Build(Image picture, Size size) => new(size.Width, size.Height); + /// + /// What a cache posts back, for a test to take and run: the window's BeginInvoke, as a queue. + /// + /// Waited for without holding a thread. A decode runs on the pool, and so does every test, in + /// parallel. These used to block where they stood until the decode posted back, so each held + /// a pool thread while waiting for work that needed one, and once every thread the pool had + /// was held that way the work had nowhere to run until the pool grew another: on a runner of + /// four cores busy with the other test projects, ten seconds went by with nothing decoded and + /// four of these failed together. A test that awaits gives its thread back. + /// + /// + sealed class Posts + { + readonly Channel posted = Channel.CreateUnbounded(); + + public void Add(Action action) => + posted.Writer.TryWrite(action); + + public int Count => + posted.Reader.Count; + + public async Task Take() + { + // Long, since all it bounds is a test that would otherwise never end + using var timeout = new CancellationTokenSource(TimeSpan.FromMinutes(1)); + try + { + return await posted.Reader.ReadAsync(timeout.Token); + } + catch (OperationCanceledException) + { + throw new TimeoutException("Nothing was posted back within a minute."); + } + } + } + [Test] public async Task MissingFile() { From 290716eb6b7f08866db1b03456e8035b97db82ff Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:41:33 +1000 Subject: [PATCH 49/73] Benchmark InlineStaging.Clear for a passing inline verification Clear runs once per passing inline verification, and what it does first is find every VerifyInline directory under the source project's obj. That is a walk of the whole tree, one directory listing per directory in it, to learn what it nearly always learns: that nothing is staged. The benchmark calls Clear the way Verify does, naming its intermediate directory, against a project in the temp folder whose obj has the shape of Verify.Tests' own: two configurations of five frameworks, 151 directories, ten of them an empty VerifyInline. Once with nothing staged anywhere, and once with five snapshots staged for other call sites. Before, on this machine, with other builds running beside it: | Method | Mean | Error | StdDev | Allocated | |-------------- |---------:|---------:|---------:|----------:| | NothingStaged | 12.69 ms | 2.385 ms | 0.131 ms | 124.17 KB | | OthersStaged | 11.90 ms | 8.477 ms | 0.465 ms | 129.74 KB | Where the project is decides most of that. The walk alone, timed outside the benchmark over a copy of Verify.Tests' obj, is 3.0 ms on the drive the repositories are on and 8.7 ms in the temp folder, which is on the system drive. So a thousand passing inline verifications spend between three and thirteen seconds finding nothing. dotnet run -c Release --project src/DiffEngine.Benchmarks -- --filter "*InlineStaging*" --- .../InlineStagingBenchmarks.cs | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/DiffEngine.Benchmarks/InlineStagingBenchmarks.cs diff --git a/src/DiffEngine.Benchmarks/InlineStagingBenchmarks.cs b/src/DiffEngine.Benchmarks/InlineStagingBenchmarks.cs new file mode 100644 index 000000000..82f33f544 --- /dev/null +++ b/src/DiffEngine.Benchmarks/InlineStagingBenchmarks.cs @@ -0,0 +1,91 @@ +using BenchmarkDotNet.Attributes; + +namespace DiffEngine.Benchmarks; + +// InlineStaging.Clear as a passing inline verification calls it: once each, to take away whatever +// an earlier failing run staged for the call site. Almost always there is nothing to take, so +// what it costs is what it costs to find that out. +// +// The project is a real directory, with an obj shaped like the one a multi-targeted test project +// builds up: two configurations of five frameworks, each with its NuGet, ref and refint folders +// and a VerifyInline with nothing in it. 151 directories in all, which is Verify.Tests' own obj. +[MemoryDiagnoser] +public class InlineStagingBenchmarks +{ + string root = ""; + string source = ""; + string intermediate = ""; + string stagedSource = ""; + string stagedIntermediate = ""; + + [GlobalSetup] + public void Setup() + { + root = Path.Combine(Path.GetTempPath(), $"DiffEngineBenchmarks_{Guid.NewGuid():N}"); + (source, intermediate) = Project(Path.Combine(root, "Empty")); + (stagedSource, stagedIntermediate) = Project(Path.Combine(root, "Staged")); + + // Five snapshots a run with no viewer left behind, none of them for the call site asked + // about, written the way that run writes them + var staging = Path.Combine(stagedIntermediate, InlineStaging.DirectoryName); + for (var index = 0; index < 5; index++) + { + var patch = new InlinePatch(stagedSource, 100 + index, "\"old\"", "new") + { + TestName = $"SampleTests.Other{index}", + MemberName = $"Other{index}", + OriginalValue = "old" + }; + InlinePatchFile.Write(Path.Combine(staging, $"SampleTests.Other{index}.inlinepatch"), patch); + } + } + + [GlobalCleanup] + public void Cleanup() => + Directory.Delete(root, true); + + // Nothing staged anywhere under the project + [Benchmark] + public int NothingStaged() => + InlineStaging.Clear(source, 42, "Sample", intermediate, value: "content"); + + // Other call sites have snapshots staged, and this one has none + [Benchmark] + public int OthersStaged() => + InlineStaging.Clear(stagedSource, 42, "Sample", stagedIntermediate, value: "content"); + + static (string source, string intermediate) Project(string directory) + { + Directory.CreateDirectory(directory); + File.WriteAllText(Path.Combine(directory, "Sample.csproj"), ""); + var source = Path.Combine(directory, "SampleTests.cs"); + File.WriteAllText(source, "// sample"); + + var obj = Path.Combine(directory, "obj"); + foreach (var configuration in new[] {"Debug", "Release"}) + { + foreach (var framework in new[] {"net11.0", "net10.0", "net9.0", "net8.0", "net48"}) + { + var modern = framework != "net48"; + var intermediate = Path.Combine(obj, configuration, framework); + Directory.CreateDirectory(Path.Combine(intermediate, "VerifyReceived")); + Directory.CreateDirectory(Path.Combine(intermediate, InlineStaging.DirectoryName)); + if (modern) + { + Directory.CreateDirectory(Path.Combine(intermediate, "ref")); + Directory.CreateDirectory(Path.Combine(intermediate, "refint")); + } + + // What restores leave behind: a folder per version of a package that ships targets + string[] versions = modern ? ["1.0.174", "1.0.176", "1.0.180", "1.0.181"] : ["1.0.180", "1.0.181"]; + foreach (var version in versions) + { + Directory.CreateDirectory(Path.Combine(intermediate, "NuGet", "629807350F552F76", "ProjectDefaults", version, "ProjectDefaults")); + } + } + } + + // What a Release run of one framework stages under, and names when it clears + return (source, Path.Combine(obj, "Release", "net10.0")); + } +} From 4553106c6b514a540e9a019d63dfec2055e1b5a8 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:50:18 +1000 Subject: [PATCH 50/73] Keep the list of staging directories between clears rather than walking obj for each InlineStaging.Clear runs once per passing inline verification and began by listing every directory under the project's obj to find the VerifyInline ones. The answer was thrown away and worked out again for the next verification, a few milliseconds later. The list is now kept per project, on the two conditions that are why it was not kept before. Nothing this process has staged since. A run that finds no queue owner stages as it goes, and the call site it stages is one it will be asked to clear, so a kept "nothing here" must not outlive a write. Everything that writes a trio, InlinePatchFile.Write and Persist, counts itself, and a list taken before the last of them is not answered from. The count is read before the walk, so a write that lands during one is still seen by the next clear. And for a second at most, because another process can stage under the same obj and nothing tells this one: another framework of the same run, or a queue owner writing its queue out as it exits. A directory it creates is found by the first clear after that second. Only the list is kept, so a staging directory that already existed is read on every clear as it was, by its write time, and only one that did not exist can be late. The directory the caller names is still asked for every time. After, same machine, same conditions: | Method | Mean | Error | StdDev | Gen0 | Allocated | |-------------- |---------:|---------:|---------:|-------:|----------:| | NothingStaged | 418.7 us | 707.0 us | 38.75 us | - | 3.5 KB | | OthersStaged | 392.1 us | 669.9 us | 36.72 us | 0.4883 | 8.76 KB | From 12.69 ms and 124 KB. What is left is one write time per staging directory, eleven of them in this tree, which is the check that keeps a known directory's contents current. Two tests beside the one that already pinned the Persist half: what this process stages through InlinePatchFile.Write is found by its next clear, and what is written with nothing here involved is found once the kept list has had its life. Each of the three fails with its condition taken out, checked in a copy of the tree. --- src/DiffEngine.Tests/InlineStagingTests.cs | 63 ++++++++++++++++ src/DiffEngine/Inline/InlinePatchFile.cs | 3 + src/DiffEngine/Inline/InlineStaging.cs | 86 +++++++++++++++++++--- 3 files changed, 142 insertions(+), 10 deletions(-) diff --git a/src/DiffEngine.Tests/InlineStagingTests.cs b/src/DiffEngine.Tests/InlineStagingTests.cs index c50d0c43b..f3e1e98b4 100644 --- a/src/DiffEngine.Tests/InlineStagingTests.cs +++ b/src/DiffEngine.Tests/InlineStagingTests.cs @@ -372,6 +372,55 @@ public async Task ClearFindsStagingCreatedAfterAnEarlierLook() await Assert.That(project.StagedFiles()).IsEmpty(); } + /// + /// The same for what a test run stages for itself, which does not go through Persist. The walk + /// for staging directories is kept between clears, and a write through InlinePatchFile is one + /// of the two things that say it no longer stands. + /// + [Test] + public async Task ClearFindsWhatThisProcessStagedAfterAnEarlierLook() + { + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + + await Assert.That(InlineStaging.Clear(source, 42, null)).IsEqualTo(0); + + var patchFile = project.Stage("ThisFramework", Patch(source, "content")); + + await Assert.That(InlineStaging.Clear(source, 42, null)).IsEqualTo(1); + await Assert.That(File.Exists(patchFile)).IsFalse(); + } + + /// + /// Another process can stage under the same obj, and nothing tells this one that it has: a + /// second framework of the same run, or a queue owner writing its queue out as it exits. A + /// directory it creates is found once the walk this process kept has had its life, which is + /// why that life is short. + /// + [Test] + public async Task ClearFindsWhatAnotherProcessStagedOnceTheLookIsStale() + { + var previous = InlineStaging.RecheckStagingAfter; + using var project = new TempProject(); + var source = project.Source("SampleTests.cs"); + try + { + await Assert.That(InlineStaging.Clear(source, 42, null)).IsEqualTo(0); + + var patchFile = project.StageFromOutside("OtherProcess", Patch(source, "content")); + + // No life at all, which is every walk stale. Other tests may be clearing while this is + // set, and all it changes for them is that they walk too + InlineStaging.RecheckStagingAfter = TimeSpan.Zero; + await Assert.That(InlineStaging.Clear(source, 42, null)).IsEqualTo(1); + await Assert.That(File.Exists(patchFile)).IsFalse(); + } + finally + { + InlineStaging.RecheckStagingAfter = previous; + } + } + [Test] public async Task ClearLeavesAnotherSourceFileAlone() { @@ -470,6 +519,20 @@ public string Stage(string name, InlinePatch patch) return path; } + /// + /// The same file written with nothing of InlineStaging's or InlinePatchFile's involved in + /// the write, which is all this process ever knows of what another one staged. In a + /// framework's own intermediate directory, where a test run stages. + /// + public string StageFromOutside(string name, InlinePatch patch) + { + var staging = Path.Combine(directory, "obj", "Debug", "net0.0", InlineStaging.DirectoryName); + Directory.CreateDirectory(staging); + var path = Path.Combine(staging, $"{name}.inlinepatch"); + File.WriteAllText(path, InlinePatchFile.Build(patch)); + return path; + } + public IReadOnlyList StagedFiles() { var staging = Path.Combine(directory, "obj", InlineStaging.DirectoryName); diff --git a/src/DiffEngine/Inline/InlinePatchFile.cs b/src/DiffEngine/Inline/InlinePatchFile.cs index e30687928..33dfcfd36 100644 --- a/src/DiffEngine/Inline/InlinePatchFile.cs +++ b/src/DiffEngine/Inline/InlinePatchFile.cs @@ -27,6 +27,9 @@ public static void Write(string path, InlinePatch patch) } File.WriteAllText(path, Build(patch, patch.Framework ?? RuntimeMoniker.Current), new UTF8Encoding(false)); + // The directory may be one no clear has listed yet, and the next clear this process makes + // has to find what is now in it + InlineStaging.Staged(); } /// diff --git a/src/DiffEngine/Inline/InlineStaging.cs b/src/DiffEngine/Inline/InlineStaging.cs index 3747d5bc4..2a30a2f35 100644 --- a/src/DiffEngine/Inline/InlineStaging.cs +++ b/src/DiffEngine/Inline/InlineStaging.cs @@ -338,13 +338,7 @@ static IEnumerable StagingDirectories(string sourceFile, string? extraDi yield break; } - var obj = Path.Combine(project, "obj"); - if (!Directory.Exists(obj)) - { - yield break; - } - - foreach (var directory in FindStaging(obj, 0)) + foreach (var directory in StagingUnder(project)) { if (seen.Add(directory)) { @@ -353,6 +347,72 @@ static IEnumerable StagingDirectories(string sourceFile, string? extraDi } } + /// + /// The VerifyInline directories under a project's obj, from the last walk of it + /// while that walk still stands. + /// + /// runs once per + /// verification, and the walk is a directory listing for every directory in the tree: three + /// milliseconds for an obj of a hundred and fifty, and several times that on a drive where a + /// listing is slower, to find what it found for the verification before. So the walk is kept, + /// on the two conditions that are why it used not to be. + /// + /// + /// Nothing this process has staged since. A run that finds no queue owner stages as it goes, + /// and the call site it stages is one it will be asked to clear, so a walk taken before the + /// last thing this process wrote is never answered from: see . + /// + /// + /// And not for long, because another process can stage under the same obj at any time - the + /// other frameworks of a multi-targeted run, or a queue owner writing its queue out as it + /// exits - and nothing tells this one when it does. A directory one of them creates is found + /// by the first clear after . Only the list of directories + /// is kept, so what is late is a staging directory that did not exist: one already known is + /// read on every clear, as it was. + /// + /// + static string[] StagingUnder(string project) + { + // Read before the walk rather than after it, so a write that lands while the walk is + // under way leaves a count the next clear does not match + var writes = Volatile.Read(ref stagingWrites); + if (stagingUnder.TryGetValue(project, out var kept) && + kept.Writes == writes && + Since(kept.At) < RecheckStagingAfter) + { + return kept.Directories; + } + + var obj = Path.Combine(project, "obj"); + var directories = Directory.Exists(obj) ? FindStaging(obj, 0).ToArray() : []; + stagingUnder[project] = (Stopwatch.GetTimestamp(), writes, directories); + return directories; + } + + static ConcurrentDictionary stagingUnder = + new(StringComparer.OrdinalIgnoreCase); + + /// + /// How long a walk for staging directories is answered from, which is how long a directory + /// another process creates can go unseen by a clear. Short for that reason, and long enough + /// for what it is for: a run making hundreds of clears a second walks once in that second + /// rather than hundreds of times. + /// + internal static TimeSpan RecheckStagingAfter { get; set; } = TimeSpan.FromSeconds(1); + + static int stagingWrites; + + /// + /// Says this process has just staged something, so no walk taken before now is answered from. + /// Called by everything that writes a trio: here, and + /// , which is what a test run stages through. + /// + internal static void Staged() => + Interlocked.Increment(ref stagingWrites); + + static TimeSpan Since(long timestamp) => + TimeSpan.FromSeconds((Stopwatch.GetTimestamp() - timestamp) / (double) Stopwatch.Frequency); + // An intermediate directory sits a handful of levels below the project it belongs to, so the // walk is bounded rather than open ended, the same way ReceivedMaps bounds its own. const int maxDepth = 8; @@ -456,6 +516,10 @@ or ArgumentException { return false; } + finally + { + Staged(); + } } /// @@ -541,9 +605,11 @@ static string Truncate(string value, int bytes, int characters) /// on every one of them, including the overwhelmingly common case where nothing is staged and /// the answer is thrown away. /// - /// Only this half is cached. Which project a source file belongs to cannot change while a run - /// is going, whereas the staging directories under it can: a run that finds no queue owner - /// creates one as it goes, and a cached "nothing here" would then miss what it wrote. + /// Only this half is kept for good. Which project a source file belongs to cannot change while + /// a run is going, whereas the staging directories under it can: a run that finds no queue + /// owner creates one as it goes, and a "nothing here" kept across that would miss what it + /// wrote. That half is , which keeps its answer only until this + /// process next stages something, and briefly even then. /// /// static ConcurrentDictionary projectDirectories = From 0e6db871d3e8920bb04b159469738f2a924b4680 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:53:22 +1000 Subject: [PATCH 51/73] Benchmark finding out that nothing owns the viewer port With no tray and no viewer open, which is the ordinary state of a machine between failures, everything ViewerClient does ends in a connect to a port nobody is listening on. Windows does not refuse that at once: the connect runs for two seconds, or for as long as the caller is prepared to wait. Five ways of meeting it: the launch gate's probe, the first telling send of a process in its sync and async forms, a whole gated call with nothing to launch, and a host asking for the queue. The memory of an unowned port is forgotten before each first send, since that memory is what stands between the first and every later one. The port is one the benchmark binds and never listens on. Nothing answers on it, a connect to it is refused exactly as one to a free port is (2,023 ms against 2,040 ms here), and nothing else can bind it while the run lasts. Never 3493. Before, on this machine, with other builds running beside it: | Method | Mean | Error | StdDev | Allocated | |----------------------------- |-----------:|----------:|---------:|----------:| | Probe | 512.1 ms | 234.38 ms | 12.85 ms | 1.53 KB | | FirstTellingSend | 2,030.8 ms | 119.79 ms | 6.57 ms | 4.29 KB | | FirstTellingSendAsync | 2,031.1 ms | 9.02 ms | 0.49 ms | 6.52 KB | | GatedCallWithNothingToLaunch | 506.0 ms | 46.67 ms | 2.56 ms | 4.26 KB | | Ask | 506.9 ms | 79.65 ms | 4.37 ms | 1.48 KB | There is no method for a send with an owner present, and that is on purpose. Each one is a real connection that leaves its port in TIME_WAIT, the dynamic range here is 16,384 ports, and a benchmark at a third of a millisecond a send makes more connections than that. Timed by hand over three hundred sends, it is 0.28 ms and 6.4 KB each. dotnet run -c Release --project src/DiffEngine.Benchmarks -- --filter "*UnownedPort*" --- .../UnownedPortBenchmarks.cs | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/DiffEngine.Benchmarks/UnownedPortBenchmarks.cs diff --git a/src/DiffEngine.Benchmarks/UnownedPortBenchmarks.cs b/src/DiffEngine.Benchmarks/UnownedPortBenchmarks.cs new file mode 100644 index 000000000..99a7e7cd2 --- /dev/null +++ b/src/DiffEngine.Benchmarks/UnownedPortBenchmarks.cs @@ -0,0 +1,83 @@ +using System.Net; +using System.Net.Sockets; +using BenchmarkDotNet.Attributes; + +namespace DiffEngine.Benchmarks; + +// What it costs to learn that nothing owns the viewer port, which is the ordinary state of a +// machine with no tray: no viewer is open until a snapshot fails. Windows does not refuse a +// loopback connection to a closed port at once, so every one of these was a wait. +// +// Never the real port, which a tray on the machine running this owns. The port is one this +// process binds and does not listen on: nothing answers on it, as nothing answers on a port that +// is free, and nothing else can take it while the benchmark runs, which a port found free and let +// go cannot promise. The variable is pointed at it as well, so that nothing here could reach a +// live owner by leaving a port out. +[MemoryDiagnoser] +public class UnownedPortBenchmarks +{ + static readonly ViewerMessage settle = new(ViewerVerb.Settle, InlineKey.For("Tests.cs", 1)); + static readonly ViewerMessage list = new(ViewerVerb.List); + + Socket holder = null!; + int port; + // Null when the variable was not set, which is what putting it back has to restore + string previousPort = null!; + + [GlobalSetup] + public void Setup() + { + holder = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) + { + ExclusiveAddressUse = true + }; + holder.Bind(new IPEndPoint(IPAddress.Loopback, 0)); + port = ((IPEndPoint) holder.LocalEndPoint!).Port; + previousPort = Environment.GetEnvironmentVariable(ViewerClient.PortVariable); + Environment.SetEnvironmentVariable(ViewerClient.PortVariable, port.ToString()); + } + + [GlobalCleanup] + public void Cleanup() + { + Environment.SetEnvironmentVariable(ViewerClient.PortVariable, previousPort); + holder.Dispose(); + } + + // The launch gate's question: asked before it starts a viewer, and on every poll while the + // one it started is binding + [Benchmark] + public bool Probe() => + ViewerClient.IsOwned(port); + + // The first settle, move or delete of a test process, with nothing remembered about the port + [Benchmark] + public bool FirstTellingSend() + { + ViewerClient.ForgetUnowned(); + return ViewerClient.TrySend(settle, out _, port, skipIfUnowned: true); + } + + // The same from AddInlineAsync, whose first send is the async one + [Benchmark] + public async Task FirstTellingSendAsync() + { + ViewerClient.ForgetUnowned(); + return await ViewerClient.SendAsync(settle, CancellationToken.None, port, skipIfUnowned: true) == SendOutcome.Accepted; + } + + // A pending file or a failing snapshot with nothing owning the queue and no viewer that can + // be started. The gate is held for all of it, so every other caller waits this long too + [Benchmark] + public bool GatedCallWithNothingToLaunch() => + ViewerLaunchGate.Launch( + retry: () => false, + launch: () => null, + isOwned: () => ViewerClient.IsOwned(port), + canLaunch: () => true) == ViewerLaunchOutcome.Launched; + + // A host or a review surface asking for the queue, which is never answered from memory + [Benchmark] + public bool Ask() => + ViewerClient.TrySend(list, out _, port, ViewerClient.ShortTimeout); +} From d9813be15bb15b27b9bc1e26019bf414a9901fe2 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:09:19 +1000 Subject: [PATCH 52/73] Ask the listener table before connecting to a viewer port nobody may hold A loopback connect to a port with no listener is not refused at once on Windows: it runs for two seconds, or for as long as the caller waits. The memory of an unowned port spared a test process every telling send after its first, and nothing spared it the first, or the launch gate's probe, or a host asking for the queue. So the first settle of every test process blocked for two seconds, and a gated call with nothing to launch held the gate for half a second, as did each poll while a viewer it had started was still binding. ViewerClient now asks the operating system first. With no listener on the port there is nobody to connect to, and it says so without trying. A listener there, or a table that cannot be read, leaves the connect to answer as before, so the table is only ever a way of not waiting. PiperClient already asked the same question of the tray's port, and the two now share ListenerTable. Three things about how it is asked. By port alone. A listener on an address a loopback connect does not reach costs the connect that would have been made anyway, where a rule about addresses that was wrong would cost a listener that was there. Only on Windows. Elsewhere the refusal is immediate, so the connect is the cheaper question and the one that cannot be wrong. Not for a port that accepted a connection in the last second. Reading the table means reading every connection the machine has, and each settle leaves one behind in TIME_WAIT for two minutes: timed apart from the benchmark, a read is 0.45 ms with 86 connections, 1.6 ms with 590, 4.0 ms with 1,595 and 7.9 ms with 3,102. Asked before every send, a green run with a tray answering would have paid more for each settle than for the one before it. As it is the first send to a port asks, and each connection that succeeds renews the second. A listener that binds just after the table was read is missed, as it was by a connect a moment early, and found the same way: nothing that asks is answered from the memory, so the gate's next poll reads the table again. The probe still records what it found, as it did. After, same machine: | Method | Mean | Error | StdDev | Gen0 | Allocated | |----------------------------- |---------:|-----------:|---------:|-------:|----------:| | Probe | 829.2 us | 1,165.2 us | 63.87 us | 1.9531 | 46.95 KB | | FirstTellingSend | 778.1 us | 188.6 us | 10.34 us | 1.9531 | 46.02 KB | | FirstTellingSendAsync | 648.1 us | 354.1 us | 19.41 us | 1.9531 | 45.97 KB | | GatedCallWithNothingToLaunch | 750.6 us | 813.0 us | 44.56 us | 1.9531 | 45.73 KB | | Ask | 723.2 us | 147.1 us | 8.06 us | 1.9531 | 45.84 KB | From 506 to 2,031 ms. Each is one read of the table and little else, so it moves with the machine: there were two to four hundred connections open during this run, and an earlier one with a thousand gave 2 ms and 190 KB. With an owner present nothing changed: 0.31 ms a send before and after, timed side by side over three hundred sends each, and 48 bytes more. Tests: a telling send to a free port returns in under a second, sync and async; an unreadable table leaves the connect to answer, for an owner and for nobody; a port that just answered is not looked up again, and one that has been quiet is. AConnectGivenUpOnIsObserved holds the table off its port, so that there is still a connect to give up on. Each new test fails with the piece it is about taken out, checked in a copy of the tree. --- .../ViewerClientUnownedTests.cs | 141 ++++++++++++++++++ src/DiffEngine.Tests/ViewerProtocolTests.cs | 8 + src/DiffEngine/Protocol/ListenerTable.cs | 63 ++++++++ src/DiffEngine/Protocol/ViewerClient.cs | 135 ++++++++++++----- src/DiffEngine/Tray/PiperClient.cs | 23 +-- 5 files changed, 310 insertions(+), 60 deletions(-) create mode 100644 src/DiffEngine/Protocol/ListenerTable.cs diff --git a/src/DiffEngine.Tests/ViewerClientUnownedTests.cs b/src/DiffEngine.Tests/ViewerClientUnownedTests.cs index 378ef542a..8aa105661 100644 --- a/src/DiffEngine.Tests/ViewerClientUnownedTests.cs +++ b/src/DiffEngine.Tests/ViewerClientUnownedTests.cs @@ -157,6 +157,147 @@ public async Task AskingIsTheDefault() await Assert.That(owner.Heard.Count).IsEqualTo(2); } + /// + /// The first telling send of a process meets the refusal with nothing remembered, and paid for + /// it: two seconds, once per test process, and again each time the memory ran out. The + /// operating system knows nobody is listening without anything being connected, so where that + /// refusal is slow it is asked first. + /// + /// A bound of half what the connect takes to be refused, around something that takes well + /// under a millisecond. + /// + /// + [Test] + [RunOn(TUnit.Core.Enums.OS.Windows)] + public async Task APortNobodyHoldsIsNotWaitedOn() + { + var port = FreePort(); + + var elapsed = Stopwatch.StartNew(); + var sent = ViewerClient.TrySend(settle, out _, port, skipIfUnowned: true); + elapsed.Stop(); + + await Assert.That(sent).IsFalse(); + await Assert.That(elapsed.Elapsed).IsLessThan(TimeSpan.FromSeconds(1)); + await Assert.That(ViewerClient.FoundUnowned(port)).IsTrue(); + } + + /// + [Test] + [RunOn(TUnit.Core.Enums.OS.Windows)] + public async Task APortNobodyHoldsIsNotWaitedOnAsync() + { + var port = FreePort(); + + var elapsed = Stopwatch.StartNew(); + var outcome = await ViewerClient.SendAsync(settle, Cancel.None, port, skipIfUnowned: true); + elapsed.Stop(); + + await Assert.That(outcome).IsEqualTo(SendOutcome.NoOwner); + await Assert.That(elapsed.Elapsed).IsLessThan(TimeSpan.FromSeconds(1)); + await Assert.That(ViewerClient.FoundUnowned(port)).IsTrue(); + } + + /// + /// The table is a way of not waiting, never the authority. Where it cannot be read the + /// connect answers, as it did before anything asked the table: an owner is still found, and + /// a port with nobody on it is still reported that way. + /// + [Test] + public async Task ATableThatCannotBeReadLeavesTheConnectToAnswer() + { + using var owner = new Owner(); + var dead = FreePort(); + using var unreadable = new Lookup(owner.Port, dead) + { + Unreadable = true + }; + + await Assert.That(ViewerClient.IsOwned(owner.Port)).IsTrue(); + await Assert.That(ViewerClient.TrySend(settle, out _, owner.Port, skipIfUnowned: true)).IsTrue(); + await Assert.That(ViewerClient.IsOwned(dead)).IsFalse(); + } + + /// + /// Reading the table costs more than the connect it stands in front of, and a green run with a + /// tray answering settles thousands of times. So a port that accepted a connection a moment + /// ago is connected to again without asking, and only one that has been quiet is looked up. + /// + [Test] + [RunOn(TUnit.Core.Enums.OS.Windows)] + public async Task AnOwnerThatJustAnsweredIsNotLookedUpAgain() + { + var trustOwnerFor = ViewerClient.TrustOwnerFor; + using var owner = new Owner(); + using var lookup = new Lookup(owner.Port); + try + { + // Long enough that nothing this machine is doing can run it out between two sends + ViewerClient.TrustOwnerFor = TimeSpan.FromMinutes(1); + + // Nothing known about the port yet, so this one asks + await Assert.That(ViewerClient.TrySend(settle, out _, owner.Port, skipIfUnowned: true)).IsTrue(); + for (var index = 0; index < 3; index++) + { + await Assert.That(ViewerClient.TrySend(settle, out _, owner.Port, skipIfUnowned: true)).IsTrue(); + } + + await Assert.That(ViewerClient.IsOwned(owner.Port)).IsTrue(); + await Assert.That(lookup.Asked).IsEqualTo(1); + + ViewerClient.TrustOwnerFor = TimeSpan.Zero; + await Assert.That(ViewerClient.TrySend(settle, out _, owner.Port, skipIfUnowned: true)).IsTrue(); + await Assert.That(lookup.Asked).IsEqualTo(2); + await Assert.That(owner.Heard.Count).IsEqualTo(5); + } + finally + { + ViewerClient.TrustOwnerFor = trustOwnerFor; + } + } + + /// + /// Stands in front of the listener table for the ports a test names, counting how often each + /// was asked about and, when told to, failing the way a table that cannot be read does. Every + /// other port goes through untouched, since the tests beside this one are asking about theirs + /// at the same time. + /// + sealed class Lookup : IDisposable + { + readonly Func previous = ListenerTable.Lookup; + readonly int[] ports; + int asked; + + public Lookup(params int[] ports) + { + this.ports = ports; + ListenerTable.Lookup = Answer; + } + + public bool Unreadable { get; init; } + + public int Asked => Volatile.Read(ref asked); + + bool Answer(int port) + { + if (!ports.Contains(port)) + { + return previous(port); + } + + Interlocked.Increment(ref asked); + if (Unreadable) + { + throw new System.Net.NetworkInformation.NetworkInformationException(); + } + + return previous(port); + } + + public void Dispose() => + ListenerTable.Lookup = previous; + } + /// /// A port that is free right now, found by binding and releasing it. /// diff --git a/src/DiffEngine.Tests/ViewerProtocolTests.cs b/src/DiffEngine.Tests/ViewerProtocolTests.cs index c9cc4ade5..6d9c556de 100644 --- a/src/DiffEngine.Tests/ViewerProtocolTests.cs +++ b/src/DiffEngine.Tests/ViewerProtocolTests.cs @@ -1112,6 +1112,11 @@ await Assert.That(await ViewerClient.SendAsync(new(ViewerVerb.List), default, po /// listening on - Windows lets it hang, others refuse it, both only after the wait has returned. /// Serialised with the other tests in this class, since the event is process wide. /// + /// + /// The listener table is made to say the port may be held, which is what it says when it + /// cannot be read. Left to answer, it rules the port out on Windows before anything connects, + /// and then there is no connect to give up on. + /// /// [Test] [NotInParallel] @@ -1131,6 +1136,8 @@ void Record(object? sender, UnobservedTaskExceptionEventArgs args) } } + var lookup = ListenerTable.Lookup; + ListenerTable.Lookup = _ => _ == port || lookup(_); TaskScheduler.UnobservedTaskException += Record; try { @@ -1151,6 +1158,7 @@ void Record(object? sender, UnobservedTaskExceptionEventArgs args) finally { TaskScheduler.UnobservedTaskException -= Record; + ListenerTable.Lookup = lookup; ViewerClient.ForgetUnowned(); } diff --git a/src/DiffEngine/Protocol/ListenerTable.cs b/src/DiffEngine/Protocol/ListenerTable.cs new file mode 100644 index 000000000..557b9bb5f --- /dev/null +++ b/src/DiffEngine/Protocol/ListenerTable.cs @@ -0,0 +1,63 @@ +using System.Net.NetworkInformation; + +namespace DiffEngine; + +/// +/// The operating system's table of listening TCP sockets, asked whether a port is in it. +/// +/// For a caller about to connect to a local port that may have nobody on it. Such a connect is not +/// refused at once everywhere: where the reset a closed port answers with is dropped, as Windows +/// Firewall's stealth mode drops it, the connect runs for two seconds. Reading the table takes a +/// third of a millisecond on a machine with a few dozen connections open. It is filtered out of +/// every connection the machine has, so that grows with them, and a caller with a cheaper way of +/// knowing somebody is there should use it first. +/// +/// +/// By port alone, whichever address the listener is bound to. The table is only ever believed +/// when it says nobody is there, so a listener on some address a loopback connect does not reach - +/// the other family's loopback, one interface - costs the caller the connect it would have made +/// anyway. A rule about addresses would have to be right for every family and socket option, and +/// where it was wrong it would cost a listener that was there: one bound to every address in dual +/// mode is listed on Windows under both families, and nothing says another platform lists it so. +/// +/// +static class ListenerTable +{ + /// + /// False only when the table was read and has no listener on . A table + /// that cannot be read says true, whatever stopped it being read, which leaves the connect to + /// decide as it did before anything asked here. + /// + public static bool IsHeld(int port) + { + try + { + return Lookup(port); + } + catch (Exception) + { + return true; + } + } + + /// + /// What asks. Replaced by the tests, for the two things about the table + /// that cannot be arranged or seen from outside: that it could not be read, and that it was + /// not asked at all. Given the port, so a test can answer for its own and pass every other + /// through: the tests beside it are asking about theirs at the same time. + /// + internal static Func Lookup { get; set; } = Listed; + + static bool Listed(int port) + { + foreach (var listener in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()) + { + if (listener.Port == port) + { + return true; + } + } + + return false; + } +} diff --git a/src/DiffEngine/Protocol/ViewerClient.cs b/src/DiffEngine/Protocol/ViewerClient.cs index aec26203a..1b604377d 100644 --- a/src/DiffEngine/Protocol/ViewerClient.cs +++ b/src/DiffEngine/Protocol/ViewerClient.cs @@ -94,58 +94,92 @@ public static int Port /// connecting to nobody, and the same run took under a second with a tray answering. /// /// - /// Long, because a recheck on such a machine costs those two seconds again and buys almost - /// nothing. What the memory can delay is only a message the owner did not have to receive: - /// an entry to settle in a queue that did not exist when the test failed, or a move to track - /// in a tray that was not there to track it. Anything that has to reach an owner - a patch, a - /// delete, a pair - goes through the launch gate, whose probe always - /// connects and corrects the memory with what it finds. Not the life of the process only for - /// a long lived consumer that is not a test host, launching diff tools all day, where a tray - /// started later would otherwise never see its moves until a restart. + /// Long, because a recheck buys almost nothing and is not free: those two seconds again where + /// it has to connect, and a read of the listener table where the operating system can be asked + /// instead (). What the memory can delay is only a message the + /// owner did not have to receive: an entry to settle in a queue that did not exist when the + /// test failed, or a move to track in a tray that was not there to track it. Anything that has + /// to reach an owner - a patch, a delete, a pair - goes through the launch gate, whose + /// probe always asks and corrects the memory with what it finds. Not the + /// life of the process only for a long lived consumer that is not a test host, launching diff + /// tools all day, where a tray started later would otherwise never see its moves until a + /// restart. /// /// internal static TimeSpan RecheckUnownedAfter { get; set; } = TimeSpan.FromMinutes(10); /// - /// When each port was last found unowned, as a timestamp. Per port - /// because tests talk to ephemeral ports of their own, in parallel, and what happened on + /// How long a port that accepted a connection is connected to again without first asking the + /// operating system whether anyone is there: see . + /// + /// For a run of settles to an owner that is there, which is a connection every third of a + /// millisecond. Each renews this, so none of them reads the listener table, which costs more + /// than the connect does. Short, because a send that comes a while after the last is the one + /// most likely to find its owner gone, and asking is what spares that send its two seconds. + /// + /// + internal static TimeSpan TrustOwnerFor { get; set; } = TimeSpan.FromSeconds(1); + + /// + /// What was last found on each port, and when, as a timestamp. Per + /// port because tests talk to ephemeral ports of their own, in parallel, and what happened on /// those says nothing about the one live port on a developer machine. /// - static ConcurrentDictionary unownedAt = new(); + static ConcurrentDictionary lastFound = new(); - static bool RecentlyUnowned(int port) - { - if (!unownedAt.TryGetValue(port, out var at)) - { - return false; - } + static bool RecentlyUnowned(int port) => + lastFound.TryGetValue(port, out var found) && + !found.Owned && + Since(found.At) < RecheckUnownedAfter; - var elapsed = TimeSpan.FromSeconds((Stopwatch.GetTimestamp() - at) / (double) Stopwatch.Frequency); - return elapsed < RecheckUnownedAfter; - } + static bool AnsweredLately(int port) => + lastFound.TryGetValue(port, out var found) && + found.Owned && + Since(found.At) < TrustOwnerFor; + + static TimeSpan Since(long timestamp) => + TimeSpan.FromSeconds((Stopwatch.GetTimestamp() - timestamp) / (double) Stopwatch.Frequency); /// - /// What a connect found, reported by every connect here whether or not its caller consulted - /// the memory first. An owner found by a probe or a listing is one every later send can talk - /// to, and a refusal met by any of them is what the memory is for. + /// What was found on a port, reported by everything here that looks whether or not its caller + /// consulted the memory first. An owner found by a probe or a listing is one every later send + /// can talk to, and a port any of them found empty is what the memory is for. /// - static void Found(int port, bool owned) - { - if (owned) - { - unownedAt.TryRemove(port, out _); - } - else - { - unownedAt[port] = Stopwatch.GetTimestamp(); - } - } + static void Found(int port, bool owned) => + lastFound[port] = (owned, Stopwatch.GetTimestamp()); + + /// + /// Whether a connect to would only be a wait to be refused: the + /// operating system has no listener on the port, so nobody is there to accept one. + /// + /// Asked in front of every connect here. The refusal is what was expensive: two seconds for a + /// send, and half a second each time the launch gate probed, which with nothing to launch was + /// half a second with the gate held, and again for every poll while a viewer it had started + /// was still binding. The memory above spares a process all but the first of its telling + /// sends, and nothing spared it that one, or any probe, or a host that asks. + /// + /// + /// A listener that binds a moment after the table was read is missed, exactly as it is by a + /// connect a moment early, and is found the same way: nothing that asks is answered from the + /// memory, so the gate's next poll reads the table again. + /// + /// + /// Only on Windows, which is where the refusal is slow. Elsewhere it arrives at once, so the + /// connect is the cheaper question as well as the one whose answer cannot be wrong. And not + /// for a port that accepted a connection within , where the table + /// would cost more than the connect it stands in front of. + /// + /// + static bool NothingListening(int port) => + RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && + !AnsweredLately(port) && + !ListenerTable.IsHeld(port); /// - /// Whether the port stands as unowned: nothing was listening at the last connect, or what - /// answered was not a viewer. For a caller whose exchange has just failed and has to tell an - /// owner that did not answer from there being none, which a failed exchange reports the same - /// way. The exchange is what makes this current, since every connect records what it found. + /// Whether the port stands as unowned: nothing was listening when it was last looked at, or + /// what answered was not a viewer. For a caller whose exchange has just failed and has to tell + /// an owner that did not answer from there being none, which a failed exchange reports the + /// same way. The exchange is what makes this current, since every one records what it found. /// public static bool FoundUnowned(int? port = null) => RecentlyUnowned(port ?? Port); @@ -155,7 +189,7 @@ public static bool FoundUnowned(int? port = null) => /// internal static void ForgetUnowned() { - unownedAt.Clear(); + lastFound.Clear(); reportedForeign.Clear(); } @@ -212,7 +246,7 @@ static void NotAViewer(int port, string reply) /// started a viewer and wants to know when it can be talked to, which a send cannot answer /// without also handing over work. /// - /// Always connects, and what it finds corrects the memory behind + /// Always asks, and what it finds corrects the memory behind /// : this is the probe the launch gate runs once a viewer /// is started, and the sends queued behind that gate have to reach the viewer it found. /// @@ -220,6 +254,12 @@ static void NotAViewer(int port, string reply) public static bool IsOwned(int? port = null) { var endpointPort = port ?? Port; + if (NothingListening(endpointPort)) + { + Found(endpointPort, false); + return false; + } + bool owned; try { @@ -278,6 +318,12 @@ public static bool TrySend( return false; } + if (NothingListening(endpointPort)) + { + Found(endpointPort, false); + return false; + } + var deadline = wait ?? timeout; var connected = false; try @@ -365,6 +411,15 @@ public static async Task SendAsync( return SendOutcome.NoOwner; } + // A send the caller has already cancelled is left to the connect, which is where each + // framework says so in its own way + if (!cancel.IsCancellationRequested && + NothingListening(endpointPort)) + { + Found(endpointPort, false); + return SendOutcome.NoOwner; + } + var timeToWait = wait ?? asyncTimeout; using var deadline = CancelSource.CreateLinkedTokenSource(cancel); deadline.CancelAfter(timeToWait); diff --git a/src/DiffEngine/Tray/PiperClient.cs b/src/DiffEngine/Tray/PiperClient.cs index 7dfc04c1d..4899c680e 100644 --- a/src/DiffEngine/Tray/PiperClient.cs +++ b/src/DiffEngine/Tray/PiperClient.cs @@ -1,5 +1,4 @@ -using System.Net.NetworkInformation; -static class PiperClient +static class PiperClient { public static int Port = 3492; @@ -221,24 +220,8 @@ static async Task InnerSendAsync(string payload, Cancel cancel) /// is dropped it runs to its timeout, two seconds a send. The listener table answers in well /// under a millisecond. A table that cannot be read leaves the connect to decide. /// - static bool PortIsHeld() - { - try - { - var port = Port; - return IPGlobalProperties.GetIPGlobalProperties() - .GetActiveTcpListeners() - .Any(_ => _.Port == port); - } - catch (NetworkInformationException) - { - return true; - } - catch (PlatformNotSupportedException) - { - return true; - } - } + static bool PortIsHeld() => + ListenerTable.IsHeld(Port); static IPEndPoint GetEndpoint() => new(IPAddress.Loopback, Port); From 45e09c34b5e65ab69589e8cbcaebd9e033a0ef2f Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:18:08 +1000 Subject: [PATCH 53/73] Benchmark accepting every inline snapshot in one source file An accept-all applies one entry at a time, and each apply reads, lexes and rewrites the whole source file. The review that raised this timed a simulation of the applier's IO and allocations. This is the applier itself, on a real file in the temp folder: InlineApplier.Apply for each of 25 call sites in a 500 line file, and each of 500 in a 10,000 line, 600 KB file, every accepted literal moving the call sites below it. Beside it, CanAnchor for each call site, which is what a test run asks of a call site it has not seen before, and two that take the applier apart: the patcher alone over the same patches in memory, and the lexing alone. Before, on this machine, with other builds running beside it: | Method | CallSites | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | |-------------- |---------- |-----------------:|------------------:|---------------:|------------:|------------:|------------:|--------------:| | AcceptEach | 25 | 259,350.40 us | 185,484.532 us | 10,167.033 us | 500.0000 | - | - | 9966.09 KB | | AnchorEach | 25 | 4,969.46 us | 2,341.940 us | 128.370 us | 351.5625 | 109.3750 | - | 5812.61 KB | | PatchInMemory | 25 | 2,458.12 us | 1,163.392 us | 63.769 us | 414.0625 | 167.9688 | - | 6781.37 KB | | Lex | 25 | 54.05 us | 3.238 us | 0.177 us | 6.6528 | 1.6479 | - | 109.64 KB | | AcceptEach | 500 | 28,423,459.23 us | 11,838,178.946 us | 648,890.537 us | 657000.0000 | 631000.0000 | 619000.0000 | 3863795.08 KB | | AnchorEach | 500 | 1,135,102.43 us | 413,171.873 us | 22,647.345 us | 531000.0000 | 506000.0000 | 494000.0000 | 2236833.75 KB | | PatchInMemory | 500 | 1,144,355.33 us | 131,406.115 us | 7,202.813 us | 534000.0000 | 507000.0000 | 496000.0000 | 2619652.66 KB | | Lex | 500 | 1,092.22 us | 512.714 us | 28.104 us | 437.5000 | 410.1563 | 398.4375 | 2157.77 KB | Twenty eight seconds for the five hundred, not the 3.8 the simulation gave, and the patcher is 1.1 of them. The rest is the file system, and nearly all of that is one call. Timed a step at a time outside the benchmark, on files of the same two sizes in the same folder: 30 KB 600 KB read 0.2 ms 0.9 ms write temporary 0.2 ms 0.4 ms File.Replace 9.5 ms 47.7 ms everything else 0.2 ms 0.5 ms The swap is not slow in itself. What it opens is a file written a moment ago, and on a drive where new files are scanned that open waits for the scan. A move that overwrites takes 0.4 ms instead, and the 38 ms then turns up in the next apply's read. The drive the repositories are on is not scanned, and there the same Replace is 1 ms at either size. With TMP pointed at it this benchmark's AcceptEach is 47 ms for the 25 and 3.2 s for the 500, which is the simulation's number: 6.5 ms an apply, 2.3 of it the patcher. So what an accept costs is decided first by how many times the file is written, and the patcher's share shows once that is one. Within the patcher, the 2.3 ms a patch of the large file takes goes on the passes that read all of it: 1.2 lexing, 0.35 splicing, 0.25 and 0.23 finding the line ending and the line starts, 0.14 the indent unit. dotnet run -c Release --project src/DiffEngine.Benchmarks -- --filter "*InlineAccept*" --- .../InlineAcceptBenchmarks.cs | 186 ++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs diff --git a/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs b/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs new file mode 100644 index 000000000..bc2f55021 --- /dev/null +++ b/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs @@ -0,0 +1,186 @@ +using System.Text; +using BenchmarkDotNet.Attributes; + +namespace DiffEngine.Benchmarks; + +// Accepting every inline snapshot in one test file, which is what "Accept all" does over a file +// that holds many: one InlineApplier.Apply per call site, each reading, lexing and rewriting the +// whole file. A member is twenty lines, so 25 call sites is a 500 line file of 30 KB, and 500 is +// 10,000 lines and 600 KB. +// +// The file is a real one, in a directory of its own under the temp folder, because the applier's +// cost is as much the file system's as the patcher's: a mutex, a read, a temporary written beside +// the source and a swap, per patch. Where that folder is scanned as it is written to, which is +// what a virus scanner does by default, the swap is most of it. +// +// Each literal accepted adds five lines, so every call site below it has moved by the time its +// own patch is applied, as it has in a real accept-all. +[MemoryDiagnoser] +public class InlineAcceptBenchmarks +{ + [Params(25, 500)] + public int CallSites; + + string directory = ""; + string path = ""; + byte[] pristine = []; + string source = ""; + InlinePatch[] patches = []; + InlinePatch[] appends = []; + + [GlobalSetup] + public void Setup() + { + directory = Path.Combine(Path.GetTempPath(), $"DiffEngineBenchmarks_{Guid.NewGuid():N}"); + Directory.CreateDirectory(directory); + path = Path.Combine(directory, "GeneratedTests.cs"); + + var (text, snapshotLines, verifyLines) = Generate(CallSites); + source = text; + pristine = new UTF8Encoding(false).GetBytes(text); + File.WriteAllBytes(path, pristine); + patches = new InlinePatch[CallSites]; + appends = new InlinePatch[CallSites]; + for (var index = 0; index < CallSites; index++) + { + patches[index] = new(path, snapshotLines[index], $"\"old {index:D4}\"", $"first line of {index:D4}\nsecond line\nthird line") + { + TestName = $"GeneratedTests.Member{index:D4}", + MemberName = $"Member{index:D4}" + }; + // What a producer asks before it declares a verification inline: whether the verify + // call has somewhere to hang a Snapshot call + appends[index] = new(path, verifyLines[index], null, "content", InlinePatchMode.Append) + { + TestName = $"GeneratedTests.Member{index:D4}", + MemberName = $"Member{index:D4}" + }; + } + } + + [GlobalCleanup] + public void Cleanup() => + Directory.Delete(directory, true); + + // What the tray and the viewer do for a bulk accept: a call to Apply for each entry + [Benchmark] + public int AcceptEach() + { + File.WriteAllBytes(path, pristine); + var applied = 0; + foreach (var patch in patches) + { + if (InlineApplier.Apply(patch).Status == InlineApplyStatus.Applied) + { + applied++; + } + } + + return Every(applied); + } + + // What a test run does once for each call site it has not seen before. Nothing is written, + // so this is the read and the lexing by themselves + [Benchmark] + public int AnchorEach() + { + var anchored = 0; + foreach (var patch in appends) + { + if (InlineApplier.CanAnchor(patch).Status == InlineApplyStatus.Applied) + { + anchored++; + } + } + + return Every(anchored); + } + + // The patcher alone over the same patches, each applied to what the last one left: what the + // accepts above cost with the file system, the encoding and the locks taken out + [Benchmark] + public int PatchInMemory() + { + var current = source; + var applied = 0; + foreach (var patch in patches) + { + var status = InlinePatcher.TryApply( + SourceLanguage.CSharp, + current, + patch.LineHint, + patch.Mode, + patch.OriginalExpression, + patch.OriginalValue, + patch.MemberName, + patch.EntryPoints, + false, + patch.NewContent, + out var patched, + out _); + if (status == PatchStatus.Applied) + { + current = patched; + applied++; + } + } + + return Every(applied); + } + + // The lexing every one of those starts with + [Benchmark] + public bool Lex() => + SourceLanguage.CSharp.Scan(source).IsCode(0); + + // A benchmark that measured five hundred refusals would look like a very fast applier + int Every(int count) + { + if (count != CallSites) + { + throw new($"{count} of {CallSites} generated patches applied."); + } + + return count; + } + + // Twenty lines a member: an attribute, a declaration, fourteen statements with a string and a + // comment each, and a verify call with its snapshot on a line of its own. + static (string source, int[] snapshotLines, int[] verifyLines) Generate(int members) + { + var builder = new StringBuilder(); + var snapshotLines = new int[members]; + var verifyLines = new int[members]; + var line = 0; + + void Add(string text) + { + builder.Append(text); + builder.Append("\r\n"); + line++; + } + + Add("public class GeneratedTests"); + Add("{"); + for (var member = 0; member < members; member++) + { + Add(" [Test]"); + Add($" public Task Member{member:D4}()"); + Add(" {"); + for (var statement = 0; statement < 14; statement++) + { + Add($" var value{statement:D2} = Describe(\"input {statement:D2} of member {member:D4}\", {statement}); // read below"); + } + + Add(" return Verify(value00)"); + verifyLines[member] = line; + Add($" .Snapshot(\"old {member:D4}\");"); + snapshotLines[member] = line; + Add(" }"); + Add(""); + } + + Add("}"); + return (builder.ToString(), snapshotLines, verifyLines); + } +} From 458a562a6b678ad55c3623cbcbf4f3854b7f4777 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:35:51 +1000 Subject: [PATCH 54/73] Apply several inline patches to a file with one read and one write InlineApplier.Apply reads, lexes and rewrites the whole source file for each patch, and an accept-all calls it once per entry. The write is where the time goes: what the swap opens is a file written a moment ago, and where the drive is scanned that open waits for the scan. Five hundred snapshots in one 600 KB file took 28 s, 1.1 of them patching. InlineApplier.ApplyAll takes the patches together. Each file is read once, its patches are applied in memory in the order given, each to what the one before it left, and the file is written once through the same temporary and the same swap, with its lock and mutex held from the read to the write. The patcher is the one a single apply runs and it runs once per patch, so every patch is told what Apply would have told it in turn, and the bytes left are the bytes applying them in turn leaves: a test holds the two side by side over a batch with a moved call site, a repeated patch and a second patch for a call site already taken. Encoding, byte order mark and line endings come from the one read and go back in the one write. One thing can only be different. A single write carries every edit, so when it fails none of them happened: each patch from the first edit on reports the failure, including one judged already applied or not found after that edit, since what it was judged against never reached the file. A patch judged before any edit keeps its answer. Nothing is written when nothing applied. Apply is now ApplyAll's one-patch case, through the same code. InlineQueue.AcceptAll has an overload that hands every un-conflicted patch to the applier in one call, which is the library's own bulk accept able to use it. The tray and the viewer do not yet: both apply an entry at a time from their own loops, by design, and are not touched here. After, same machine: | Method | CallSites | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | |--------------- |---------- |-------------:|-------------:|-----------:|------------:|------------:|------------:|-----------:| | AcceptTogether | 25 | 25.135 ms | 4.912 ms | 0.2692 ms | 406.2500 | 156.2500 | - | 6.75 MB | | PatchInMemory | 25 | 4.024 ms | 19.406 ms | 1.0637 ms | 414.0625 | 164.0625 | - | 6.62 MB | | AcceptTogether | 500 | 1,268.122 ms | 1,038.879 ms | 56.9444 ms | 533000.0000 | 514000.0000 | 495000.0000 | 2560.98 MB | | PatchInMemory | 500 | 1,301.252 ms | 448.650 ms | 24.5920 ms | 526000.0000 | 504000.0000 | 488000.0000 | 2558.28 MB | AcceptTogether is new, and is AcceptEach's work handed over in one call: 259 ms to 25 ms for the 25, and 28.4 s to 1.27 s for the 500. It now costs what the patcher costs, which is the row under it. AcceptEach itself is as it was, a single apply being the same work as before. --- .../InlineAcceptBenchmarks.cs | 23 +- .../InlineApplierBatchTests.cs | 293 ++++++++++++++++++ src/DiffEngine.Tests/InlineQueueTests.cs | 44 +++ src/DiffEngine/Inline/InlineApplier.cs | 256 +++++++++++---- src/DiffEngine/Inline/InlineQueue.cs | 32 ++ 5 files changed, 590 insertions(+), 58 deletions(-) create mode 100644 src/DiffEngine.Tests/InlineApplierBatchTests.cs diff --git a/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs b/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs index bc2f55021..c4650a1db 100644 --- a/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs +++ b/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs @@ -4,9 +4,9 @@ namespace DiffEngine.Benchmarks; // Accepting every inline snapshot in one test file, which is what "Accept all" does over a file -// that holds many: one InlineApplier.Apply per call site, each reading, lexing and rewriting the -// whole file. A member is twenty lines, so 25 call sites is a 500 line file of 30 KB, and 500 is -// 10,000 lines and 600 KB. +// that holds many. A patch at a time, each call reads, lexes and rewrites the whole file, and +// handed over together the file is read and written once. A member is twenty lines, so 25 call +// sites is a 500 line file of 30 KB, and 500 is 10,000 lines and 600 KB. // // The file is a real one, in a directory of its own under the temp folder, because the applier's // cost is as much the file system's as the patcher's: a mutex, a read, a temporary written beside @@ -79,6 +79,23 @@ public int AcceptEach() return Every(applied); } + // The same patches handed over in one call, which reads and writes the file once + [Benchmark] + public int AcceptTogether() + { + File.WriteAllBytes(path, pristine); + var applied = 0; + foreach (var result in InlineApplier.ApplyAll(patches)) + { + if (result.Status == InlineApplyStatus.Applied) + { + applied++; + } + } + + return Every(applied); + } + // What a test run does once for each call site it has not seen before. Nothing is written, // so this is the read and the lexing by themselves [Benchmark] diff --git a/src/DiffEngine.Tests/InlineApplierBatchTests.cs b/src/DiffEngine.Tests/InlineApplierBatchTests.cs new file mode 100644 index 000000000..8f7bd498c --- /dev/null +++ b/src/DiffEngine.Tests/InlineApplierBatchTests.cs @@ -0,0 +1,293 @@ +/// +/// Several patches in one call. What that changes is how often a file is read and written, and +/// these pin the two things it must not change: what each patch is told, and what is in the file +/// afterwards. +/// +public class InlineApplierBatchTests +{ + /// + /// The contract in one test: the same patches applied together and applied in turn leave the + /// same bytes and report the same outcomes, in the same order. The batch includes the cases + /// where a patch only reads as it does because of one before it - a call site the earlier + /// literals have moved, the same patch twice, a second patch for a call site already taken. + /// + [Test] + public async Task TogetherIsWhatInTurnLeaves() + { + using var together = new TempSource(Members(6)); + using var inTurn = new TempSource(Members(6)); + + InlinePatch[] Patches(string path) => + [ + Set(path, 0), + Set(path, 3), + // The same patch again, which finds its own literal already there + Set(path, 3), + // The call site the first one took, with different content: its anchor has gone + Set(path, 0, content: "something else\nagain"), + Set(path, 1), + // Never was in the file + Set(path, 2, anchor: "\"not in the source\""), + Set(path, 5), + Set(path, 4) + ]; + + var batch = InlineApplier.ApplyAll(Patches(together.FullName)); + var single = Patches(inTurn.FullName) + .Select(InlineApplier.Apply) + .ToList(); + + await Assert.That(Statuses(batch)).IsEqualTo(Statuses(single)); + await Assert.That(Statuses(batch)).IsEqualTo("Applied, Applied, AlreadyApplied, NotFound, Applied, NotFound, Applied, Applied"); + await Assert.That(Messages(batch)).IsEqualTo(Messages(single)); + await Assert.That(together.Text).IsEqualTo(inTurn.Text); + await Assert.That(together.Text).Contains("new 5"); + } + + /// + /// The point of handing them over together: one file, one swap, however many of its snapshots + /// are accepted. + /// + [Test] + public async Task AFileIsSwappedOnceForAllItsPatches() + { + using var file = new TempSource(Members(4)); + var swaps = 0; + + var results = InlineApplier.ApplyAll( + [Set(file.FullName, 0), Set(file.FullName, 1), Set(file.FullName, 2), Set(file.FullName, 3)], + (temporary, destination) => + { + swaps++; + File.Replace(temporary, destination, null); + }); + + await Assert.That(Statuses(results)).IsEqualTo("Applied, Applied, Applied, Applied"); + await Assert.That(swaps).IsEqualTo(1); + for (var member = 0; member < 4; member++) + { + await Assert.That(file.Text).Contains($"new {member}"); + } + + // And nothing of the temporary is left beside it + await Assert.That(Directory.GetFileSystemEntries(file.Root)).IsEquivalentTo([file.FullName]); + } + + /// + /// Patches arrive in queue order, which is not file order. Each file is still read and written + /// once, and each result is at the index its patch was given at. + /// + [Test] + public async Task PatchesForSeveralFilesKeepTheirOrder() + { + using var first = new TempSource(Members(2)); + using var second = new TempSource(Members(2)); + var swapped = new List(); + + var results = InlineApplier.ApplyAll( + [ + Set(first.FullName, 0), + Set(second.FullName, 1, anchor: "\"not in the source\""), + Set(first.FullName, 1), + Set(second.FullName, 0) + ], + (temporary, destination) => + { + swapped.Add(destination); + File.Replace(temporary, destination, null); + }); + + await Assert.That(Statuses(results)).IsEqualTo("Applied, NotFound, Applied, Applied"); + await Assert.That(string.Join(", ", swapped)).IsEqualTo($"{first.FullName}, {second.FullName}"); + await Assert.That(first.Text).Contains("new 0"); + await Assert.That(first.Text).Contains("new 1"); + await Assert.That(second.Text).Contains("new 0"); + await Assert.That(second.Text).Contains("\"old 1\""); + } + + /// + /// One write carries every edit, so when it fails none of them happened and each patch has to + /// say so: an entry reported as applied is dropped from its queue, and these are not in the + /// source. A patch judged before the first edit keeps its answer, which was about the file as + /// it is. One judged after does not, since what it was judged against was never written - the + /// duplicate here was only already applied because of the patch before it. + /// + [Test] + public async Task AWriteThatFailsFailsEveryPatchItCarried() + { + using var file = new TempSource(Members(3)); + var before = file.Text; + + var results = InlineApplier.ApplyAll( + [ + Set(file.FullName, 2, anchor: "\"not in the source\""), + Set(file.FullName, 0), + Set(file.FullName, 0), + Set(file.FullName, 1) + ], + (_, _) => throw new IOException("The process cannot access the file.")); + + await Assert.That(Statuses(results)).IsEqualTo("NotFound, Failed, Failed, Failed"); + await Assert.That(results[1].Message!).Contains("Failed to write"); + await Assert.That(results[1].Exception).IsTypeOf(); + await Assert.That(file.Text).IsEqualTo(before); + await Assert.That(Directory.GetFileSystemEntries(file.Root)).IsEquivalentTo([file.FullName]); + } + + /// + /// A batch in which nothing applies writes nothing, as a single patch that is already applied + /// writes nothing: the file an editor has open is not touched for no reason. + /// + [Test] + public async Task NothingToApplyIsNothingWritten() + { + using var file = new TempSource(Members(2)); + var swaps = 0; + + var results = InlineApplier.ApplyAll( + [ + Set(file.FullName, 0, anchor: "\"not in the source\""), + Set(file.FullName, 1, content: "old 1") + ], + (_, _) => swaps++); + + await Assert.That(Statuses(results)).IsEqualTo("NotFound, AlreadyApplied"); + await Assert.That(swaps).IsEqualTo(0); + } + + /// + /// A patch that names no file, or a file that is not there, is that patch's failure. The ones + /// around it are for other files and are applied as if it had not been in the batch. + /// + [Test] + public async Task APatchWithNoFileToPatchDoesNotStopTheRest() + { + using var file = new TempSource(Members(2)); + var missing = Path.Combine(file.Root, "NotThere.cs"); + + var results = InlineApplier.ApplyAll( + [ + Set(file.FullName, 0), + Set("", 0), + Set(missing, 0), + // No line to look near, which is a patch nothing can be done with + new(file.FullName, 0, "\"old 1\"", "new 1") + { + TestName = null + }, + Set(file.FullName, 1) + ]); + + await Assert.That(Statuses(results)).IsEqualTo("Applied, Failed, Failed, Failed, Applied"); + await Assert.That(results[1].Message!).Contains("SourceFile is empty"); + await Assert.That(results[2].Message!).Contains("does not exist"); + await Assert.That(results[3].Message!).Contains("LineHint"); + await Assert.That(file.Text).Contains("new 0"); + await Assert.That(file.Text).Contains("new 1"); + } + + /// + /// The file is decoded once and encoded once for the whole batch, and comes back as it was + /// read: the same encoding, the same byte order mark, the same line endings. + /// + [Test] + public async Task EncodingAndLineEndingsSurviveABatch() + { + var encoding = new UnicodeEncoding(false, true); + using var file = new TempSource(Members(3, "\r\n"), encoding); + + var results = InlineApplier.ApplyAll([Set(file.FullName, 0), Set(file.FullName, 1), Set(file.FullName, 2)]); + + await Assert.That(Statuses(results)).IsEqualTo("Applied, Applied, Applied"); + var bytes = await File.ReadAllBytesAsync(file.FullName); + await Assert.That(bytes[0]).IsEqualTo((byte) 0xFF); + await Assert.That(bytes[1]).IsEqualTo((byte) 0xFE); + var text = encoding.GetString(bytes, 2, bytes.Length - 2); + await Assert.That(text).Contains("new 2"); + await Assert.That(text.Replace("\r\n", "")).DoesNotContain("\n"); + } + + [Test] + public async Task AnEmptyBatchIsNoResults() => + await Assert.That(InlineApplier.ApplyAll([])).IsEmpty(); + + // Joined, because the order is the point and the collection assertions do not check it + static string Statuses(IEnumerable results) => + string.Join(", ", results.Select(_ => _.Status)); + + static string Messages(IEnumerable results) => + string.Join("\n", results.Select(_ => _.Message ?? "-")); + + /// + /// A member a line, each with a snapshot of its own. The content a patch writes is two lines, + /// so it is rendered as a literal on lines of its own and every member below it moves. + /// + static string Members(int count, string eol = "\n") + { + var builder = new StringBuilder(); + builder.Append($"class C{eol}{{{eol}"); + for (var member = 0; member < count; member++) + { + builder.Append($" void M{member}() => Verify(value{member}).Snapshot(\"old {member}\");{eol}"); + } + + builder.Append('}'); + return builder.ToString(); + } + + /// + /// The patch a failing run would have produced for a member of : its line + /// as it was when the file was written, the literal it held, and the member it is in. + /// + static InlinePatch Set(string path, int member, string? anchor = null, string? content = null) => + new(path, member + 3, anchor ?? $"\"old {member}\"", content ?? $"new {member}\nsecond line") + { + TestName = null, + MemberName = $"M{member}" + }; + + /// + /// A source file in a directory of its own, so what is left beside it can be asserted. Root + /// and FullName rather than Directory and Path, both of which are types the tests use. + /// + sealed class TempSource : IDisposable + { + readonly Encoding encoding; + + public TempSource(string text, Encoding? encoding = null) + { + this.encoding = encoding ?? new UTF8Encoding(false); + Root = Path.Combine(Path.GetTempPath(), $"InlineApplierBatchTests_{Guid.NewGuid():N}"); + Directory.CreateDirectory(Root); + FullName = Path.Combine(Root, "Sample.cs"); + File.WriteAllBytes(FullName, [.. this.encoding.GetPreamble(), .. this.encoding.GetBytes(text)]); + } + + public string Root { get; } + + public string FullName { get; } + + public string Text + { + get + { + var bytes = File.ReadAllBytes(FullName); + var preamble = encoding.GetPreamble().Length; + return encoding.GetString(bytes, preamble, bytes.Length - preamble); + } + } + + public void Dispose() + { + try + { + Directory.Delete(Root, true); + } + catch (Exception exception) + when (exception is IOException or UnauthorizedAccessException) + { + // Best effort cleanup of the temp directory + } + } + } +} diff --git a/src/DiffEngine.Tests/InlineQueueTests.cs b/src/DiffEngine.Tests/InlineQueueTests.cs index 2cf35b4d5..140591a5f 100644 --- a/src/DiffEngine.Tests/InlineQueueTests.cs +++ b/src/DiffEngine.Tests/InlineQueueTests.cs @@ -587,6 +587,50 @@ await Assert.That(queue.Items.Select(_ => _.Status!)).IsEquivalentTo( ]); } + /// + /// The same bulk accept with the patches handed over in one call, which is what lets an + /// applier write a file once for all the snapshots in it. Nothing else about it differs: the + /// conflict is left out, the patches go over in queue order, and each outcome lands on its own + /// entry. + /// + [Test] + public async Task AcceptAllCanHandThePatchesOverTogether() + { + IReadOnlyList handed = []; + var queue = InlineQueue.Empty + .Enqueue(Patch("A.cs", 1)) + .Enqueue(Patch("B.cs", 2, content: "eight", framework: "net8.0")) + .Enqueue(Patch("B.cs", 2, content: "nine", framework: "net9.0")) + .Enqueue(Patch("C.cs", 3)) + .AcceptAll( + _ => + { + handed = _; + return [InlineApplyResult.Applied, InlineApplyResult.NotFound("no Verify or Throws call")]; + }, + out var message); + + await Assert.That(string.Join(", ", handed.Select(_ => $"{_.SourceFile}:{_.LineHint}"))).IsEqualTo("A.cs:1, C.cs:3"); + await Assert.That(string.Join(", ", queue.Items.Select(_ => _.Name))).IsEqualTo("B.cs:2, C.cs:3"); + await Assert.That(queue.Items[1].Status).IsEqualTo("C.cs:3 not written. no Verify or Throws call"); + await Assert.That(message).IsEqualTo("Accepted 1, 1 not written, 1 conflict needs review. C.cs:3 not written. no Verify or Throws call"); + } + + /// + /// An applier that answers for fewer patches than it was given has no outcome for some entry, + /// and guessing which would mark a snapshot accepted that nothing wrote. + /// + [Test] + public void AcceptAllRefusesResultsThatDoNotMatchThePatches() + { + var queue = InlineQueue.Empty + .Enqueue(Patch("A.cs", 1)) + .Enqueue(Patch("B.cs", 2)); + + Assert.Throws( + () => queue.AcceptAll(_ => [InlineApplyResult.Applied], out var message)); + } + /// /// The two phase form: find, apply outside the host's lock, complete. A re-run that replaced /// the patch while it was applying keeps its new entry, because the outcome describes the old diff --git a/src/DiffEngine/Inline/InlineApplier.cs b/src/DiffEngine/Inline/InlineApplier.cs index 322b317e3..b81d32a00 100644 --- a/src/DiffEngine/Inline/InlineApplier.cs +++ b/src/DiffEngine/Inline/InlineApplier.cs @@ -16,6 +16,78 @@ public static class InlineApplier public static InlineApplyResult Apply(InlinePatch patch) => Run(patch, write: true); + /// + /// Applies several patches, reading and writing each source file once however many of them + /// are for it. The results are in the order the patches were given, whichever files they + /// name. + /// + /// Each outcome is the one would have reported had it been called on them + /// in turn. A patch is applied to what the ones before it left of its file, so the second of + /// two for one call site finds the first one's literal there, and a call site that an earlier + /// one moved is found where it now is. + /// + /// + /// What differs is when the file is written: once, after the last of its patches, through the + /// same temporary and the same swap, with the file's lock held from the read to the write. One + /// at a time, the whole file is read, lexed and written again for every patch, and the write + /// is where the time goes. A file that has just been written is scanned by whatever watches + /// the drive before the next thing can open it, and for five hundred snapshots in one ten + /// thousand line file that came to half a minute. The lexing is still once per patch, since + /// each starts from different source. + /// + /// + /// So a write that fails fails every patch it was carrying, and each says so. The patches + /// after the first of those say so too, whatever they were judged to be, because what they + /// were judged against was never written. The file is left as it was. + /// + /// + public static IReadOnlyList ApplyAll(IReadOnlyList patches) => + ApplyAll(patches, Swap); + + /// The patches, in the order they are to be applied. + /// + /// The swap. Supplied by the tests, which count how many there were and make one fail. + /// + internal static IReadOnlyList ApplyAll(IReadOnlyList patches, Action replace) + { + var results = new InlineApplyResult[patches.Count]; + // Each file's patches in the order they were given, and the files in the order they were + // first named + var files = new List<(string FullPath, List Indexes)>(); + var known = new Dictionary(StringComparer.Ordinal); + for (var index = 0; index < patches.Count; index++) + { + if (!TryResolve(patches[index], out var fullPath, out var invalid)) + { + results[index] = invalid; + continue; + } + + // Folded as the queue folds a path, so two spellings of a file the file system takes + // for one are one read and one write here as well + var key = InlineKey.FoldPath(fullPath); + if (!known.TryGetValue(key, out var file)) + { + file = files.Count; + known.Add(key, file); + files.Add((fullPath, [])); + } + + files[file].Indexes.Add(index); + } + + foreach (var (fullPath, indexes) in files) + { + var applied = Run(fullPath, indexes.Select(_ => patches[_]).ToList(), write: true, anchorOnly: false, replace); + for (var position = 0; position < indexes.Count; position++) + { + results[indexes[position]] = applied[position]; + } + } + + return results; + } + /// /// What would report, with nothing written. /// @@ -53,31 +125,56 @@ public static InlineApplyResult CanAnchor(InlinePatch patch) => static InlineApplyResult Run(InlinePatch patch, bool write, bool anchorOnly = false) { + if (!TryResolve(patch, out var fullPath, out var invalid)) + { + return invalid; + } + + return Run(fullPath, [patch], write, anchorOnly, Swap)[0]; + } + + /// + /// The file a patch is for, or what is wrong with the patch when it does not name one. + /// + static bool TryResolve(InlinePatch patch, out string fullPath, [NotNullWhen(false)] out InlineApplyResult? invalid) + { + fullPath = ""; + invalid = null; if (string.IsNullOrWhiteSpace(patch.SourceFile)) { - return InlineApplyResult.Failed("InlinePatch.SourceFile is empty"); + invalid = InlineApplyResult.Failed("InlinePatch.SourceFile is empty"); + return false; } if (patch.LineHint < 1) { - return InlineApplyResult.Failed($"InlinePatch.LineHint must be 1 or greater. Value: {patch.LineHint}"); + invalid = InlineApplyResult.Failed($"InlinePatch.LineHint must be 1 or greater. Value: {patch.LineHint}"); + return false; } - string fullPath; try { fullPath = Path.GetFullPath(patch.SourceFile); } catch (Exception exception) { - return InlineApplyResult.Failed($"Invalid InlinePatch.SourceFile: {patch.SourceFile}", exception); + invalid = InlineApplyResult.Failed($"Invalid InlinePatch.SourceFile: {patch.SourceFile}", exception); + return false; } // Followed before anything else, so the lock, the mutex, the read and the swap all name // the file that actually holds the source fullPath = ResolveLink(fullPath); + return true; + } - var newContent = SourceLanguage.NormalizeNewlines(patch.NewContent); + /// + /// The patches of one file, applied in order with the file's locks held throughout, and an + /// outcome for each. A failure that is about the file rather than about a patch - a lock that + /// could not be taken, a file that could not be read - is every patch's outcome. + /// + static InlineApplyResult[] Run(string fullPath, IReadOnlyList patches, bool write, bool anchorOnly, Action replace) + { var normalizedPath = fullPath.ToLowerInvariant(); lock (gates.GetOrAdd(normalizedPath, static _ => new())) { @@ -92,7 +189,7 @@ static InlineApplyResult Run(InlinePatch patch, bool write, bool anchorOnly = fa } catch (Exception exception) { - return InlineApplyResult.Failed($"Could not open the inline patch mutex for: {fullPath}", exception); + return All(patches, InlineApplyResult.Failed($"Could not open the inline patch mutex for: {fullPath}", exception)); } using var mutex = opened; @@ -110,10 +207,10 @@ static InlineApplyResult Run(InlinePatch patch, bool write, bool anchorOnly = fa if (!owned) { - return InlineApplyResult.Failed($"Timed out waiting for the inline patch mutex for: {fullPath}"); + return All(patches, InlineApplyResult.Failed($"Timed out waiting for the inline patch mutex for: {fullPath}")); } - return LockedApply(fullPath, patch, newContent, write, anchorOnly); + return LockedApply(fullPath, patches, write, anchorOnly, replace); } finally { @@ -125,7 +222,18 @@ static InlineApplyResult Run(InlinePatch patch, bool write, bool anchorOnly = fa } } - static InlineApplyResult LockedApply(string fullPath, InlinePatch patch, string newContent, bool write, bool anchorOnly) + static InlineApplyResult[] All(IReadOnlyList patches, InlineApplyResult result) + { + var results = new InlineApplyResult[patches.Count]; + for (var index = 0; index < results.Length; index++) + { + results[index] = result; + } + + return results; + } + + static InlineApplyResult[] LockedApply(string fullPath, IReadOnlyList patches, bool write, bool anchorOnly, Action replace) { // Asked here rather than before the lock, because the swap at the end of this method takes // the path away for the instant it takes to rename over it. Asked outside, an applier @@ -133,7 +241,7 @@ static InlineApplyResult LockedApply(string fullPath, InlinePatch patch, string // reported it, which is neither true nor the sort of thing a retry was going to fix if (!File.Exists(fullPath)) { - return InlineApplyResult.Failed($"Source file does not exist: {fullPath}"); + return All(patches, InlineApplyResult.Failed($"Source file does not exist: {fullPath}")); } byte[] bytes; @@ -143,7 +251,7 @@ static InlineApplyResult LockedApply(string fullPath, InlinePatch patch, string } catch (Exception exception) { - return InlineApplyResult.Failed($"Failed to read: {fullPath}", exception); + return All(patches, InlineApplyResult.Failed($"Failed to read: {fullPath}", exception)); } var (encoding, bomLength) = DetectEncoding(bytes); @@ -154,59 +262,87 @@ static InlineApplyResult LockedApply(string fullPath, InlinePatch patch, string } catch (DecoderFallbackException exception) { - return InlineApplyResult.Failed( - $"Could not decode as {encoding.WebName}: {fullPath}. Every byte that failed to decode would be replaced on write, so the file is left alone. Convert it to UTF-8 and re-run the test.", - exception); + return All( + patches, + InlineApplyResult.Failed( + $"Could not decode as {encoding.WebName}: {fullPath}. Every byte that failed to decode would be replaced on write, so the file is left alone. Convert it to UTF-8 and re-run the test.", + exception)); } catch (Exception exception) { - return InlineApplyResult.Failed($"Failed to decode: {fullPath}", exception); + return All(patches, InlineApplyResult.Failed($"Failed to decode: {fullPath}", exception)); } - PatchStatus status; - string newSource; - string failReason; - try - { - status = InlinePatcher.TryApply( - SourceLanguage.ForFile(fullPath), - source, - patch.LineHint, - patch.Mode, - patch.OriginalExpression, - patch.OriginalValue, - patch.MemberName, - patch.EntryPoints, - anchorOnly, - newContent, - out newSource, - out failReason); - } - catch (Exception exception) + var language = SourceLanguage.ForFile(fullPath); + var results = new InlineApplyResult[patches.Count]; + // The first patch whose edit the write below has to carry, or -1 while there is none + var firstToWrite = -1; + for (var index = 0; index < results.Length; index++) { - // A patcher defect on some shape of source, reported against the file it met it in - // rather than thrown at whichever surface was accepting - return InlineApplyResult.Failed($"Failed to patch: {fullPath}", exception); - } + var patch = patches[index]; + PatchStatus status; + string newSource; + string failReason; + try + { + status = InlinePatcher.TryApply( + language, + source, + patch.LineHint, + patch.Mode, + patch.OriginalExpression, + patch.OriginalValue, + patch.MemberName, + patch.EntryPoints, + anchorOnly, + SourceLanguage.NormalizeNewlines(patch.NewContent), + out newSource, + out failReason); + } + catch (Exception exception) + { + // A patcher defect on some shape of source, reported against the file it met it in + // rather than thrown at whichever surface was accepting + results[index] = InlineApplyResult.Failed($"Failed to patch: {fullPath}", exception); + continue; + } - switch (status) - { - case PatchStatus.AlreadyApplied: - return InlineApplyResult.AlreadyApplied; - case PatchStatus.NotFound: - return InlineApplyResult.NotFound(failReason); + switch (status) + { + case PatchStatus.AlreadyApplied: + results[index] = InlineApplyResult.AlreadyApplied; + continue; + case PatchStatus.NotFound: + results[index] = InlineApplyResult.NotFound(failReason); + continue; + } + + // Every reason a patch can be refused for has been asked by this point and none of + // them held. All that remains is the write, which is the one step a dry run may not + // take + results[index] = InlineApplyResult.Applied; + if (!write) + { + continue; + } + + // The next patch is applied to this one's result, as it would have been to the file + // this one had written + source = newSource; + if (firstToWrite < 0) + { + firstToWrite = index; + } } - // Every reason a patch can be refused for has been asked by this point and none of them - // held. All that remains is the write, which is the one step a dry run may not take - if (!write) + if (firstToWrite < 0) { - return InlineApplyResult.Applied; + return results; } try { - var content = encoding.GetBytes(newSource); + var content = encoding.GetBytes(source); byte[] output; if (bomLength > 0) { @@ -220,14 +356,23 @@ static InlineApplyResult LockedApply(string fullPath, InlinePatch patch, string output = content; } - WriteThroughTemporary(fullPath, output); + WriteThroughTemporary(fullPath, output, replace); } catch (Exception exception) { - return InlineApplyResult.Failed($"Failed to write: {fullPath}", exception); + // Nothing from the first edit on reached the file, and every answer after it was about + // source that held that edit: one already applied only because an earlier patch here + // had written the same literal, one not found only because an earlier patch had taken + // its anchor. So they all report the write, and an entry that reports a failure is + // kept for another try + var failed = InlineApplyResult.Failed($"Failed to write: {fullPath}", exception); + for (var index = firstToWrite; index < results.Length; index++) + { + results[index] = failed; + } } - return InlineApplyResult.Applied; + return results; } /// @@ -314,8 +459,9 @@ static void CopyMode(string destination, string temporary) } #endif - static void WriteThroughTemporary(string fullPath, byte[] output) => - WriteThroughTemporary(fullPath, output, static (temporary, destination) => File.Replace(temporary, destination, null)); + // What replace is for every caller but a test + static void Swap(string temporary, string destination) => + File.Replace(temporary, destination, null); /// The source file, which the patched bytes replace. /// The whole patched file, preamble included. diff --git a/src/DiffEngine/Inline/InlineQueue.cs b/src/DiffEngine/Inline/InlineQueue.cs index aa24207cb..33a8b2d35 100644 --- a/src/DiffEngine/Inline/InlineQueue.cs +++ b/src/DiffEngine/Inline/InlineQueue.cs @@ -592,6 +592,38 @@ public InlineQueue AcceptAll(Func apply, out str .ToList(), out message); + /// + /// Applies every un-conflicted patch, handing them to together. + /// + /// For an applier that does better with the whole batch than with a patch at a time, which + /// does: it reads and writes a + /// source file once for all the snapshots in it, where the overload above has no choice but + /// to rewrite the file for each. What comes back is one result for each patch handed over, in + /// the same order. + /// + /// + public InlineQueue AcceptAll( + Func, IReadOnlyList> apply, + out string message) + { + var entries = Items + .Where(_ => !_.Conflicted) + .ToList(); + var results = apply(entries.Select(_ => _.Patch).ToList()); + if (results.Count != entries.Count) + { + throw new ArgumentException($"{entries.Count} patches were handed over and {results.Count} results came back.", nameof(apply)); + } + + var outcomes = new List<(PendingInline Entry, InlineApplyResult Result)>(entries.Count); + for (var index = 0; index < entries.Count; index++) + { + outcomes.Add((entries[index], results[index])); + } + + return AcceptAll(outcomes, out message); + } + /// /// The batch counterpart of . /// An item with no outcome, or that changed while the batch was applying, was not part of this From 3bf52bdf37564987aa2c6341a0e1fca4088ed0ea Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:37:15 +1000 Subject: [PATCH 55/73] Rent the scan's map, and keep its spans in order rather than hashed With the file written once, what an accept costs is the patcher, and half of that is the scan it builds over the whole source for every patch: a bool for each character, set one character at a time, and three hash tables saying where each comment and literal starts, where it ends, and which are comments. For the 600 KB file that was 2.2 MB a patch, most of it in arrays only the oldest generation collects, and with the two copies a splice made it came to a collection of that generation per patch. The map now marks what is not code and is filled a span at a time, so the lexers no longer touch it for the characters between. It is rented from the shared pool and handed back when the patcher has finished with the scan, which is why a scan is disposed. The spans are three lists in the order the lexer met them, and a span is found from either end by searching them, after the map has been asked whether the offset can be one at all. Nearly every offset a search steps over is code, so the usual question is one array read where it was a hash lookup. Splice makes one copy rather than two where the framework has the overload for it. What the scan answers has not changed. SourceScanTests walk every offset of two arranged sources and of the patcher's own test files, asking each question at each place, and fail on an off by one that all but four of the patcher's tests pass. Beyond the suite, every answer of the old scan and the new at every offset was hashed and compared over the C# and F# under six source trees here: 2,683 files, 9.8 million offsets, 66,702 spans, identical. After, same machine: | Method | CallSites | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | |--------------- |---------- |-----------------:|-----------------:|---------------:|------------:|------------:|------------:|--------------:| | AcceptEach | 25 | 248,914.57 us | 60,059.49 us | 3,292.063 us | - | - | - | 6100.98 KB | | AcceptTogether | 25 | 19,598.27 us | 6,454.21 us | 353.777 us | 156.2500 | 31.2500 | - | 3047.88 KB | | AnchorEach | 25 | 4,265.25 us | 1,859.43 us | 101.922 us | 210.9375 | 23.4375 | - | 3541.83 KB | | PatchInMemory | 25 | 1,806.09 us | 317.57 us | 17.407 us | 177.7344 | 68.3594 | - | 2915.22 KB | | Lex | 25 | 29.57 us | 11.89 us | 0.652 us | 1.0986 | - | - | 18.76 KB | | AcceptEach | 500 | 26,140,940.97 us | 11,884,397.30 us | 651,423.921 us | 338000.0000 | 320000.0000 | 312000.0000 | 2293670.98 KB | | AcceptTogether | 500 | 1,043,330.20 us | 3,125,066.09 us | 171,295.418 us | 144000.0000 | 128000.0000 | 118000.0000 | 1050861.41 KB | | AnchorEach | 500 | 955,236.77 us | 2,225,161.30 us | 121,968.600 us | 182000.0000 | 165000.0000 | 157000.0000 | 1303198 KB | | PatchInMemory | 500 | 792,547.53 us | 167,034.42 us | 9,155.720 us | 139000.0000 | 121000.0000 | 113000.0000 | 1048287.11 KB | | Lex | 500 | 613.34 us | 274.12 us | 15.026 us | 17.5781 | 4.8828 | - | 289.04 KB | Lexing the large file goes from 1,092 us and 2.2 MB to 613 us and 0.29 MB, and a patch of it from 5.2 MB to 2.1 MB with a quarter of the collections. The times of the methods that patch are down by between a sixth and a third, which is inside the error of a run on this machine today. The allocations are exact. On the drive the repositories are on, where no scan of the file hides it, with TMP pointed there: | Method | CallSites | before | after | |--------------- |---------- |------------:|-------------:| | AcceptEach | 25 | 46.77 ms | 38.15 ms | | AcceptEach | 500 | 3,226.27 ms | 1,880.06 ms | | AcceptTogether | 25 | | 4.00 ms | | AcceptTogether | 500 | | 739.81 ms | So an accept-all of the five hundred, which the tray and the viewer still make an entry at a time, is 3.2 s to 1.9 s for them as they are, and 0.74 s once they hand a file's entries over together. What is left of a patch is the passes that read all of its source: the lexing, the line starts, the line ending, the indent unit and the one copy. CanAnchor makes them too, after reading and decoding the file, once for each call site a run has not seen before. --- .../InlineAcceptBenchmarks.cs | 7 +- src/DiffEngine.Tests/SourceScanTests.cs | 177 ++++++++++++++++++ src/DiffEngine/Inline/CsLanguage.cs | 2 +- src/DiffEngine/Inline/FsLanguage.cs | 2 +- src/DiffEngine/Inline/InlinePatcher.cs | 10 +- src/DiffEngine/Inline/SourceScan.cs | 151 ++++++++++++--- 6 files changed, 314 insertions(+), 35 deletions(-) create mode 100644 src/DiffEngine.Tests/SourceScanTests.cs diff --git a/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs b/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs index c4650a1db..52b61dd8d 100644 --- a/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs +++ b/src/DiffEngine.Benchmarks/InlineAcceptBenchmarks.cs @@ -147,8 +147,11 @@ public int PatchInMemory() // The lexing every one of those starts with [Benchmark] - public bool Lex() => - SourceLanguage.CSharp.Scan(source).IsCode(0); + public bool Lex() + { + using var scan = SourceLanguage.CSharp.Scan(source); + return scan.IsCode(0); + } // A benchmark that measured five hundred refusals would look like a very fast applier int Every(int count) diff --git a/src/DiffEngine.Tests/SourceScanTests.cs b/src/DiffEngine.Tests/SourceScanTests.cs new file mode 100644 index 000000000..dda0073d4 --- /dev/null +++ b/src/DiffEngine.Tests/SourceScanTests.cs @@ -0,0 +1,177 @@ +/// +/// The map every search in the patcher reads. What it has to be is one consistent account of a +/// file: each offset is code or is inside exactly one comment or literal, and that span is found +/// from its start by a search stepping forwards and from its end by one stepping back. The spans +/// are found by searching sorted lists behind a map of which offsets are code, so the three have +/// to agree at every offset, and these walk every offset to see that they do. +/// +public class SourceScanTests +{ + const string csharp = + """" + // a line comment + #warning said "like this" + class C /* a block comment */ + { + char c = '"'; + string s = "text // not a comment"; + string v = @"verbatim ""quoted"" \"; + string r = """ + raw "quoted" text + """; + string i = $"hole {Call("inner")} end"; + void M() => Verify(value) // trailing + .Snapshot("old"); + } + """"; + + const string fsharp = + """" + // a line comment + #if DEBUG + (* a block (* nested *) comment *) + let c = 'x' + let f (x: 'T) = x + let s = "text (* not a comment *)" + let v = @"verbatim ""quoted""" + let r = """triple "quoted" """ + let m () = Verify(value).Snapshot("old") // trailing + """"; + + [Test] + public async Task CSharpSpansAreFoundFromBothEnds() + { + var (spans, comments, problems) = Walk(SourceLanguage.CSharp, csharp); + + await Assert.That(problems).IsEmpty(); + // Two comments, a directive and a trailing comment, and six literals: the hole and the + // literal inside it belong to the string they are in + await Assert.That(comments).IsEqualTo(4); + await Assert.That(spans).IsEqualTo(10); + } + + [Test] + public async Task FSharpSpansAreFoundFromBothEnds() + { + var (spans, comments, problems) = Walk(SourceLanguage.FSharp, fsharp); + + await Assert.That(problems).IsEmpty(); + // The tick of a type parameter is code, so five literals and four comments + await Assert.That(comments).IsEqualTo(4); + await Assert.That(spans).IsEqualTo(9); + } + + /// + /// Source nobody arranged: the patcher's own tests, which are thousands of lines of literals + /// holding code, comments holding literals, and raw strings holding both. + /// + [Test] + [Arguments("InlinePatcherTests.cs")] + [Arguments("InlinePatcherFsTests.cs")] + [Arguments("CsStringLiteralTests.cs")] + [Arguments("FsCompilerRoundTripTests.cs")] + public async Task TheSuitesOwnSourceIsOneConsistentMap(string file) + { + var source = await File.ReadAllTextAsync(Path.Combine(SourceDirectory, file)); + + var (spans, _, problems) = Walk(SourceLanguage.CSharp, source); + + await Assert.That(problems).IsEmpty(); + await Assert.That(spans).IsGreaterThan(10); + } + + static string SourceDirectory { get; } = Path.GetDirectoryName(GetSourceFile())!; + + static string GetSourceFile([CallerFilePath] string path = "") => path; + + /// + /// Steps through the source the way a search does, over spans and one offset at a time across + /// code, and asks every question the scan answers at each place it stops. + /// + static (int spans, int comments, List problems) Walk(SourceLanguage language, string source) + { + using var scan = language.Scan(source); + var problems = new List(); + var ends = new HashSet(); + var spans = 0; + var comments = 0; + var index = 0; + while (index < source.Length) + { + if (!scan.TryGetSkip(index, out var end)) + { + if (!scan.IsCode(index)) + { + problems.Add($"{index} is not code and no span starts there"); + } + + if (scan.TryGetCommentSkip(index, out _)) + { + problems.Add($"{index} starts a comment and no span"); + } + + index++; + continue; + } + + spans++; + ends.Add(end); + if (end <= index || + end > source.Length) + { + problems.Add($"the span at {index} ends at {end}"); + break; + } + + for (var offset = index; offset < end; offset++) + { + if (scan.IsCode(offset)) + { + problems.Add($"{offset} is code inside the span at {index}"); + } + + if (offset > index && + scan.TryGetSkip(offset, out _)) + { + problems.Add($"a span starts at {offset} inside the span at {index}"); + } + } + + if (!scan.TryGetSkipEndingAt(end, out var start) || + start != index) + { + problems.Add($"the span at {index} is not found from its end at {end}"); + } + + var comment = scan.TryGetCommentSkip(index, out var commentEnd); + if (comment) + { + comments++; + if (commentEnd != end) + { + problems.Add($"the comment at {index} ends at {commentEnd} and the span at {end}"); + } + } + + if (scan.TryGetCommentEndingAt(end, out var commentStart) != comment || + comment && commentStart != index) + { + problems.Add($"the span at {index} is a comment from one end and not from the other"); + } + + index = end; + } + + // And nothing ends where the walk found no span ending + for (var offset = 0; offset <= source.Length + 1; offset++) + { + if (!ends.Contains(offset) && + scan.TryGetSkipEndingAt(offset, out _)) + { + problems.Add($"a span ends at {offset} that no span was found to"); + } + } + + return (spans, comments, problems); + } +} diff --git a/src/DiffEngine/Inline/CsLanguage.cs b/src/DiffEngine/Inline/CsLanguage.cs index e1129a4c7..455930f52 100644 --- a/src/DiffEngine/Inline/CsLanguage.cs +++ b/src/DiffEngine/Inline/CsLanguage.cs @@ -78,7 +78,7 @@ internal override SourceScan Scan(string source) break; } - scan.MarkCode(index); + // Code, which is whatever the map was not told otherwise about index++; } diff --git a/src/DiffEngine/Inline/FsLanguage.cs b/src/DiffEngine/Inline/FsLanguage.cs index c2de1bbb4..e1f8fcb36 100644 --- a/src/DiffEngine/Inline/FsLanguage.cs +++ b/src/DiffEngine/Inline/FsLanguage.cs @@ -112,7 +112,7 @@ internal override SourceScan Scan(string source) break; } - scan.MarkCode(index); + // Code, which is whatever the map was not told otherwise about index++; } diff --git a/src/DiffEngine/Inline/InlinePatcher.cs b/src/DiffEngine/Inline/InlinePatcher.cs index e5aee7a72..85af032a1 100644 --- a/src/DiffEngine/Inline/InlinePatcher.cs +++ b/src/DiffEngine/Inline/InlinePatcher.cs @@ -126,7 +126,9 @@ public static PatchStatus TryApply( failReason = ""; var eol = DetectEol(source); var lineStarts = BuildLineStarts(source); - var scan = language.Scan(source); + // Everything that reads the scan does so before this returns, the searches that are + // enumerated lazily included, so its map goes back to the pool on the way out + using var scan = language.Scan(source); var memberLine = MemberLine(source, scan, lineStarts, lineHint, memberName); if (mode == InlinePatchMode.Remove) @@ -1913,12 +1915,18 @@ static bool StartsLine(string source, List lineStarts, int offset) return true; } + // A copy of the whole source for every patch, so the only copy where the framework allows it: + // a builder holds the text once itself before it makes the string static string Splice(string source, int start, int end, string replacement) => +#if NET6_0_OR_GREATER + string.Concat(source.AsSpan(0, start), replacement, source.AsSpan(end)); +#else new StringBuilder(source.Length - (end - start) + replacement.Length) .Append(source, 0, start) .Append(replacement) .Append(source, end, source.Length - end) .ToString(); +#endif static string DetectEol(string source) { diff --git a/src/DiffEngine/Inline/SourceScan.cs b/src/DiffEngine/Inline/SourceScan.cs index 19814ad1c..b6e38785c 100644 --- a/src/DiffEngine/Inline/SourceScan.cs +++ b/src/DiffEngine/Inline/SourceScan.cs @@ -1,3 +1,5 @@ +using System.Buffers; + /// /// A one pass lexical map of a source file: where the comments, strings and char literals are, and /// therefore which offsets are code. @@ -14,85 +16,174 @@ /// because nothing that reads the map can do without it: whatever is looking at an offset is about /// to ask what an identifier character is, or how a literal is written. /// +/// +/// Built again for every patch, over the whole file, so what it is made of shows on a large one. A +/// map as long as the source and three hash tables of its comments and literals came to two +/// megabytes a patch for a ten thousand line file, most of it in arrays large enough to be +/// collected only with the oldest generation. So the map is rented, which is why a scan is +/// disposed, and the spans are kept in the order the lexer found them rather than hashed. +/// /// -sealed class SourceScan(SourceLanguage language, string source) +sealed class SourceScan(SourceLanguage language, string source) : + IDisposable { - readonly bool[] code = new bool[source.Length]; - /// - /// Start of a comment or literal to the offset just past it. + /// True at every offset inside a comment or a literal. Rented, and longer than the source. /// - readonly Dictionary skips = new(); + bool[] skipped = Rent(source.Length); /// - /// The same spans keyed the other way round, for a scan working backwards. Ends are unique - /// because the spans cannot overlap. + /// Where each comment or literal starts and the offset just past it, in source order. The + /// spans cannot overlap, so both lists are sorted and either end of a span is found by + /// searching for it. /// - readonly Dictionary skipEnds = new(); + readonly List starts = []; + + readonly List ends = []; /// /// Which of the spans are comments. A literal is content, so the two cannot be treated alike /// where trivia is being stepped over or trimmed off. /// - readonly HashSet comments = []; + readonly List comments = []; public SourceLanguage Language { get; } = language; public string Source { get; } = source; + static bool[] Rent(int length) + { + var rented = ArrayPool.Shared.Rent(length); + Array.Clear(rented, 0, length); + return rented; + } + /// - /// Records a comment or literal spanning to . - /// Called by the lexer on as it fills the map. + /// Hands the map back. A scan asked anything after this throws rather than answer from an + /// array that some other scan may by then be filling. /// - public void AddSkip(int start, int end, bool comment) + public void Dispose() { - skips.Add(start, end); - skipEnds[end] = start; - if (comment) + var rented = skipped; + skipped = []; + if (rented.Length > 0) { - comments.Add(start); + ArrayPool.Shared.Return(rented); } } - public void MarkCode(int index) => code[index] = true; + /// + /// Records a comment or literal spanning to . + /// Called by the lexer on as it fills the map, in the order it + /// meets them, which is the order the searches below rely on. Everything it does not record + /// is code. + /// + public void AddSkip(int start, int end, bool comment) + { + starts.Add(start); + ends.Add(end); + comments.Add(comment); + skipped.AsSpan(start, end - start).Fill(true); + } /// /// True when the offset is outside every comment, string and char literal. /// public bool IsCode(int index) => index >= 0 && - index < code.Length && - code[index]; + index < Source.Length && + !skipped[index]; /// /// When a comment or literal starts at , is the /// offset just past it. Lets a structural scan step over trivia without lexing it again. /// - public bool TryGetSkip(int index, out int end) => - skips.TryGetValue(index, out end); + public bool TryGetSkip(int index, out int end) + { + var span = SpanStartingAt(index); + end = span < 0 ? 0 : ends[span]; + return span >= 0; + } /// /// for a scan working backwards: when a comment or literal ends at /// , is where it began. /// - public bool TryGetSkipEndingAt(int end, out int start) => - skipEnds.TryGetValue(end, out start); + public bool TryGetSkipEndingAt(int end, out int start) + { + var span = SpanEndingAt(end); + start = span < 0 ? 0 : starts[span]; + return span >= 0; + } /// /// As , but only for comments. /// - public bool TryGetCommentSkip(int index, out int end) => - skips.TryGetValue(index, out end) && - comments.Contains(index); + public bool TryGetCommentSkip(int index, out int end) + { + var span = SpanStartingAt(index); + if (span < 0 || + !comments[span]) + { + end = 0; + return false; + } + + end = ends[span]; + return true; + } /// /// True when a comment ends at , with set to /// where it began. Only comments: a literal is content, and trimming one off a span would be /// trimming off the value. /// - public bool TryGetCommentEndingAt(int end, out int start) => - skipEnds.TryGetValue(end, out start) && - comments.Contains(start); + public bool TryGetCommentEndingAt(int end, out int start) + { + var span = SpanEndingAt(end); + if (span < 0 || + !comments[span]) + { + start = 0; + return false; + } + + start = starts[span]; + return true; + } + + /// + /// Which span starts at , or -1. These are asked of nearly every + /// offset a search steps over, and nearly all of those are code, which the map answers + /// without a search: a span cannot start on an offset that is. + /// + int SpanStartingAt(int index) + { + if (index < 0 || + index >= Source.Length || + !skipped[index]) + { + return -1; + } + + return starts.BinarySearch(index); + } + + /// + /// Which span ends just before , or -1. The offset before it is the + /// span's last, so it is not code either. + /// + int SpanEndingAt(int end) + { + if (end <= 0 || + end > Source.Length || + !skipped[end - 1]) + { + return -1; + } + + return ends.BinarySearch(end); + } /// /// Advances past whitespace and comments. @@ -132,7 +223,7 @@ public int PreviousSignificant(int index) { index--; while (index >= 0 && - (char.IsWhiteSpace(Source[index]) || !code[index])) + (char.IsWhiteSpace(Source[index]) || skipped[index])) { index--; } From 1a63133949cc72c767f4b688c5f334998fb55b48 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:56:05 +1000 Subject: [PATCH 56/73] Write a file's snapshots together when a batch accepts them InlineApplier.ApplyAll reads a source file once, applies its patches in memory and writes it once, and nothing that runs an accept-all called it: the viewer's batch and the tray's both applied an entry at a time, each a read, a lex and a rewrite of the whole file. The rewrite is what costs. A file written a moment ago is scanned by whatever watches the drive before the next thing can open it, so five hundred snapshots in one file were half a minute of writes around a second of patching. Both now hand a file's snapshots over together. The viewer's batch claims, with a snapshot, every other one it still has to do in the same source file (AcceptBatch.Together), applies them through ViewerActions.ApplyTogether, and records each outcome as it would have one at a time. Claimed, rather than looked ahead to, so a settle, a discard or a re-run that lands while the file is being written is noticed for each of them as it is for a single entry. A group's batch takes only its own. The tray's AcceptEvery looks up, when a snapshot's turn comes, the others still to do in its file, and completes them together. Each snapshot still has its own outcome, and the batch's rules decide what becomes of it. Two things do change, and both are what "a file at a time" means. Progress moves by a file's snapshots at once. And the moment up to which a snapshot can still be withdrawn is its file's turn rather than its own: one discarded, or settled by a test that started passing, while its own file is being written was handed over with the rest and is written with them. It is not counted, and a discard still takes it out of the queue. The tray's test for an entry discarded part way now has the two in different files, and a second test says what happens within one. Before, that moment was the entry's own apply; the batch it is part of is now many times shorter. A test's applier is still asked about every snapshot: with only ApplyInline supplied, or the tray's applier seam, together means each in turn. GroupAcceptBenchmarks, "Accept all for" a test in one source file, by the real applier, until the last snapshot is written: one transition a batch, an entry a batch, a file at a time at a time 20 snapshots 51 ms 46 ms 2.8 ms 200 snapshots 1,252 ms 1,285 ms 26 ms and 9.8 MB allocated for the 200 where the one transition allocated 29.5. With other builds running. --- src/DiffEngine/Inline/InlineKey.cs | 8 + .../OwnedInlineHostTest.cs | 135 ++++++++++- src/DiffEngineTray/OwnedInlineHost.cs | 72 +++++- .../AcceptAllProgressTests.cs | 15 +- .../BatchBookkeepingTests.cs | 4 +- .../InlineScreenTests.cs | 11 +- .../SameFileBatchTests.cs | 213 ++++++++++++++++++ src/DiffEngineViewer/AcceptAllRunner.cs | 6 +- src/DiffEngineViewer/AcceptBatch.cs | 16 +- src/DiffEngineViewer/ViewerActions.cs | 32 ++- src/DiffEngineViewer/ViewerSession.cs | 170 ++++++++++---- 11 files changed, 603 insertions(+), 79 deletions(-) create mode 100644 src/DiffEngineViewer.Tests/SameFileBatchTests.cs diff --git a/src/DiffEngine/Inline/InlineKey.cs b/src/DiffEngine/Inline/InlineKey.cs index 8b2555f72..fc8c33da3 100644 --- a/src/DiffEngine/Inline/InlineKey.cs +++ b/src/DiffEngine/Inline/InlineKey.cs @@ -31,6 +31,14 @@ public static string For(string sourceFile, int line) => internal static string FoldPath(string path) => caseInsensitivePaths ? path.ToLowerInvariant() : path; + /// + /// Whether two paths are one file to this machine's file system, without folding either: for + /// a caller asking it of every entry in a queue, where a folded copy of each path each time + /// is the queue's length in strings. + /// + internal static bool SamePath(string left, string right) => + string.Equals(left, right, caseInsensitivePaths ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal); + static bool caseInsensitivePaths = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX); diff --git a/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs b/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs index 06f4b11ed..9c049fbb1 100644 --- a/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs +++ b/src/DiffEngineTray.Tests/OwnedInlineHostTest.cs @@ -814,6 +814,97 @@ public async Task AListingDuringAnAcceptAllSaysHowFarItHasGot() await Assert.That(owner.Send(new(ViewerVerb.ListFull)).Progress).IsNull(); } + /// + /// The snapshots of one source file are written together, with one read and one write, so + /// they are completed together: while the second of two is applying, neither has left the + /// listing and the count has not moved. One at a time each rewrote the whole file, which for + /// five hundred in one file was half a minute where the drive is scanned. + /// + [Test] + public async Task TheSnapshotsOfOneFileAreCompletedTogether() + { + using var held = new HeldApply(2); + using var owner = new Owner(held.Apply); + owner.Queue(@"c:\repo\SampleTests.cs", 7); + owner.Queue(@"c:\repo\SampleTests.cs", 9); + owner.Queue(@"c:\repo\OtherTests.cs", 3); + + var accepting = Task.Run(() => owner.Send(new(ViewerVerb.AcceptAll), TimeSpan.FromSeconds(30))); + held.WaitUntilHeld(); + + var partway = owner.Send(new(ViewerVerb.ListFull)); + await Assert.That(partway.Progress).IsEqualTo(new(0, 3)); + await Assert.That(partway.Items.Count).IsEqualTo(3); + + held.Release(); + var response = await accepting; + + await Assert.That(response.Message).IsEqualTo("Accepted 3"); + await Assert.That(owner.Send(new(ViewerVerb.ListFull)).Items).IsEmpty(); + } + + /// + /// And each still has an outcome of its own: the one that was not written stays, saying why, + /// beside the one of the same file that was. + /// + [Test] + public async Task EachSnapshotOfAFileHasItsOwnOutcome() + { + using var owner = new Owner( + _ => _.LineHint == 9 + ? InlineApplyResult.Failed("the file is held") + : InlineApplyResult.Applied); + owner.Queue(@"c:\repo\SampleTests.cs", 7); + owner.Queue(@"c:\repo\SampleTests.cs", 9); + owner.Queue(@"c:\repo\SampleTests.cs", 11); + + var response = owner.Send(new(ViewerVerb.AcceptAll), TimeSpan.FromSeconds(30)); + + await Assert.That(response.Message).IsEqualTo("Accepted 2, 1 failed. the file is held"); + var left = owner.Send(new(ViewerVerb.ListFull)).Items.Single(); + await Assert.That(left.Key).IsEqualTo(InlineKey.For(@"c:\repo\SampleTests.cs", 9)); + } + + /// + /// With the applier a tray really has, several snapshots land in one real file. + /// + [Test] + public async Task TheRealApplierWritesEverySnapshotOfAFile() + { + var directory = Path.Combine(Path.GetTempPath(), $"OwnedInlineHostTest_{Guid.NewGuid():N}"); + Directory.CreateDirectory(directory); + try + { + var source = Path.Combine(directory, "SampleTests.cs"); + await File.WriteAllTextAsync( + source, + """ + class C + { + void One() => Verify(value).Snapshot("old"); + void Two() => Verify(value).Snapshot("old"); + void Three() => Verify(value).Snapshot("old"); + } + """); + using var owner = new Owner(); + owner.Queue(source, 3, content: "one"); + owner.Queue(source, 4, content: "two"); + owner.Queue(source, 5, content: "three"); + + var response = owner.Send(new(ViewerVerb.AcceptAll), TimeSpan.FromSeconds(30)); + + await Assert.That(response.Message).IsEqualTo("Accepted 3"); + var written = await File.ReadAllTextAsync(source); + await Assert.That(written).Contains("One() => Verify(value).Snapshot(\"one\")"); + await Assert.That(written).Contains("Two() => Verify(value).Snapshot(\"two\")"); + await Assert.That(written).Contains("Three() => Verify(value).Snapshot(\"three\")"); + } + finally + { + Directory.Delete(directory, true); + } + } + /// /// The tracked files are swept first, and a move being retried while a diff tool lets go of it /// is as much of the wait as any snapshot, so they count towards the progress too. @@ -920,7 +1011,8 @@ public async Task AnAcceptAllSweepsOnlyTheDeletesPendingWhenItBegan() /// /// An accept-all runs for as long as the queue is long, and the queue moves meanwhile. It /// applied from a copy taken at the start, so an entry discarded while an earlier one was - /// applying was still written into the source. + /// applying was still written into the source. A file's snapshots are looked up when that + /// file's turn comes, so one discarded before then is not written. /// [Test] public async Task AnEntryDiscardedDuringAnAcceptAllIsNotWritten() @@ -937,12 +1029,12 @@ public async Task AnEntryDiscardedDuringAnAcceptAllIsNotWritten() return held.Apply(patch); }); - owner.Queue(line: 1); - owner.Queue(line: 2); + owner.Queue(@"c:\repo\SampleTests.cs", 1); + owner.Queue(@"c:\repo\OtherTests.cs", 2); var accepting = Task.Run(() => owner.Send(new(ViewerVerb.AcceptAll), TimeSpan.FromSeconds(30))); held.WaitUntilHeld(); - owner.Send(new(ViewerVerb.Discard, InlineKey.For(@"c:\repo\SampleTests.cs", 2))); + owner.Send(new(ViewerVerb.Discard, InlineKey.For(@"c:\repo\OtherTests.cs", 2))); held.Release(); await accepting; @@ -950,6 +1042,41 @@ public async Task AnEntryDiscardedDuringAnAcceptAllIsNotWritten() await Assert.That(applied[0].LineHint).IsEqualTo(1); } + /// + /// The turn is a file's, because a file's snapshots are written together in one write. So one + /// discarded while its own file is being written had already been handed over with the rest + /// of the file, and is written with them. It is gone from the queue as it was asked to be, and + /// is not counted as accepted: the outcome is of an entry that is no longer there. + /// + [Test] + public async Task AnEntryDiscardedWhileItsOwnFileIsWrittenIsNotCounted() + { + using var held = new HeldApply(1); + var applied = new List(); + using var owner = new Owner( + patch => + { + lock (applied) + { + applied.Add(patch); + } + + return held.Apply(patch); + }); + owner.Queue(line: 1); + owner.Queue(line: 2); + + var accepting = Task.Run(() => owner.Send(new(ViewerVerb.AcceptAll), TimeSpan.FromSeconds(30))); + held.WaitUntilHeld(); + owner.Send(new(ViewerVerb.Discard, InlineKey.For(@"c:\repo\SampleTests.cs", 2))); + held.Release(); + var response = await accepting; + + await Assert.That(applied.Count).IsEqualTo(2); + await Assert.That(response.Message).IsEqualTo("Accepted 1"); + await Assert.That(owner.Send(new(ViewerVerb.ListFull)).Items).IsEmpty(); + } + /// /// The menu's accept-all reaches the queue through the tray's own host rather than the wire, /// and a viewer displaying the queue follows that one the same way. diff --git a/src/DiffEngineTray/OwnedInlineHost.cs b/src/DiffEngineTray/OwnedInlineHost.cs index ae09b2667..a33d8b62c 100644 --- a/src/DiffEngineTray/OwnedInlineHost.cs +++ b/src/DiffEngineTray/OwnedInlineHost.cs @@ -59,16 +59,31 @@ sealed class OwnedInlineHost : /// readonly Lock accepting = new(); + /// + /// Several snapshots of one source file, written with one read and one write and answered in + /// the order given: what a bulk accept hands a file's snapshots to. The applier a test + /// supplied, asked of each in turn, when there is one. + /// + readonly Func, IReadOnlyList> together; + OwnedInlineHost( ViewerServer server, Action failed, IViewerLauncher launcher, - Func applier) + Func? applier) { this.server = server; this.failed = failed; this.launcher = launcher; - this.applier = applier; + this.applier = applier ?? InlineApplier.Apply; + if (applier is null) + { + together = InlineApplier.ApplyAll; + } + else + { + together = _ => _.Select(applier).ToList(); + } } /// @@ -86,7 +101,7 @@ sealed class OwnedInlineHost : int? port = null, Func? applier = null) => ViewerServer.TryBind(port ?? ViewerClient.Port, out var server) - ? new(server, failed, launcher ?? new ProcessViewerLauncher(), applier ?? InlineApplier.Apply) + ? new(server, failed, launcher ?? new ProcessViewerLauncher(), applier) : null; public int Port => server.Port; @@ -613,6 +628,15 @@ void IQueueOwner.Window(WindowCommand command, string? key) /// listing shows the queue shrinking and says how far the batch has got. Together they left /// the window showing an untouched queue for as long as the batch took. /// + /// + /// A file at a time where a file has several. Each snapshot applied on its own rewrote its + /// whole source file, and the rewrite is what costs: a file written a moment ago is scanned by + /// whatever watches the drive before the next thing can open it, so five hundred snapshots in + /// one file were half a minute of writes around a second of patching. So when a snapshot's + /// turn comes, the others still to do in its file are looked up with it and written with it, + /// one read and one write, each with its own outcome. That is still looked up when its turn + /// comes, by the first of the file's, and the wait it is looked up ahead of is the one write. + /// /// /// /// The tracked files the caller sweeps once the snapshots are done, for the progress total. @@ -638,12 +662,20 @@ string AcceptEvery(int files, out bool refused) } var tally = new AcceptAllTally(); + // The keys still to come to. One is taken out as its turn comes, or earlier, when an + // earlier snapshot of its file took it along + var waiting = new HashSet(keys); foreach (var key in keys) { - PendingInline? entry; + if (!waiting.Remove(key)) + { + continue; + } + + List claimed; lock (gate) { - entry = queue.Find(key); + var entry = queue.Find(key); if (entry is null || entry.Conflicted) { @@ -652,14 +684,36 @@ string AcceptEvery(int files, out bool refused) progress = progress?.Advance(); continue; } + + claimed = [entry]; + foreach (var other in queue.Items) + { + if (!ReferenceEquals(other, entry) && + !other.Conflicted && + InlineKey.SamePath(other.Patch.SourceFile, entry.Patch.SourceFile) && + waiting.Remove(other.Key)) + { + claimed.Add(other); + } + } } - var result = applier(entry.Patch); - // Together, so no listing can show the entry gone and the count not yet moved past it + var results = claimed.Count == 1 + ? [applier(claimed[0].Patch)] + : together(claimed.Select(_ => _.Patch).ToList()); + if (results.Count != claimed.Count) + { + throw new InvalidOperationException($"{claimed.Count} snapshots were applied together and {results.Count} outcomes came back."); + } + + // Together, so no listing can show an entry gone and the count not yet moved past it lock (gate) { - queue = queue.AcceptInBatch(entry, result, ref tally); - progress = progress?.Advance(); + for (var index = 0; index < claimed.Count; index++) + { + queue = queue.AcceptInBatch(claimed[index], results[index], ref tally); + progress = progress?.Advance(); + } } Changed?.Invoke(); diff --git a/src/DiffEngineViewer.Tests/AcceptAllProgressTests.cs b/src/DiffEngineViewer.Tests/AcceptAllProgressTests.cs index ab0857c25..b22b96d25 100644 --- a/src/DiffEngineViewer.Tests/AcceptAllProgressTests.cs +++ b/src/DiffEngineViewer.Tests/AcceptAllProgressTests.cs @@ -14,7 +14,7 @@ public async Task EachEntryLeavesAsItLands() while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is { } entry) { seen.Add($"{ScreenBuilder.Build(state).Status}, {state.Queue.Count} pending"); - state = ViewerSession.ApplyClaimed(entry, Fixtures.Applied)(state); + state = ViewerSession.ApplyClaimed(state, Fixtures.Applied)(state); } await Assert.That(string.Join("\n", seen)).IsEqualTo( @@ -49,7 +49,7 @@ public async Task TheFilesAreCountedAfterTheSnapshots() while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is { } entry) { kinds.Add($"{state.Progress!.Describe()}: {entry.Kind}"); - state = ViewerSession.ApplyClaimed(entry, actions)(state); + state = ViewerSession.ApplyClaimed(state, actions)(state); } await Assert.That(string.Join("\n", kinds)).IsEqualTo( @@ -83,13 +83,13 @@ public async Task AnEntrySettledPartWayIsPassedOver() var state = ViewerSession.BeginAcceptAll(Pending()); state = ViewerSession.ClaimNext(state); var first = state.Batch!.Current!; - state = ViewerSession.ApplyClaimed(first, actions)(state); + state = ViewerSession.ApplyClaimed(state, actions)(state); var next = state.Batch!.Remaining[0]; state = ViewerSession.Settle(state, next); while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is { } entry) { - state = ViewerSession.ApplyClaimed(entry, actions)(state); + state = ViewerSession.ApplyClaimed(state, actions)(state); } await Assert.That(applied.Count).IsEqualTo(2); @@ -106,7 +106,7 @@ public async Task AReRunWhileItAppliesKeepsTheNewContent() { var state = ViewerSession.BeginAcceptAll(Fixtures.Inline(Fixtures.Patch())); state = ViewerSession.ClaimNext(state); - var record = ViewerSession.ApplyClaimed(state.Batch!.Current!, Fixtures.Applied); + var record = ViewerSession.ApplyClaimed(state, Fixtures.Applied); state = ViewerSession.EnqueueInline(state, Fixtures.Patch(content: "third run")); state = ViewerSession.ClaimNext(record(state)); @@ -128,7 +128,7 @@ public async Task AnEntryThatBecameAConflictIsLeftForReview() Fixtures.Patch("ATests.cs", 1, framework: "net8.0"), Fixtures.Patch("BTests.cs", 2, framework: "net8.0"))); state = ViewerSession.ClaimNext(state); - state = ViewerSession.ApplyClaimed(state.Batch!.Current!, Fixtures.Applied)(state); + state = ViewerSession.ApplyClaimed(state, Fixtures.Applied)(state); state = ViewerSession.EnqueueInline(state, Fixtures.Patch("BTests.cs", 2, content: "nine", framework: "net9.0")); state = ViewerSession.ClaimNext(state); @@ -357,10 +357,11 @@ static async Task Until(Func condition) static ViewerMessage Inline(InlinePatch patch) => new(ViewerVerb.Inline, Body: InlinePatchFile.Build(patch)); + // A file each, so each is a claim of its own: snapshots of one file are claimed together. static SessionState Pending() => Fixtures.Inline( Fixtures.Patch(), - Fixtures.Patch("SampleTests.cs", 88, "\"one\"", "two"), + Fixtures.Patch("MoreTests.cs", 88, "\"one\"", "two"), Fixtures.Patch("OtherTests.cs", 12, null, "brand new")); /// diff --git a/src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs b/src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs index 0c81a4ae9..228df8fd3 100644 --- a/src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs +++ b/src/DiffEngineViewer.Tests/BatchBookkeepingTests.cs @@ -35,7 +35,7 @@ public void AfterEachEntryTheQueueIsStillInOrder() }; while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is { } entry) { - state = ViewerSession.ApplyClaimed(entry, actions)(state); + state = ViewerSession.ApplyClaimed(state, actions)(state); if (!QueueProjection.Order(state.Queue).SequenceEqual(state.Queue, ReferenceEqualityComparer.Instance)) { Assert.Fail($"Out of order after {entry.Name}: {string.Join(", ", state.Queue.Select(_ => _.Name))}"); @@ -71,7 +71,7 @@ public async Task EachEntryIsLeftAsTheBatchRulesSay() while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is { } entry && entry.Name != "FourTests.cs:40") { - state = ViewerSession.ApplyClaimed(entry, actions)(state); + state = ViewerSession.ApplyClaimed(state, actions)(state); } await Assert.That(state.Queue.Select(_ => _.Name)).IsEquivalentTo(["TwoTests.cs:20", "ThreeTests.cs:30", "FourTests.cs:40"]); diff --git a/src/DiffEngineViewer.Tests/InlineScreenTests.cs b/src/DiffEngineViewer.Tests/InlineScreenTests.cs index c0f02d733..632522e5a 100644 --- a/src/DiffEngineViewer.Tests/InlineScreenTests.cs +++ b/src/DiffEngineViewer.Tests/InlineScreenTests.cs @@ -44,14 +44,11 @@ public Task AfterAcceptAll() => [Test] public Task AcceptAllInProgress() { - var state = ViewerSession.BeginAcceptAll(Pending()); - for (var step = 0; step < 2; step++) - { - state = ViewerSession.ClaimNext(state); - state = ViewerSession.ApplyClaimed(state.Batch!.Current!, Fixtures.Applied)(state); - } + // The two snapshots of the first file, which a batch claims and writes together + var state = ViewerSession.ClaimNext(ViewerSession.BeginAcceptAll(Pending())); + state = ViewerSession.ApplyClaimed(state, Fixtures.Applied)(state); - // The third claimed, and still applying + // The second file's claimed, and still applying return Verify(Fixtures.Render(ViewerSession.ClaimNext(state))); } diff --git a/src/DiffEngineViewer.Tests/SameFileBatchTests.cs b/src/DiffEngineViewer.Tests/SameFileBatchTests.cs new file mode 100644 index 000000000..66868f5b1 --- /dev/null +++ b/src/DiffEngineViewer.Tests/SameFileBatchTests.cs @@ -0,0 +1,213 @@ +/// +/// A batch claims the snapshots of one source file together and has them written with one read and +/// one write. Applied one at a time each rewrote the whole file, and the rewrite is what costs: +/// five hundred snapshots in one file were half a minute where the drive is scanned. Each still +/// has an outcome of its own, and everything a single claim guards against is guarded for each. +/// +public class SameFileBatchTests +{ + [Test] + public async Task TheSnapshotsOfOneFileAreWrittenTogether() + { + var together = new List(); + var alone = new List(); + var actions = Recording(together, alone, _ => InlineApplyResult.Applied); + var state = ViewerSession.BeginAcceptAll(TwoFiles()); + var seen = new List(); + + while ((state = ViewerSession.ClaimNext(state)).Batch?.Current is not null) + { + seen.Add($"{ScreenBuilder.Build(state).Status}, {state.Queue.Count} pending"); + state = ViewerSession.ApplyClaimed(state, actions)(state); + } + + await Assert.That(string.Join("\n", seen)).IsEqualTo( + """ + Accepting 1 of 4, 4 pending + Accepting 4 of 4, 1 pending + """); + await Assert.That(together).IsEquivalentTo(["SampleTests.cs:42 SampleTests.cs:88 SampleTests.cs:90"]); + await Assert.That(alone).IsEquivalentTo(["OtherTests.cs:12"]); + await Assert.That(state.Message).IsEqualTo("Accepted 4"); + await Assert.That(state.Queue).IsEmpty(); + } + + /// + /// One write, and still an outcome each: the one that was written leaves, and the two that + /// were not stay, each saying what the applier said of it. + /// + [Test] + public async Task EachOfThemHasItsOwnOutcome() + { + var actions = Recording( + [], + [], + _ => _.LineHint switch + { + 88 => InlineApplyResult.Failed("the file is held"), + 90 => InlineApplyResult.NotFound("no Verify call"), + _ => InlineApplyResult.Applied + }); + + var state = ViewerSession.Apply(TwoFiles(), CommandKind.AcceptAll, actions); + + await Assert.That(state.Queue.Select(_ => _.Name)).IsEquivalentTo(["SampleTests.cs:88", "SampleTests.cs:90"]); + await Assert.That(state.Queue.Single(_ => _.Name == "SampleTests.cs:88").Status).IsEqualTo("the file is held"); + await Assert.That(state.Queue.Single(_ => _.Name == "SampleTests.cs:90").Status!).Contains("no Verify call"); + await Assert.That(state.Message).IsEqualTo("Accepted 2, 1 not written, 1 failed"); + } + + /// + /// A re-run that replaces one of them while the file is being written is news about that one + /// alone. It keeps the new content and is not counted, and the others are recorded as written. + /// + [Test] + public async Task OneReplacedWhileTheyApplyKeepsItsNewContent() + { + var state = ViewerSession.ClaimNext(ViewerSession.BeginAcceptAll(TwoFiles())); + var record = ViewerSession.ApplyClaimed(state, Fixtures.Applied); + + state = ViewerSession.EnqueueInline(state, Fixtures.Patch("SampleTests.cs", 88, "\"one\"", "third run")); + state = record(state); + + await Assert.That(state.Queue.Select(_ => _.Name)).IsEquivalentTo(["SampleTests.cs:88", "OtherTests.cs:12"]); + await Assert.That(state.Queue.Single(_ => _.Name == "SampleTests.cs:88").LeftText).IsEqualTo("third run"); + await Assert.That(state.Batch!.Tally.Accepted).IsEqualTo(2); + } + + /// + /// One that a second framework has made a conflict of is not taken with the others, as it is + /// not claimed on its own: a bulk accept never picks a side. + /// + [Test] + public async Task AConflictInTheFileIsNotClaimedWithTheRest() + { + var state = ViewerSession.EnqueueInline( + Fixtures.Inline( + Fixtures.Patch("SampleTests.cs", 42, framework: "net8.0"), + Fixtures.Patch("SampleTests.cs", 88, "\"one\"", "two", framework: "net8.0"), + Fixtures.Patch("SampleTests.cs", 90, "\"three\"", "four", framework: "net8.0")), + Fixtures.Patch("SampleTests.cs", 88, "\"one\"", "nine", framework: "net9.0")); + + var claimed = ViewerSession.ClaimNext(ViewerSession.BeginAcceptAll(state)); + + await Assert.That(claimed.Batch!.Current!.Name).IsEqualTo("SampleTests.cs:42"); + await Assert.That(claimed.Batch.Together.Select(_ => _.Name)).IsEquivalentTo(["SampleTests.cs:90"]); + + var done = ViewerSession.Apply(state, CommandKind.AcceptAll, Fixtures.Applied); + await Assert.That(done.Message).IsEqualTo("Accepted 2, 1 conflict needs review"); + } + + /// + /// A group's batch is some of the queue, so what it claims with a snapshot is the rest of that + /// file within the group. A snapshot of the same file under another test is not the group's. + /// + [Test] + public async Task AGroupTakesOnlyItsOwnSnapshotsOfTheFile() + { + var state = Fixtures.Inline( + Fixtures.Patch("SampleTests.cs", 42, testName: "First"), + Fixtures.Patch("SampleTests.cs", 88, "\"one\"", "two", testName: "First"), + Fixtures.Patch("SampleTests.cs", 90, "\"three\"", "four", testName: "Second"), + Fixtures.Patch("SampleTests.cs", 95, "\"five\"", "six", testName: "Second")); + var rows = QueueProjection.Visible(state, ScreenBuilder.BodyRows(state), out _).ToList(); + var open = ViewerSession.OpenMenu(state, rows.FindIndex(_ => _.GroupName == "First")); + + var claimed = ViewerSession.ClaimNext(ViewerSession.BeginAcceptGroup(open)); + + await Assert.That(claimed.Batch!.Current!.Name).IsEqualTo("SampleTests.cs:42"); + await Assert.That(claimed.Batch.Together.Select(_ => _.Name)).IsEquivalentTo(["SampleTests.cs:88"]); + + var done = ViewerSession.Apply(open, CommandKind.AcceptGroup, Fixtures.Applied); + await Assert.That(done.Queue.Select(_ => _.Name)).IsEquivalentTo(["SampleTests.cs:90", "SampleTests.cs:95"]); + await Assert.That(done.Message).IsEqualTo("Accepted 2"); + } + + /// + /// An applier that throws for a claim of several fails all of them, since which were written + /// is not known, and the batch still finishes. + /// + [Test] + public async Task AnApplierThatThrowsFailsEveryOneItWasHanded() + { + var host = new SessionHost(TwoFiles()); + var actions = Fixtures.Applied with + { + ApplyInlineTogether = _ => throw new("the disk went away") + }; + host.Mutate(ViewerSession.BeginAcceptAll); + + var message = new AcceptAllRunner(host, actions).Drive(); + + await Assert.That(message).IsEqualTo("Accepted 1, 3 failed"); + await Assert.That(host.State.Batch).IsNull(); + await Assert.That(host.State.Queue.Count).IsEqualTo(3); + await Assert.That(host.State.Queue.All(_ => _.Status == "the disk went away")).IsTrue(); + } + + /// + /// What a viewer applies with: several snapshots in one real file, one write. + /// + [Test] + public async Task TheRealApplierWritesTheFileOnce() + { + var directory = Path.Combine(Path.GetTempPath(), $"SameFileBatchTests_{Guid.NewGuid():N}"); + Directory.CreateDirectory(directory); + try + { + var source = Path.Combine(directory, "SampleTests.cs"); + await File.WriteAllTextAsync( + source, + """ + class C + { + void One() => Verify(value).Snapshot("a"); + void Two() => Verify(value).Snapshot("b"); + void Three() => Verify(value).Snapshot("c"); + } + """); + var state = Fixtures.Inline( + Fixtures.Patch(source, 3, "\"a\"", "one"), + Fixtures.Patch(source, 4, "\"b\"", "two"), + Fixtures.Patch(source, 5, "\"c\"", "three")); + + var done = ViewerSession.Apply(state, CommandKind.AcceptAll, ViewerActions.Real); + + await Assert.That(done.Message).IsEqualTo("Accepted 3"); + var written = await File.ReadAllTextAsync(source); + await Assert.That(written).Contains("Snapshot(\"one\")"); + await Assert.That(written).Contains("Snapshot(\"two\")"); + await Assert.That(written).Contains("Snapshot(\"three\")"); + } + finally + { + Directory.Delete(directory, true); + } + } + + // Three snapshots in one file and one in another. + static SessionState TwoFiles() => + Fixtures.Inline( + Fixtures.Patch(), + Fixtures.Patch("SampleTests.cs", 88, "\"one\"", "two"), + Fixtures.Patch("SampleTests.cs", 90, "\"three\"", "four"), + Fixtures.Patch("OtherTests.cs", 12, null, "brand new")); + + static ViewerActions Recording(List together, List alone, Func outcome) => + Fixtures.Applied with + { + ApplyInline = _ => + { + alone.Add(Name(_)); + return outcome(_); + }, + ApplyInlineTogether = _ => + { + together.Add(string.Join(" ", _.Select(Name))); + return _.Select(outcome).ToList(); + } + }; + + static string Name(InlinePatch patch) => + $"{Path.GetFileName(patch.SourceFile)}:{patch.LineHint}"; +} diff --git a/src/DiffEngineViewer/AcceptAllRunner.cs b/src/DiffEngineViewer/AcceptAllRunner.cs index 22f1c9677..23ff1b2f8 100644 --- a/src/DiffEngineViewer/AcceptAllRunner.cs +++ b/src/DiffEngineViewer/AcceptAllRunner.cs @@ -52,7 +52,7 @@ public void Start() while (true) { var claimed = host.Mutate(ViewerSession.ClaimNext); - if (claimed.Batch?.Current is not { } entry) + if (claimed.Batch?.Current is null) { return claimed.Message; } @@ -60,11 +60,11 @@ public void Start() Func record; try { - record = ViewerSession.ApplyClaimed(entry, actions); + record = ViewerSession.ApplyClaimed(claimed, actions); } catch (Exception exception) { - record = ViewerSession.FailClaimed(entry, exception.Message); + record = ViewerSession.FailClaimed(claimed, exception.Message); } host.Mutate(record); diff --git a/src/DiffEngineViewer/AcceptBatch.cs b/src/DiffEngineViewer/AcceptBatch.cs index a550e8161..265f9ee51 100644 --- a/src/DiffEngineViewer/AcceptBatch.cs +++ b/src/DiffEngineViewer/AcceptBatch.cs @@ -49,6 +49,20 @@ Only is null || /// public QueueEntry? Current { get; init; } + /// + /// The other snapshots claimed with : every one the batch still had to + /// do in the same source file, to be written with it in one write. + /// + /// A snapshot applied on its own reads, patches and rewrites its whole source file, and the + /// rewrite is what costs: a file written a moment ago is scanned by whatever watches the drive + /// before the next thing can open it, so five hundred snapshots in one file were half a + /// minute of writes around a second of patching. Claimed together they are one read and one + /// write (), each still with an outcome of its own. So a + /// batch goes a file at a time where its snapshots are, and an entry at a time otherwise. + /// + /// + public IReadOnlyList Together { get; init; } = []; + public AcceptProgress Progress => - new(Total - Remaining.Count - (Current is null ? 0 : 1), Total); + new(Total - Remaining.Count - (Current is null ? 0 : 1 + Together.Count), Total); } diff --git a/src/DiffEngineViewer/ViewerActions.cs b/src/DiffEngineViewer/ViewerActions.cs index 7ffcd9034..8bff7fc80 100644 --- a/src/DiffEngineViewer/ViewerActions.cs +++ b/src/DiffEngineViewer/ViewerActions.cs @@ -24,13 +24,43 @@ record ViewerActions( /// public Action DeleteFile { get; init; } = Missing; + /// + /// Several snapshots of one source file, written with one read and one write, and an outcome + /// for each in the order they were given. What a batch calls for the snapshots it claimed + /// together: see . + /// + /// Null applies them one at a time through , which is what a caller + /// that supplied only that gets: a test's applier is asked about every snapshot, whether or + /// not a batch took them together. + /// + /// + public Func, IReadOnlyList>? ApplyInlineTogether { get; init; } + + public IReadOnlyList ApplyTogether(IReadOnlyList patches) + { + if (ApplyInlineTogether is { } together && + patches.Count > 1) + { + return together(patches); + } + + var results = new List(patches.Count); + foreach (var patch in patches) + { + results.Add(ApplyInline(patch)); + } + + return results; + } + public static readonly ViewerActions Real = new( InlineApplier.Apply, static (source, destination) => File.Copy(source, destination, true), RevealFile.Show) { MoveFile = Move, - DeleteFile = File.Delete + DeleteFile = File.Delete, + ApplyInlineTogether = InlineApplier.ApplyAll }; /// diff --git a/src/DiffEngineViewer/ViewerSession.cs b/src/DiffEngineViewer/ViewerSession.cs index a03a021a6..514bba579 100644 --- a/src/DiffEngineViewer/ViewerSession.cs +++ b/src/DiffEngineViewer/ViewerSession.cs @@ -801,9 +801,9 @@ static SessionState AcceptGroup(SessionState state, MenuState menu, ViewerAction } state = BeginAcceptGroup(state, menu); - while ((state = ClaimNext(state)).Batch?.Current is { } entry) + while ((state = ClaimNext(state)).Batch?.Current is not null) { - state = ApplyClaimed(entry, actions)(state); + state = ApplyClaimed(state, actions)(state); } return state; @@ -979,9 +979,9 @@ static SessionState AcceptAllInline(SessionState state, ViewerActions actions) } state = BeginAcceptAll(state); - while ((state = ClaimNext(state)).Batch?.Current is { } entry) + while ((state = ClaimNext(state)).Batch?.Current is not null) { - state = ApplyClaimed(entry, actions)(state); + state = ApplyClaimed(state, actions)(state); } return state; @@ -1120,14 +1120,16 @@ public static SessionState ClaimNext(SessionState state) continue; } + var remaining = batch.Remaining.Skip(position + 1).ToList(); return state with { Queue = queue, Batch = batch with { - Remaining = batch.Remaining.Skip(position + 1).ToList(), Kept = kept, - Current = entry + Current = entry, + Together = TakeSameFile(queue, entry, remaining), + Remaining = remaining } }; } @@ -1142,42 +1144,118 @@ batch with } /// - /// Applies a claimed entry - the one piece of IO in a batch, done without the lock - and hands - /// back the transition that records how it went, for the caller to take the lock for. + /// The other snapshots the batch still has to do in the same source file as the one just + /// claimed, taken out of to be claimed with it: see + /// . None for a move or a delete, which is a file of its own. + /// + /// Claimed, rather than looked ahead to by whoever applies, so that nothing can settle, + /// discard or replace one of them between its patch being written and its outcome being + /// recorded without the record noticing, as it notices for a single entry. + /// + /// + /// Asked of the queue first, and without making anything, since most claims find no other + /// snapshot in their file and a batch makes one claim an entry. + /// + /// + static IReadOnlyList TakeSameFile(IReadOnlyList queue, QueueEntry claimed, List remaining) + { + if (claimed is not { Kind: QueueEntryKind.Inline, Patch: { } patch } || + remaining.Count == 0) + { + return []; + } + + List? sameFile = null; + foreach (var entry in queue) + { + if (!ReferenceEquals(entry, claimed) && + entry is { Kind: QueueEntryKind.Inline, Conflicted: false, Patch: not null } && + InlineKey.SamePath(entry.Patch.SourceFile, patch.SourceFile)) + { + sameFile ??= []; + sameFile.Add(entry); + } + } + + if (sameFile is null) + { + return []; + } + + // Only the ones this batch set out to do: a group's batch is some of the queue, and an + // entry that arrived after it began is not part of it + var waiting = new HashSet(remaining); + sameFile.RemoveAll(_ => !waiting.Contains(_.Key)); + if (sameFile.Count == 0) + { + return []; + } + + var taken = new HashSet(sameFile.Select(_ => _.Key)); + remaining.RemoveAll(taken.Contains); + return sameFile; + } + + /// + /// Applies what a state has claimed - the one piece of IO in a batch, done without the lock - + /// and hands back the transition that records how it went, for the caller to take the lock for. + /// Snapshots claimed together are written together, and each still has an outcome of its own. /// - public static Func ApplyClaimed(QueueEntry entry, ViewerActions actions) + /// The state returned, which says what was claimed. + /// What applies it. + public static Func ApplyClaimed(SessionState claimed, ViewerActions actions) { - if (entry.Kind == QueueEntryKind.Inline) + if (claimed.Batch is not { Current: { } entry } batch) { - var result = actions.ApplyInline(entry.Patch!); - return _ => RecordInline(_, entry, result); + return static _ => _; } - var failure = TryApplyTracked(entry, actions, discarding: false); - return _ => RecordTracked(_, entry, failure); + if (entry.Kind != QueueEntryKind.Inline) + { + var failure = TryApplyTracked(entry, actions, discarding: false); + return _ => RecordTracked(_, entry, failure); + } + + List entries = [entry, ..batch.Together]; + var results = actions.ApplyTogether(entries.Select(_ => _.Patch!).ToList()); + if (results.Count != entries.Count) + { + throw new InvalidOperationException($"{entries.Count} snapshots were applied together and {results.Count} outcomes came back."); + } + + return _ => RecordInline(_, entries, results); } /// - /// The transition for a claimed entry whose apply threw rather than answering. InlineApplier - /// answers every failure it knows of, so this is an applier that did not, and a batch left - /// holding a claimed entry would never finish. + /// The transition for a claim whose apply threw rather than answering. InlineApplier answers + /// every failure it knows of, so this is an applier that did not, and a batch left holding + /// what it claimed would never finish. Every snapshot of the claim is failed with it, since + /// which of them were written is not known. /// - public static Func FailClaimed(QueueEntry entry, string failure) + public static Func FailClaimed(SessionState claimed, string failure) { - if (entry.Kind == QueueEntryKind.Inline) + if (claimed.Batch is not { Current: { } entry } batch) { - return _ => RecordInline(_, entry, InlineApplyResult.Failed(failure)); + return static _ => _; } - return _ => RecordTracked(_, entry, failure); + if (entry.Kind != QueueEntryKind.Inline) + { + return _ => RecordTracked(_, entry, failure); + } + + List entries = [entry, ..batch.Together]; + var failed = InlineApplyResult.Failed(failure); + var results = entries.Select(_ => failed).ToList(); + return _ => RecordInline(_, entries, results); } /// - /// A snapshot's outcome, by the batch's rules rather than a single accept's: see - /// . An entry that changed while its patch was applying, - /// because a re-run replaced it, keeps its new content and is not counted. + /// The outcomes of the snapshots a claim applied, by the batch's rules rather than a single + /// accept's: see . An entry that changed while its + /// patch was applying, because a re-run replaced it, keeps its new content and is not counted. /// - /// The rules are still asked of an , but of one holding this entry + /// The rules are still asked of an , but of one holding the entry /// alone, and what it says is done to the list as it stands: the entry taken out, or given the /// status. Every other inline transition rebuilds the whole list from the whole queue, and a /// batch did that once an entry, so its own bookkeeping grew with the square of the queue: @@ -1186,7 +1264,7 @@ public static Func FailClaimed(QueueEntry entry, str /// is nothing for a rebuild to find. /// /// - static SessionState RecordInline(SessionState state, QueueEntry entry, InlineApplyResult result) + static SessionState RecordInline(SessionState state, IReadOnlyList entries, IReadOnlyList results) { if (state.Batch is not { } batch) { @@ -1194,29 +1272,30 @@ static SessionState RecordInline(SessionState state, QueueEntry entry, InlineApp } var tally = batch.Tally; - var queue = state.Queue; - // By its variants, which is how the batch finds what it started on. A snapshot's only: - // every move and delete has none, and may well share the one empty list. - var index = -1; - for (var position = 0; position < queue.Count; position++) + var queue = state.Queue.ToList(); + for (var claim = 0; claim < entries.Count; claim++) { - if (queue[position].Kind == QueueEntryKind.Inline && - ReferenceEquals(queue[position].Variants, entry.Variants)) + var entry = entries[claim]; + // By its variants, which is how the batch finds what it started on. A snapshot's + // only: every move and delete has none, and may well share the one empty list. + var index = queue.FindIndex(_ => _.Kind == QueueEntryKind.Inline && ReferenceEquals(_.Variants, entry.Variants)); + if (index < 0) { - index = position; - break; + continue; } - } - if (index >= 0) - { - var claimed = queue[index]; + var held = queue[index]; var outcome = InlineQueue - .From([new(claimed.Variants, claimed.Status)]) - .AcceptInBatch(new(entry.Variants, entry.Status), result, ref tally); - queue = outcome.Count == 0 - ? Without(queue, index) - : Replace(queue, index, claimed with { Status = outcome.Items[0].Status }); + .From([new(held.Variants, held.Status)]) + .AcceptInBatch(new(entry.Variants, entry.Status), results[claim], ref tally); + if (outcome.Count == 0) + { + queue.RemoveAt(index); + } + else + { + queue[index] = held with { Status = outcome.Items[0].Status }; + } } return Remove( @@ -1225,7 +1304,8 @@ state with Batch = batch with { Tally = tally, - Current = null + Current = null, + Together = [] } }, queue, From 343e375f26dea7abbabc8ef458f82535aa4ef50b Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:36:35 +1000 Subject: [PATCH 57/73] Skip what a macOS repaint cannot reach, and keep the lines the last draw made A spinner turns by invalidating its own rectangle, some twenty times a second for as long as a page is being drawn. Renderer.draw took no notice of what it was being asked to repaint: every turn built the attributed string and the line for every piece of text in the window, about a hundred and fifty of them. And text outside Latin is a line a character, since the managed side sends every character CellGrid.Simple leaves out as a segment of its own. What AppKit hands the view for such a turn could not be found out here, so there are two changes, one for each answer. Where the clip is narrowed to what was invalidated, draw now leaves the rest out. It reads the bounds of the context's clip, and a row, a queue row, a line of text and a picture are skipped when their own rectangle does not touch it. It is the clip that is asked, at each draw, rather than what was invalidated or the rectangle the view is passed, so nothing that would have been painted can be left out: nothing outside the clip is painted, whatever is drawn. The test is of everything the caller would paint, so that something partly inside is still drawn. A row is asked about with its gutter, which a pane narrower than a gutter draws past the row's own edge, and a picture with its outline, which is the point outside it. Text is clipped to its own rectangle already, so that rectangle is the whole of it. The background, the rules, the buttons' faces and the spinner are drawn regardless and left to the clip, each being a call or two. The layout that comes back is still the whole window's, since the view resolves clicks, tooltips and cursors against it: an enlarged picture said where it was after drawing, and now says it before. A capture has no clip to read and is given none, so it leaves nothing out. Where the clip is not narrowed, the whole window is drawn, as it has to be, and that looks to be the usual case. Since macOS 11 a layer backed view whose backing store AppKit manages is reported to be handed its whole bounds whatever was invalidated, clip included, and Apple has called that the expected behaviour (developer.apple.com/forums/thread/663256). On macOS 14.0 to 14.3 any invalidation was the whole view, and later versions still ask for all of it now and then (developer.apple.com/forums/thread/738042). So the lines are kept as well: the ones the last two draws drew, found by their text and colour. A draw that draws the same text again makes none of them, which is a turn of a spinner, a dragged picture or splitter, and all but a row of a scroll. One found from the draw before is carried forward, and one that was not drawn again goes when the next draw begins, so what is kept is two draws' worth of lines however long the session: a window of text twice over at the most. A draw that reached no text is passed over, so that where the clip is a spinner, a turn leaves the lines as they were for whatever is drawn after it. The todo sketched keeping the lines of single clusters only. That was on the footing that a turn lays out nothing else once the clip is honoured, and it is every line instead because of the above. Single clusters are still the ones it saves most on: one line for every character of a pane of Chinese, most of them the same few hundred. A line is made from its text, its colour and the font. The font is the renderer's for its whole life, so the first two are the key. The text is compared by its bytes rather than as Swift compares strings, which holds a composed character equal to the same one decomposed. The colour is compared by which object it is, and the palette now hands out one object for each of the three colours a changed row's text is drawn in, where it made one on every call. Comparing colours through Core Foundation instead would rest on Core Graphics hashing equal colours alike, which could not be checked here, and a key whose hash and equality disagree is one a dictionary can trap on. A capture draws from the same table. A kept line is the line that would have been made, so nothing it draws moves, and the captures CI takes one after another now draw the labels they share from it. Widening CellGrid.Simple, the third fix the todo sketches, is managed code and is not here. Written without being compiled or run. There is no Mac on this machine, so the macos-14 job is the first to build it. That job only captures, and a capture has no clip and no window, so nothing there exercises the skipping at all. --- native/swift/Sources/Deview/Palette.swift | 15 +- native/swift/Sources/Deview/Renderer.swift | 167 ++++++++++++++++++--- 2 files changed, 160 insertions(+), 22 deletions(-) diff --git a/native/swift/Sources/Deview/Palette.swift b/native/swift/Sources/Deview/Palette.swift index bfa6f9546..aa9277d75 100644 --- a/native/swift/Sources/Deview/Palette.swift +++ b/native/swift/Sources/Deview/Palette.swift @@ -56,14 +56,23 @@ enum Palette { static let checkerLight = grey(64) static let checkerDark = grey(48) + /// What a changed row's text is drawn in, and the label of an entry that failed. One of each + /// for the life of the process, where `foreground` made one for every call, which was every + /// segment of every changed row. It has to be one of each: `Renderer` finds a line it has kept + /// by its text and by which colour object it was drawn in, so a colour made afresh would find + /// nothing. + private static let added = rgb(126, 214, 139) + private static let removed = rgb(233, 129, 129) + private static let modified = rgb(231, 197, 113) + static func foreground(_ kind: Int32) -> CGColor { switch kind { case DEVIEW_ROW_ADDED.value: - return rgb(126, 214, 139) + return added case DEVIEW_ROW_REMOVED.value: - return rgb(233, 129, 129) + return removed case DEVIEW_ROW_MODIFIED.value: - return rgb(231, 197, 113) + return modified // Dimmed like the gutter, since what it says is about the file rather than from it. case DEVIEW_ROW_FOLDED.value: return dim diff --git a/native/swift/Sources/Deview/Renderer.swift b/native/swift/Sources/Deview/Renderer.swift index 1ea5ce0f5..af2033148 100644 --- a/native/swift/Sources/Deview/Renderer.swift +++ b/native/swift/Sources/Deview/Renderer.swift @@ -51,6 +51,24 @@ final class Renderer { /// view because this is what lays the rule out, and the drag has to land where it was drawn. private var queueWidth: CGFloat = 0 + /// What the draw in progress can reach, or nil for everything: the bounds of the context's + /// clip, outside which nothing is painted whatever is asked for. What lies wholly outside it is + /// not laid out either: see `shows`. + /// + /// A spinner turns by invalidating its own rectangle, some twenty times a second for as long + /// as a page takes. Where AppKit narrows the clip to that rectangle, a turn lays out the + /// spinner and nothing else, where it used to lay out every line of text in the window to + /// paint none of it. + /// + /// It does not always narrow it, which is why the clip is read at each draw and never worked + /// out from what was invalidated. Since macOS 11 a view whose backing store AppKit manages can + /// be handed its whole bounds whatever was invalidated, clip included, and later versions ask + /// for the whole of a view when they see fit. Then all of it is drawn, as it has to be, and + /// what keeps that cheap is `lines`. + /// + /// Set as a draw begins and read only during it. + private var dirty: CGRect? + /// Decoded pictures, keyed by the path the screen model handed over and invalidated by the /// file's write time and length — the same freshness test the queue poller uses, so a re-run /// that rewrites a received image refreshes the pane rather than leaving the previous one up. @@ -108,6 +126,50 @@ final class Renderer { case scaled(path: String, modified: Date, length: UInt64, size: Pixels, image: CGImage?) } + /// The lines the last two draws drew, by what each was made from. + /// + /// Every piece of text is an attributed string and a line, and each was made again on every + /// draw: about a hundred and fifty for a window of plain text, and one more for every + /// character the managed side sends as a segment of its own, which is most of a pane of + /// Chinese. Yet most draws draw what the one before drew. A turn of a spinner or a dragged + /// picture changes none of the text, and a scroll keeps all but a row of it. So a line is + /// kept for as long as it goes on being drawn. + /// + /// `lines` is what this draw has drawn so far, and `earlier` what the last draw to draw any + /// text drew. A line found in `earlier` is carried into `lines`, and what is still only in + /// `earlier` when `lines` takes its place was not drawn again and goes with it. That is the + /// bound: two draws' worth of lines, however long the session. + /// + /// A line is made from its text, its colour and the font. The first two are the key, and the + /// font is this renderer's for as long as it lives, so a line kept here is never one that + /// would be made differently now. A capture draws from here too: it is the same line. + private var lines: [LineKey: CTLine] = [:] + private var earlier: [LineKey: CTLine] = [:] + + /// What a kept line was made from. Two texts are the same when their bytes are, rather than + /// as Swift compares strings, which holds a composed character equal to the same one + /// decomposed: Core Text is handed different characters for the two, and need not draw them + /// alike. + /// + /// The colour by which object it is, which `Palette` makes the same as which colour it is by + /// handing out one object each. Asking Core Foundation whether two are equal instead would + /// rest on Core Graphics hashing equal colours alike, which nothing here can check, and a key + /// whose hash and equality disagree is one a dictionary can trap on. The colour is held as + /// well as compared, so nothing else can be at its address while a line is kept under it. + private struct LineKey: Hashable { + let text: String + let colour: CGColor + + static func == (left: LineKey, right: LineKey) -> Bool { + left.colour === right.colour && left.text.utf8.elementsEqual(right.text.utf8) + } + + func hash(into hasher: inout Hasher) { + hasher.combine(text) + hasher.combine(ObjectIdentifier(colour)) + } + } + /// One character cell. Measured from the font that was actually loaded, which is what the ABI /// reports back so the managed side can slice a pane to rows that fit. let cell: CGSize @@ -260,9 +322,23 @@ final class Renderer { /// `capturing` decodes and scales pictures here and now, and stands a spinner still: a capture /// draws one frame, which has to have its pictures in it and come out the same every time. + /// + /// The layout that comes back is the whole window's whatever is being repainted. What a + /// repaint of part of it leaves out is the drawing, and a capture leaves out nothing. @discardableResult func draw(_ frame: Frame, in context: CGContext, size: CGSize, capturing: Bool = false) -> Layout { takeFinished() + dirty = capturing ? nil : context.boundingBoxOfClipPath + // The lines the last draw drew are the ones this one may use again, and what the draw + // before it drew and it did not goes here. A draw that reached no text is passed over: + // where the clip is a spinner, a turn would otherwise leave nothing kept for whatever is + // drawn after it. + if !lines.isEmpty { + earlier = lines + lines = [:] + } + + lines.reserveCapacity(earlier.count) var layout = Layout() context.setFillColor(Palette.background) context.fill(CGRect(origin: .zero, size: size)) @@ -474,7 +550,7 @@ final class Renderer { } private func queueItem(_ frame: Frame, _ index: Int, _ bounds: CGRect, _ context: CGContext) { - guard index < frame.queue.count else { + guard index < frame.queue.count, shows(bounds) else { return } @@ -510,6 +586,13 @@ final class Renderer { return } + // Left alone when none of it is being repainted. Asked of the row with its gutter, which a + // pane narrower than one draws past the row's own edge. + let width = Renderer.gutterCells * cell.width + guard shows(CGRect(x: bounds.minX, y: bounds.minY, width: max(bounds.width, width), height: bounds.height)) else { + return + } + let row = pane.rows[index] if let background = Palette.rowBackground(row.kind) { context.setFillColor(background) @@ -523,7 +606,6 @@ final class Renderer { // A folded row has no number, and printing the -1 standing in for one put it in the gutter. let number = row.lineNumber < 0 ? "" : String(row.lineNumber) let gutter = "\(Palette.marker(row.kind)) \(String(repeating: " ", count: max(0, 4 - number.count)))\(number)" - let width = Renderer.gutterCells * cell.width // Behind the text rather than over it, and the text keeps its own colour: what kind of // change a line is has to survive being selected. @@ -636,6 +718,12 @@ final class Renderer { return } + // Left alone when none of it is being repainted, as when the clip is the other pane's + // spinner. Asked of the picture with its outline, which is the point outside it. + guard shows(bounds.insetBy(dx: -1, dy: -1)) else { + return + } + checker(bounds, in: context) context.saveGState() @@ -696,6 +784,22 @@ final class Renderer { width: whole.width, height: whole.height) + // The last one appended is this pane's, by `image`, before it knew the picture was there. + // Said before anything is drawn, because where the picture is does not turn on how much of + // the window this draw is for. + if !layout.pictures.isEmpty { + layout.pictures[layout.pictures.count - 1].enlarged = true + layout.pictures[layout.pictures.count - 1].whole = whole + layout.pictures[layout.pictures.count - 1].centre = centre + layout.pictures[layout.pictures.count - 1].across = across + layout.pictures[layout.pictures.count - 1].down = down + } + + // Left alone when none of it is being repainted, as a fitted one is + guard shows(bounds.insetBy(dx: -1, dy: -1)) else { + return + } + checker(bounds, in: context) context.saveGState() @@ -710,15 +814,6 @@ final class Renderer { context.setStrokeColor(Palette.rule) context.setLineWidth(1) context.stroke(bounds.insetBy(dx: -0.5, dy: -0.5)) - - // The last one appended is this pane's, by `image`, before it knew the picture was there - if !layout.pictures.isEmpty { - layout.pictures[layout.pictures.count - 1].enlarged = true - layout.pictures[layout.pictures.count - 1].whole = whole - layout.pictures[layout.pictures.count - 1].centre = centre - layout.pictures[layout.pictures.count - 1].across = across - layout.pictures[layout.pictures.count - 1].down = down - } } /// Something turning, centred in `space`, while the picture that will be centred there is on @@ -1013,24 +1108,58 @@ final class Renderer { } /// Clipped to its own rect, so a long line stops at its column instead of running into the - /// next one. + /// next one. Which is also what lets it be left out when that rect is not being repainted: + /// none of it could have landed anywhere else. private func text(_ string: String, in bounds: CGRect, _ colour: CGColor, _ context: CGContext) { - guard !string.isEmpty, bounds.width > 0 else { + guard !string.isEmpty, bounds.width > 0, shows(bounds) else { return } + context.saveGState() + context.clip(to: bounds) + context.textPosition = CGPoint(x: bounds.minX, y: bounds.minY + descent) + CTLineDraw(typeset(string, colour), context) + context.restoreGState() + } + + /// `string` as a line in `colour`: the one this draw or the last one drew it with, or else a + /// new one, as every line used to be. + private func typeset(_ string: String, _ colour: CGColor) -> CTLine { + let flat = RowText.flatten(string) + let key = LineKey(text: flat, colour: colour) + if let kept = lines[key] { + return kept + } + + let line = earlier[key] ?? lay(flat, colour) + lines[key] = line + return line + } + + private func lay(_ flat: String, _ colour: CGColor) -> CTLine { let attributed = NSAttributedString( - string: RowText.flatten(string), + string: flat, attributes: [ .font: font, .foregroundColor: colour ]) + return CTLineCreateWithAttributedString(attributed) + } - context.saveGState() - context.clip(to: bounds) - context.textPosition = CGPoint(x: bounds.minX, y: bounds.minY + descent) - CTLineDraw(CTLineCreateWithAttributedString(attributed), context) - context.restoreGState() + /// Whether anything drawn in `bounds` can reach the screen in the draw in progress: always in + /// a capture, and in a window when what is being repainted touches `bounds`, by however + /// little. + /// + /// Asked only with a rect that holds everything the caller would paint. The background, the + /// rules, a button's face and a spinner are not asked about at all: each is a call or two, and + /// the clip sees to them. And asked only about drawing: where things are goes into the layout + /// whatever is being repainted, since the view resolves clicks against it afterwards. + private func shows(_ bounds: CGRect) -> Bool { + guard let dirty else { + return true + } + + return dirty.intersects(bounds) } private func rule(top: CGFloat, width: CGFloat, in context: CGContext, _ size: CGSize) { From 33d09647f20e6e7b94ce61095e871e634e5ada50 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:41:17 +1000 Subject: [PATCH 58/73] Draw an enlarged macOS picture below its own size from a copy at that size An enlarged picture that is still below its own size was drawn straight from the decoded picture at .high, which resamples every source pixel under the clip on every redraw. A drag is a redraw a frame, so dragging a pair of 2880 pixel wide screenshots at 150% resampled both panes on each frame, to change nothing but where they are. Scrolling the rows above the pictures, or selecting in them, cost the same. The window now draws such a picture from a copy scaled to the device pixels the whole of it takes. The copy is made on the work queue by the code that makes the fitted copy, and kept where that one is. It turns on the picture's file and stamp and on that size, never on where the picture has been dragged to, so a drag draws the same copy somewhere else. The copy is put a pixel to a pixel: on the pixel nearest to where the drag left the picture, and at the copy's own size, which is the picture's to the nearest pixel too. Drawn into the exact rectangle it would be sampled again on every frame, each pane softening its own by a different fraction of a pixel, or, unsmoothed, losing or doubling a row or a column where the two sizes part. Every part of it stays within about a pixel of where it was. Nearest takes some care. Where a picture has been dragged to goes to the managed side and back as a Float, and where it should be drawn is often exactly half way between two pixels, so rounding it as it stands took a picture dragged a pixel at a time by none or by two. The position is taken to an eighth of a pixel first, and a half goes up whatever its sign. A model of the drag's arithmetic, in Python, had two drags in five wobble without that on a plain display and none with it. It is not a test of the Swift. Until the copy lands the picture itself is drawn at .low, and drawn again when it lands, as a fitted picture is stretched from its last copy while a window is resized. So a step of zoom is a quick rough frame or two and then the copy, where it was a slow frame every time. The copy is asked for before the picture is tested against the clip, as a fitted one's is, so a draw that leaves the picture out has still started it. What is kept is one copy a picture, in the slot the fitted copy had, so the two are never both held. Four bytes a pixel, at a size narrower than the picture's own, since a copy is only made below that: about what the decoded picture itself comes to, at the most. Past its own size the picture is drawn from as before, with .none. A 2880 by 1800 screenshot that fits its pane at 1040 pixels across is 6.1 MB at 150% (1560 by 975) and 10.8 MB at 200% (2080 by 1300), beside the 20.7 MB the decoded picture already is, and at 300% it is past its own size and there is no copy. A pair is twice that. What evicts it is a copy for another size landing: another step of zoom, a resized window or pane, a display of another scale, or going back to fitted, which makes the fitted copy again where it used to be still there. Or the picture leaving the frame, which drops its entry at the next draw, or its file being rewritten, which replaces the entry. Zooming past the picture's own size does not: the copy stays, unused, until one of those. Not when both panes name the one picture, which a byte equal pair of documents does, their pages being kept under the document's hash. With one copy a picture and panes that can be a point apart in width, each copy that landed would be the wrong size for the other pane, and the two would be made in turn without end. Such a pair is drawn from the picture, as before. By a reading of fitted, a fitted pair of them takes those turns already; that is left as it was. The copy is sRGB, as the fitted one is, where the picture itself is drawn in whatever space its file names. A capture is as it was. It draws from the picture, by the statement it always did, and asks for no copy, so no baseline moves. Written without being compiled or run. There is no Mac on this machine, so the macos-14 job is the first to build it. That job only captures, which this leaves alone, so nothing there runs the new path. --- native/swift/Sources/Deview/Renderer.swift | 115 +++++++++++++++++++-- 1 file changed, 104 insertions(+), 11 deletions(-) diff --git a/native/swift/Sources/Deview/Renderer.swift b/native/swift/Sources/Deview/Renderer.swift index af2033148..1e990210d 100644 --- a/native/swift/Sources/Deview/Renderer.swift +++ b/native/swift/Sources/Deview/Renderer.swift @@ -69,6 +69,13 @@ final class Renderer { /// Set as a draw begins and read only during it. private var dirty: CGRect? + /// Both panes name the one picture in the draw in progress, as a byte equal pair of documents + /// does: their pages are kept under the hash of the document. There is one scaled copy a + /// picture and the two panes can be a point apart in width, so each would have the copy made + /// for its own size in turn, without end. An enlarged pair is not given the chance: it is + /// drawn from the picture, as every enlarged picture was before it had a copy. + private var shared = false + /// Decoded pictures, keyed by the path the screen model handed over and invalidated by the /// file's write time and length — the same freshness test the queue poller uses, so a re-run /// that rewrites a received image refreshes the pane rather than leaving the previous one up. @@ -88,9 +95,14 @@ final class Renderer { var modified: Date var length: UInt64 - /// The picture scaled down to the device pixels it last filled. Drawing a large picture - /// scaled costs a resample of every source pixel, and a window showing one did that on - /// every redraw; this is a copy. + /// The picture scaled down to the device pixels it was last drawn at: the ones it fills + /// when it is fitted, and the ones the whole of it takes, shown or not, when it is enlarged + /// and still below its own size. Drawing a large picture scaled costs a resample of every + /// source pixel, and a window showing one did that on every redraw; this is a copy. + /// + /// One copy, for whichever size was asked for last. It is only made narrower than the + /// picture or shorter, so at its largest it is about the size the picture is itself. It + /// goes when a copy for another size lands, and with the picture. var scaled: CGImage? /// Being decoded on `work`. The pane shows a spinner until it lands. @@ -399,6 +411,7 @@ final class Renderer { // path was asked for again and had changed or gone, so every image reviewed in a session // was held until the session ended. let shown: Set = [frame.left.imagePath, frame.right.imagePath] + shared = !frame.left.imagePath.isEmpty && frame.left.imagePath == frame.right.imagePath pictures = pictures.filter { shown.contains($0.key) } gate.lock() wanted = shown @@ -701,7 +714,7 @@ final class Renderer { width: max(1, (CGFloat(pane.imageWidth) * scale).rounded(.down)), height: max(1, (CGFloat(pane.imageHeight) * scale).rounded(.down))) if pane.imageZoom > 1 { - enlarged(pane, picture, fitted: drawn, top: imageTop, left: left, available: available, in: context, size, &layout) + enlarged(pane, picture, fitted: drawn, top: imageTop, left: left, available: available, capturing: capturing, in: context, size, &layout) return } @@ -746,8 +759,11 @@ final class Renderer { /// part around the centre the managed side asked for, moved in as far as it takes to keep the /// space full: it does not know how many points a pane has, so it can ask for one at the edge. /// - /// Drawn straight from the decoded picture, clipped, rather than from a copy scaled to that - /// size, which at the last step would be hundreds of megabytes to show one corner of it. + /// Past its own size it is drawn straight from the decoded picture, clipped, rather than from a + /// copy scaled to that size, which at the last step would be hundreds of megabytes to show one + /// corner of it. Below its own size a copy is about the size of the picture at the most, and + /// the window draws from one: see `reduced`. A capture draws from the picture at any size, as + /// it always has. private func enlarged( _ pane: Frame.Pane, _ picture: CGImage, @@ -755,6 +771,7 @@ final class Renderer { top: CGFloat, left: CGFloat, available: CGSize, + capturing: Bool, in context: CGContext, _ size: CGSize, _ layout: inout Layout @@ -795,6 +812,15 @@ final class Renderer { layout.pictures[layout.pictures.count - 1].down = down } + // Below its own size the window draws it from a copy scaled to the pixels the whole of it + // takes: see `reduced`. Asked for here rather than past the test below, as a fitted + // picture's copy is, so that a draw which leaves the picture out has still started the + // copy the next one will want. Not for a capture, which is one frame with no later one + // for a copy to land in, and not when both panes name the one picture. + let device = context.convertToDeviceSpace(all).size + let reducing = !capturing && !shared && abs(device.width) < CGFloat(picture.width) + let made = reducing ? self.fitted(pane.imagePath, picture, device: device, capturing: false) : nil + // Left alone when none of it is being repainted, as a fitted one is guard shows(bounds.insetBy(dx: -1, dy: -1)) else { return @@ -804,11 +830,15 @@ final class Renderer { context.saveGState() context.clip(to: bounds) - // Its pixels as they are once it is past its own size, which is what zooming that far in - // is for: smoothed, a one pixel difference between the two sides is a blur on both. - let device = context.convertToDeviceSpace(all).size - context.interpolationQuality = abs(device.width) >= CGFloat(picture.width) ? .none : .high - context.draw(picture, in: all) + if reducing { + reduced(made, picture, at: all, device: device, in: context) + } else { + // Its pixels as they are once it is past its own size, which is what zooming that far + // in is for: smoothed, a one pixel difference between the two sides is a blur on both. + context.interpolationQuality = abs(device.width) >= CGFloat(picture.width) ? .none : .high + context.draw(picture, in: all) + } + context.restoreGState() context.setStrokeColor(Palette.rule) @@ -816,6 +846,64 @@ final class Renderer { context.stroke(bounds.insetBy(dx: -0.5, dy: -0.5)) } + /// The whole of an enlarged picture that is still below its own size, at `all`, for the + /// window. The caller has clipped to the part of it that shows, and `made` is what `fitted` + /// had for the pixels the whole of it takes. + /// + /// Drawn from a copy scaled to those pixels, made on `work` and kept as the fitted one is, in + /// its place. Drawn from the picture itself, this was a resample at `.high` of every source + /// pixel under the clip on every redraw, and a drag is a redraw a frame: both panes of a pair + /// of screenshots, to move them. Where the picture has been dragged to is no part of the copy, + /// so a drag is the same copy drawn somewhere else. + /// + /// Only where the whole of it is narrower than the picture, so the copy is about the picture's + /// own size at the most. Until it lands the picture itself is drawn, quickly rather than well, + /// and drawn again when it does. + private func reduced(_ made: CGImage?, _ picture: CGImage, at all: CGRect, device: CGSize, in context: CGContext) { + guard let scaled = made, + scaled !== picture, + scaled.width == Int(abs(device.width).rounded()), + scaled.height == Int(abs(device.height).rounded()) + else { + // The picture itself. As well as it ever was drawn when it is not one to make a copy + // of, being within a pixel of its own size or having failed to scale. Quickly + // otherwise: the copy for this size is on its way, and whatever `fitted` had to hand + // back in the meantime was made for another. + context.interpolationQuality = made === picture ? .high : .low + context.draw(picture, in: all) + return + } + + // A pixel of the copy to a pixel of the screen. `all` starts wherever the drag left it, + // which is seldom on a pixel, and is the copy's size only to the nearest one. Drawn into + // `all` as it stands the copy would be sampled again on every frame: smoothed, each pane + // softening its own by a different fraction of a pixel, or not, and losing or doubling a + // row or a column of it where the two sizes part. So it goes on the pixel nearest to where + // `all` starts, at its own size, which leaves every part of it within about a pixel of + // where `all` has it. + let target = context.convertToDeviceSpace(all) + let placed = context.convertToUserSpace( + CGRect( + x: Renderer.pixel(target.minX), + y: Renderer.pixel(target.minY), + width: CGFloat(scaled.width), + height: CGFloat(scaled.height))) + context.interpolationQuality = .none + context.draw(scaled, in: placed) + } + + /// The pixel a device coordinate is put on: the nearest, with two things seen to first. + /// + /// Where a picture has been dragged to goes to the managed side and back as a Float, which + /// leaves a coordinate a few ten thousandths of a pixel either side of where it should be, + /// and where it should be is often exactly half way between two pixels. So it is taken to the + /// nearest eighth of a pixel first. And a half goes up whatever its sign, where `rounded()` + /// takes it away from zero and so the other way once a picture's edge has left the window. + /// Without the two, a picture dragged a pixel at a time moved by none or by two. + private static func pixel(_ value: CGFloat) -> CGFloat { + ((value * 8).rounded() / 8 + 0.5).rounded(.down) + } + /// Something turning, centred in `space`, while the picture that will be centred there is on /// its way: a dim ring, and a brighter quarter of it going round once a second, as the other two /// heads draw it. Stood still in a capture, which has to come out the same every time, and left @@ -883,6 +971,11 @@ final class Renderer { /// For the window the copy is made on `work`, and meanwhile this is the copy made for the size /// the pane last had, for the caller to stretch into place, or nil when there has never been /// one, which the pane shows a spinner for. + /// + /// `device` is the size the picture fills when it is fitted, and the size the whole of it + /// takes when `enlarged` asks, for one that is still below its own size. Either way it is the + /// one copy, so going from one to the other makes it again. Nil is no spinner there: `reduced` + /// draws the picture itself until the copy lands. private func fitted(_ path: String, _ picture: CGImage, device: CGSize, capturing: Bool) -> CGImage? { let width = Int(abs(device.width).rounded()) let height = Int(abs(device.height).rounded()) From 33199454c79b12cd01ae85e550ff51e0cb1f6948 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:39:08 +1000 Subject: [PATCH 59/73] Give the WinForms head a benchmark project of its own DiffEngineViewer.Benchmarks measures the viewer's model, and builds everywhere the model does. What a paint costs is the head's, and the WinForms head only builds for Windows, so its benchmarks cannot live there. This is the project the other two already name: both InternalsVisibleTo files list DiffEngineViewer.Windows.Benchmarks, and DiffEngine.Benchmarks' Program.cs says it exists. It is set up as the other two are: signed, in process and a short job. It targets net10.0-windows with WinForms as the head's tests do, references the head as they do, and is left out of the Release-NotWindows build with them. It needs no aliased reference to DiffEngine, which the tests have only to displace the copy Verify brings in. The head is an executable with a Program of its own, which this assembly can see, so the benchmarks are found from the executing assembly rather than from typeof(Program). No benchmarks yet: each arrives in a commit of its own, ahead of the fix it measures. --- src/DiffEngine.slnx | 5 ++++ ...DiffEngineViewer.Windows.Benchmarks.csproj | 29 +++++++++++++++++++ .../Directory.Build.props | 15 ++++++++++ .../Program.cs | 23 +++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 src/DiffEngineViewer.Windows.Benchmarks/DiffEngineViewer.Windows.Benchmarks.csproj create mode 100644 src/DiffEngineViewer.Windows.Benchmarks/Directory.Build.props create mode 100644 src/DiffEngineViewer.Windows.Benchmarks/Program.cs diff --git a/src/DiffEngine.slnx b/src/DiffEngine.slnx index e82cfeb3b..fff903ef4 100644 --- a/src/DiffEngine.slnx +++ b/src/DiffEngine.slnx @@ -53,6 +53,11 @@ --> + + + + + diff --git a/src/DiffEngineViewer.Windows.Benchmarks/DiffEngineViewer.Windows.Benchmarks.csproj b/src/DiffEngineViewer.Windows.Benchmarks/DiffEngineViewer.Windows.Benchmarks.csproj new file mode 100644 index 000000000..5ab0fdeb8 --- /dev/null +++ b/src/DiffEngineViewer.Windows.Benchmarks/DiffEngineViewer.Windows.Benchmarks.csproj @@ -0,0 +1,29 @@ + + + + Exe + + net10.0-windows + true + enable + false + + true + $(MSBuildThisFileDirectory)..\key.snk + + + + + + + + + + + diff --git a/src/DiffEngineViewer.Windows.Benchmarks/Directory.Build.props b/src/DiffEngineViewer.Windows.Benchmarks/Directory.Build.props new file mode 100644 index 000000000..2164d998e --- /dev/null +++ b/src/DiffEngineViewer.Windows.Benchmarks/Directory.Build.props @@ -0,0 +1,15 @@ + + + + false + false + false + false + + diff --git a/src/DiffEngineViewer.Windows.Benchmarks/Program.cs b/src/DiffEngineViewer.Windows.Benchmarks/Program.cs new file mode 100644 index 000000000..78aea4c46 --- /dev/null +++ b/src/DiffEngineViewer.Windows.Benchmarks/Program.cs @@ -0,0 +1,23 @@ +using System.Reflection; +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Jobs; +using BenchmarkDotNet.Running; +using BenchmarkDotNet.Toolchains.InProcess.Emit; + +// Run with: dotnet run -c Release --project src/DiffEngineViewer.Windows.Benchmarks -- --filter * +// Filter e.g.: dotnet run -c Release --project src/DiffEngineViewer.Windows.Benchmarks -- --filter *Paint* +// +// The WinForms head: what a paint costs. A project of its own because the head only builds for +// Windows, where DiffEngineViewer.Benchmarks measures the model on every platform. Everything is +// painted into a bitmap, so nothing here shows a window or binds a port. +// +// In process and a short run, for the reasons DiffEngine.Benchmarks' Program.cs gives. +var config = DefaultConfig.Instance + .AddJob( + Job.ShortRun + .WithToolchain(InProcessEmitToolchain.Instance)); +BenchmarkSwitcher + // Not typeof(Program), as the other two have it: the head is an executable with a Program of + // its own, which this assembly can see, so the name would be ambiguous here. + .FromAssembly(Assembly.GetExecutingAssembly()) + .Run(args, config); From fa0255affd6913cada9a19d8f809cbb11cd4e777 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:40:59 +1000 Subject: [PATCH 60/73] Measure a paint of rows far longer than their pane The first benchmark of the WinForms head, of the canvas as it is before the fix that follows. Nothing scrolls sideways, so all of a row past its pane's right edge is never seen, and a paint should cost what the part that shows costs. It costs by the length of the row instead, in two ways, and each has a shape here: LongLines is 72 rows of 2,000 characters. The canvas clips a row to the pane's width in pixels, counted as characters, so GDI+ is handed 472 characters of each row where 54 show, and 1,528 where 174 show at 1600 pixels a pane. It lays out every one before it clips any. MegabyteLine is a megabyte of one line, with one character from outside ASCII half way along it. A row is segmented before anything is clipped, which for a row that is not all ASCII walks every character of it, and the run before that character is then copied out whole to be cut down to what shows. OffscreenCanvas is what paints. It asks the canvas to paint into a bitmap through Control.InvokePaint, so what runs is the canvas's own OnPaint and nothing is put on the desktop: no form, and no window but the one WinForms parks a parentless control on when its font is measured. It is at one scale whatever display it runs on, as the tests' host is. Method Width Mean Allocated LongLines 1100 18.01 ms 77.21 KB MegabyteLine 1100 28.14 ms 2055.44 KB LongLines 3212 70.87 ms 226.12 KB MegabyteLine 3212 27.73 ms 2058.60 KB Timed on a machine busy with other builds, so the means are loose. A second run gave 18.72, 27.54, 83.11 and 29.56 ms, and the same allocations. --- .../OffscreenCanvas.cs | 80 ++++++++++++++ .../RowPaintBenchmarks.cs | 102 ++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 src/DiffEngineViewer.Windows.Benchmarks/OffscreenCanvas.cs create mode 100644 src/DiffEngineViewer.Windows.Benchmarks/RowPaintBenchmarks.cs diff --git a/src/DiffEngineViewer.Windows.Benchmarks/OffscreenCanvas.cs b/src/DiffEngineViewer.Windows.Benchmarks/OffscreenCanvas.cs new file mode 100644 index 000000000..29ad5c13d --- /dev/null +++ b/src/DiffEngineViewer.Windows.Benchmarks/OffscreenCanvas.cs @@ -0,0 +1,80 @@ +using System.ComponentModel; +using System.Drawing.Imaging; + +/// +/// The head's canvas with no window around it, painted into a bitmap: what a paint costs, with +/// nothing put on the desktop to find out. +/// +/// What runs is the canvas's own paint, handed a over the bitmap where a +/// window would hand it one over its double buffer. +/// +/// +sealed class OffscreenCanvas : IDisposable +{ + /// + /// Synchronous, as a capture is: there is no message loop here for a decode on the pool to be + /// handed back through, so a picture is decoded and composed by the first paint that needs it. + /// + readonly ViewerCanvas canvas = new() + { + Synchronous = true + }; + + readonly PaintCaller caller = new(); + + readonly Bitmap surface; + + public OffscreenCanvas(int width, int height) + { + canvas.Size = new(width, height); + // Premultiplied, which is what the double buffer a window paints into holds. + surface = new(width, height, PixelFormat.Format32bppPArgb); + } + + /// + /// What a window this size would be showing for : the grid the canvas + /// reports, as ViewerForm.Drain reports it to the loop, and the screen built for that. + /// + public Screen Fit(SessionState state) => + ScreenBuilder.Build( + ViewerSession.Resize( + state, + canvas.ColumnCapacity, + canvas.BodyCapacity + ScreenBuilder.Chrome)); + + /// + /// Hands the canvas a screen, as the loop does on every frame that changed something. + /// + public void Show(Screen screen) => + canvas.Draw(screen); + + /// + /// One paint of the whole canvas. A Graphics per paint, as a window's paint gets, so nothing + /// one paint set on it is still set for the next. + /// + public void Paint() + { + using var graphics = Graphics.FromImage(surface); + using var paint = new PaintEventArgs(graphics, new(Point.Empty, surface.Size)); + caller.Ask(canvas, paint); + } + + public void Dispose() + { + canvas.Dispose(); + caller.Dispose(); + surface.Dispose(); + } + + /// + /// A control, though never one with a handle, because OnPaint is protected and + /// is the door WinForms leaves for one control to ask + /// another to paint. + /// + [DesignerCategory("")] + sealed class PaintCaller : Control + { + public void Ask(Control control, PaintEventArgs paint) => + InvokePaint(control, paint); + } +} diff --git a/src/DiffEngineViewer.Windows.Benchmarks/RowPaintBenchmarks.cs b/src/DiffEngineViewer.Windows.Benchmarks/RowPaintBenchmarks.cs new file mode 100644 index 000000000..280e401ec --- /dev/null +++ b/src/DiffEngineViewer.Windows.Benchmarks/RowPaintBenchmarks.cs @@ -0,0 +1,102 @@ +using System.Text; +using BenchmarkDotNet.Attributes; + +// One paint of the canvas over rows far longer than a pane is wide. Nothing scrolls sideways, so +// all of a row past the pane's right edge is never seen, and a paint should cost what the part +// that shows costs. Every wheel notch and every frame of a selection drag is one such paint. +[MemoryDiagnoser] +public class RowPaintBenchmarks +{ + // The window a viewer opens at, where a pane shows 54 characters of a row, and one maximised + // across a wide display, at 1600 pixels a pane and 174 characters. + [Params(1100, 3212)] + public int Width; + + // Room for 36 rows a pane, so 72 rows a paint. + const int height = 800; + + const int megabyte = 1024 * 1024; + + OffscreenCanvas longLines = null!; + OffscreenCanvas megabyteLine = null!; + + [GlobalSetup] + public void Setup() + { + // As the tests' host is: at one scale whatever display this runs on, so the cell a pane + // is counted in is the same number of pixels on every machine. + ViewerApp.ConfigureUnscaled(); + + // 2,000 characters a line, which is more than a pane has pixels at either width, let + // alone cells. One line in ten differs, as the lines of a snapshot that failed do. + longLines = Showing( + Records(lines: 60, length: 2000, changeEvery: -1), + Records(lines: 60, length: 2000, changeEvery: 10)); + + // What a minified bundle or a serialized blob is: all one line. Half way along it, far + // past anything that shows, is one character from outside ASCII, which is all it takes + // for the row to stop being a single run of plain text. + var line = Line(megabyte, 0).Remove(megabyte / 2, 1).Insert(megabyte / 2, "中"); + megabyteLine = Showing($"before\n{line}\nafter", $"before\n{line}\nand after"); + } + + [GlobalCleanup] + public void Cleanup() + { + longLines.Dispose(); + megabyteLine.Dispose(); + } + + [Benchmark] + public void LongLines() => + longLines.Paint(); + + [Benchmark] + public void MegabyteLine() => + megabyteLine.Paint(); + + OffscreenCanvas Showing(string received, string expected) + { + var canvas = new OffscreenCanvas(Width, height); + var entry = QueueEntry.ForFiles( + "Sample.received.txt", + "Sample.verified.txt", + FileSide.OfText(received), + FileSide.OfText(expected)); + canvas.Show(canvas.Fit(ViewerSession.EnqueueFile(SessionState.Start(ViewerMode.File), entry))); + // Once here, so the font is measured and every brush made before anything is timed. + canvas.Paint(); + return canvas; + } + + // The records of a minified array, a line each: the shape of a snapshot whose lines are long. + static string Records(int lines, int length, int changeEvery) + { + var builder = new StringBuilder(); + for (var index = 0; index < lines; index++) + { + if (index > 0) + { + builder.Append('\n'); + } + + // A thousand apart, so no line is another's content and a changed one pairs with its own. + var changed = changeEvery > 0 && index % changeEvery == 0; + builder.Append(Line(length, index * 1000 + (changed ? 500 : 0))); + } + + return builder.ToString(); + } + + static string Line(int length, int first) + { + var builder = new StringBuilder(length + 64); + for (var item = first; builder.Length < length; item++) + { + builder.Append($"{{\"id\":{item},\"name\":\"item {item}\",\"tags\":[\"alpha\",\"beta\"],\"price\":{item % 90 + 10}.5}},"); + } + + builder.Length = length; + return builder.ToString(); + } +} From 1633a01e2e6b89f7df993663281444b00fc1e275 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:54:59 +1000 Subject: [PATCH 61/73] Hand GDI+ no more of a row than its pane has cells for A row was clipped to its pane's width in pixels, counted as characters, so a long row went to GDI+ almost nine times the length of what shows of it, and GDI+ lays out every character it is handed before it clips any. And the row was segmented before it was clipped at all, which for a row that is not all ASCII walks every character of it and copies out the run it then cuts down. The canvas now asks for the start of the row: RowText.Shown flattens and cuts it where the pane's cells end, at a boundary CellGrid would cut at, reading from the front and only as far as that takes. A megabyte row costs what its first sixty characters cost, tab or no tab. One cell past the last that shows is kept. GDI+ fits glyphs to whole pixels, which can start one in the last pixel of the cell before its own, and with no cell to spare a W there lost two pixels at one pane width in ten. With it, the first cell left out starts a whole cell past the edge, and since where GDI+ puts a glyph does not depend on what follows it in the string, nothing drawn moves: the frames the benchmark paints are byte for byte what they were, and the pixel baselines pass untouched. ARowCutAtItsPaneIsDrawnAsTheWholeOfItIs holds it there, comparing a pane's rows with a canvas wide enough to draw them whole, across twenty widths a pixel apart. One thing is drawn that was not, which that test found. What is left of the old clip is a bound on a single character with marks without end, and it counted the pixels left of the pane from where the character starts. An emoji is two UTF-16 units, so one whose first column of pixels was the pane's last was cut to nothing, and a joined sequence within its own length of the edge lost the last of what it joins. The bound is the pane's whole width now. Method Width Mean Allocated was LongLines 1100 3.50 ms 28.27 KB 18.01 ms 77.21 KB MegabyteLine 1100 0.34 ms 1.43 KB 28.14 ms 2055.44 KB LongLines 3212 11.31 ms 62.04 KB 70.87 ms 226.12 KB MegabyteLine 3212 0.87 ms 2.37 KB 27.73 ms 2058.60 KB On a machine busy with other builds, as before. A second run gave 3.84, 0.34, 10.06 and 0.96 ms, and the same allocations. RowText.Shown is in the model because what it has to agree with is CellGrid, not anything of this head's. Its tests are with the head's all the same, since this head is the one caller: that the start is what cutting the whole row gives, for every kind of character the grid treats differently and every cut, and that it is found without reading the rest, counted in allocations rather than timed. --- .../FormsHeadTests.cs | 128 ++++++++++++++++++ .../RowTextTests.cs | 120 ++++++++++++++++ src/DiffEngineViewer.Windows/ViewerCanvas.cs | 29 +++- src/DiffEngineViewer/Model/RowText.cs | 41 ++++++ 4 files changed, 315 insertions(+), 3 deletions(-) create mode 100644 src/DiffEngineViewer.Windows.Tests/RowTextTests.cs diff --git a/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs b/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs index 4f8c9e304..3952a8b9f 100644 --- a/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs @@ -126,6 +126,134 @@ public async Task HighlightAfterACharacterOffTheGridCoversTheNext(string line, i await Assert.That(offCentre).IsLessThanOrEqualTo(1); } + /// + /// Rows several times longer than their pane, against a canvas wide enough to hold every one + /// of them whole. A row is handed to GDI+ cut to the cells its pane has room for, and the cut + /// must not show: every pixel of the narrow pane's rows is the pixel the wide canvas has + /// there. Twenty widths a pixel apart, so the cut falls at every offset into a cell it can. + /// + [Test] + public async Task ARowCutAtItsPaneIsDrawnAsTheWholeOfItIs() + { + var lines = LongRows(); + var text = string.Join('\n', lines); + var screen = ScreenBuilder.Build(ViewerSession.Resize(Fixtures.File(text, text), columns, rows)); + + using var whole = new CanvasHost(5600, 400); + var reference = whole.Draw(screen); + var cell = whole.Canvas.CellSize(); + var top = whole.Canvas.BodyTop(); + // Or the reference is cut as well, and this compares one cut with another + var room = (whole.Canvas.Panes().Half - 8 * cell.Width) / cell.Width; + await Assert.That(room).IsGreaterThanOrEqualTo(longRowCells); + + var wrong = new List(); + for (var width = 1100; width < 1120; width++) + { + using var host = new CanvasHost(width, 400); + var drawn = host.Draw(screen); + var (left, half, _) = host.Canvas.Panes(); + // The rule between the panes is drawn over the left one's last pixels but one + var rule = left + half - 2; + var differing = 0; + Point? first = null; + for (var y = top; y < top + lines.Length * cell.Height; y++) + { + for (var x = left + 8 * cell.Width; x < left + half; x++) + { + if (x == rule || + drawn.GetPixel(x, y) == reference.GetPixel(x, y)) + { + continue; + } + + differing++; + first ??= new(x, y); + } + } + + if (differing > 0) + { + wrong.Add($"{width} wide: {differing} pixels differ, the first at {first}"); + } + } + + await Assert.That(wrong).IsEmpty(); + } + + const int longRowCells = 300; + + /// + /// A row of each kind of character the grid places differently, every one 300 cells or just + /// under. + /// + static string[] LongRows() => + [ + Filling("{\"id\":1000,\"name\":\"item 1000\",\"tags\":[\"alpha\",\"beta\"],\"price\":12.5},"), + Filling("M"), + Filling("the quick brown fox jumps over the lazy dog "), + // A glyph whose ink starts at its very left, once at each place in four: GDI+ fits glyphs + // to whole pixels, which can start one in the last pixel of the cell before its own, and + // that is why a cell past the last one showing is kept + Filling("Wi. "), + Filling("Wi. ", "x"), + Filling("Wi. ", "xx"), + Filling("Wi. ", "xxx"), + Filling("\tcolumn"), + Filling("Привет, мир αβγ éñü "), + // Wide characters, each a segment of its own, and a row of nothing else, where every + // other cut would fall inside one + Filling("中文 and ascii "), + Filling("中"), + // A mark on the character before it, and a family joined into one picture. The long form + // of each escape, since neither can be seen in a source file + Filling("e\U00000301a\U00000308 marks "), + Filling("\U0001F600 \U0001F468\U0000200D\U0001F469\U0000200D\U0001F467 ") + ]; + + static string Filling(string unit, string lead = "") => + lead + string.Concat(Enumerable.Repeat(unit, (longRowCells - lead.Length) / CellGrid.Cells(RowText.Flatten(unit)))); + + /// + /// A megabyte of one line, with one wide character half way along it. The row was segmented + /// whole, which walked all of it, and the run before that character was copied out to be cut + /// down to the start of it that shows: a megabyte allocated for each such row, on every paint. + /// Counted in what a paint allocates, which is the same number on a busy machine. + /// + [Test] + public async Task AMegabyteRowIsPaintedFromItsStart() + { + const int megabyte = 1024 * 1024; + var line = new string('x', megabyte / 2) + "中" + new string('y', megabyte / 2); + var screen = ScreenBuilder.Build(ViewerSession.Resize(Fixtures.File(line, line), columns, rows)); + using var host = new CanvasHost(); + // Once before it is measured: the font, the brushes, and anything compiled on first use + host.Draw(screen); + + var before = GC.GetAllocatedBytesForCurrentThread(); + var bitmap = host.Draw(screen); + var allocated = GC.GetAllocatedBytesForCurrentThread() - before; + + // The row's own ink, so what was measured is a paint that drew it + var cell = host.Canvas.CellSize(); + var textLeft = host.Canvas.Panes().Left + 8 * cell.Width; + var inked = 0; + for (var y = host.Canvas.BodyTop(); y < host.Canvas.BodyTop() + cell.Height; y++) + { + for (var x = textLeft; x < textLeft + 20 * cell.Width; x++) + { + if (bitmap.GetPixel(x, y).GetBrightness() > 0.6f) + { + inked++; + } + } + } + + Console.WriteLine($"{allocated / 1024} KB allocated by a paint of two megabyte rows, {inked} bright pixels in the first"); + await Assert.That(inked).IsGreaterThan(0); + await Assert.That(allocated).IsLessThan(megabyte / 8); + } + /// /// Ten image pairs drawn one after another, each accepted (received moved over /// verified) before the next, and then a screen with no picture on it. Nothing needs more than diff --git a/src/DiffEngineViewer.Windows.Tests/RowTextTests.cs b/src/DiffEngineViewer.Windows.Tests/RowTextTests.cs new file mode 100644 index 000000000..a5848c09f --- /dev/null +++ b/src/DiffEngineViewer.Windows.Tests/RowTextTests.cs @@ -0,0 +1,120 @@ +/// +/// The start of a row, which is all of it this head hands to GDI+: no more than its pane has cells +/// for, cut where the grid would cut it, and found without reading the rest of the row. +/// +/// Here rather than beside CellGridTests because this head is what asks for it. Nothing in +/// it is about WinForms. +/// +/// +public class RowTextTests +{ + /// + /// Whatever a row holds and wherever in it the cut falls, what is kept is what flattening all + /// of it and cutting at the grid's boundary keeps. So nothing downstream can tell the start + /// from the whole row: a tab is its four cells, a wide character or a character and its marks + /// is whole or absent, and a pair of surrogates is never read as its first half. + /// + [Test] + public async Task TheStartOfARowIsTheWholeRowCutAtACellBoundary() + { + var wrong = new List(); + foreach (var row in rows) + { + var flattened = RowText.Flatten(row); + for (var cells = -1; cells <= CellGrid.Cells(flattened) + 2; cells++) + { + var expected = flattened[..CellGrid.Index(flattened, cells)]; + var shown = RowText.Shown(row, cells); + if (shown != expected) + { + wrong.Add($"{Escaped(row)} at {cells} cells: {Escaped(shown)} rather than {Escaped(expected)}"); + } + } + } + + await Assert.That(wrong).IsEmpty(); + } + + // Every character that cannot be seen in a source file is written as the long form of its + // escape: marks, joiners, and the two that take no cell and sit on nothing. + static readonly string[] rows = + [ + "", + "x", + "plain text, which is nearly every row there is", + "\tindented\twith\ttabs, each four cells", + // Flattened away, so the characters read are more than the cells they fill + "\r\r\r\r\r\rreturns before the text", + "a\rb\nc", + "ends in a return\r", + // Wide: a cut inside one moves past it + "中文 and 한국어 and full", + new('中', 40), + // A mark belongs to the character before it, however many there are + "e\U00000301\U00000302x and a\U00000308", + "z" + new string('\U00000301', 100) + "algo", + "\U00000301", + new('\U00000301', 50), + // No cell and no character to sit on: a soft hyphen and a zero width space + "soft\U000000ADhyphen and zero\U0000200Bwidth", + // Outside the basic plane, so two units to a cell + "\U0001D400\U0001D401\U0001D402 narrow, and \U0001F600\U0001F601 wide", + string.Concat(Enumerable.Repeat("\U0001D400", 30)), + // A joiner takes what follows it into the same cell + "\U0001F468\U0000200D\U0001F469\U0000200D\U0001F467 and a\U0000200Db and a trailing one\U0000200D", + // A mark that is a surrogate pair. Read as far as its first half alone, it would be a + // character of its own and the cut would come between it and the one it marks + "a\U000E0100b\U000E0101c", + string.Concat(Enumerable.Repeat("a\U000E0100", 20)), + // Halves with no other half: one unit and one cell each + "x\uD83D", + "\uDC00y", + "a\uD83Db\uDC00c", + // Long, as the rows this exists for are, with the one character that is not ASCII far along + new string('x', 500) + "中" + new string('y', 500) + ]; + + /// + /// A megabyte of one line, starting with a tab. Flattening all of it to find its first sixty + /// cells copied the megabyte, on every paint of every such row. Counted in what is allocated, + /// which is the same number on a busy machine. + /// + [Test] + public async Task TheStartOfARowIsFoundWithoutReadingTheRest() + { + var row = "\t" + new string('x', megabyte); + // Once before it is measured, so nothing compiled on first use is counted + RowText.Shown(row, 60); + + var before = GC.GetAllocatedBytesForCurrentThread(); + var shown = RowText.Shown(row, 60); + var allocated = GC.GetAllocatedBytesForCurrentThread() - before; + + await Assert.That(shown).IsEqualTo(" " + new string('x', 56)); + await Assert.That(allocated).IsLessThan(4096); + } + + /// + /// And one that is nothing but marks on one character, which fills a single cell however much + /// of it is read. It is read twice over at most rather than once for every cell asked for. + /// + [Test] + public async Task ARowThatNeverFillsItsCellsIsReadTwiceAtMost() + { + var row = "e" + new string('\U00000301', megabyte); + RowText.Shown(row, 60); + + var before = GC.GetAllocatedBytesForCurrentThread(); + var shown = RowText.Shown(row, 60); + var allocated = GC.GetAllocatedBytesForCurrentThread() - before; + + await Assert.That(shown).IsEqualTo(row); + // Each read is of a copy, two bytes a character + await Assert.That(allocated).IsLessThan(2 * 2 * (megabyte + 1024)); + } + + const int megabyte = 1024 * 1024; + + static string Escaped(string text) => + string.Concat(text.Select(_ => _ is >= ' ' and <= '~' ? _.ToString() : $"\\u{(int) _:X4}")); +} diff --git a/src/DiffEngineViewer.Windows/ViewerCanvas.cs b/src/DiffEngineViewer.Windows/ViewerCanvas.cs index 7f6a3927b..0f07f205a 100644 --- a/src/DiffEngineViewer.Windows/ViewerCanvas.cs +++ b/src/DiffEngineViewer.Windows/ViewerCanvas.cs @@ -916,10 +916,17 @@ void DrawRow(Graphics graphics, Pane pane, int index, Rectangle bounds) font, Palette.Dim, Cellular(bounds.X, bounds.Y, gutter, bounds.Height)); + // No more of the row than the pane has cells for. GDI+ lays out every character it is + // handed before it clips any of them, so a row handed over whole cost by its length + // rather than by what of it showed: 72 rows of long lines were 18 ms a paint where the 54 + // characters of each that show are 3.5, and every wheel notch and every frame of a + // selection drag is a paint. Cut before it is segmented as well, which walked the whole + // of a row that was not all ASCII: a megabyte of one was 14 ms a row. + var text = RowText.Shown(row.Text, CellsAcross(bounds.Width - gutter)); + // Each segment at its column on the grid rather than the row as one string, so a character // the font draws wider or narrower than a cell moves nothing after it: see CellGrid. A row // of plain text is one segment at column 0, drawn exactly as the whole row was. - var text = RowText.Flatten(row.Text); foreach (var segment in CellGrid.Segments(text)) { var left = bounds.X + gutter + Offset(segment.Column); @@ -930,14 +937,30 @@ void DrawRow(Graphics graphics, Pane pane, int index, Rectangle bounds) Painter.Draw( graphics, - // No wider than the pane can show in pixels, which no line of characters can exceed - RowText.Clip(text.Substring(segment.Start, segment.Length), bounds.Right - left), + // A character takes its marks into its cell with it, however many it has, so the + // cells a pane holds do not bound what is in them. As many characters as the pane + // is pixels wide does, which only a pile of marks reaches. Not as many as there + // are pixels left of it, which this was: an emoji is two, so one whose first + // column of pixels was the pane's last was cut to nothing, and a joined sequence + // within its own length of the edge lost the last of what it joins + RowText.Clip(text.Substring(segment.Start, segment.Length), bounds.Width), font, Palette.Foreground(row.Kind), Cellular(left, bounds.Y, bounds.Right - left, bounds.Height)); } } + /// + /// How many cells of a row's text pixels show any part of, and one + /// more. A glyph is not confined to its cell: GDI+ fits each to whole pixels, which can start + /// one in the last pixel of the cell before its own, so the cell after the last one showing + /// can still put ink in the pane. With that one kept, the first cell left out starts a whole + /// cell past the edge. And where GDI+ puts a glyph does not depend on what follows it in the + /// string, which is what makes the cut one that cannot be seen. + /// + int CellsAcross(int width) => + Math.Max(0, (int) Math.Ceiling(width / Advance)) + 1; + void DrawRule(Graphics graphics, int top) => graphics.FillRectangle(Painter.Brush(Palette.Rule), padding, top, Width - padding * 2, 1); diff --git a/src/DiffEngineViewer/Model/RowText.cs b/src/DiffEngineViewer/Model/RowText.cs index 6a148abaa..43c95a26b 100644 --- a/src/DiffEngineViewer/Model/RowText.cs +++ b/src/DiffEngineViewer/Model/RowText.cs @@ -29,6 +29,47 @@ public static string Clip(string text, int cells) return text[..length]; } + /// + /// The start of a row as a renderer draws it: flattened, and cut where its first + /// cells end. Exactly what flattening the whole row and cutting it at + /// gives, so a wide character, or a character and its marks, is + /// kept whole or not at all, and whatever is segmented and drawn from it lands where it would + /// have from the whole row. + /// + /// For a renderer that knows how many cells its pane holds, where counts + /// characters and is handed a row already flattened. Read from the front and only as far as + /// it takes, because this is asked of every row on every paint and a row can be a megabyte: + /// flattening all of one copies it when it holds a tab, and finding its cells walks all of it + /// when it holds anything but ASCII. + /// + /// + public static string Shown(string text, int cells) + { + // One character past the cells asked for, which is what says the cut has a character + // after it rather than being wherever the text read so far ran out. + var take = Math.Min(Math.Max(cells, 0), text.Length) + 1; + while (take < text.Length) + { + // Not between the halves of a surrogate pair. The first half alone reads as a + // character of its own, where the pair may be a mark on the character before it. + var end = char.IsHighSurrogate(text[take - 1]) ? take + 1 : take; + var start = Flatten(text[..end]); + var cut = CellGrid.Index(start, cells); + if (cut < start.Length) + { + return start[..cut]; + } + + // Not enough yet, which takes characters that fill no cell: marks, joiners, a + // carriage return. Twice as much next, so a row of nothing else costs two reads of + // it at most rather than one for every cell. + take *= 2; + } + + var whole = Flatten(text); + return whole[..CellGrid.Index(whole, cells)]; + } + public static string Flatten(string text) { if (text.AsSpan().IndexOfAny('\t', '\r', '\n') < 0) From dbaa9a95f1059f1aa668840930a6ede1b4858549 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:10:42 +1000 Subject: [PATCH 62/73] Measure a paint of a large picture zoomed to less than its own size Of the canvas as it is before the fix that follows. A picture enlarged past its pane is drawn a part at a time, straight from the decoded picture, on every paint. Past its own size that is the pane's worth of pixels. Below it, the part that shows is still several times the pane's pixels, and the filter that makes a reduction look right reads every one of them: the paint costs by the picture, not by the pane, on every frame of a drag and on every wheel notch over the text of a document whose page is drawn under it. A pair of 4000 by 3000 pictures in the window a viewer opens at, where they fit at about an eighth of their own size. Percent is how far in, of the size that fits: 150 and 200 draw the picture at a fifth and a quarter of its size, 400 at a half. Still is a paint with nothing changed, and Dragged one where the picture has moved since the last, as each frame of a drag is. Method Percent Mean Allocated Still 150 53.57 ms 1.20 KB Dragged 150 52.76 ms 2.00 KB Still 200 37.10 ms 1.38 KB Dragged 200 39.78 ms 1.93 KB Still 400 21.36 ms 1.29 KB Dragged 400 22.30 ms 1.82 KB The quietest of three runs on a machine busy with other builds. The other two were between 52 and 79 ms at 150, 42 and 59 at 200, and 25 and 34 at 400. --- .../PicturePaintBenchmarks.cs | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/DiffEngineViewer.Windows.Benchmarks/PicturePaintBenchmarks.cs diff --git a/src/DiffEngineViewer.Windows.Benchmarks/PicturePaintBenchmarks.cs b/src/DiffEngineViewer.Windows.Benchmarks/PicturePaintBenchmarks.cs new file mode 100644 index 000000000..05cbfb09f --- /dev/null +++ b/src/DiffEngineViewer.Windows.Benchmarks/PicturePaintBenchmarks.cs @@ -0,0 +1,105 @@ +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using BenchmarkDotNet.Attributes; + +// One paint of the canvas over a pair of large pictures the reader has zoomed into, but not so +// far that they are drawn at their own size: more of each picture's pixels go into the pane than +// the pane has. What shows is the pane's worth of pixels however far in it is, so a paint should +// cost by the pane. Every frame of a drag across the picture is one such paint, and so is every +// wheel notch over the text of a document whose page is drawn under it. +[MemoryDiagnoser] +public class PicturePaintBenchmarks +{ + // How far in, as a percentage of the size that fits the pane. A 4000 by 3000 picture fits + // this window at about an eighth of its own size, so these draw it at a fifth, a quarter and + // a half: the first two take more than two of its pixels across for each one drawn, the last + // fewer. + [Params(150, 200, 400)] + public int Percent; + + // The window a viewer opens at. + const int width = 1100; + const int height = 700; + + const int pictureWidth = 4000; + const int pictureHeight = 3000; + + string directory = ""; + OffscreenCanvas canvas = null!; + Screen[] dragged = []; + int frame; + + [GlobalSetup] + public void Setup() + { + ViewerApp.ConfigureUnscaled(); + + directory = Directory.CreateTempSubdirectory("deview-benchmark-").FullName; + var received = Path.Combine(directory, "Sample.received.png"); + var verified = Path.Combine(directory, "Sample.verified.png"); + Draw(received, Color.FromArgb(198, 64, 64), Color.FromArgb(240, 220, 180)); + Draw(verified, Color.FromArgb(64, 150, 198), Color.FromArgb(240, 220, 180)); + + var entry = QueueEntry.ForFiles(received, verified, FileSide.Read(received), FileSide.Read(verified)); + var state = ViewerSession.EnqueueFile(SessionState.Start(ViewerMode.File), entry); + while (PictureZoom.Factor(state.Zoom) * 100 < Percent) + { + state = ViewerSession.Apply(state, CommandKind.ZoomIn); + } + + canvas = new(width, height); + // A drag from one corner of what can be shown towards the other, a frame at each step. + // Kept near the middle, so that at every one of these sizes each step moves the picture. + dragged = Enumerable.Range(0, 16) + .Select(_ => canvas.Fit(ViewerSession.PanTo(state, 0.35 + _ * 0.02, 0.45 + _ * 0.006))) + .ToArray(); + + canvas.Show(canvas.Fit(state)); + // Once here: the pictures are decoded by the first paint that needs them, and whatever a + // paint keeps of them from one frame to the next is kept before anything is timed. + canvas.Paint(); + } + + [GlobalCleanup] + public void Cleanup() + { + canvas.Dispose(); + Directory.Delete(directory, true); + } + + [Benchmark] + public void Still() => + canvas.Paint(); + + [Benchmark] + public void Dragged() + { + canvas.Show(dragged[frame++ % dragged.Length]); + canvas.Paint(); + } + + // A wash of colour under a grid of lines: nothing a resampler can skip, and edges that show + // what it did with them. + static void Draw(string path, Color from, Color to) + { + using var bitmap = new Bitmap(pictureWidth, pictureHeight, PixelFormat.Format32bppArgb); + using (var graphics = Graphics.FromImage(bitmap)) + { + var all = new Rectangle(0, 0, pictureWidth, pictureHeight); + using var wash = new LinearGradientBrush(all, from, to, 35f); + graphics.FillRectangle(wash, all); + using var line = new Pen(Color.FromArgb(40, 40, 40), 3); + for (var x = 0; x < pictureWidth; x += 80) + { + graphics.DrawLine(line, x, 0, x, pictureHeight); + } + + for (var y = 0; y < pictureHeight; y += 80) + { + graphics.DrawLine(line, 0, y, pictureWidth, y); + } + } + + bitmap.Save(path, System.Drawing.Imaging.ImageFormat.Png); + } +} From 430720475b6b4ba5bb174d7bb8682de3a0db056a Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:49:58 +1000 Subject: [PATCH 63/73] Copy an enlarged picture out of one scaled copy rather than scaling it every paint A picture zoomed into, but still drawn below its own size, was scaled from the decoded picture on every paint, with the filter a reduction needs, which reads every pixel it reduces. So a paint cost by the picture rather than by the pane: 54 ms for a pair of 4000 by 3000 pictures at 150%, on every frame of a drag. While it is drawn at half its own size or less, the whole picture is now scaled to that size once, on the pool as the fitted one is composed, and kept in its place. A paint copies the part that shows out of it. Where the picture has been dragged to is not part of what is kept, so a drag copies a different part of the same thing. It is at most a quarter of the picture's own pixels, replaced when another size is asked for, and gone with the picture when it leaves the screen or its file changes. Until one lands, the last thing composed is drawn stretched, as it is mid resize. Past half its size nothing is kept and it is drawn straight from the picture as before. The whole of it there would be up to the decoded picture's size again, which for a pair of 4000 by 3000 pictures is up to 96 MB more, and the part that shows is under four times the pane's pixels. The todo suggested plain bilinear for that range. Measured, it is the slower of the two in GDI+: 14 ms a pane against 9 for the filter already there, so that stays. Two things came with it. The checkerboard under an enlarged picture was a brush tiling one pair of squares, which was most of what was left: over 3 ms a pane, where filling the pane with one colour and half its squares with the other, as one list, is half a millisecond. It is the same pixels. The composed checkerboard goes through the same list, and a list of no squares, under a picture no larger than one, is not handed to GDI+, which throws on it. And a composite is now known by what built it as well as by its size, since a fitted one, with its checkerboard, at the size an enlarged one is asked for is still not that. The copy is placed on whole pixels. A picture centred in a pane an odd number of pixels wide starts exactly half way between two and stays there for the whole of a drag, where rounding to the nearest fell either way on the arithmetic's last digit: it stood still for one pixel of the drag and jumped two for the next. Half way goes up now, by a margin. Method Percent Mean was Still 150 1.99 ms 53.57 ms Dragged 150 1.97 ms 52.76 ms Still 200 1.98 ms 37.10 ms Dragged 200 2.08 ms 39.78 ms Still 400 17.04 ms 21.36 ms Dragged 400 17.34 ms 22.30 ms Allocations are as they were, under 2 KB a paint. A second run gave 1.92, 1.89, 1.98, 1.95, 15.18 and 15.33 ms. 400 is the range nothing is kept for, and what it gained is the checkerboard. No pixel baseline changed: every scene of WindowsPixelTests was captured and is pixel for pixel what is committed, the two enlarged ones included, which are past their own size and share only the checkerboard with this. Nothing there draws a picture below half its size, so the benchmark's frames were compared before and after instead. At 400 they are identical. At 200 the still frame differs by one level in 1,578 pixels. At 150 it differs by up to 24 levels on the lines of the grid, 0.9 on average, the copy being 608 high for a picture placed 607.5 high. The dragged frames, whose positions fall between pixels, differ by more on those lines, which are under a pixel wide: the copy is up to half a pixel from where the exact placement is. EnlargedPictureTests holds it through the real canvas: scaled once however it is dragged, nothing kept past half its size, every change of stripe drawn within a pixel and a half of where the placement puts it at each step in, a pixel moved for each pixel dragged, and in a window no paint scaling anything itself. --- .../EnlargedPictureTests.cs | 426 ++++++++++++++++++ .../FormsHeadTests.cs | 44 ++ .../ImageCacheTests.cs | 50 ++ src/DiffEngineViewer.Windows/ImageCache.cs | 62 ++- src/DiffEngineViewer.Windows/ViewerCanvas.cs | 217 +++++++-- 5 files changed, 746 insertions(+), 53 deletions(-) create mode 100644 src/DiffEngineViewer.Windows.Tests/EnlargedPictureTests.cs diff --git a/src/DiffEngineViewer.Windows.Tests/EnlargedPictureTests.cs b/src/DiffEngineViewer.Windows.Tests/EnlargedPictureTests.cs new file mode 100644 index 000000000..f44dc949b --- /dev/null +++ b/src/DiffEngineViewer.Windows.Tests/EnlargedPictureTests.cs @@ -0,0 +1,426 @@ +/// +/// A large picture zoomed into, through the real canvas. While it is drawn at half its own size or +/// less, what shows is copied out of the whole of it scaled to that size, which is made once and +/// kept. Further in than that it is drawn straight from the picture. +/// +/// The pictures are stripes of two colours, the left one's across and the right one's down, so +/// where a picture was drawn can be read back from where its stripes change, to the pixel and +/// whatever filter scaled it. One pair for the class: nothing here writes to them. +/// +/// +[NotInParallel] +[TUnit.Core.Executors.STAThreadExecutor] +public class EnlargedPictureTests +{ + const int columns = 120; + const int rows = 37; + + /// + /// Fits a pane of the default window at 15% of its size, so the six steps in go through all + /// three ways of drawing it: the first three are still under half its size, the next two are + /// between that and its own, and the sixth is past it. + /// + static readonly Size picture = new(3600, 2700); + + const int stripe = 300; + + static readonly Color dark = Color.FromArgb(40, 40, 160); + static readonly Color light = Color.FromArgb(230, 210, 80); + + static string directory = ""; + static string left = ""; + static string right = ""; + + [Before(Class)] + public static void WritePictures() + { + directory = Directory.CreateTempSubdirectory("deview-enlarged-").FullName; + left = Write("striped.received.png", across: true); + right = Write("striped.verified.png", across: false); + } + + [After(Class)] + public static void DeletePictures() => + Directory.Delete(directory, true); + + /// + /// Painted again and again, and dragged about between paints, a picture this far out is scaled + /// once a side. Where it has been dragged to is no part of what is kept, so a drag copies a + /// different part of the same thing rather than scaling the picture again for every frame. + /// + [Test] + public async Task ItIsScaledOnceHoweverItIsDragged() + { + using var host = new Host(); + host.Canvas.Synchronous = true; + var state = Zoomed(1); + + host.Draw(state); + host.Draw(state); + foreach (var centre in (double[]) [0.4, 0.45, 0.5, 0.55, 0.6]) + { + host.Draw(ViewerSession.PanTo(state, centre, 0.5)); + } + + await Assert.That(host.Composed).IsEqualTo(2); + } + + /// + /// What is kept is the whole picture at the size it is drawn, so no more than a quarter of the + /// picture's own pixels: at most half its width by half its height. + /// + [Test] + [Arguments(1)] + [Arguments(2)] + [Arguments(3)] + public async Task WhatIsKeptIsTheWholeOfItAtTheSizeItIsDrawn(int steps) + { + using var host = new Host(); + host.Canvas.Synchronous = true; + + host.Draw(Zoomed(steps)); + var placement = host.Placement(PaneSide.Left); + var kept = host.Kept(left); + + await Assert.That(kept).IsNotNull(); + await Assert.That(kept!.Value.Width).IsEqualTo((int) Math.Round(placement.Size.Width)); + await Assert.That(kept.Value.Height).IsEqualTo((int) Math.Round(placement.Size.Height)); + await Assert.That(kept.Value.Width * 2).IsLessThanOrEqualTo(picture.Width); + } + + /// + /// Past half its size the whole of it would be up to the picture's own size again, which is too + /// much to hold twice. Nothing is kept, and it is drawn straight from the picture. + /// + [Test] + [Arguments(4)] + [Arguments(5)] + [Arguments(6)] + public async Task PastHalfItsSizeNothingIsKept(int steps) + { + using var host = new Host(); + host.Canvas.Synchronous = true; + + var drawn = host.Draw(Zoomed(steps)); + + await Assert.That(host.Composed).IsEqualTo(0); + await Assert.That(host.Kept(left)).IsNull(); + await Assert.That(Misplaced(drawn, host.Placement(PaneSide.Left), across: true)).IsEmpty(); + } + + /// + /// However it is drawn, it is the part the placement says, where the placement says: every + /// change of stripe on screen is within a pixel and a half of where the picture's own stripes + /// fall. Fitted, at each step in, and dragged off centre, so through the copy, through the + /// filter that reduces and through the one that shows pixels as they are. + /// + [Test] + [Arguments(0, 0.5, 0.5)] + [Arguments(1, 0.5, 0.5)] + [Arguments(1, 0.37, 0.52)] + [Arguments(2, 0.5, 0.5)] + [Arguments(2, 0.31, 0.64)] + [Arguments(3, 0.5, 0.5)] + [Arguments(3, 0.71, 0.33)] + [Arguments(4, 0.5, 0.5)] + [Arguments(4, 0.29, 0.68)] + [Arguments(5, 0.62, 0.41)] + [Arguments(6, 0.5, 0.5)] + [Arguments(6, 0.13, 0.88)] + public async Task ItIsDrawnWhereItIsPlaced(int steps, double centreX, double centreY) + { + using var host = new Host(); + host.Canvas.Synchronous = true; + + var drawn = host.Draw(ViewerSession.PanTo(Zoomed(steps), centreX, centreY)); + + await Assert.That(Misplaced(drawn, host.Placement(PaneSide.Left), across: true)).IsEmpty(); + await Assert.That(Misplaced(drawn, host.Placement(PaneSide.Right), across: false)).IsEmpty(); + } + + /// + /// A drag moves the picture a pixel for each pixel the pointer moves, with the copy as it does + /// without it. The part that shows starts between two pixels of the copy as often as on one: + /// in a pane an odd number of pixels wide a picture centred in it starts exactly half way, + /// and stays half way for the whole of a drag. Rounded on that line, each frame falls whichever + /// way the arithmetic's last digit sends it, and the picture stands still for one pixel of the + /// drag and jumps two for the next. + /// + [Test] + [Arguments(1100)] + [Arguments(1102)] + public async Task ADragMovesItAPixelForEachPixelDragged(int width) + { + using var host = new Host(width); + host.Canvas.Synchronous = true; + var state = Zoomed(2); + var first = host.Draw(state); + var from = host.Placement(PaneSide.Left); + var start = Stripes(first, from.Bounds, across: true); + await Assert.That(start).IsNotEmpty(); + + var moves = new List(); + var last = start[start.Count / 2]; + for (var by = 1; by <= 40; by++) + { + // As the canvas reports a drag: from where the button went down, not from the last move + var centre = from.Dragged(new(by, 0)); + var drawn = host.Draw(ViewerSession.PanTo(state, centre.X, centre.Y)); + // The same change of stripe, which is the one nearest to where the last frame left it + var now = Stripes(drawn, from.Bounds, across: true).MinBy(_ => Math.Abs(_ - last - 1)); + moves.Add(now - last); + last = now; + } + + Console.WriteLine($"{width} wide, a pane's picture {from.Bounds.Width} wide: moved {string.Join(" ", moves)}"); + await Assert.That(moves.Distinct()).IsEquivalentTo([1]); + } + + /// + /// In a window, where a picture is decoded and scaled on the pool: no paint scales it itself. + /// Each one draws whatever there is to draw meanwhile, and the copy arrives through the message + /// loop, after which nothing is left turning and the picture is where it belongs. + /// + [Test] + public async Task InAWindowItIsScaledOffTheThreadThatPaints() + { + using var host = new Host(); + var state = Zoomed(1); + + var deadline = DateTime.UtcNow + TimeSpan.FromSeconds(30); + while (host.Composed < 2 && + DateTime.UtcNow < deadline) + { + var before = host.Composed; + host.Draw(state); + await Assert.That(host.Composed).IsEqualTo(before); + Application.DoEvents(); + Thread.Sleep(10); + } + + var landed = host.Draw(state); + + await Assert.That(host.Composed).IsEqualTo(2); + await Assert.That(host.Canvas.Spinners).IsEmpty(); + await Assert.That(Misplaced(landed, host.Placement(PaneSide.Left), across: true)).IsEmpty(); + } + + /// + /// And while the copy at a new size is on its way, the last thing composed stands in for it, + /// the same part of it stretched into place: zooming in from fitted shows the picture at once, + /// rough, rather than a spinner on every step. + /// + [Test] + public async Task UntilItLandsTheLastSizeStandsIn() + { + using var host = new Host(); + var fitted = Zoomed(0); + var deadline = DateTime.UtcNow + TimeSpan.FromSeconds(30); + while (host.Composed < 2 && + DateTime.UtcNow < deadline) + { + host.Draw(fitted); + Application.DoEvents(); + Thread.Sleep(10); + } + + await Assert.That(host.Composed).IsEqualTo(2); + + // The first paint after zooming in, before anything more has been handed back + var meanwhile = host.Draw(Zoomed(1)); + + await Assert.That(host.Composed).IsEqualTo(2); + await Assert.That(host.Canvas.Spinners).IsEmpty(); + // Stretched half as large again, so an edge is a pixel or two wide and found within three + await Assert.That(Misplaced(meanwhile, host.Placement(PaneSide.Left), across: true, within: 3)).IsEmpty(); + } + + /// + /// The pair, the given number of steps in from fitted. + /// + static SessionState Zoomed(int steps) + { + var state = ViewerSession.EnqueueFile( + SessionState.Start(ViewerMode.File, columns, rows), + QueueEntry.ForFiles(left, right, FileSide.Read(left), FileSide.Read(right))); + for (var step = 0; step < steps; step++) + { + state = ViewerSession.Apply(state, CommandKind.ZoomIn); + } + + return state; + } + + /// + /// What is wrong with where a picture's stripes were drawn, which is nothing when every change + /// of stripe the placement puts on screen was drawn within pixels of + /// there, and nothing else was drawn that looks like one. A change within a few pixels of the + /// edge of what shows is not held to either, since it may or may not have a pixel beyond it. + /// + static List Misplaced(Bitmap drawn, PicturePlacement placement, bool across, double within = 1.5) + { + const int margin = 4; + var bounds = placement.Bounds; + var origin = across ? bounds.X : bounds.Y; + var end = across ? bounds.Right : bounds.Bottom; + var full = across ? picture.Width : picture.Height; + var source = across ? placement.Source.X : placement.Source.Y; + var size = across ? placement.Size.Width : placement.Size.Height; + var expected = new List(); + for (var edge = stripe; edge < full; edge += stripe) + { + expected.Add(origin + ((double) edge / full - source) * size); + } + + var found = Stripes(drawn, bounds, across); + var wrong = new List(); + var inside = expected.Where(_ => _ > origin + margin && _ < end - margin).ToList(); + if (inside.Count == 0) + { + wrong.Add("No change of stripe is placed where it would show, so nothing was checked"); + } + + foreach (var edge in inside) + { + if (!found.Any(_ => Math.Abs(_ - edge) <= within)) + { + wrong.Add($"The change placed at {edge:F1} was drawn at none of {string.Join(" ", found)}"); + } + } + + foreach (var change in found.Where(_ => _ > origin + margin && _ < end - margin)) + { + if (!expected.Any(_ => Math.Abs(_ - change) <= within)) + { + wrong.Add($"A change was drawn at {change}, and none is placed there: {string.Join(" ", expected.Select(_ => _.ToString("F1")))}"); + } + } + + return wrong; + } + + /// + /// Where the drawn stripes change, along a line through the middle of what shows: the first + /// pixel of each that is the other colour from the one before it. + /// + static List Stripes(Bitmap drawn, Rectangle bounds, bool across) + { + var changes = new List(); + var from = across ? bounds.X : bounds.Y; + var to = across ? bounds.Right : bounds.Bottom; + bool? before = null; + for (var at = from; at < to; at++) + { + var pixel = across + ? drawn.GetPixel(at, bounds.Y + bounds.Height / 2) + : drawn.GetPixel(bounds.X + bounds.Width / 2, at); + // The light stripe has little blue in it and the dark one little else + var isLight = pixel.R > pixel.B; + if (before is { } was && + was != isLight) + { + changes.Add(at); + } + + before = isLight; + } + + return changes; + } + + static string Write(string name, bool across) + { + var path = Path.Combine(directory, name); + using var bitmap = new Bitmap(picture.Width, picture.Height); + using (var graphics = Graphics.FromImage(bitmap)) + { + using var darkBrush = new SolidBrush(dark); + using var lightBrush = new SolidBrush(light); + var count = (across ? picture.Width : picture.Height) / stripe; + for (var index = 0; index < count; index++) + { + graphics.FillRectangle( + index % 2 == 0 ? darkBrush : lightBrush, + across + ? new Rectangle(index * stripe, 0, stripe, picture.Height) + : new Rectangle(0, index * stripe, picture.Width, stripe)); + } + } + + bitmap.Save(path, System.Drawing.Imaging.ImageFormat.Png); + return path; + } + + /// + /// A canvas in a real window, parked off screen and out of the taskbar, as the other tests of + /// the canvas host one. + /// + sealed class Host : IDisposable + { + readonly Form form = new() + { + StartPosition = FormStartPosition.Manual, + Location = new(-4000, -2000), + ShowInTaskbar = false + }; + + readonly List bitmaps = []; + + Screen? screen; + + public ViewerCanvas Canvas { get; } = new(); + + public Host(int width = 1100, int height = 700) + { + Canvas.Size = new(width, height); + form.Controls.Add(Canvas); + form.Show(); + } + + public Bitmap Draw(SessionState state) + { + screen = ScreenBuilder.Build(ViewerSession.Resize(state, columns, rows)); + Canvas.Draw(screen); + Canvas.Refresh(); + var bitmap = new Bitmap(Canvas.Width, Canvas.Height); + Canvas.DrawToBitmap(bitmap, new(0, 0, Canvas.Width, Canvas.Height)); + bitmaps.Add(bitmap); + return bitmap; + } + + /// + /// Where the last paint put a side's picture, by the rule the paint and the pointer share. + /// + public PicturePlacement Placement(PaneSide side) => + PicturePlacement.Of( + Canvas.PictureAreas[side == PaneSide.Left ? 0 : 1], + side == PaneSide.Left ? screen!.Left.Image! : screen!.Right.Image!); + + ImageCache Cache => + (ImageCache) typeof(ViewerCanvas) + .GetField("images", BindingFlags.Instance | BindingFlags.NonPublic)! + .GetValue(Canvas)!; + + /// + /// How many times a picture has been composed or scaled to be kept. + /// + public int Composed => + Cache.Composed; + + /// + /// The size of what is kept of a picture, or null when nothing is. + /// + public Size? Kept(string path) => + Cache.Composited(path)?.Size; + + public void Dispose() + { + foreach (var bitmap in bitmaps) + { + bitmap.Dispose(); + } + + form.Dispose(); + } + } +} diff --git a/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs b/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs index 3952a8b9f..dd6949112 100644 --- a/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/FormsHeadTests.cs @@ -307,6 +307,50 @@ public async Task RepaintingAPictureComposesItOnce() await Assert.That(Bounds(first, _ => _ is {R: 198, G: 64, B: 64})).IsEqualTo(red); } + /// + /// A picture no larger than one square of the checkerboard behind it has no dark square under + /// it at all. The dark squares are handed to GDI+ as one list, and it takes a list of nothing + /// as a mistake, which would fail the compose and leave an icon of eight pixels drawn as + /// nothing. Composed on the pool, as the window does, where a compose that fails is one that + /// never lands rather than one that throws out of a paint. + /// + [Test] + public async Task APictureNoLargerThanOneSquareOfTheCheckerboardIsDrawn() + { + var directory = Directory.CreateTempSubdirectory("deview-small-picture-").FullName; + try + { + var received = Path.Combine(directory, "icon.received.png"); + var verified = Path.Combine(directory, "icon.verified.png"); + await File.WriteAllBytesAsync(received, SamplePng.Build(8, 6, 198, 64, 64)); + await File.WriteAllBytesAsync(verified, SamplePng.Build(8, 6, 64, 150, 198)); + var entry = QueueEntry.ForFiles(received, verified, FileSide.Read(received), FileSide.Read(verified)); + var screen = ScreenBuilder.Build( + ViewerSession.Resize( + ViewerSession.EnqueueFile(SessionState.Start(ViewerMode.File, columns, rows), entry), + columns, + rows)); + using var host = new CanvasHost(); + + var deadline = DateTime.UtcNow + TimeSpan.FromSeconds(10); + while (host.Canvas.Composed() < 2 && + DateTime.UtcNow < deadline) + { + Application.DoEvents(); + host.Draw(screen); + Thread.Sleep(10); + } + + var drawn = host.Draw(screen); + + await Assert.That(Bounds(drawn, _ => _ is {R: 198, G: 64, B: 64})).IsNotNull(); + } + finally + { + Directory.Delete(directory, true); + } + } + /// /// One picture on both sides, which a page that two identical documents share is, on a canvas /// an odd number of pixels wide. The right pane is then a pixel wider than the left, and a diff --git a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs index 6a5d18dd9..ef0b5a9b8 100644 --- a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs @@ -192,6 +192,56 @@ public async Task APictureIsComposedOncePerSize() await Assert.That(cache.Composed).IsEqualTo(2); } + /// + /// A picture is composed two ways: fitted over its checkerboard, and enlarged with nothing + /// under it. Either of those at the size the other is asked for is still not the other, so it + /// is composed again rather than handed over because the sizes happen to match. + /// + [Test] + public async Task APictureComposedOneWayIsNotTheOtherAtThatSize() + { + var path = Write("two-ways.png", SamplePng.Build(8, 6, 200, 40, 40)); + using var cache = new ImageCache(); + await Assert.That(cache.Get(path, null)).IsNotNull(); + Func fitted = (_, size) => new(size.Width, size.Height); + Func enlarged = (_, size) => new(size.Width, size.Height); + + var first = cache.Composite(path, new(4, 3), fitted); + var other = cache.Composite(path, new(4, 3), enlarged); + var again = cache.Composite(path, new(4, 3), enlarged); + + await Assert.That(ReferenceEquals(first, other)).IsFalse(); + await Assert.That(ReferenceEquals(other, again)).IsTrue(); + await Assert.That(cache.Composed).IsEqualTo(2); + } + + /// + /// And on the pool as for a new size: what is there stands in until the other way lands. + /// + [Test] + public async Task APictureComposedOneWayStandsInUntilTheOtherLands() + { + var path = Write("two-ways-posted.png", SamplePng.Build(8, 6, 200, 40, 40)); + using var posted = new BlockingCollection(); + using var cache = new ImageCache(posted.Add); + cache.Get(path, null); + Func enlarged = (_, size) => new(size.Width, size.Height); + cache.Composite(path, new(4, 3), Build, () => { }); + await Assert.That(posted.TryTake(out var first, TimeSpan.FromSeconds(10))).IsTrue(); + first!(); + var fitted = cache.Composite(path, new(4, 3), Build, () => { }); + + var meanwhile = cache.Composite(path, new(4, 3), enlarged, () => { }); + await Assert.That(ReferenceEquals(meanwhile, fitted)).IsTrue(); + + await Assert.That(posted.TryTake(out var second, TimeSpan.FromSeconds(10))).IsTrue(); + second!(); + var landed = cache.Composite(path, new(4, 3), enlarged, () => { }); + await Assert.That(ReferenceEquals(landed, fitted)).IsFalse(); + await Assert.That(posted.Count).IsEqualTo(0); + await Assert.That(cache.Composed).IsEqualTo(2); + } + /// /// The window composes on the pool as well: scaling a page of a document on the UI thread held /// it for tens of milliseconds a size. Until the first lands there is nothing to draw, and the diff --git a/src/DiffEngineViewer.Windows/ImageCache.cs b/src/DiffEngineViewer.Windows/ImageCache.cs index a3b2f2c79..2192dfe0d 100644 --- a/src/DiffEngineViewer.Windows/ImageCache.cs +++ b/src/DiffEngineViewer.Windows/ImageCache.cs @@ -15,7 +15,10 @@ /// held the window for over 100 ms. And the picture as painted, at the size it was painted /// (): scaling it and drawing the /// checkerboard under it on every paint cost 46 to 66 ms a paint for that pair, where copying the -/// result costs almost nothing. +/// result costs almost nothing. One such at a time for a picture: fitted, or, while it is enlarged +/// to no more than half its own size, the whole of it at that size for the part that shows to be +/// copied out of. Past that nothing more is held, since the whole of it would be up to the +/// decoded picture's size again. /// /// /// Both are made off the UI thread when there is somewhere to post the result, which the window @@ -67,6 +70,22 @@ sealed class Entry(Stamp stamp, Image? image) /// public Bitmap? Composite { get; set; } + /// + /// What made . A picture is composed two ways, fitted over its + /// checkerboard and enlarged with nothing under it, and one of those at the size the + /// other is asked for is still not the other. + /// + public Func? Composer { get; set; } + + /// + /// Whether is what makes at + /// . + /// + public bool Holds(Size size, Func build) => + Composite is { } composite && + composite.Size == size && + Composer == build; + /// /// The size a compose on the pool is making, or null when none is. /// @@ -208,9 +227,9 @@ public void Keep(IReadOnlyCollection paths) /// from two threads at once throws. A compose only ever starts on the UI thread, so one cannot /// begin between this answering and the caller drawing. /// - /// For a picture enlarged past its pane, which is drawn a part at a time straight from the - /// decoded picture. A composite of the whole of it at sixteen times the size that fits would - /// be hundreds of megabytes to show the corner of it that is on screen. + /// For a picture enlarged past half its own size, which is drawn a part at a time straight + /// from the decoded picture. A composite of the whole of it at sixteen times the size that fits + /// would be hundreds of megabytes to show the corner of it that is on screen. /// /// public Image? Idle(string path) => @@ -220,9 +239,9 @@ entry.Composing is null : null; /// - /// The picture at as it was last painted fitted, at whatever size that - /// was, or null when it never has been. Something to draw from while has - /// nothing to give. + /// The picture at as it was last composed, fitted or enlarged, at + /// whatever size that was, or null when it never has been. Something to draw from while + /// has nothing to give. /// public Bitmap? Composited(string path) => entries.TryGetValue(path, out var entry) ? entry.Composite : null; @@ -268,8 +287,9 @@ void Loaded(string path, Stamp stamp, Image? image, Action loaded) /// /// The picture at as it is painted at , built - /// by from the decoded picture the first time that size is asked for - /// and kept until another size is, or the picture goes. Null when the picture is not decoded. + /// by from the decoded picture the first time that size is asked of + /// it and kept until another size is, or another way of building it, or the picture goes. Null + /// when the picture is not decoded. /// Built here and now: for a caller that has to have it this frame, such as a capture. /// public Bitmap? Composite(string path, Size size, Func build) @@ -280,24 +300,24 @@ void Loaded(string path, Stamp stamp, Image? image, Action loaded) return null; } - if (entry.Composite is { } composite && - composite.Size == size) + if (entry.Holds(size, build)) { - return composite; + return entry.Composite; } entry.Composite?.Dispose(); entry.Composite = build(entry.Image, size); + entry.Composer = build; Composed++; return entry.Composite; } /// /// The picture at as it is painted at , composed - /// on the pool when that size has not been, after which is called on - /// the UI thread. Meanwhile the composite at whatever size it was last made, for the caller to - /// stretch into place, or null when there has never been one. With nowhere to post the result - /// this composes here and now. + /// on the pool when it has not been at that size and by , after which + /// is called on the UI thread. Meanwhile the composite at whatever + /// size it was last made, for the caller to stretch into place, or null when there has never + /// been one. With nowhere to post the result this composes here and now. /// /// One compose at a time per picture. A resize asks for a new size every frame, and the one /// asked for when the compose in hand finishes is the one composed next, so a drag ends with @@ -317,10 +337,9 @@ void Loaded(string path, Stamp stamp, Image? image, Action loaded) return null; } - if (entry.Composite is { } composite && - composite.Size == size) + if (entry.Holds(size, build)) { - return composite; + return entry.Composite; } if (entry.Composing is null && @@ -341,13 +360,13 @@ void Loaded(string path, Stamp stamp, Image? image, Action loaded) entry.EndRead(); } }, - built => Landed(path, entry, built, loaded)); + built => Landed(path, entry, built, build, loaded)); } return entry.Composite; } - void Landed(string path, Entry entry, Bitmap? built, Action loaded) + void Landed(string path, Entry entry, Bitmap? built, Func build, Action loaded) { entry.Composing = null; // Only into the entry it was made from. One the cache has since let go of, for a picture @@ -370,6 +389,7 @@ void Landed(string path, Entry entry, Bitmap? built, Action loaded) entry.Composite?.Dispose(); entry.Composite = built; + entry.Composer = build; Composed++; loaded(); } diff --git a/src/DiffEngineViewer.Windows/ViewerCanvas.cs b/src/DiffEngineViewer.Windows/ViewerCanvas.cs index 0f07f205a..c0ab63cb0 100644 --- a/src/DiffEngineViewer.Windows/ViewerCanvas.cs +++ b/src/DiffEngineViewer.Windows/ViewerCanvas.cs @@ -575,7 +575,13 @@ void DrawImage(Graphics graphics, Pane pane, int left, int width, int bodyTop, i var bounds = placement.Bounds; if (image.Zoom > 1) { - DrawEnlarged(graphics, image, placement); + // From a copy of the whole of it at that size while one is small enough to keep, and + // otherwise straight from the picture + if (!DrawScaled(graphics, image, placement, available, lineHeight)) + { + DrawEnlarged(graphics, image, placement); + } + return; } @@ -617,12 +623,135 @@ void DrawImage(Graphics graphics, Pane pane, int left, int width, int bodyTop, i } /// - /// A picture the reader has zoomed into: the part of it that shows, drawn straight from the - /// decoded picture rather than from a composite of the whole of it at that size, which at the - /// last step would be hundreds of megabytes to show one corner. + /// A picture the reader has zoomed into, but only as far as half its own size or less: the + /// part of it that shows, copied out of the whole of it scaled to that size. False when there + /// is no such copy to draw from and none coming, which leaves it to + /// : the picture is further in than that, or could not be scaled. + /// + /// Drawn straight from the picture, this far out, the part that shows is many times the + /// pane's pixels, and the filter a reduction needs reads every one of them on every paint: a + /// pair of 4000 by 3000 pictures at 150% was 54 ms a paint, on every frame of a drag, and is 2 + /// copied. The whole of it at this size is at most a quarter of the picture's own pixels, so + /// it is kept as the fitted one is, made on the pool and replaced when another size is asked + /// for. Where the picture is dragged to is not part of what is kept, so a drag copies a + /// different part of the same thing. + /// /// - /// On this thread, on every paint. It is the pane's worth of pixels however far in it is, and a - /// drag asks for a different part on every frame, so there is nothing a cache could keep. + /// Past half its size the whole of it is too much to keep a second copy of, up to the + /// picture's own size again, and the part that shows is under four times the pane's pixels. + /// + /// + bool DrawScaled(Graphics graphics, ImagePane image, PicturePlacement placement, Rectangle available, int lineHeight) + { + if (image.Width < placement.Size.Width * 2) + { + return false; + } + + var size = new Size( + (int) Math.Round(placement.Size.Width), + (int) Math.Round(placement.Size.Height)); + var scaled = Synchronous + ? images.Composite(image.Path, size, Scale) + : images.Composite(image.Path, size, Scale, Invalidate); + var landed = scaled is not null && + scaled.Size == size; + if (!landed && + images.Idle(image.Path) is not null) + { + // Not at this size, and nothing on the pool is making it: it could not be made + return false; + } + + if (scaled is null) + { + DrawSpinner(graphics, available, lineHeight); + return true; + } + + var bounds = placement.Bounds; + FillChecker(graphics, bounds); + var interpolation = graphics.InterpolationMode; + var offset = graphics.PixelOffsetMode; + graphics.PixelOffsetMode = PixelOffsetMode.Half; + if (landed) + { + // Pixel for pixel, from a whole pixel of it + graphics.InterpolationMode = InterpolationMode.NearestNeighbor; + graphics.DrawImage( + scaled, + bounds, + new Rectangle( + Math.Clamp(Whole(placement.Source.X * size.Width), 0, size.Width - bounds.Width), + Math.Clamp(Whole(placement.Source.Y * size.Height), 0, size.Height - bounds.Height), + bounds.Width, + bounds.Height), + GraphicsUnit.Pixel); + } + else + { + // Whatever was last composed, at the size it was, with the same part of it stretched + // into place: rough for the frame or two until this size lands and repaints + graphics.InterpolationMode = InterpolationMode.Bilinear; + graphics.DrawImage( + scaled, + bounds, + new RectangleF( + placement.Source.X * scaled.Width, + placement.Source.Y * scaled.Height, + placement.Source.Width * scaled.Width, + placement.Source.Height * scaled.Height), + GraphicsUnit.Pixel); + } + + graphics.InterpolationMode = interpolation; + graphics.PixelOffsetMode = offset; + + using var pen = new Pen(Palette.Rule); + graphics.DrawRectangle(pen, bounds.X - 1, bounds.Y - 1, bounds.Width + 1, bounds.Height + 1); + return true; + } + + /// + /// The pixel of a scaled picture that the part showing starts at: the nearest to where the + /// placement puts it, which is anywhere between two. Half way goes up, and so does a little + /// short of half way. A picture centred in its pane starts on a whole pixel or exactly half + /// way to the next, and a drag moves it a pixel at a time from there, so half way is where it + /// stays for the whole of the drag. Rounded on that line it fell either way with whatever the + /// arithmetic left in its last digit, and the picture stood still for one pixel of the drag + /// and jumped two for the next. + /// + static int Whole(float position) => + (int) Math.Floor(position + 0.51f); + + /// + /// The whole picture at , with nothing under it: the checkerboard + /// behind an enlarged picture stays where the pane is while the picture is dragged across it, + /// so it is not part of what is kept. Scaled with the filter the part that shows was drawn + /// with when it was scaled on every paint, so what a reader sees at a size is what they saw. + /// + /// Runs on the pool for the window, as does. + /// + /// + static Bitmap Scale(Image picture, Size size) + { + var scaled = new Bitmap(size.Width, size.Height, PixelFormat.Format32bppPArgb); + using var graphics = Graphics.FromImage(scaled); + graphics.InterpolationMode = InterpolationMode.HighQualityBilinear; + graphics.PixelOffsetMode = PixelOffsetMode.Half; + graphics.DrawImage(picture, new Rectangle(Point.Empty, size)); + return scaled; + } + + /// + /// A picture the reader has zoomed into past half its own size: the part of it that shows, + /// drawn straight from the decoded picture rather than from a copy of the whole of it at that + /// size, which at the last step would be hundreds of megabytes to show one corner. + /// + /// On this thread, on every paint. Past its own size it is the pane's worth of the picture's + /// pixels however far in it is, and between that and half its size no more than four times + /// the pane's worth, where has the rest. A drag asks for a different + /// part on every frame, so there is nothing a cache of what shows could keep. /// /// void DrawEnlarged(Graphics graphics, ImagePane image, PicturePlacement placement) @@ -643,11 +772,13 @@ void DrawEnlarged(Graphics graphics, ImagePane image, PicturePlacement placement placement.Source.Width * picture.Width, placement.Source.Height * picture.Height); - graphics.FillRectangle(Checker(bounds.Location), bounds); + FillChecker(graphics, bounds); var interpolation = graphics.InterpolationMode; var offset = graphics.PixelOffsetMode; // Its pixels as they are once it is past its own size, which is what zooming that far in // is for: smoothed, a one pixel difference between the two sides is a blur on both. + // Short of that, the filter that reads every pixel it reduces. Plain bilinear would do for + // a reduction of under two, and is the one GDI+ takes longer over: 14 ms a pane to 9. graphics.InterpolationMode = placement.Size.Width >= picture.Width ? InterpolationMode.NearestNeighbor : InterpolationMode.HighQualityBilinear; @@ -661,29 +792,30 @@ void DrawEnlarged(Graphics graphics, ImagePane image, PicturePlacement placement } /// - /// The checkerboard as a brush, its squares starting at as the - /// composed one's do. A tile rather than a rectangle a square, because this is filled on every - /// paint of an enlarged picture, where the composed one is drawn once per size. + /// The checkerboard under an enlarged picture, its squares starting at the corner of + /// as the composed one's do, and staying there while the picture is + /// dragged across them. + /// + /// Drawn on every paint of an enlarged picture, where the composed one is drawn once per size. + /// It was a brush tiling one pair of squares for that reason, and the brush was the dear way: + /// GDI+ took over 3 ms to fill a pane from a texture, and takes half a millisecond to fill it + /// with a colour and half its squares with another. Once the picture over it is a copy rather + /// than a rescale, that was most of what a frame of a drag cost. + /// /// - TextureBrush Checker(Point origin) - { - if (checkerBrush is null) - { - using var tile = new Bitmap(checker * 2, checker * 2, PixelFormat.Format32bppPArgb); - using (var graphics = Graphics.FromImage(tile)) - { - DrawChecker(graphics, new(0, 0, checker * 2, checker * 2)); - } - - checkerBrush = new(tile); - } - - checkerBrush.ResetTransform(); - checkerBrush.TranslateTransform(origin.X, origin.Y); - return checkerBrush; - } + void FillChecker(Graphics graphics, Rectangle bounds) => + DrawChecker( + graphics, + bounds, + Painter.Brush(Palette.CheckerLight), + Painter.Brush(Palette.CheckerDark), + ref darkSquares); - TextureBrush? checkerBrush; + /// + /// Where the dark squares of the last checkerboard painted were, kept so that the next paint + /// has somewhere to list its own. + /// + Rectangle[] darkSquares = []; /// /// Where the last paint put each side's picture, or the space one is on its way to. What the @@ -818,7 +950,19 @@ static void DrawChecker(Graphics graphics, Rectangle bounds) { using var light = new SolidBrush(Palette.CheckerLight); using var dark = new SolidBrush(Palette.CheckerDark); + Rectangle[] squares = []; + DrawChecker(graphics, bounds, light, dark, ref squares); + } + + /// + /// One colour over all of it and the other over every second square, those as one list handed + /// over together: a call a square is most of what a square costs. The list is written into + /// , which is made longer when it has to be. + /// + static void DrawChecker(Graphics graphics, Rectangle bounds, Brush light, Brush dark, ref Rectangle[] squares) + { graphics.FillRectangle(light, bounds); + var count = 0; for (var y = bounds.Y; y < bounds.Bottom; y += checker) { for (var x = bounds.X; x < bounds.Right; x += checker) @@ -828,11 +972,21 @@ static void DrawChecker(Graphics graphics, Rectangle bounds) continue; } - graphics.FillRectangle( - dark, - Rectangle.Intersect(new(x, y, checker, checker), bounds)); + if (count == squares.Length) + { + Array.Resize(ref squares, Math.Max(64, count * 2)); + } + + squares[count++] = Rectangle.Intersect(new(x, y, checker, checker), bounds); } } + + // None at all under a picture no larger than one square, and GDI+ takes a list of nothing + // as a mistake rather than as nothing to do + if (count > 0) + { + graphics.FillRectangles(dark, squares.AsSpan(0, count)); + } } void DrawTitle(Graphics graphics, int lineHeight) @@ -1233,7 +1387,6 @@ protected override void Dispose(bool disposing) font.Dispose(); tips.Dispose(); images.Dispose(); - checkerBrush?.Dispose(); } base.Dispose(disposing); From 088f619f8e0358baef5ec98afc1037cb616c3271 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 20:00:39 +1000 Subject: [PATCH 64/73] Measure what the WinForms head does with an idle frame's screen IdleFrameBenchmarks hands a form that is never shown the screen it was handed last, and a screen built again from the same state, which is what every idle frame handed over while the loop built one a frame: the screen of the frame before 0.7 ns an equal screen built again 370 ns The second is the field by field comparison that stood between an idle frame and a repaint. It was the small part of what such a frame cost, behind building the screen at all. The one ImageCacheTests test that arrived with the enlarged picture work waits for its decode as the others now do, without holding a pool thread. --- .../IdleFrameBenchmarks.cs | 56 +++++++++++++++++++ .../ImageCacheTests.cs | 10 ++-- 2 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 src/DiffEngineViewer.Windows.Benchmarks/IdleFrameBenchmarks.cs diff --git a/src/DiffEngineViewer.Windows.Benchmarks/IdleFrameBenchmarks.cs b/src/DiffEngineViewer.Windows.Benchmarks/IdleFrameBenchmarks.cs new file mode 100644 index 000000000..662d5ec5e --- /dev/null +++ b/src/DiffEngineViewer.Windows.Benchmarks/IdleFrameBenchmarks.cs @@ -0,0 +1,56 @@ +using BenchmarkDotNet.Attributes; + +// What the form does with the screen it is handed on a frame in which nothing happened, which is +// nearly every frame: sixty a second for as long as the window is up. The form is never shown, so +// nothing is painted and nothing appears on the desktop: this is only the deciding that there is +// nothing to do. +[MemoryDiagnoser] +public class IdleFrameBenchmarks +{ + ViewerForm form = null!; + Screen first = null!; + Screen second = null!; + bool flip; + + [GlobalSetup] + public void Setup() + { + ViewerApp.ConfigureUnscaled(); + var directory = Path.Combine(Path.GetTempPath(), "deview-benchmarks", "idle"); + var state = SessionState.Start(ViewerMode.Inline, 120, 40); + for (var index = 0; index < 500; index++) + { + state = ViewerSession.EnqueueInline( + state, + new(Path.Combine(directory, $"Sample{index % 40}Tests.cs"), 10 + index, "\"old\"", $"new {index}") + { + TestName = $"Test{index}" + }); + } + + // Two screens that say the same thing, as two builds of one state do + first = ScreenBuilder.Build(state); + second = ScreenBuilder.Build(state); + form = new("benchmark", 1100, 700); + form.Apply(first); + } + + [GlobalCleanup] + public void Cleanup() => + form.Dispose(); + + // The screen the loop handed over last frame, which is what it hands over while the state is + // the one it was. + [Benchmark] + public void TheScreenOfTheFrameBefore() => + form.Apply(first); + + // A screen built again from the same state: equal in everything and another object, which is + // what every idle frame handed over while a screen was built per frame. + [Benchmark] + public void AnEqualScreenBuiltAgain() + { + flip = !flip; + form.Apply(flip ? second : first); + } +} diff --git a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs index ef0b5a9b8..127de1b03 100644 --- a/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs +++ b/src/DiffEngineViewer.Windows.Tests/ImageCacheTests.cs @@ -222,20 +222,20 @@ public async Task APictureComposedOneWayIsNotTheOtherAtThatSize() public async Task APictureComposedOneWayStandsInUntilTheOtherLands() { var path = Write("two-ways-posted.png", SamplePng.Build(8, 6, 200, 40, 40)); - using var posted = new BlockingCollection(); + var posted = new Posts(); using var cache = new ImageCache(posted.Add); cache.Get(path, null); Func enlarged = (_, size) => new(size.Width, size.Height); cache.Composite(path, new(4, 3), Build, () => { }); - await Assert.That(posted.TryTake(out var first, TimeSpan.FromSeconds(10))).IsTrue(); - first!(); + var first = await posted.Take(); + first(); var fitted = cache.Composite(path, new(4, 3), Build, () => { }); var meanwhile = cache.Composite(path, new(4, 3), enlarged, () => { }); await Assert.That(ReferenceEquals(meanwhile, fitted)).IsTrue(); - await Assert.That(posted.TryTake(out var second, TimeSpan.FromSeconds(10))).IsTrue(); - second!(); + var second = await posted.Take(); + second(); var landed = cache.Composite(path, new(4, 3), enlarged, () => { }); await Assert.That(ReferenceEquals(landed, fitted)).IsFalse(); await Assert.That(posted.Count).IsEqualTo(0); From b67d0424422c3eb39dd0a4e9263f0d3d2f204c3f Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 20:00:39 +1000 Subject: [PATCH 65/73] Describe the library's, the inline patcher's and the two heads' performance changes In claude.md: the listener table in front of a connect, a file's snapshots written together and what that does to the moment one can be withdrawn, the scan's rented map, the staging directories kept a second, a batch's record step, the WinForms head's rows cut to their pane and its scaled copy of an enlarged picture, and the macOS head's clip test, kept lines and reduced copy, with what CI does and does not exercise of them. In the viewer's page: an accept-all goes a step at a time, a file's snapshots are one step, and a header's accept goes the same way. --- claude.md | 56 +++++++++++++++++++++++++++++----- docs/mdsource/viewer.source.md | 2 +- docs/viewer.md | 2 +- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/claude.md b/claude.md index 098a5db9b..13f0e7e4d 100644 --- a/claude.md +++ b/claude.md @@ -131,6 +131,26 @@ language, none of which returns something to call it on. And a `Remove` of `settings.Snapshot("old");` takes the statement, since `settings;` is none, while one whose value is awaited, assigned, returned or passed takes only the call. +An accept reads, lexes and rewrites the whole source file, and the rewrite is what costs: a file +written a moment ago is scanned by whatever watches the drive before the next thing can open it, +so five hundred snapshots in one 600 KB file were half a minute of writes around a second of +patching. `InlineApplier.ApplyAll` takes patches together: each file is read once, its patches are +applied in memory in the order given, each to what the one before it left, and it is written once +through the same temporary and swap, with the file's lock and mutex held from the read to the +write. Every patch is told what `Apply` would have told it in turn, and `Apply` is the one-patch +case of the same code. One thing can only differ: a write that fails fails every patch from the +first edit on. Both batches use it, a file at a time (`AcceptBatch.Together` in the viewer, +`OwnedInlineHost.AcceptEvery` in the tray), so the moment up to which a snapshot can still be +withdrawn from a bulk accept is its file's turn rather than its own. A `SourceScan` rents its map +from the pool and is disposed for that reason, and keeps its spans as sorted lists rather than +hash tables: it is built again for every patch, over the whole file. + +A passing inline verification clears its staged trio (`InlineStaging.Clear`), which walked the +project's whole `obj` tree to find the `VerifyInline` directories. The list of those is now kept a +second, per project, and dropped at once when this process stages anything; the caller's own +directory and each known directory's write time are still checked on every clear, which is what +the comment there about not caching "nothing staged" asks for. + ### Core Components **DiffEngine Library (`src/DiffEngine/`):** @@ -169,7 +189,14 @@ is awaited, assigned, returned or passed takes only the call. `Application.DoEvents` rather than `Application.Run`, so the shared loop stays shared. Only the grid is owner drawn: the footer, the context menu, the pane scrollbar and the tooltips are real controls, so they get the OS's keyboard handling, theming and screen reader support. The menu is - still projected from the same `Screen.Menu` the other heads draw. + still projected from the same `Screen.Menu` the other heads draw. A row is handed to GDI+ cut to + the cells its pane has, and one more (`RowText.Shown`, read from the front of the row and cut + before it is segmented): GDI+ lays out every character it is given before it clips any, so 72 + rows of 2,000 character lines were 18 ms a paint, and a megabyte line 28. A picture zoomed to + half its own size or less is copied out of one scaled copy, made on the pool and kept in + `ImageCache`'s composite slot with pan out of the key, where it was scaled from full resolution + on every paint, 50 ms for a 4000 by 3000 pair. Between half and full size nothing is kept, since + the copy would cost up to the decoded picture again. - macOS renders with **AppKit and Core Text** (`native/swift/`), Linux with **raylib and Dear ImGui** (`native/`). Both implement the same C ABI, so the managed interop layer is identical. - macOS took the same treatment as Windows: a real menu bar, an `NSMenu` context menu, `NSView` @@ -184,8 +211,16 @@ is awaited, assigned, returned or passed takes only the call. `Runtime` and handed over one a poll, as the WinForms head does and for its reason. The footer wraps its buttons, and puts the status on a line of its own when there is no room beside them. The font has `calt` and `liga` off, so `<>` or `!=` in a snapshot is drawn as the characters it - holds. None of this head can be compiled or run from Windows: CI's `macos-14` job is the first - build, and its OSX baselines come from that job's `received-*` artifacts. + holds. A spinner invalidates only its own rectangle, but since macOS 11 a view with an automatic + backing store may be handed its whole bounds anyway, so the renderer answers a turn two ways: + `dirty` and `shows` leave out what the context's clip cannot reach, where it is narrowed, and + `lines` and `earlier` keep the `CTLine`s the last two draws made, keyed by the text's bytes and + by which colour object, so a draw that changes little lays out little. An enlarged picture below + its own size is drawn from a copy at that size (`reduced`), made on the work queue in the fitted + copy's slot, except in a capture, past its own size, or when both panes name one picture. None + of this head can be compiled or run from Windows: CI's `macos-14` job is the first build, and + its OSX baselines come from that job's `received-*` artifacts. That job only captures, so it + exercises none of the clip test and none of `reduced`. - Linux draws its own menu, so it keeps that baseline. Its tooltip and pane scrollbar are ImGui's, the scrollbar being `ScrollbarEx` driven in rows rather than pixels so its travel is exactly `ViewerSession`'s clamp. Its footer wraps as the macOS one does (`LayOutFooter`), with two @@ -200,11 +235,13 @@ is awaited, assigned, returned or passed takes only the call. Whether an entry is hidden is always read back out of `VisibleEntries`, never recomputed — the rules about when a header exists at all live in one place and must stay there. A fold is a view: `AcceptAll` still sweeps what it hides, which `CollapseTests` pins. -- Accept-all goes an entry at a time, because it takes as long as the queue is long. +- Accept-all goes a step at a time, because it takes as long as the queue is long. `ViewerSession.BeginAcceptAll` records an `AcceptBatch`, and `AcceptAllRunner` claims an entry under `SessionHost`'s lock (`ClaimNext`), applies it outside (`ApplyClaimed`), and records it under the lock again - snapshots before files, since whether a delete is held turns on how the - snapshots went. The render loop takes that lock every frame, so one transition over the queue + snapshots went. A snapshot is claimed with every other one the batch still has to do in the + same source file (`AcceptBatch.Together`), and they are written with one read and one write, + each still with an outcome of its own: a step is a file where a file has several. The render loop takes that lock every frame, so one transition over the queue froze the window for the whole batch. A window's batch runs on a worker, a wire `AcceptAll` on its listener thread, and `ViewerSession.Apply(AcceptAll)` is the same steps back to back, which is what the tests drive. Owners put `AcceptProgress` on their listings - the tray completes each @@ -216,7 +253,12 @@ is awaited, assigned, returned or passed takes only the call. the header's group is the whole queue. So it goes by the batch's rules, a snapshot the applier would not take staying in the queue with what the applier said, and it counts as still needing review only its own members. Only the bulk discards are still one transition, since a discard - waits on nothing. + waits on nothing. A batch's record step is the one inline transition that does not rebuild the + list from the queue: it asks `InlineQueue.AcceptInBatch` of a queue holding the claimed entry + alone and takes that entry out of the list, or marks it, where it stands. Rebuilt an entry, the + bookkeeping grew with the square of the queue, seconds and gigabytes for 2,000 snapshots. For + the same reason which entries are visible is found by `QueueProjection`'s one walk without + describing the rows, and not asked at all when nothing is folded. - Images (`Images/`, extensions in `DiffEngine/Viewer/ImageExtensions.cs`, linked into the viewer so the tool registration and the renderer cannot disagree) are a side, not a mode. `FileSide.Read` decides text or picture **by extension**, because the expected side of a new snapshot has no bytes @@ -562,7 +604,7 @@ is awaited, assigned, returned or passed takes only the call. - Tool discovery uses wildcard path matching (`WildcardFileFinder`) to find executables in common install locations. A wildcard whose matches are all version-named folders takes the highest version; anything else takes the most recently written - Tool order can be customized via `DiffEngine_ToolOrder` environment variable - `DisabledChecker` respects `DiffEngine_Disabled` env var -- `ViewerClient` remembers a port found unowned for ten minutes (`RecheckUnownedAfter`), and the library's telling sends - settle, retire, move, delete, the first inline or diff send - skip the connect while that stands. A refused loopback connection costs two seconds on Windows (firewall stealth mode drops the reset), and a green run settles once per inline verification, which was six minutes for a class of 188 inline tests. Probes (`IsOwned`), the hosts and `InlineQueueClient` always connect and correct the memory; so does `SettleAppliedInline`, being one send per accept +- `ViewerClient` remembers a port found unowned for ten minutes (`RecheckUnownedAfter`), and the library's telling sends - settle, retire, move, delete, the first inline or diff send - skip the connect while that stands. A refused loopback connection costs two seconds on Windows (firewall stealth mode drops the reset), and a green run settles once per inline verification, which was six minutes for a class of 188 inline tests. Probes (`IsOwned`), the hosts and `InlineQueueClient` always ask and correct the memory; so does `SettleAppliedInline`, being one send per accept. Asking, on Windows, is the operating system's listener table first (`ListenerTable`, shared with `PiperClient`): no listener on the port means nobody to connect to, said without the two seconds, and a listener or a table that cannot be read leaves the connect to answer. So the first telling send of a test process, the launch gate's probe and each of its polls no longer wait to be refused. By port alone, whichever address, since the table is only believed when it says nobody is there. Not for a port that accepted a connection in the last second (`TrustOwnerFor`), because reading the table is reading every connection the machine has, and a run of settles to a live owner would pay more for each than the connect costs - `TrayDisabledChecker` respects `DiffEngine_TrayDisabled` env var, behind `DiffRunner.TrayDisabled`. Separate from `Disabled` because tracking a pending move is separate from launching a tool: every exit of `InnerLaunch`, `Disabled` included, still calls `AddMove`. `PendingFiles.TrayAvailable` is the single gate - Tests use TUnit and Verify for snapshot testing - The native pixel snapshots (`PixelTests`) are opt in through `DIFFENGINE_VIEWER_PIXEL_TESTS`, which `MachineSettings.Ignore` has to leave alone: it clears every `DiffEngine_*` variable without regard to case, and clearing that one skipped them on the CI job that sets it, silently, for as long as nobody looked. Every call into the shim goes through one thread (`OnShimThread`), because on Linux the window's GL context belongs to the thread that made it and each test starts on whichever pool thread picks it up. The Linux baselines reproduce in an `ubuntu:24.04` container set up as the `unix` job in `build.yml` is - the shim built from source, Xvfb, llvmpipe - which is also the only way to run the C++ at all from Windows diff --git a/docs/mdsource/viewer.source.md b/docs/mdsource/viewer.source.md index 206149378..88d290edc 100644 --- a/docs/mdsource/viewer.source.md +++ b/docs/mdsource/viewer.source.md @@ -181,7 +181,7 @@ What lands on the clipboard is what is on screen: tabs already expanded to the f A test run that fails several inline snapshots produces one window, not several. Whichever process binds the loopback port holds the queue; everything else hands its patch to that one. The window lists everything pending and offers **Accept all**. -**Accept all** takes as long as the queue is long, so it goes one entry at a time. Each entry leaves the list as it lands, the status line says how far it has got (`Accepting 12 of 40`), and the window keeps responding throughout. **Accept**, **Discard** and **Accept all** are disabled until it finishes; scrolling, selecting and copying are not. It is the same when [DiffEngineTray](/docs/tray.md) holds the queue, and when the accept-all was started from the tray's menu: the window follows the tray's progress. +**Accept all** takes as long as the queue is long, so it goes a step at a time. Each entry leaves the list as it lands, the status line says how far it has got (`Accepting 12 of 40`), and the window keeps responding throughout. The snapshots of one source file are a single step: they are written into the file together, with one read and one write, and leave the list together. **Accept**, **Discard** and **Accept all** are disabled until it finishes; scrolling, selecting and copying are not. **Accept all in ...** on a header goes the same way, over that header's entries. It is the same when [DiffEngineTray](/docs/tray.md) holds the queue, and when the accept-all was started from the tray's menu: the window follows the tray's progress. Failing file comparisons join the same queue, so a run that fails ten snapshots opens one window whether they are inline or on disk. Every other diff tool gets a process per pair, and DiffEngine closes each one as its test starts passing; the viewer is told to drop that row instead. diff --git a/docs/viewer.md b/docs/viewer.md index 38aca53e3..d9b4037b7 100644 --- a/docs/viewer.md +++ b/docs/viewer.md @@ -188,7 +188,7 @@ What lands on the clipboard is what is on screen: tabs already expanded to the f A test run that fails several inline snapshots produces one window, not several. Whichever process binds the loopback port holds the queue; everything else hands its patch to that one. The window lists everything pending and offers **Accept all**. -**Accept all** takes as long as the queue is long, so it goes one entry at a time. Each entry leaves the list as it lands, the status line says how far it has got (`Accepting 12 of 40`), and the window keeps responding throughout. **Accept**, **Discard** and **Accept all** are disabled until it finishes; scrolling, selecting and copying are not. It is the same when [DiffEngineTray](/docs/tray.md) holds the queue, and when the accept-all was started from the tray's menu: the window follows the tray's progress. +**Accept all** takes as long as the queue is long, so it goes a step at a time. Each entry leaves the list as it lands, the status line says how far it has got (`Accepting 12 of 40`), and the window keeps responding throughout. The snapshots of one source file are a single step: they are written into the file together, with one read and one write, and leave the list together. **Accept**, **Discard** and **Accept all** are disabled until it finishes; scrolling, selecting and copying are not. **Accept all in ...** on a header goes the same way, over that header's entries. It is the same when [DiffEngineTray](/docs/tray.md) holds the queue, and when the accept-all was started from the tray's menu: the window follows the tray's progress. Failing file comparisons join the same queue, so a run that fails ten snapshots opens one window whether they are inline or on disk. Every other diff tool gets a process per pair, and DiffEngine closes each one as its test starts passing; the viewer is told to drop that row instead. From 7d6b517238835e3b848463f7d1923423f4c18bcc Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 18:58:22 +1000 Subject: [PATCH 66/73] Measure what a frame costs the Linux head to draw The checkerboard behind a picture is drawn as a quad a dark square, built again every frame, for opaque pictures too. What that costs was an estimate, because nothing measured the shim: it only builds and runs on Linux, and the benchmarks ran on Windows. NativeFrameBenchmarks opens the head's real window through NativeViewerWindow and turns it as ViewerProgram's loop does, one Present and one Poll, on a comparison of text and on two comparisons of pictures that fill their panes. BenchmarkDotNet's in process runner gives each case a thread of its own for its setup, iterations and cleanup, so a window per case keeps every call into the shim, and into OpenGL, on the thread that owns the GL context. The time on the clock says little, since the shim holds the loop to sixty frames a second, so three columns are added. CPU is the processor time of the whole process around each turn, since llvmpipe rasterises on several threads. Triangles is OpenGL's own count of the primitives generated during a turn, which is what the shim submitted whatever then filled them, and Drawn is how many turns generated any. X server CPU is what the server spent over the same stretch. Mean is made to mean something by presenting each measured frame more than a sixtieth of a second after the one before, so it has nothing to wait out: an IterationSetup, which BenchmarkDotNet answers by running one frame an iteration. The two frames presented in turn differ by a letter of the status line, so a frame stays a frame the head has to draw once it learns to leave an unchanged one alone. Left out of a run wherever there is no shim to load or no display, which is every run on Windows, by a filter on the class. Before the fix, in an ubuntu:24.04 container set up as the unix job is, under Xvfb with llvmpipe on four threads, 30 iterations: LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe LP_NUM_THREADS=4 \ xvfb-run -a --server-args="-screen 0 3840x2160x24" \ dotnet run -c Release --project src/DiffEngineViewer.Benchmarks -- \ --filter "*NativeFrame*" --warmupCount 5 --iterationCount 30 | Method | Window | Mean | StdDev | CPU | X server CPU | Drawn | Triangles | Allocated | |-------------------- |---------- |----------:|----------:|----------:|-------------:|------:|----------:|----------:| | Text | 1100x700 | 3.655 ms | 0.1268 ms | 9.51 ms | 0.37 ms | 1 | 5588 | 4.24 KB | | OpaquePictures | 1100x700 | 6.668 ms | 0.1939 ms | 19.4 ms | 0.45 ms | 1 | 9522 | 4.38 KB | | TranslucentPictures | 1100x700 | 6.833 ms | 0.3882 ms | 19.07 ms | 0.48 ms | 1 | 9570 | 4.38 KB | | Text | 3840x2160 | 23.273 ms | 1.9425 ms | 63.25 ms | 4.26 ms | 1 | 19492 | 18.88 KB | | OpaquePictures | 3840x2160 | 79.265 ms | 2.3843 ms | 201.92 ms | 4.51 ms | 1 | 113834 | 4.38 KB | | TranslucentPictures | 3840x2160 | 79.156 ms | 1.7718 ms | 199.45 ms | 4.69 ms | 1 | 113882 | 4.38 KB | todo.md put the checkerboard at about 4,400 quads for two panes at the size the window opens at and about 53,000 maximised at 4K, which is 8,800 and 106,000 triangles. A frame of two pictures submits 9,522 and 113,834, and an opaque pair costs what a translucent one does. --- .../NativeFrameBenchmarks.cs | 89 +++++ src/DiffEngineViewer.Benchmarks/NativeHead.cs | 343 ++++++++++++++++++ .../NativeHeadAttribute.cs | 162 +++++++++ .../NativeScenes.cs | 166 +++++++++ 4 files changed, 760 insertions(+) create mode 100644 src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs create mode 100644 src/DiffEngineViewer.Benchmarks/NativeHead.cs create mode 100644 src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs create mode 100644 src/DiffEngineViewer.Benchmarks/NativeScenes.cs diff --git a/src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs new file mode 100644 index 000000000..723d6fef1 --- /dev/null +++ b/src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs @@ -0,0 +1,89 @@ +#nullable enable +using BenchmarkDotNet.Attributes; + +/// +/// What one frame costs the Linux head to draw: a comparison of text, for what a frame costs with +/// no picture in it, and a comparison of two pictures that fill their panes, once with pictures +/// that can be seen through and once with pictures that cannot. At the size the viewer opens at, +/// and at the size of a window maximised on a 4K screen. +/// +/// Linux only, and only with a display to open a window on: anywhere else these are left out of +/// the run. The numbers in this file's history are from an ubuntu:24.04 container set up +/// as the unix job in build.yml is, which is Xvfb and Mesa's software rasteriser, +/// here on the four threads a hosted runner would give it. The shim is built from native +/// and copied to src/DiffEngineViewer.Linux/runtimes/linux-x64/native, as that job does, +/// and then: LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe LP_NUM_THREADS=4 xvfb-run -a +/// --server-args="-screen 0 3840x2160x24" dotnet run -c Release --project +/// src/DiffEngineViewer.Benchmarks -- --filter "*NativeFrame*" --warmupCount 5 --iterationCount +/// 30. +/// +/// +/// Mean here is the time from a frame being handed over to the window having it, and that is +/// only so because of . The CPU and Triangles columns do not depend +/// on it. +/// +/// +[MemoryDiagnoser] +[NativeHead] +public class NativeFrameBenchmarks +{ + [Params("1100x700", "3840x2160")] + public string Window = ""; + + NativeHead? head; + Screen[] screens = []; + int turn; + + [GlobalSetup(Target = nameof(Text))] + public void OpenOnText() => + Open(NativeScenes.Text); + + [GlobalSetup(Target = nameof(OpaquePictures))] + public void OpenOnOpaquePictures() => + Open(NativeScenes.OpaquePictures); + + [GlobalSetup(Target = nameof(TranslucentPictures))] + public void OpenOnTranslucentPictures() => + Open(NativeScenes.TranslucentPictures); + + [GlobalCleanup] + public void Close() => + head?.Dispose(); + + /// + /// The shim holds the loop to sixty frames a second by waiting out what is left of a sixtieth + /// of a second once a frame is on the screen, so frames presented one after another all take + /// 16.7 ms however little there was to draw. A frame presented later than that after the one + /// before has nothing left to wait out, and takes as long as it took. BenchmarkDotNet runs a + /// benchmark that has one of these once an iteration, so every measured frame is such a frame. + /// + [IterationSetup] + public void FallOutOfStep() => + Thread.Sleep(20); + + [Benchmark] + public bool Text() => + Frame(); + + [Benchmark] + public bool OpaquePictures() => + Frame(); + + [Benchmark] + public bool TranslucentPictures() => + Frame(); + + bool Frame() + { + NativeHead.Totals.Operations++; + return head!.Turn(screens[turn++ & 1]); + } + + void Open(Func scene) + { + var size = Window.Split('x'); + head = NativeHead.Open(int.Parse(size[0]), int.Parse(size[1])); + screens = NativeScenes.Alternating(scene(head.Columns, head.Rows)); + head.Settle(screens[0]); + } +} diff --git a/src/DiffEngineViewer.Benchmarks/NativeHead.cs b/src/DiffEngineViewer.Benchmarks/NativeHead.cs new file mode 100644 index 000000000..25701ed27 --- /dev/null +++ b/src/DiffEngineViewer.Benchmarks/NativeHead.cs @@ -0,0 +1,343 @@ +#nullable enable +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Reflection; +using System.Runtime.InteropServices; + +/// +/// The Linux head's window, opened by a benchmark and turned the way ViewerProgram's loop +/// turns it: a screen presented through , then input polled. +/// +/// A frame's time on the clock says little about what it cost. The shim holds the loop to sixty +/// frames a second, so a frame that took one millisecond to draw and one that took ten both come +/// back after 16.7. What is counted around every turn instead is the processor time the process +/// spent, on every thread, since a software rasteriser spreads a frame over several, and what was +/// drawn, which is asked of OpenGL itself: the primitives generated between the start of a turn +/// and its end are the triangles the shim submitted, whichever rasteriser then filled them, and a +/// turn that generated none put nothing on the screen. +/// +/// +/// Every call into the shim has to come from the thread that opened the window, and so does every +/// call into OpenGL, since the GL context belongs to that thread. BenchmarkDotNet's in process +/// runner gives each benchmark case a thread of its own and runs its setup, its iterations and its +/// cleanup there, so a window opened in a case's setup and closed in its cleanup keeps to that. +/// +/// +sealed unsafe class NativeHead : IDisposable +{ + const string shim = "diffengine_viewer"; + + /// + /// What every turn since the process started has added up to, for + /// to take the difference of across a run. + /// + public static NativeHeadTotals Totals; + + static string? shimPath; + static bool resolved; + static int? server; + static bool serverSought; + + readonly IViewerWindow window; + readonly uint query; + + NativeHead(IViewerWindow window, uint query) + { + this.window = window; + this.query = query; + } + + /// + /// Whether there is a shim to load and a display to open its window on. False on Windows, + /// whose head draws with WinForms, and on macOS, where a window may only be made on the main + /// thread, so the benchmarks that need this are left out of a run there rather than failing it. + /// + public static bool Available => + OperatingSystem.IsLinux() && + !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DISPLAY")) && + TryFindShim(out _); + + /// + /// The window's size in character cells, as the shim measured it from the font it loaded. + /// + public int Columns { get; private set; } + + public int Rows { get; private set; } + + /// + /// Opens the window on screen rather than hidden: a frame put into a window nobody can see + /// costs the rasteriser the same and the window system nothing, and the second is part of + /// what a frame costs. + /// + public static NativeHead Open(int width, int height) + { + if (!resolved) + { + // In place of NativeResolver.Register, which only looks beside the assembly. A + // resolver can be set once for an assembly, and nothing else in this process sets one. + resolved = true; + NativeLibrary.SetDllImportResolver(typeof(NativeViewerWindow).Assembly, Resolve); + } + + var window = NativeViewerWindow.Open("DiffEngineViewer", width, height, false, null, out var error); + if (window is null) + { + throw new InvalidOperationException(error); + } + + uint query; + Gl.GenQueries(1, &query); + var head = new NativeHead(window, query); + + // The first frame is drawn before the window's size in cells is known, as the loop's is. + head.Turn(ScreenBuilder.Build(SessionState.Start(ViewerMode.File)), out var input); + head.Columns = input.Columns; + head.Rows = input.Rows; + return head; + } + + /// + /// One turn of the loop. + /// + public bool Turn(Screen screen) => + Turn(screen, out _); + + bool Turn(Screen screen, out ViewerInput input) + { + var before = ProcessorTime(); + Gl.BeginQuery(Gl.PrimitivesGenerated, query); + var open = window.Present(screen); + Gl.EndQuery(Gl.PrimitivesGenerated); + uint triangles; + Gl.GetQueryObject(query, Gl.QueryResult, &triangles); + input = window.Poll(); + + Totals.ProcessorTime += ProcessorTime() - before; + Totals.Triangles += triangles; + Totals.Turns++; + if (triangles > 0) + { + Totals.Drawn++; + } + + return open; + } + + /// + /// Turns the loop for as long as it takes a screen to come to rest: its pictures decoded on + /// the shim's own thread and handed over, and whatever the shim does in the frames after a + /// change done with. + /// + public void Settle(Screen screen, int turns = 180) + { + for (var turn = 0; turn < turns; turn++) + { + Turn(screen); + } + } + + public void Dispose() => + window.Dispose(); + + static nint Resolve(string library, Assembly assembly, DllImportSearchPath? searchPath) + { + if (library == shim && + TryFindShim(out var path)) + { + return NativeLibrary.Load(path); + } + + return nint.Zero; + } + + /// + /// The shim the Linux head in this checkout ships: beside this assembly if a build put it + /// there, and otherwise in that head's own runtimes folder, which is where the CI job copies + /// the one it has just built from source. + /// + static bool TryFindShim([NotNullWhen(true)] out string? path) + { + if (shimPath is not null) + { + path = shimPath; + return true; + } + + if (NativeResolver.TryFind(out path)) + { + shimPath = path; + return true; + } + + var architecture = RuntimeInformation.ProcessArchitecture == Architecture.Arm64 ? "arm64" : "x64"; + for (var directory = new DirectoryInfo(AppContext.BaseDirectory); directory is not null; directory = directory.Parent) + { + var candidate = Path.Combine( + directory.FullName, + "DiffEngineViewer.Linux", + "runtimes", + $"linux-{architecture}", + "native", + $"lib{shim}.so"); + if (File.Exists(candidate)) + { + path = shimPath = candidate; + return true; + } + } + + path = null; + return false; + } + + /// + /// Processor time of this process in nanoseconds, every thread included. From the clock + /// rather than , which counts in hundredths of a second. + /// + static long ProcessorTime() + { + Timespec time; + // CLOCK_PROCESS_CPUTIME_ID + ClockGetTime(2, &time); + return time.Seconds * 1_000_000_000 + time.Nanoseconds; + } + + /// + /// Processor time of the X server this process draws to, in nanoseconds, or -1 when it cannot + /// be found. Putting a frame on the screen is work for the server too: under Xvfb with a + /// software rasteriser it copies every pixel of the window, and none of that is counted + /// against this process. + /// + public static long ServerProcessorTime() + { + try + { + if (ServerProcess() is not { } process) + { + return -1; + } + + // One line a thread: the nanoseconds it has run, the nanoseconds it has waited to, + // and how many times it has been scheduled. + long total = 0; + foreach (var task in Directory.EnumerateDirectories($"/proc/{process}/task")) + { + var fields = File.ReadAllText(Path.Combine(task, "schedstat")).Split(' '); + total += long.Parse(fields[0], CultureInfo.InvariantCulture); + } + + return total; + } + catch (Exception exception) when (exception is IOException or UnauthorizedAccessException or FormatException) + { + return -1; + } + } + + /// + /// The server whose command line names the display this process was given. + /// + static int? ServerProcess() + { + if (serverSought) + { + return server; + } + + serverSought = true; + var display = Environment.GetEnvironmentVariable("DISPLAY") ?? ""; + var colon = display.LastIndexOf(':'); + if (colon < 0) + { + return null; + } + + // ":99" or "host:99.0" + var number = ":" + display[(colon + 1)..].Split('.')[0]; + foreach (var directory in Directory.EnumerateDirectories("/proc")) + { + if (!int.TryParse(Path.GetFileName(directory), out var process)) + { + continue; + } + + string[] arguments; + try + { + arguments = File.ReadAllText(Path.Combine(directory, "cmdline")).Split('\0'); + } + catch (Exception exception) when (exception is IOException or UnauthorizedAccessException) + { + continue; + } + + if (Path.GetFileName(arguments[0]) is "Xvfb" or "Xorg" or "X" or "Xwayland" && + arguments.Contains(number)) + { + server = process; + break; + } + } + + return server; + } + + [StructLayout(LayoutKind.Sequential)] + struct Timespec + { + public long Seconds; + public long Nanoseconds; + } + + [DllImport("libc", EntryPoint = "clock_gettime")] + static extern int ClockGetTime(int clock, Timespec* time); + + /// + /// The four OpenGL calls a query takes, from the library the shim's own context came from. + /// + static class Gl + { + const string library = "libGL.so.1"; + + public const uint PrimitivesGenerated = 0x8C87; + public const uint QueryResult = 0x8866; + + [DllImport(library, EntryPoint = "glGenQueries")] + public static extern void GenQueries(int count, uint* ids); + + [DllImport(library, EntryPoint = "glBeginQuery")] + public static extern void BeginQuery(uint target, uint id); + + [DllImport(library, EntryPoint = "glEndQuery")] + public static extern void EndQuery(uint target); + + [DllImport(library, EntryPoint = "glGetQueryObjectuiv")] + public static extern void GetQueryObject(uint id, uint name, uint* value); + } +} + +/// +/// What turns of the loop have added up to. +/// +struct NativeHeadTotals +{ + /// + /// Runs of a benchmark method, which is what a figure is reported per: one turn for a + /// benchmark of a frame, sixty for a benchmark of a second. + /// + public long Operations; + + public long Turns; + + /// + /// Turns that submitted anything to draw. + /// + public long Drawn; + + public long Triangles; + + /// + /// Nanoseconds of processor time this process spent inside turns. + /// + public long ProcessorTime; +} diff --git a/src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs b/src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs new file mode 100644 index 000000000..64d0bf70c --- /dev/null +++ b/src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs @@ -0,0 +1,162 @@ +using BenchmarkDotNet.Analysers; +using BenchmarkDotNet.Columns; +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Diagnosers; +using BenchmarkDotNet.Engines; +using BenchmarkDotNet.Exporters; +using BenchmarkDotNet.Filters; +using BenchmarkDotNet.Loggers; +using BenchmarkDotNet.Reports; +using BenchmarkDotNet.Running; +using BenchmarkDotNet.Validators; + +/// +/// For a benchmark class that turns the Linux head's window. Leaves its benchmarks out of a run +/// wherever is false, which is every run on Windows, and adds +/// the columns a frame is judged by to the ones BenchmarkDotNet has: see +/// for why its own time column is not one of them. +/// +[AttributeUsage(AttributeTargets.Class)] +public sealed class NativeHeadAttribute : Attribute, IConfigSource +{ + public IConfig Config { get; } = + ManualConfig.CreateEmpty() + .AddFilter(new SimpleFilter(_ => NativeHead.Available)) + .AddDiagnoser(NativeHeadDiagnoser.Instance); +} + +/// +/// Reports what counted during the measured part of a run, per run of the +/// benchmark method, beside what the X server spent over the same stretch. +/// +sealed class NativeHeadDiagnoser : IDiagnoser +{ + public static readonly NativeHeadDiagnoser Instance = new(); + + static readonly Column processorTime = new( + "ProcessorTime", + "CPU", + "Processor time this process spent on one operation, on every thread", + UnitType.Time, + "ns", + 0); + + static readonly Column serverTime = new( + "ServerProcessorTime", + "X server CPU", + "Processor time the X server spent while one operation ran", + UnitType.Time, + "ns", + 1); + + static readonly Column drawn = new( + "FramesDrawn", + "Drawn", + "Frames of one operation that submitted anything to draw", + UnitType.Dimensionless, + "Count", + 2); + + static readonly Column triangles = new( + "Triangles", + "Triangles", + "Triangles one operation submitted, as OpenGL counted them", + UnitType.Dimensionless, + "Count", + 3); + + readonly Dictionary runs = []; + NativeHeadTotals start; + long serverStart; + + public IEnumerable Ids => + [nameof(NativeHeadDiagnoser)]; + + public IEnumerable Exporters => + []; + + public IEnumerable Analysers => + []; + + public RunMode GetRunMode(BenchmarkCase benchmarkCase) => + RunMode.NoOverhead; + + public void Handle(HostSignal signal, DiagnoserActionParameters parameters) + { + if (signal == HostSignal.BeforeActualRun) + { + start = NativeHead.Totals; + serverStart = NativeHead.ServerProcessorTime(); + return; + } + + if (signal != HostSignal.AfterActualRun) + { + return; + } + + var server = NativeHead.ServerProcessorTime(); + var end = NativeHead.Totals; + runs[parameters.BenchmarkCase] = ( + new() + { + Operations = end.Operations - start.Operations, + Turns = end.Turns - start.Turns, + Drawn = end.Drawn - start.Drawn, + Triangles = end.Triangles - start.Triangles, + ProcessorTime = end.ProcessorTime - start.ProcessorTime + }, + server < 0 || serverStart < 0 ? -1 : server - serverStart); + } + + public IEnumerable ProcessResults(DiagnoserResults results) + { + if (!runs.TryGetValue(results.BenchmarkCase, out var run) || + run.Totals.Operations == 0) + { + yield break; + } + + // Counted by the benchmark methods themselves rather than taken from the results, so the + // figures do not rest on which of BenchmarkDotNet's iterations fall between its two signals. + double operations = run.Totals.Operations; + yield return new(processorTime, run.Totals.ProcessorTime / operations); + if (run.Server >= 0) + { + yield return new(serverTime, run.Server / operations); + } + + yield return new(drawn, run.Totals.Drawn / operations); + yield return new(triangles, run.Totals.Triangles / operations); + } + + public void DisplayResults(ILogger logger) + { + } + + public IEnumerable Validate(ValidationParameters validationParameters) => + []; + + sealed class Column(string id, string name, string legend, UnitType unitType, string unit, int priority) : + IMetricDescriptor + { + public string Id => id; + + public string DisplayName => name; + + public string Legend => legend; + + public string NumberFormat => "0.##"; + + public UnitType UnitType => unitType; + + public string Unit => unit; + + public bool TheGreaterTheBetter => false; + + public int PriorityInCategory => priority; + + public bool GetIsAvailable(Metric metric) => + true; + } +} diff --git a/src/DiffEngineViewer.Benchmarks/NativeScenes.cs b/src/DiffEngineViewer.Benchmarks/NativeScenes.cs new file mode 100644 index 000000000..33eb4c51f --- /dev/null +++ b/src/DiffEngineViewer.Benchmarks/NativeScenes.cs @@ -0,0 +1,166 @@ +using System.Buffers.Binary; +using System.IO.Compression; +using System.Text; + +/// +/// What the Linux head is given to draw in a benchmark: a text comparison that fills the window +/// at any size, and two comparisons of pictures. +/// +/// The pictures are real files, since a head draws a picture from the path the model carries, and +/// they are large enough to fill a pane of a 4K window, since a fitted picture is never drawn +/// larger than its own size. Both kinds are stored with an alpha channel. One fades to nothing +/// across its right hand half, so the checkerboard behind it has to show through. The other has +/// no pixel that is anything but opaque, which is what a drawn page of a document or a screenshot +/// is, and nothing behind it can be seen. +/// +/// +static class NativeScenes +{ + const int pictureSize = 1920; + + public static SessionState Text(int columns, int rows) => + Comparing( + columns, + rows, + QueueEntry.ForFiles( + "sample.received.txt", + "sample.verified.txt", + FileSide.OfText(Lines(true)), + FileSide.OfText(Lines(false)))); + + public static SessionState OpaquePictures(int columns, int rows) => + Pictures(columns, rows, true); + + public static SessionState TranslucentPictures(int columns, int rows) => + Pictures(columns, rows, false); + + static SessionState Pictures(int columns, int rows, bool opaque) + { + var kind = opaque ? "opaque" : "translucent"; + var left = Write($"{kind}.received.png", Png(198, 64, 64, opaque)); + var right = Write($"{kind}.verified.png", Png(64, 150, 198, opaque)); + return Comparing(columns, rows, QueueEntry.ForFiles(left, right, FileSide.Read(left), FileSide.Read(right))); + } + + /// + /// The same frame twice, told apart by one letter of its status line and by nothing else. A + /// benchmark of what a frame costs to draw presents them in turn, so that each is a frame the + /// head has to draw, however good it gets at leaving an unchanged one alone. + /// + public static Screen[] Alternating(SessionState state) + { + var screen = ScreenBuilder.Build(state); + return + [ + screen with { Status = "tick" }, + screen with { Status = "tock" } + ]; + } + + static SessionState Comparing(int columns, int rows, QueueEntry entry) => + ViewerSession.EnqueueFile(SessionState.Start(ViewerMode.File, columns, rows), entry); + + /// + /// Three hundred lines, which is more than a 4K window shows, one in ten of them changed. + /// + static string Lines(bool changed) + { + var builder = new StringBuilder(); + for (var index = 0; index < 300; index++) + { + var value = changed && index % 10 == 0 ? index + 1 : index; + builder.Append($" \"property{index:D3}\": \"the value of property {value:D3}\",\n"); + } + + return builder.ToString(); + } + + static string Write(string name, byte[] content) + { + var directory = Path.Combine(Path.GetTempPath(), "deview-benchmarks"); + Directory.CreateDirectory(directory); + var path = Path.Combine(directory, name); + File.WriteAllBytes(path, content); + return path; + } + + /// + /// A colour that darkens from top to bottom, so the picture is more than one flat fill, with + /// eight bits a channel and an alpha channel either way. + /// + static byte[] Png(byte red, byte green, byte blue, bool opaque) + { + var half = pictureSize / 2; + var raw = new byte[pictureSize * (1 + pictureSize * 4)]; + var index = 0; + for (var y = 0; y < pictureSize; y++) + { + // Filter type 0: the row is stored as it is. + raw[index++] = 0; + var shade = 255 - 128 * y / pictureSize; + for (var x = 0; x < pictureSize; x++) + { + raw[index++] = (byte) (red * shade / 255); + raw[index++] = (byte) (green * shade / 255); + raw[index++] = (byte) (blue * shade / 255); + raw[index++] = opaque || x < half ? (byte) 255 : (byte) (255 - 255 * (x - half) / (pictureSize - half - 1)); + } + } + + using var output = new MemoryStream(); + output.Write([0x89, (byte) 'P', (byte) 'N', (byte) 'G', 0x0D, 0x0A, 0x1A, 0x0A]); + var header = new byte[13]; + BinaryPrimitives.WriteInt32BigEndian(header, pictureSize); + BinaryPrimitives.WriteInt32BigEndian(header.AsSpan(4), pictureSize); + // Eight bits a channel, truecolour with alpha, and none of the three optional encodings. + header[8] = 8; + header[9] = 6; + Chunk(output, "IHDR", header); + Chunk(output, "IDAT", Compress(raw)); + Chunk(output, "IEND", []); + return output.ToArray(); + } + + static byte[] Compress(byte[] raw) + { + using var output = new MemoryStream(); + using (var zlib = new ZLibStream(output, CompressionLevel.Fastest, leaveOpen: true)) + { + zlib.Write(raw); + } + + return output.ToArray(); + } + + static void Chunk(Stream output, string name, byte[] data) + { + Span length = stackalloc byte[4]; + BinaryPrimitives.WriteInt32BigEndian(length, data.Length); + output.Write(length); + + // The name and the data are one run for the checksum, which covers both and not the length. + var payload = new byte[4 + data.Length]; + Encoding.ASCII.GetBytes(name).CopyTo(payload, 0); + data.CopyTo(payload, 4); + output.Write(payload); + + Span checksum = stackalloc byte[4]; + BinaryPrimitives.WriteUInt32BigEndian(checksum, Crc(payload)); + output.Write(checksum); + } + + static uint Crc(byte[] bytes) + { + var value = 0xFFFFFFFFu; + foreach (var current in bytes) + { + value ^= current; + for (var bit = 0; bit < 8; bit++) + { + value = (value & 1) == 0 ? value >> 1 : 0xEDB88320u ^ (value >> 1); + } + } + + return value ^ 0xFFFFFFFFu; + } +} From dc265d2203a4070f581d7144258f88f5b4f30330 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:03:20 +1000 Subject: [PATCH 67/73] Draw the checkerboard behind a picture as one quad, and only where it shows The Linux head drew the checkerboard as a light rectangle and a quad for every dark square over it, built again each frame through ImGui's draw list and rlgl's vertex calls: 4,488 squares for two pictures at the size the window opens at and 56,644 for two filling the panes of a 4K window, sixty times a second, behind opaque pictures as well. It is now a two by two texture of the two tones, sampled as its texels and set to repeat, on one quad the size of the picture with texture coordinates that run to the picture's size over two squares. The squares still count from the picture's own top left corner, enlarged and panned or not, as the quads did. And it is drawn only behind a picture some of which can be seen through. That is asked of the decoded pixels rather than of the format, since a screenshot or a page of a document is usually saved with an alpha channel that is 255 throughout: one pass over them as the picture is decoded, on the decoder's thread for a window. Behind a picture with no such pixel every square was under an opaque one, and filling them cost a software rasteriser the picture's area a second time. The pixels are the same. The fifteen Linux baselines are the same files, byte for byte, with the shim built before and after. So are 179 further captures made of both outside the repository: pictures with clear alpha, opaque alpha, no alpha, grey with and without alpha and a JPEG, fitted at their own size and at a fraction of it, at three window sizes, and at every step of enlargement about several centres. And so are ten photographs of the X screen showing the window itself, which is given its pictures by the decoder's thread where a capture decodes its own. The 4K captures of the large pictures needed a line added to the old shim to be compared at all. A capture's ImGui context does not declare ImGuiBackendFlags_RendererHasVtxOffset, which the window's does, so the old checkerboard took a 4K capture's draw list past 65,535 vertices and it came out scrambled. Nothing captures at that size, and the checkerboard no longer gets a capture there, but dense text could, and the flag is still not declared. After, with the same command as the commit before: | Method | Window | Mean | StdDev | CPU | X server CPU | Drawn | Triangles | Allocated | |-------------------- |---------- |----------:|----------:|---------:|-------------:|------:|----------:|----------:| | Text | 1100x700 | 3.915 ms | 0.1840 ms | 10.4 ms | 0.45 ms | 1 | 5588 | 4.24 KB | | OpaquePictures | 1100x700 | 4.429 ms | 0.5065 ms | 13.97 ms | 0.48 ms | 1 | 542 | 4.38 KB | | TranslucentPictures | 1100x700 | 4.392 ms | 0.2574 ms | 13.86 ms | 0.42 ms | 1 | 594 | 4.38 KB | | Text | 3840x2160 | 24.615 ms | 0.8391 ms | 68.16 ms | 4.77 ms | 1 | 19492 | 18.88 KB | | OpaquePictures | 3840x2160 | 28.096 ms | 0.9691 ms | 95.51 ms | 4.06 ms | 1 | 542 | 4.38 KB | | TranslucentPictures | 3840x2160 | 34.061 ms | 0.3450 ms | 118.2 ms | 3.71 ms | 1 | 594 | 4.38 KB | A frame of two pictures went from 6.7 ms to 4.4 at the size the window opens at and from 79 ms to 28 at 4K where they are opaque and 34 where they are not, and from 9,522 and 113,834 triangles to 542. Text is the same frame as before, and what its numbers moved by is the noise of a machine that was doing other things. --- native/src/deview.cpp | 190 +++++++++++++++++++++++++++++++++++------- 1 file changed, 159 insertions(+), 31 deletions(-) diff --git a/native/src/deview.cpp b/native/src/deview.cpp index b775b0657..61a037a36 100644 --- a/native/src/deview.cpp +++ b/native/src/deview.cpp @@ -129,11 +129,15 @@ struct CachedTexture /* Sampled as its own pixels rather than smoothed: see SampleAsPixels. */ bool point = false; + + /* Some of it can be seen through, so it is drawn over a checkerboard: see SeeThrough. */ + bool translucent = false; }; /* * One picture to decode, or decoded: the path, the stamp the decode was asked for, and once it is - * done the pixels, which are empty when raylib could not read the file. + * done the pixels, which are empty when raylib could not read the file, and whether any of them + * can be seen through. */ struct Decode { @@ -141,6 +145,7 @@ struct Decode std::uintmax_t length = 0; std::filesystem::file_time_type written{}; Image image{}; + bool translucent = false; }; /* @@ -255,6 +260,14 @@ struct State /* Started with the first picture asked for, so a window that never shows one never has it. */ std::shared_ptr decoder; + /* + * The checkerboard behind a picture that can be seen through: two squares by two, a texel + * each, which the picture's texture coordinates repeat across it. Made with the first picture + * to need it, and once, whether or not that worked: see Checker. + */ + Texture2D checker{}; + bool checkerMade = false; + /* Inside deview_capture, which draws one frame that has to come out the same every time: its * pictures are decoded there and then, and a spinner stands still. */ bool capturing = false; @@ -553,6 +566,58 @@ void SampleAsPixels(const std::string& path, bool point) found->second.point = point; } +/* + * Whether any of a decoded picture can be seen through: whether it has a pixel that is less than + * opaque. That is what the checkerboard behind a picture is for, and behind a picture with no such + * pixel every square of it is covered, so it is not drawn. + * + * Asked of the pixels rather than of the format. A screenshot or a drawn page of a document is + * usually saved with an alpha channel that is 255 throughout, and those are most of the pictures + * there are. One pass over them as they are decoded, which is off the window's thread for every + * picture but a capture's. + */ +bool SeeThrough(const Image& image) +{ + if (image.data == nullptr) + { + return false; + } + + size_t stride = 0; + size_t alpha = 0; + switch (image.format) + { + case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: + case PIXELFORMAT_UNCOMPRESSED_R8G8B8: + case PIXELFORMAT_UNCOMPRESSED_R5G6B5: + return false; + case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: + stride = 2; + alpha = 1; + break; + case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: + stride = 4; + alpha = 3; + break; + /* Not one the decoders built here hand back for a picture the viewer shows. Taken to have + * something to see through, which costs one quad where it has not. */ + default: + return true; + } + + const unsigned char* pixels = static_cast(image.data); + const size_t count = static_cast(image.width) * static_cast(image.height); + for (size_t pixel = 0; pixel < count; pixel++) + { + if (pixels[pixel * stride + alpha] != 255) + { + return true; + } + } + + return false; +} + void DecodeLoop(std::shared_ptr decoder) { std::unique_lock lock(decoder->mutex); @@ -570,6 +635,7 @@ void DecodeLoop(std::shared_ptr decoder) /* The file and stb_image under it, and nothing that touches GL. */ decode.image = LoadImage(decode.path.c_str()); + decode.translucent = SeeThrough(decode.image); lock.lock(); if (decoder->stopping) @@ -682,6 +748,7 @@ void TakeDecoded() { entry.texture = texture; entry.loaded = true; + entry.translucent = decode.translucent; PrepareTexture(entry); } } @@ -722,7 +789,7 @@ void ForgetPicture(const std::string& path) * queue poller uses: a re-run that rewrites a received image has to refresh the pane rather than * leave the previous one up. */ -const Texture2D* Picture(const std::string& path, bool& loading) +const CachedTexture* Picture(const std::string& path, bool& loading) { loading = false; if (path.empty()) @@ -756,7 +823,7 @@ const Texture2D* Picture(const std::string& path, bool& loading) { found->second.used = true; loading = found->second.decoding; - return found->second.loaded ? &found->second.texture : nullptr; + return found->second.loaded ? &found->second : nullptr; } ForgetPicture(path); @@ -768,12 +835,20 @@ const Texture2D* Picture(const std::string& path, bool& loading) entry.used = true; if (state.capturing) { - const Texture2D texture = LoadTexture(path.c_str()); - if (IsTextureValid(texture)) + /* What LoadTexture does, taken apart so the pixels can be looked at on the way through. */ + const Image image = LoadImage(path.c_str()); + if (image.data != nullptr) { - entry.texture = texture; - entry.loaded = true; - PrepareTexture(entry); + const Texture2D texture = LoadTextureFromImage(image); + if (IsTextureValid(texture)) + { + entry.texture = texture; + entry.loaded = true; + entry.translucent = SeeThrough(image); + PrepareTexture(entry); + } + + UnloadImage(image); } } else @@ -784,7 +859,7 @@ const Texture2D* Picture(const std::string& path, bool& loading) } const auto inserted = state.pictures.emplace(path, entry).first; - return inserted->second.loaded ? &inserted->second.texture : nullptr; + return inserted->second.loaded ? &inserted->second : nullptr; } /* @@ -820,6 +895,40 @@ void ForgetUnusedPictures() } } +/* + * The checkerboard's texture, or null on a context that would not make one, where a picture is + * drawn over the lighter of the two tones instead. + * + * Sampled as its two tones and nothing between them, and repeating, which is what lets one quad + * the size of the picture stand for every square behind it. + */ +const Texture2D* Checker() +{ + if (!state.checkerMade) + { + state.checkerMade = true; + + /* Light where the row and the column are both even or both odd, and dark elsewhere. */ + unsigned char pixels[] = { + 64, 64, 64, 255, 48, 48, 48, 255, + 48, 48, 48, 255, 64, 64, 64, 255}; + Image image{}; + image.data = pixels; + image.width = 2; + image.height = 2; + image.mipmaps = 1; + image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; + state.checker = LoadTextureFromImage(image); + if (IsTextureValid(state.checker)) + { + SetTextureFilter(state.checker, TEXTURE_FILTER_POINT); + SetTextureWrap(state.checker, TEXTURE_WRAP_REPEAT); + } + } + + return IsTextureValid(state.checker) ? &state.checker : nullptr; +} + void UnloadPictures() { StopDecoder(); @@ -832,6 +941,14 @@ void UnloadPictures() } state.pictures.clear(); + + if (IsTextureValid(state.checker)) + { + UnloadTexture(state.checker); + } + + state.checker = Texture2D{}; + state.checkerMade = false; } /* ---- fonts ---- */ @@ -1968,27 +2085,32 @@ void RecordPaneImage(PaneImage& bounds, const DeviewPane& pane, int index) bounds.pitch = cursor.y - bounds.first; } +/* + * The checkerboard behind a picture, as one quad: the texture is two squares across and two down, + * so texture coordinates that run to the picture's size over two squares repeat it at the size of + * a square, counted from the picture's own top left corner. + * + * It was a quad a dark square, tessellated again every frame: about 4,500 for two pictures at the + * size the window opens at and over 56,000 for two in a maximised 4K window, sixty times a second. + * The pixels are the same ones. A square's edge falls on a whole pixel, half a pixel from the + * nearest pixel centre either side, which is where the texture is sampled. + */ void DrawChecker(ImDrawList* list, const ImVec2& min, const ImVec2& max) { - list->AddRectFilled(min, max, IM_COL32(64, 64, 64, 255)); - const ImU32 dark = IM_COL32(48, 48, 48, 255); - int row = 0; - for (float y = min.y; y < max.y; y += checkerSize, row++) + const Texture2D* checker = Checker(); + if (checker == nullptr) { - int column = 0; - for (float x = min.x; x < max.x; x += checkerSize, column++) - { - if ((row & 1) == (column & 1)) - { - continue; - } - - list->AddRectFilled( - ImVec2(x, y), - ImVec2(std::min(x + checkerSize, max.x), std::min(y + checkerSize, max.y)), - dark); - } + list->AddRectFilled(min, max, IM_COL32(64, 64, 64, 255)); + return; } + + const float repeat = checkerSize * 2.0f; + list->AddImage( + static_cast(checker->id), + min, + max, + ImVec2(0.0f, 0.0f), + ImVec2((max.x - min.x) / repeat, (max.y - min.y) / repeat)); } /* @@ -2071,8 +2193,8 @@ void DrawPaneImage(const DeviewScreen* screen, const DeviewPane& pane, const Pan bool loading = false; const std::string path = Copy(screen, pane.imagePathOffset, pane.imagePathLength); - const Texture2D* texture = Picture(path, loading); - if (texture == nullptr) + const CachedTexture* decoded = Picture(path, loading); + if (decoded == nullptr) { /* Nothing at all for a picture this build cannot decode: the rows have said what it is. */ if (loading) @@ -2112,7 +2234,7 @@ void DrawPaneImage(const DeviewScreen* screen, const DeviewPane& pane, const Pan SampleAsPixels( path, pane.imageZoom > 1.0f && - fitted.x * pane.imageZoom >= static_cast(texture->width)); + fitted.x * pane.imageZoom >= static_cast(decoded->texture.width)); if (pane.imageZoom > 1.0f) { const ImVec2 whole(fitted.x * pane.imageZoom, fitted.y * pane.imageZoom); @@ -2146,8 +2268,14 @@ void DrawPaneImage(const DeviewScreen* screen, const DeviewPane& pane, const Pan top + (available - size.y) * 0.5f)); const ImVec2 max(min.x + size.x, min.y + size.y); - DrawChecker(list, min, max); - list->AddImage(static_cast(texture->id), min, max, uvMin, uvMax); + /* Only behind a picture some of it would show through. Behind any other every square is under + * an opaque pixel, and filling them costs a software rasteriser the picture's area again. */ + if (decoded->translucent) + { + DrawChecker(list, min, max); + } + + list->AddImage(static_cast(decoded->texture.id), min, max, uvMin, uvMax); /* An outline, so a picture whose edges are the colour of the pane still has visible extent. */ list->AddRect( ImVec2(min.x - 1.0f, min.y - 1.0f), From 8415f3ecfb7aadab628155977593730d5a403a8e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 19:48:35 +1000 Subject: [PATCH 68/73] Measure what a second costs the Linux head while nothing happens A viewer left open on a comparison presents the same screen sixty times a second, and the shim builds, draws and puts on the screen every one of them. Under a software rasteriser or over a remote session each is the whole window filled and copied again, and what that adds up to had not been measured. NativeIdleBenchmarks turns the loop sixty times on an unchanged screen, with nothing arriving in between, and that second is one operation: CPU is what a second of an idle window costs the process and X server CPU what it costs the server, Drawn is how many of the sixty frames were put on the screen, and Mean is how long the sixty took, which is a second for a head keeping to sixty frames a second and more for one that cannot. The counting moves for it. Each turn now has an OpenGL query of its own, and none is read until the operation's turns are over and the clock has been read. Reading one has llvmpipe finish whatever it is holding on all its threads, and for a turn that draws nothing that is work the question made: a few tenths of a millisecond of processor time a turn, which nothing notices beside a frame that is drawn, and which would be most of what a turn costs once one is not. The processor time is shown to the thousandth for the same reason, since it is shown in Mean's unit and Mean here is a second. Before the fix, in the container and under the rasteriser the frame benchmark was run in, ten iterations: LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe LP_NUM_THREADS=4 \ xvfb-run -a --server-args="-screen 0 3840x2160x24" \ dotnet run -c Release --project src/DiffEngineViewer.Benchmarks -- \ --filter "*NativeIdle*" --warmupCount 3 --iterationCount 10 | Method | Window | Mean | StdDev | CPU | X server CPU | Drawn | Triangles | Allocated | |--------- |---------- |--------:|---------:|--------:|-------------:|------:|----------:|----------:| | Text | 1100x700 | 1.004 s | 0.0009 s | 0.554 s | 0.02 s | 60 | 336480 | 254.53 KB | | Pictures | 1100x700 | 1.005 s | 0.0007 s | 0.868 s | 0.027 s | 60 | 36600 | 33.42 KB | | Text | 3840x2160 | 1.346 s | 0.0518 s | 3.69 s | 0.243 s | 60 | 1170840 | 903.42 KB | | Pictures | 3840x2160 | 2.133 s | 0.0633 s | 7.511 s | 0.244 s | 60 | 36600 | 33.42 KB | An idle window at the size it opens at takes more than half a core, and a maximised 4K one keeps all four of the rasteriser's threads busy and still cannot draw sixty frames in a second: the sixty take 1.3 s over text and 2.1 s over pictures. --- .../NativeFrameBenchmarks.cs | 7 +- src/DiffEngineViewer.Benchmarks/NativeHead.cs | 94 +++++++++++-------- .../NativeHeadAttribute.cs | 9 +- .../NativeIdleBenchmarks.cs | 55 +++++++++++ 4 files changed, 119 insertions(+), 46 deletions(-) create mode 100644 src/DiffEngineViewer.Benchmarks/NativeIdleBenchmarks.cs diff --git a/src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs index 723d6fef1..d5d022607 100644 --- a/src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs +++ b/src/DiffEngineViewer.Benchmarks/NativeFrameBenchmarks.cs @@ -73,11 +73,8 @@ public bool OpaquePictures() => public bool TranslucentPictures() => Frame(); - bool Frame() - { - NativeHead.Totals.Operations++; - return head!.Turn(screens[turn++ & 1]); - } + bool Frame() => + head!.Run(screens[turn++ & 1]); void Open(Func scene) { diff --git a/src/DiffEngineViewer.Benchmarks/NativeHead.cs b/src/DiffEngineViewer.Benchmarks/NativeHead.cs index 25701ed27..ec017e064 100644 --- a/src/DiffEngineViewer.Benchmarks/NativeHead.cs +++ b/src/DiffEngineViewer.Benchmarks/NativeHead.cs @@ -10,11 +10,17 @@ /// /// A frame's time on the clock says little about what it cost. The shim holds the loop to sixty /// frames a second, so a frame that took one millisecond to draw and one that took ten both come -/// back after 16.7. What is counted around every turn instead is the processor time the process -/// spent, on every thread, since a software rasteriser spreads a frame over several, and what was -/// drawn, which is asked of OpenGL itself: the primitives generated between the start of a turn -/// and its end are the triangles the shim submitted, whichever rasteriser then filled them, and a -/// turn that generated none put nothing on the screen. +/// back after 16.7. What is counted around the turns of an operation instead is the processor +/// time the process spent, on every thread, since a software rasteriser spreads a frame over +/// several, and what was drawn, which is asked of OpenGL itself: the primitives generated between +/// the start of a turn and its end are the triangles the shim submitted, whichever rasteriser +/// then filled them, and a turn that generated none put nothing on the screen. +/// +/// +/// Each turn has a query of its own, and none is read until the operation's turns are over and +/// the clock has been read. Reading one has llvmpipe finish whatever it is holding, on all its +/// threads, and for a turn that drew nothing that is work the question itself made: read turn by +/// turn, it would be most of what a second costs a window that draws nothing. /// /// /// Every call into the shim has to come from the thread that opened the window, and so does every @@ -38,13 +44,18 @@ sealed unsafe class NativeHead : IDisposable static int? server; static bool serverSought; + /// + /// The most turns one operation has: a second of them. + /// + public const int MostTurns = 60; + readonly IViewerWindow window; - readonly uint query; + readonly uint[] queries; - NativeHead(IViewerWindow window, uint query) + NativeHead(IViewerWindow window, uint[] queries) { this.window = window; - this.query = query; + this.queries = queries; } /// @@ -85,54 +96,65 @@ public static NativeHead Open(int width, int height) throw new InvalidOperationException(error); } - uint query; - Gl.GenQueries(1, &query); - var head = new NativeHead(window, query); + var queries = new uint[MostTurns]; + fixed (uint* ids = queries) + { + Gl.GenQueries(queries.Length, ids); + } + + var head = new NativeHead(window, queries); // The first frame is drawn before the window's size in cells is known, as the loop's is. - head.Turn(ScreenBuilder.Build(SessionState.Start(ViewerMode.File)), out var input); + window.Present(ScreenBuilder.Build(SessionState.Start(ViewerMode.File))); + var input = window.Poll(); head.Columns = input.Columns; head.Rows = input.Rows; return head; } /// - /// One turn of the loop. + /// One operation of a benchmark: so many turns of the loop on one screen, counted. /// - public bool Turn(Screen screen) => - Turn(screen, out _); - - bool Turn(Screen screen, out ViewerInput input) + public bool Run(Screen screen, int turns = 1) { + var open = true; var before = ProcessorTime(); - Gl.BeginQuery(Gl.PrimitivesGenerated, query); - var open = window.Present(screen); - Gl.EndQuery(Gl.PrimitivesGenerated); - uint triangles; - Gl.GetQueryObject(query, Gl.QueryResult, &triangles); - input = window.Poll(); + for (var turn = 0; turn < turns; turn++) + { + Gl.BeginQuery(Gl.PrimitivesGenerated, queries[turn]); + open &= window.Present(screen); + Gl.EndQuery(Gl.PrimitivesGenerated); + window.Poll(); + } Totals.ProcessorTime += ProcessorTime() - before; - Totals.Triangles += triangles; - Totals.Turns++; - if (triangles > 0) + + for (var turn = 0; turn < turns; turn++) { - Totals.Drawn++; + uint triangles; + Gl.GetQueryObject(queries[turn], Gl.QueryResult, &triangles); + Totals.Triangles += triangles; + if (triangles > 0) + { + Totals.Drawn++; + } } + Totals.Operations++; return open; } /// - /// Turns the loop for as long as it takes a screen to come to rest: its pictures decoded on - /// the shim's own thread and handed over, and whatever the shim does in the frames after a - /// change done with. + /// Turns the loop, uncounted, for as long as it takes a screen to come to rest: its pictures + /// decoded on the shim's own thread and handed over, and whatever the shim does in the frames + /// after a change done with. /// public void Settle(Screen screen, int turns = 180) { for (var turn = 0; turn < turns; turn++) { - Turn(screen); + window.Present(screen); + window.Poll(); } } @@ -317,18 +339,16 @@ static class Gl } /// -/// What turns of the loop have added up to. +/// What the operations run so far have added up to. /// struct NativeHeadTotals { /// - /// Runs of a benchmark method, which is what a figure is reported per: one turn for a - /// benchmark of a frame, sixty for a benchmark of a second. + /// What a figure is reported per: one turn for a benchmark of a frame, sixty for a benchmark + /// of a second. /// public long Operations; - public long Turns; - /// /// Turns that submitted anything to draw. /// @@ -337,7 +357,7 @@ struct NativeHeadTotals public long Triangles; /// - /// Nanoseconds of processor time this process spent inside turns. + /// Nanoseconds of processor time this process spent inside the turns. /// public long ProcessorTime; } diff --git a/src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs b/src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs index 64d0bf70c..690db1081 100644 --- a/src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs +++ b/src/DiffEngineViewer.Benchmarks/NativeHeadAttribute.cs @@ -101,7 +101,6 @@ public void Handle(HostSignal signal, DiagnoserActionParameters parameters) new() { Operations = end.Operations - start.Operations, - Turns = end.Turns - start.Turns, Drawn = end.Drawn - start.Drawn, Triangles = end.Triangles - start.Triangles, ProcessorTime = end.ProcessorTime - start.ProcessorTime @@ -117,8 +116,8 @@ public IEnumerable ProcessResults(DiagnoserResults results) yield break; } - // Counted by the benchmark methods themselves rather than taken from the results, so the - // figures do not rest on which of BenchmarkDotNet's iterations fall between its two signals. + // Counted as they run rather than taken from the results, so the figures do not rest on + // which of BenchmarkDotNet's iterations fall between its two signals. double operations = run.Totals.Operations; yield return new(processorTime, run.Totals.ProcessorTime / operations); if (run.Server >= 0) @@ -146,7 +145,9 @@ sealed class Column(string id, string name, string legend, UnitType unitType, st public string Legend => legend; - public string NumberFormat => "0.##"; + // To the thousandth, since a time is shown in the unit Mean is, and an idle second's + // processor time is a few thousandths of the second it is measured against. + public string NumberFormat => "0.###"; public UnitType UnitType => unitType; diff --git a/src/DiffEngineViewer.Benchmarks/NativeIdleBenchmarks.cs b/src/DiffEngineViewer.Benchmarks/NativeIdleBenchmarks.cs new file mode 100644 index 000000000..d576b5931 --- /dev/null +++ b/src/DiffEngineViewer.Benchmarks/NativeIdleBenchmarks.cs @@ -0,0 +1,55 @@ +#nullable enable +using BenchmarkDotNet.Attributes; + +/// +/// What a second costs the Linux head while nothing happens: the same screen presented sixty +/// times with nothing arriving in between, which is the loop of a viewer left open on a +/// comparison. Of text and of two pictures, at the two sizes +/// uses, and run the way its summary says. +/// +/// One operation is that second, so CPU is what a second of an idle window costs this process +/// and X server CPU what it costs the server, Drawn is how many of its sixty frames were put on +/// the screen, and Triangles what was submitted to put them there. Mean is how long the sixty +/// took. It is a second for a head that is keeping to sixty frames a second, whether it drew +/// them or left them alone, and less than a second would be a loop that has stopped waiting for +/// the next frame. +/// +/// +[MemoryDiagnoser] +[NativeHead] +public class NativeIdleBenchmarks +{ + [Params("1100x700", "3840x2160")] + public string Window = ""; + + NativeHead? head; + Screen? screen; + + [GlobalSetup(Target = nameof(Text))] + public void OpenOnText() => + Open(NativeScenes.Text); + + [GlobalSetup(Target = nameof(Pictures))] + public void OpenOnPictures() => + Open(NativeScenes.TranslucentPictures); + + [GlobalCleanup] + public void Close() => + head?.Dispose(); + + [Benchmark] + public bool Text() => + head!.Run(screen!, NativeHead.MostTurns); + + [Benchmark] + public bool Pictures() => + head!.Run(screen!, NativeHead.MostTurns); + + void Open(Func scene) + { + var size = Window.Split('x'); + head = NativeHead.Open(int.Parse(size[0]), int.Parse(size[1])); + screen = ScreenBuilder.Build(scene(head.Columns, head.Rows)); + head.Settle(screen); + } +} From 2e005cdeb0f5d6ad8f724537ab325b338394ddf8 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 20:07:22 +1000 Subject: [PATCH 69/73] Leave a window alone when the frame it would draw is the one on the screen deview_present built, drew and put on the screen a frame sixty times a second whether or not anything had changed since the one before. Under a software rasteriser or over a remote session each of those is the whole window filled and copied again, and an idle window took more than half a core at the size it opens at and all four of the rasteriser's threads at 4K. A frame is now drawn only when it differs from the one on the screen, and built only when something could have changed it. Drawn or not is decided from what ImGui produced: every frame that is built is reduced to a fingerprint of its draw lists, and one whose fingerprint is the last drawn frame's is not put on the screen again. So a pointer crossing a pane, a key that did nothing and the frames that follow any change cost what building them costs. A frame is drawn regardless when ImGui is waiting for a texture, when a picture has just been uploaded, and when the window cannot be taken to be showing what was last drawn into it: nothing drawn yet, another size, shown after being hidden or minimised, or asked for by the window system. raylib sets no refresh callback, so GLFW's is set here, and a window another has been over, or that was unmapped, is drawn again. Built or not is the narrower test. No frame is built once the screen handed over is the last one byte for byte, nothing has come from the pointer, the keys or the window, nothing has landed from the decoder or the font finder, no tooltip is waiting out its delay, the files behind the pictures on the screen are as the last frame found them, and sixty frames built in a row since any of that last changed have each come out as the frame on the screen. That last is what a spinner fails, and anything else that moves by itself, and a second is longer than anything ImGui does over several frames or times by the clock it is given. A frame that is not drawn, or not built, still ends as a drawn one does: it waits out what is left of a sixtieth of a second and then reads the window system's events. EndDrawing did both, but only for a frame it had put on the screen, so it is no longer called and the end of every frame is Rest: the buffers are swapped where there is a frame to show, and the wait and the read follow in raylib's order. The managed loop still turns sixty times a second, the close request, the keys and the wheel are still read once a turn, and the window's placement is still noted every turn. ImGui is told the time since the present before, built or not, rather than raylib's frame time, so a window left alone for an hour does not find every delay served in its first frame back. Checked in the container beyond the suite. The fifteen Linux baselines are the same files byte for byte. The real viewer was driven under Xvfb with no window manager, by the pointer and the keys, with this shim and the one before it: three sessions, 46 photographs, every one the same picture with both. A tooltip comes up with the pointer at rest and stays up, a context menu opens, lights the row under the pointer and closes on Escape, the scrollbar drags, text stays selected, the wheel scrolls and enlarges, a snapshot arriving over the socket is shown, a picture's file written again, deleted and put back is followed, the part of the window another window was over is drawn again when it goes, as is a window unmapped and mapped and one resized, a window moved and then closed writes down where it was, and a close request ends the viewer within 200 ms. A spinner keeps turning, a window hidden and shown or focused comes back with the screen it had, and the machine's fonts are merged and drawn when the finder lands them. Over five seconds with the pointer crossing a pane the viewer ran 60 ms where it ran 2,620, and with nothing happening 20 ms where it ran 2,640, the X server none where it ran 100. After, with the same command as the commit before: | Method | Window | Mean | StdDev | CPU | X server CPU | Drawn | Triangles | Allocated | |--------- |---------- |--------:|---------:|--------:|-------------:|------:|----------:|----------:| | Text | 1100x700 | 1.004 s | 0.0013 s | 0.011 s | - | - | - | 254.53 KB | | Pictures | 1100x700 | 1.005 s | 0.0006 s | 0.004 s | - | - | - | 33.42 KB | | Text | 3840x2160 | 1.005 s | 0.0006 s | 0.005 s | - | - | - | 903.42 KB | | Pictures | 3840x2160 | 1.004 s | 0.0002 s | 0.003 s | - | - | - | 33.42 KB | No frame of the sixty is drawn, the X server does nothing, and a second costs the process 3 to 11 ms where it cost 554 ms to 7.5 s: what is left is the managed side flattening the same screen sixty times, which is where the allocations are. Mean is still a second, which is the wait still being waited, and at 4K it is a second for the first time. NativeFrameBenchmarks is unchanged by this: its frames differ, and each is still drawn, at what it cost before. --- native/src/deview.cpp | 563 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 536 insertions(+), 27 deletions(-) diff --git a/native/src/deview.cpp b/native/src/deview.cpp index 61a037a36..85f7d0289 100644 --- a/native/src/deview.cpp +++ b/native/src/deview.cpp @@ -52,6 +52,19 @@ extern "C" void* glfwGetCurrentContext(void); extern "C" void glfwSetWindowShouldClose(void* window, int value); +/* + * And GLFW's callback for the window system wanting a window's content drawn again, because part + * of it has been uncovered or it has been put back on the screen. raylib asks to be told when a + * window is resized, moved, minimised or focused and not this, since it draws every frame whatever + * happens. A window that has stopped drawing frames nobody needs has to hear it: see State::stale. + * Setting it here takes nothing from raylib, which sets none. + */ +extern "C" +{ +typedef void (*DeviewRefresh)(void* window); +DeviewRefresh glfwSetWindowRefreshCallback(void* window, DeviewRefresh callback); +} + namespace { void ClearCloseFlag() @@ -103,6 +116,25 @@ constexpr float emScale = 1.32f; */ constexpr float checkerSize = 8.0f; +/* + * How long a frame lasts, which is what holds the managed loop to sixty turns a second: it calls + * deview_present as fast as that returns. raylib used to do the waiting, inside EndDrawing. It is + * done here now, because a frame that is not drawn has to be waited out as well: see Rest. + */ +constexpr double frameSeconds = 1.0 / 60.0; + +/* + * How many frames in a row have to be built with nothing arriving, and come out as the frame on + * the screen, before frames stop being built: a second of them, since each is waited out. + * + * ImGui does things over several frames and counts some of them in the time it is told has passed. + * A layout can take a second frame to settle, input given in one frame may be acted on over the + * next few, and for a quarter of a second after the pointer leaves a row with a tooltip the next + * row's comes up without its delay. A second is longer than any of them, and costs little: these + * are frames that are built and compared, not drawn. + */ +constexpr int settledFrames = 60; + /* * One decoded picture, kept because BuildFrame runs sixty times a second and decoding an image per * frame is what turns a window that is merely showing something into one that is busy. @@ -341,10 +373,69 @@ struct State */ bool tracked = false; DeviewPlacement normal{}; + + /* + * What decides whether a frame is put on the screen, and whether one is built at all: see + * deview_present. First the screen as it was last handed over, every byte of it, and the one + * being held against it. + */ + std::vector presented; + std::vector arriving; + + /* What was drawn to make the frame on the screen, reduced to a number: see Fingerprint. */ + uint64_t shown = 0; + + /* + * The window cannot be taken to be showing the frame last drawn into it: nothing has been + * drawn yet, the window system has asked for its content again, it has changed size or come + * back from being hidden, or a texture has been put behind a name that frame may have used. + * The next frame is drawn, whatever it comes out as. + */ + bool stale = true; + + /* Frames in a row that had nothing arrive and came out as the one on the screen. */ + int settled = 0; + + /* A queue row's tooltip is waiting out its delay, which ImGui counts in the frames it is + * given: see BuildFrame. */ + bool tooltipDue = false; + + /* When the last present began, and when the last frame's wait ended, by GetTime. */ + double began = 0.0; + double ended = 0.0; + + /* The pointer and the window as the last present found them. */ + Vector2 pointer{}; + int width = 0; + int height = 0; + bool hidden = false; + bool minimised = false; + bool focused = false; + + /* + * The file behind each picture the last frame built for the window asked for, as that frame + * found it: there or not, and if there, written when and how long. See PicturesRewritten. + */ + struct Watched + { + std::string path; + bool there = false; + std::filesystem::file_time_type written{}; + std::uintmax_t length = 0; + }; + + std::vector watched; }; State state; +/* GLFW's refresh callback, called from inside PollInputEvents: the window system has uncovered + * some of the window, or shown it, and what was there is gone. */ +extern "C" void WindowRefreshed(void* window) +{ + state.stale = true; +} + /* * Whether a remembered window would open somewhere it can be reached: its top edge on a monitor, * with enough of its width there to take hold of. Monitors come and go between runs, and a window @@ -717,12 +808,15 @@ void StopDecoder() * Uploads what the decoder has finished into the entries still waiting for it. At the top of a * frame, on the thread that owns the GL context. A decode for an entry since forgotten, or for a * file since rewritten, is thrown away. + * + * Returns whether any entry was waiting for what landed, which is a frame to build: the picture is + * there to draw now, or is known not to be coming and its spinner goes. */ -void TakeDecoded() +bool TakeDecoded() { if (!state.decoder) { - return; + return false; } std::vector done; @@ -731,6 +825,7 @@ void TakeDecoded() done.swap(state.decoder->done); } + bool landed = false; for (auto& decode : done) { const auto found = state.pictures.find(decode.path); @@ -741,6 +836,7 @@ void TakeDecoded() { CachedTexture& entry = found->second; entry.decoding = false; + landed = true; if (decode.image.data != nullptr) { const Texture2D texture = LoadTextureFromImage(decode.image); @@ -750,12 +846,19 @@ void TakeDecoded() entry.loaded = true; entry.translucent = decode.translucent; PrepareTexture(entry); + + /* GL hands out the name of a texture that has been unloaded again, so a frame + * drawn with this one can be, number for number, a frame drawn with the one + * that had the name before it. */ + state.stale = true; } } } UnloadImage(decode.image); } + + return landed; } void ForgetPicture(const std::string& path) @@ -779,6 +882,47 @@ void ForgetPicture(const std::string& path) state.pictures.erase(found); } +/* + * A file's write time and length, which between them say whether a picture decoded from it is + * still what the file holds. False when either cannot be read, which is a file that has gone. + */ +bool Stamp(const std::string& path, std::filesystem::file_time_type& written, std::uintmax_t& length) +{ + const std::filesystem::path file(path); + std::error_code error; + written = std::filesystem::last_write_time(file, error); + if (error) + { + return false; + } + + length = std::filesystem::file_size(file, error); + return !error; +} + +/* + * Whether the file behind any picture the last frame asked for is no longer as that frame found + * it: written again, gone, or there where it was not. Picture asks this of each picture as a frame + * is built. A window that is being left alone builds no frames, so it is asked of all of them here + * before the window is left alone again. + */ +bool PicturesRewritten() +{ + for (const State::Watched& watched : state.watched) + { + std::filesystem::file_time_type written; + std::uintmax_t length = 0; + const bool there = Stamp(watched.path, written, length); + if (there != watched.there || + (there && (written != watched.written || length != watched.length))) + { + return true; + } + } + + return false; +} + /* * The decoded picture for a path, or null when there is none to draw: either this build cannot * read it, or it is still being decoded, which `loading` says so the pane can show that it is coming @@ -797,17 +941,15 @@ const CachedTexture* Picture(const std::string& path, bool& loading) return nullptr; } - const std::filesystem::path file(path); - std::error_code error; - const auto written = std::filesystem::last_write_time(file, error); - if (error) + std::filesystem::file_time_type written; + std::uintmax_t length = 0; + const bool there = Stamp(path, written, length); + if (!state.capturing) { - ForgetPicture(path); - return nullptr; + state.watched.push_back({path, there, written, length}); } - const auto length = std::filesystem::file_size(file, error); - if (error) + if (!there) { ForgetPicture(path); return nullptr; @@ -1414,12 +1556,15 @@ void FindFontsFor(const DeviewScreen* screen) * Merges what the finder has read into the window's font. At the top of a frame: ImGui takes a * new source between frames, and drops what it had rasterised from the font as it does, so a * character already drawn as missing is looked for again. + * + * Returns whether a font was merged, which is a frame to build: characters on the screen as the + * replacement glyph may have a glyph now. */ -void TakeFonts() +bool TakeFonts() { if (!state.finder) { - return; + return false; } std::vector found; @@ -1428,12 +1573,13 @@ void TakeFonts() found.swap(state.finder->found); } + bool merged = false; ImGuiIO& io = ImGui::GetIO(); for (FoundFont& font : found) { if (state.fontData.size() >= fontLimit) { - return; + return merged; } state.fontData.push_back(std::move(font.data)); @@ -1453,18 +1599,23 @@ void TakeFonts() const bool logs = io.ConfigErrorRecoveryEnableDebugLog; io.ConfigErrorRecoveryEnableAssert = false; io.ConfigErrorRecoveryEnableDebugLog = false; - const ImFont* merged = io.Fonts->AddFontFromMemoryTTF( + const ImFont* added = io.Fonts->AddFontFromMemoryTTF( data.data(), static_cast(data.size()), 0.0f, &config); io.ConfigErrorRecoveryEnableAssert = asserts; io.ConfigErrorRecoveryEnableDebugLog = logs; - if (merged == nullptr) + if (added == nullptr) { state.fontData.pop_back(); + continue; } + + merged = true; } + + return merged; } ImFont* AddEmbeddedFont(const uint8_t* fontTtf, int32_t fontLength, float fontSize) @@ -1616,11 +1767,17 @@ void RenderDrawData(ImDrawData* drawData) /* ---- input ---- */ -void PumpInput() +/* + * `elapsed` is the time since the present before this one began, built or not, which is a frame's + * length while frames are coming. Not the time since the last frame ImGui was given: after a + * window has been left alone for an hour, that would have a tooltip's delay, and everything else + * ImGui times, over in the first frame. + */ +void PumpInput(float elapsed) { ImGuiIO& io = ImGui::GetIO(); io.DisplaySize = ImVec2(static_cast(GetScreenWidth()), static_cast(GetScreenHeight())); - io.DeltaTime = GetFrameTime() > 0.0f ? GetFrameTime() : 1.0f / 60.0f; + io.DeltaTime = elapsed; const Vector2 mouse = GetMousePosition(); io.AddMousePosEvent(mouse.x, mouse.y); @@ -2648,6 +2805,15 @@ void BuildFrame(const DeviewScreen* screen) ImGui::SetTooltip("%s", tip.c_str()); } } + else if (item.tooltipLength > 0 && + !state.capturing && + ImGui::IsItemHovered()) + { + /* Under the pointer and still waiting out the delay, which ImGui counts + * in the frames it is given and the time it is told each took. So frames + * have to keep coming with the pointer at rest, until the tip is up. */ + state.tooltipDue = true; + } if (index == screen->menuRow && screen->menuCount > 0) @@ -2922,6 +3088,252 @@ void BuildFrame(const DeviewScreen* screen) ImGui::End(); } +/* ---- which frames are drawn ---- */ + +void Append(std::vector& bytes, const void* data, size_t size) +{ + if (data == nullptr || + size == 0) + { + return; + } + + const unsigned char* begin = static_cast(data); + bytes.insert(bytes.end(), begin, begin + size); +} + +/* An array of the screen with its count ahead of it, so two screens whose arrays are the same + * bytes in all but split differently are not the same screen. */ +template +void AppendArray(std::vector& bytes, const Element* elements, int32_t count) +{ + Append(bytes, &count, sizeof count); + if (count > 0) + { + Append(bytes, elements, static_cast(count) * sizeof(Element)); + } +} + +/* + * Whether the screen handed over differs from the one handed over last, which is kept either way. + * + * By its bytes, every one of them: the managed side builds each screen into the same buffers, so + * where they point says nothing, and none of the structs has padding to differ for no reason. The + * same bytes are the same strings, rows, panes, queue and menu, and so the same frame for as long + * as nothing else that a frame is built from has moved. + */ +bool Changed(const DeviewScreen* screen) +{ + std::vector& bytes = state.arriving; + bytes.clear(); + AppendArray(bytes, screen->strings, screen->stringsLength); + AppendArray(bytes, screen->panes, screen->paneCount); + AppendArray(bytes, screen->rows, screen->rowCount); + AppendArray(bytes, screen->segments, screen->segmentCount); + AppendArray(bytes, screen->buttons, screen->buttonCount); + AppendArray(bytes, screen->queue, screen->queueCount); + AppendArray(bytes, screen->menu, screen->menuCount); + const int32_t rest[] = { + screen->pendingCount, + screen->titleOffset, + screen->titleLength, + screen->subtitleOffset, + screen->subtitleLength, + screen->statusOffset, + screen->statusLength, + screen->menuRow, + screen->menuPane}; + Append(bytes, rest, sizeof rest); + + if (bytes == state.presented) + { + return false; + } + + bytes.swap(state.presented); + return true; +} + +/* + * Whether anything has come from the pointer, the keys or the window since the last present: what + * raylib gathered when it last read the window system's events, which is what the frame about to + * be built would be given. + * + * A key is not something a frame is built from, since ImGui is given none: what a key does comes + * back from the managed side as a different screen. It counts all the same, because a window is + * only left alone when nothing at all is happening to it. By the press rather than by what is + * down, since raylib reports Caps Lock and Num Lock as held for as long as they are on. + */ +bool Arrived() +{ + bool arrived = false; + + const Vector2 pointer = GetMousePosition(); + if (pointer.x != state.pointer.x || + pointer.y != state.pointer.y) + { + state.pointer = pointer; + arrived = true; + } + + for (const int button : {MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MIDDLE}) + { + if (IsMouseButtonDown(button) || + IsMouseButtonReleased(button)) + { + arrived = true; + } + } + + const Vector2 wheel = GetMouseWheelMoveV(); + if (wheel.x != 0.0f || + wheel.y != 0.0f) + { + arrived = true; + } + + /* Taken off raylib's queue, which nothing else here reads: ReadKey asks about keys by name + * and takes characters from a queue of their own. */ + while (GetKeyPressed() != 0) + { + arrived = true; + } + + const int width = GetScreenWidth(); + const int height = GetScreenHeight(); + const bool hidden = IsWindowState(FLAG_WINDOW_HIDDEN); + const bool minimised = IsWindowMinimized(); + const bool focused = IsWindowFocused(); + if (width != state.width || + height != state.height || + hidden != state.hidden || + minimised != state.minimised) + { + /* A window of another size has another framebuffer, and one that was not on the screen + * was not being kept by anything. */ + state.stale = true; + arrived = true; + } + + if (focused != state.focused) + { + arrived = true; + } + + state.width = width; + state.height = height; + state.hidden = hidden; + state.minimised = minimised; + state.focused = focused; + return arrived; +} + +uint64_t Mix(uint64_t hash, const void* data, size_t size) +{ + const unsigned char* bytes = static_cast(data); + for (; size >= sizeof(uint64_t); bytes += sizeof(uint64_t), size -= sizeof(uint64_t)) + { + uint64_t word; + memcpy(&word, bytes, sizeof word); + hash = (hash ^ word) * 0x9E3779B97F4A7C15ull; + hash ^= hash >> 29; + } + + for (; size > 0; bytes++, size--) + { + hash = (hash ^ *bytes) * 0x100000001B3ull; + } + + return hash; +} + +/* + * Everything RenderDrawData would draw a frame from, reduced to one number: the size drawn at, and + * for every draw list its vertices, its indices and what each command clips to and draws with. + * + * Two frames with the same number are the same pixels, short of a texture's content having changed + * behind its name, which is asked separately. That is what lets a frame be built and then not + * drawn: it is held against the frame on the screen, and a frame that would put the same pixels + * there again is a full window for a software rasteriser to fill, and for the window system to + * copy, to no effect. Sixty four bits, so two frames that differ share a number about as often as + * never, and a pass over the vertices costs a small part of what drawing them would. + */ +uint64_t Fingerprint(const ImDrawData* drawData) +{ + uint64_t hash = 0xCBF29CE484222325ull; + hash = Mix(hash, &drawData->DisplaySize, sizeof drawData->DisplaySize); + for (int list = 0; list < drawData->CmdListsCount; list++) + { + const ImDrawList* commands = drawData->CmdLists[list]; + hash = Mix( + hash, + commands->VtxBuffer.Data, + static_cast(commands->VtxBuffer.Size) * sizeof(ImDrawVert)); + hash = Mix( + hash, + commands->IdxBuffer.Data, + static_cast(commands->IdxBuffer.Size) * sizeof(ImDrawIdx)); + for (const ImDrawCmd& command : commands->CmdBuffer) + { + const uint64_t drawn[] = { + static_cast(command.GetTexID()), + command.VtxOffset, + command.IdxOffset, + command.ElemCount}; + hash = Mix(hash, &command.ClipRect, sizeof command.ClipRect); + hash = Mix(hash, drawn, sizeof drawn); + } + } + + return hash; +} + +/* + * Whether ImGui is waiting for a texture to be made, updated or destroyed, which RenderDrawData + * does as it draws: the font atlas, when a character is drawn for the first time. Such a frame is + * drawn whatever its fingerprint, so the atlas on the GPU never falls behind the one ImGui holds. + */ +bool TexturesWaiting(const ImDrawData* drawData) +{ + if (drawData->Textures == nullptr) + { + return false; + } + + for (const ImTextureData* texture : *drawData->Textures) + { + if (texture->Status != ImTextureStatus_OK) + { + return true; + } + } + + return false; +} + +/* + * The end of every frame, drawn or not: what EndDrawing does once a frame is on the screen, which + * it can no longer be left to do, since it only does it for a frame it has put there. + * + * It waits out what is left of the frame, counted from when the last one's wait ended, so the + * managed loop turns sixty times a second whatever a turn drew: without the wait a window with + * nothing to draw would spin a core. And then it reads the window system's events, last, so that + * what deview_poll_input reports and what the next frame is built from are as fresh as they can + * be. That is the order raylib kept them in. + */ +void Rest() +{ + const double left = frameSeconds - (GetTime() - state.ended); + if (left > 0.0) + { + /* Never longer than a frame, whatever the clock has done. */ + WaitTime(std::min(left, frameSeconds)); + } + + PollInputEvents(); + state.ended = GetTime(); +} + void ApplyStyle() { ImGuiStyle& style = ImGui::GetStyle(); @@ -3004,7 +3416,22 @@ int32_t deview_init( } SetExitKey(KEY_NULL); - SetTargetFPS(60); + + /* No SetTargetFPS: raylib only holds to it inside EndDrawing, which is no longer called. The + * frame is ended, and waited out, by Rest. And nothing about a window that came before this + * one says anything about this one, whose clock has started again from nothing. */ + glfwSetWindowRefreshCallback(glfwGetCurrentContext(), WindowRefreshed); + state.presented.clear(); + state.watched.clear(); + state.shown = 0; + state.stale = true; + state.settled = 0; + state.tooltipDue = false; + state.began = 0.0; + state.ended = 0.0; + state.pointer = Vector2{}; + state.width = 0; + state.height = 0; state.context = ImGui::CreateContext(); ImGui::SetCurrentContext(state.context); @@ -3054,13 +3481,59 @@ int32_t deview_present(const DeviewScreen* screen) } ImGui::SetCurrentContext(state.context); - PumpInput(); - /* Before the frame asks for its pictures, so one that finished decoding since the last frame is - * drawn in this one. */ - TakeDecoded(); + + const double now = GetTime(); + const float elapsed = state.began > 0.0 && now > state.began + ? static_cast(now - state.began) + : static_cast(frameSeconds); + state.began = now; + + /* + * What has arrived since the last present. Each of these is asked every time, whatever the + * ones before it said, since each also takes what it finds. + * + * Before the frame asks for its pictures, so one that finished decoding since the last frame + * is drawn in this one. + */ + bool arrived = TakeDecoded(); /* And its fonts, for that reason and because a font can only be added between frames. */ - TakeFonts(); + arrived = TakeFonts() || arrived; + arrived = Changed(screen) || arrived; + arrived = Arrived() || arrived; + arrived = arrived || state.tooltipDue; + + /* + * A window nothing is happening to is left alone: no frame is built, and nothing is drawn. + * It used to be built, drawn and put on the screen sixty times a second, each one the frame + * already there, and under a software rasteriser or over a remote session each of those is the + * whole window filled and copied again. + * + * Left alone only once it is certain the next frame would be the one on the screen. The screen + * handed over is the last one byte for byte, nothing has come from the pointer, the keys, the + * window system, the decoder or the font finder, no tooltip is waiting to appear, the files + * behind the pictures are as they were, and a second of frames built since any of that last + * changed have all come out as the frame on the screen. That last is what a spinner fails, + * and anything else that moves by itself. + */ + if (!arrived && + !state.stale && + state.settled >= settledFrames) + { + if (!PicturesRewritten()) + { + Rest(); + MeasureGrid(); + TrackPlacement(); + return 1; + } + + arrived = true; + } + + PumpInput(elapsed); FindFontsFor(screen); + state.watched.clear(); + state.tooltipDue = false; ImGui::NewFrame(); BuildFrame(screen); ImGui::Render(); @@ -3076,10 +3549,37 @@ int32_t deview_present(const DeviewScreen* screen) SetMouseCursor(cursor); } - BeginDrawing(); - ClearBackground(Color{24, 24, 24, 255}); - RenderDrawData(ImGui::GetDrawData()); - EndDrawing(); + /* + * Drawn only if it is not the frame on the screen: the pointer crossing a pane, a key that did + * nothing and the frames that follow any change mostly come out as the frame before them. + * Building one costs a fraction of drawing it, and is what all of ImGui's own state is kept + * moving by, so those frames are built and not drawn rather than not built. + */ + ImDrawData* drawData = ImGui::GetDrawData(); + const uint64_t frame = Fingerprint(drawData); + if (state.stale || + frame != state.shown || + TexturesWaiting(drawData)) + { + BeginDrawing(); + ClearBackground(Color{24, 24, 24, 255}); + RenderDrawData(drawData); + rlDrawRenderBatchActive(); + SwapScreenBuffer(); + state.shown = frame; + state.stale = false; + state.settled = 0; + } + else if (arrived) + { + state.settled = 0; + } + else if (state.settled < settledFrames) + { + state.settled++; + } + + Rest(); ForgetUnusedPictures(); MeasureGrid(); @@ -3210,6 +3710,9 @@ void deview_set_hidden(int32_t hidden) } ClearWindowState(FLAG_WINDOW_HIDDEN); + /* The window system asks for a window it has just shown to be drawn. Not waited for: nothing + * was keeping what a hidden window showed. */ + state.stale = true; } void deview_set_clipboard(const char* text) @@ -3242,6 +3745,8 @@ void deview_focus(void) } SetWindowFocused(); + /* Shown, restored or raised: drawn again, as in deview_set_hidden. */ + state.stale = true; } void deview_set_placement(const DeviewPlacement* placement) @@ -3292,6 +3797,10 @@ void deview_shutdown(void) state.fontData.clear(); state.asked.clear(); + state.presented.clear(); + state.arriving.clear(); + state.watched.clear(); + CloseWindow(); state.initialised = false; state.windowOpen = false; From caedd4999504bd799c2df49a821454906afcb1a6 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 20:25:34 +1000 Subject: [PATCH 70/73] Say what deview_present does now where three comments still described a frame a turn deview.h had it drawing one frame. It is one turn of the window: what the window does not already show is drawn, events are read, and the call comes back when the next frame is due. That it draws nothing for a frame already on the screen is part of what a caller relies on, since it is why the managed side calls it every turn and never says what changed. CMakeLists.txt explained SUPPORT_CUSTOM_FRAME_CONTROL by what EndDrawing did with it on. EndDrawing is no longer called, so nothing rests on that flag, and the busy wait flag beside it is the one that still matters: Rest waits with raylib's WaitTime. And the viewer benchmarks' Program.cs said nothing there opens a window, which the Native classes now do wherever there is a shim and a display. --- native/CMakeLists.txt | 10 +++++++--- native/include/deview.h | 8 +++++++- src/DiffEngineViewer.Benchmarks/Program.cs | 6 ++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index d742b9f53..5800fd126 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -36,9 +36,13 @@ set(CUSTOMIZE_BUILD ON CACHE BOOL "" FORCE) # SUPPORT_CUSTOM_FRAME_CONTROL was: EndDrawing then never put a frame on the screen, never read # input and never waited for the next frame, so the Linux window stayed blank, took no keys and # spun a core. A capture draws into a texture and never gets that far, which is why the pixel -# snapshots passed throughout; PixelTests.PresentWaitsForTheNextFrame is what notices. The busy -# wait loop was on the same way, and would have spun through the whole of every frame's wait once -# there was one. The rest are formats and features nothing here uses. +# snapshots passed throughout; PixelTests.PresentWaitsForTheNextFrame is what notices. +# deview_present has since stopped calling EndDrawing: it puts a frame on the screen only when it +# differs from the one there, and waits and reads input itself whether it drew or not (Rest in +# deview.cpp). So nothing rests on this flag any more, and it stays off for whatever ends a frame +# through raylib next. The busy wait loop was on the same way, and that one still matters: Rest +# waits with raylib's WaitTime, which would spin through the whole of every frame's wait. The rest +# are formats and features nothing here uses. foreach(flag IN ITEMS SUPPORT_CUSTOM_FRAME_CONTROL SUPPORT_BUSY_WAIT_LOOP diff --git a/native/include/deview.h b/native/include/deview.h index 574c08ad0..fd4e67976 100644 --- a/native/include/deview.h +++ b/native/include/deview.h @@ -431,7 +431,13 @@ DEVIEW_API int32_t deview_init( float fontSize, int32_t hidden); -/* Draws one frame. Returns 0 once the window has been closed. */ +/* + * One turn of the window for this screen: whatever of it the window does not already show is + * drawn, the window system's events are read, and the call comes back when the next frame is due, + * which is what holds the managed loop to sixty turns a second. A turn that would draw the frame + * already on the screen draws nothing, so this is called every turn whatever has changed, and the + * caller never has to say what did. Returns 0 once the window has been closed. + */ DEVIEW_API int32_t deview_present(const DeviewScreen* screen); DEVIEW_API void deview_poll_input(DeviewInput* input); diff --git a/src/DiffEngineViewer.Benchmarks/Program.cs b/src/DiffEngineViewer.Benchmarks/Program.cs index bb57d34ce..3e09aa6f8 100644 --- a/src/DiffEngineViewer.Benchmarks/Program.cs +++ b/src/DiffEngineViewer.Benchmarks/Program.cs @@ -6,8 +6,10 @@ // Run with: dotnet run -c Release --project src/DiffEngineViewer.Benchmarks -- --filter * // Filter e.g.: dotnet run -c Release --project src/DiffEngineViewer.Benchmarks -- --filter *Frame* // -// The viewer's model: everything a frame costs before a head draws it. Nothing here opens a -// window or binds a port. +// The viewer's model: everything a frame costs before a head draws it. Nothing here binds a port, +// and nothing opens a window except the Native classes, which turn the Linux head's own and are +// left out of a run anywhere there is no shim or no display: every run on Windows and macOS. +// NativeFrameBenchmarks says how to run them. // // In process and a short run, for the reasons DiffEngine.Benchmarks' Program.cs gives. var config = DefaultConfig.Instance From 28f1528d0cbdd2792a5e8d0f5282b109c5f7a265 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 20:30:56 +1000 Subject: [PATCH 71/73] Close the performance items in todo.md, and describe the Linux head's turn in claude.md todo.md's fourteen performance items are fixed, so they go, and what each fix says it did not reach takes their place: where a diff stops being minimal, what still rebuilds the queue's list, what a batch's one write means for a snapshot withdrawn during it, the listener table growing with the machine's connections, the half of the zoom range the WinForms head still scales on every paint, what an idle Linux window still does sixty times a second, and for macOS the checks that would confirm on a Mac what nothing here can run. Three of the smaller items move with them. The Linux press and release that arrive together was run in the container rather than left as plausible: none of ten such clicks was seen and three of ten key presses. GetWindowPosition every frame is not the X round trip it was taken for, since raylib 6.0 answers it from what its window position callback last heard, so that item goes. And the macOS picture that lands during a spinner's repaint now has a second case, the scaled copy of an enlarged picture. claude.md says what a turn of the Linux loop is now that it is not a frame on the screen, what a new input to a frame has to be added to, how its spinner keeps turning, and where the head's own benchmarks run. --- claude.md | 21 ++++++++-- todo.md | 115 +++++++++++++++++++++--------------------------------- 2 files changed, 62 insertions(+), 74 deletions(-) diff --git a/claude.md b/claude.md index 13f0e7e4d..f90c5118d 100644 --- a/claude.md +++ b/claude.md @@ -31,7 +31,7 @@ dotnet run -c Release --project src/DiffEngineViewer.Benchmarks -- --filter "*Fr dotnet run -c Release --project src/DiffEngineViewer.Windows.Benchmarks -- --filter "*" ``` -**Benchmarks:** BenchmarkDotNet, run in process with a short job, both set in each project's `Program.cs`. Its default toolchain generates a project under `bin/` and builds it with one `OutDir` for everything it references; DiffEngine references the three viewer heads for build ordering, all three are named `DiffEngineViewer`, and they overwrite one another there, so the default cannot build. Three projects because of what each has to see inside: the library, the viewer's core (which links the library's sources, so one project referencing both finds every shared type ambiguous), and the WinForms head (which only builds for Windows). Each is signed and named in `InternalsVisibleTo`. A benchmark measures the product's own code path, and where a fix replaces a path rather than adding one, the benchmark is committed before the fix so the earlier number can be had again from history. Three iterations settle a cost that is out by multiples and not one that is out by a tenth: pass `--iterationCount` for that. +**Benchmarks:** BenchmarkDotNet, run in process with a short job, both set in each project's `Program.cs`. Its default toolchain generates a project under `bin/` and builds it with one `OutDir` for everything it references; DiffEngine references the three viewer heads for build ordering, all three are named `DiffEngineViewer`, and they overwrite one another there, so the default cannot build. Three projects because of what each has to see inside: the library, the viewer's core (which links the library's sources, so one project referencing both finds every shared type ambiguous), and the WinForms head (which only builds for Windows). Each is signed and named in `InternalsVisibleTo`. A benchmark measures the product's own code path, and where a fix replaces a path rather than adding one, the benchmark is committed before the fix so the earlier number can be had again from history. Three iterations settle a cost that is out by multiples and not one that is out by a tenth: pass `--iterationCount` for that. The viewer project's `Native` classes turn the Linux head's real window, so they are left out of a run wherever there is no shim or no display, which is every run on Windows: they run in the `ubuntu:24.04` container the pixel snapshots reproduce in, under `xvfb-run`, by the command in `NativeFrameBenchmarks`' summary. The clock says little there, since the shim holds a turn to a sixtieth of a second, so they report processor time, the X server's, and what OpenGL counted as drawn. **Test runner:** TUnit runs on Microsoft.Testing.Platform rather than VSTest, which changes two things about the commands above. Filters are treenode paths given after `--`, as `/Assembly/Namespace/Class/Test` with `*` for any segment; VSTest's `--filter "FullyQualifiedName~ClassName"` matches nothing and exits 5, so a filtered run that reports no failures may have run no tests. And `--nologo` makes any run report "Zero tests ran" and exit 5, whatever else is on the command line, so leave it off. @@ -229,7 +229,21 @@ the comment there about not caching "nothing staged" asks for. only once a character on screen needs it. A capture never uses them: it draws with the embedded font alone, so no baseline depends on what is installed (`PixelTests.OutsideTheFont`). Accept-all is `a` with Shift held, read from the key rather than from the case of the letter, - which Caps Lock also changes. + which Caps Lock also changes. A turn of the loop is not a frame on the screen. `deview_present` + builds a frame only when something one is built from has arrived - another screen by its bytes, + the pointer, a key, the window, a decode, a font, a tooltip's delay, a picture's file written + again - or a second of built frames has yet to come out the same, which is what a spinner fails. + It draws a built frame only when its draw lists differ from those of the frame on the screen + (`Fingerprint`), or the window cannot be taken to show what was last drawn (`stale`: resized, + shown again, or asked for by the window system through GLFW's refresh callback, which raylib + leaves unset). Every turn ends in `Rest`, the wait and the event read `EndDrawing` did for a + frame it had drawn, so the loop still turns sixty times a second and `EndDrawing` is not called. + Drawn every turn, an idle window under a software rasteriser took more than half a core, and all + four of the rasteriser's threads at 4K. Anything new that `BuildFrame` reads has to be asked + about in `deview_present` before a window is left alone, or the window keeps the frame before. + The checkerboard is one quad of a two by two texture set to repeat, behind a picture that has a + pixel to see through, which the decoder looks for as it decodes: it was a quad a dark square, + 113,000 triangles a frame at 4K, behind opaque pictures too. - Group headers fold. `SessionState.Collapsed` holds `QueueItem.GroupKey`s and `QueueProjection` skips their members, so the marker rides in the label and no head or ABI field knows about it. Whether an entry is hidden is always read back out of `VisibleEntries`, never recomputed — the @@ -282,7 +296,8 @@ the comment there about not caching "nothing staged" asks for. one frame that has to come out the same every time (`ViewerCanvas.Synchronous`, the Swift renderer's `capturing`, `state.capturing` in the shim). A spinner turns by repainting only its own rectangle: WinForms and macOS redraw only when something changed, and the frame is otherwise - unchanged for as long as a page takes. + unchanged for as long as a page takes. On Linux it turns by being there: a frame with a spinner + in it differs from the one before, so frames go on being built and drawn while one is up. - Documents (PDF, docx, xlsx, pptx, and SVG and maps drawn beside their text) need **`src/DiffEngineViewer.Documents`**, a separate assembly with Morph, Morph.PDFium, Skia, GeoConvert and the OpenXml SDK behind it: tens of MB per RID. So it ships only in a `documents/` folder of the three tool packages and of the tray (one folder diff --git a/todo.md b/todo.md index e02bb825d..f102b7b9a 100644 --- a/todo.md +++ b/todo.md @@ -2,16 +2,16 @@ Findings from a review of `main` at 991bc480 (2026-10-03). The list from the review at 4244ebe6 is closed, so this one weights what has landed since: documents and maps, the text diff, zoom and pan, the remembered window and views, and pictures decoded off the UI thread. -Most of it came from six reviews run alongside, one per area: the library, the inline patcher, the tray, and the Windows, Linux and macOS heads. Every bug found is fixed and gone from this list: the five in the viewer's model, and the twenty seven the six reviews found. What is left is what those fixes did not reach, the performance items, and the smaller ones. +Most of it came from six reviews run alongside, one per area: the library, the inline patcher, the tray, and the Windows, Linux and macOS heads. Every bug found is fixed and gone from this list: the five in the viewer's model, and the twenty seven the six reviews found. So is every performance item, all fourteen. What is left is what those fixes did not reach, and the smaller ones. -File and line references are as of a01dfc1d, before the second round of fixes. The code they point at is unchanged, but lines below an edit have moved, so go by the names. +File and line references are as of a01dfc1d, before the second round of fixes and before the performance ones. The code they point at is unchanged, but lines below an edit have moved, so go by the names. - **reproduced**: run and seen by me. Either the API involved, or the repo's own sources compiled into a scratch console project outside the repo. No test in the repo yet. - **measured**: timed by me in that same project. Release, net10.0, this machine. - **read**: confirmed by me reading the code path, not run. - **reported**: found by one of the six reviews and not rerun by me. What follows the word is the reviewer's own evidence: *ran* is a probe of theirs outside the repo, *measured* a timing of theirs, *read* a trace through the code, and *plausible* a reading that rests on something they could not run, with what would settle it. For each of these I checked that the code it quotes is in the tree as quoted, and nothing more. - **left by the fix**: said by whoever fixed the bug it sits under, about the part the fix did not reach. -- Nothing under a macOS heading has been run by a person: the Swift cannot be built from Windows. CI's `macos-14` job compiles it and runs the suite and the pixel snapshots, and it passes there. The Linux fixes were built and run in an `ubuntu:24.04` container, and pass on CI's Linux job too. +- Nothing under a macOS heading has been run by a person: the Swift cannot be built from Windows. CI's `macos-14` job compiles it and runs the suite and the pixel snapshots, and it passes there. The Linux fixes were built and run in an `ubuntu:24.04` container, and pass on CI's Linux job too. The two macOS performance changes are in the same position as the fixes, and have not been measured either. ## Bugs @@ -64,88 +64,62 @@ Nothing that was found as a bug is open. What follows is what the fixes left. ## Performance +Nothing that was found as a performance item is open. Each was measured before and after by a benchmark that is now in the repository, in `src/DiffEngine.Benchmarks`, `src/DiffEngineViewer.Benchmarks` and `src/DiffEngineViewer.Windows.Benchmarks`, and the numbers are in the commits that made the changes. The two Linux items were measured in the `ubuntu:24.04` container, by `NativeFrameBenchmarks` and `NativeIdleBenchmarks`, which are left out of a run anywhere else. Two were not measured, because nothing here can run them: both macOS items. What follows is what the fixes left. + ### Viewer model -- [ ] **The screen is rebuilt every frame, including frames where the state is the same object** (measured) - - `src/DiffEngineViewer/ViewerProgram.cs:464-465` (and `ModalFrame`, `:380`): `ScreenBuilder.Build(host.State)` runs sixty times a second, ten when hidden. `SessionState` is immutable and only replaced by `SessionHost.Mutate`, so an unchanged reference is an unchanged screen. - - `QueueProjection.Rows` builds a label, a group key and a tooltip for every entry in the queue before `Visible` slices out the few on screen (`src/DiffEngineViewer/QueueProjection.cs:102-199`, `:237`). Per call: 100 entries 0.1 ms and 123 KB, 500 entries 0.57 ms and 618 KB, 2,000 entries 0.72 ms and 2.3 MB. At sixty frames that is 7, 36 and 136 MB of garbage a second from a window nobody is touching. - - `SelectionText.Summary` walks every selected row every frame (`src/DiffEngineViewer/SelectionText.cs:146`), flattening each twice. Ctrl+A on a tab indented file: 20,000 lines 3.1 ms and 5.6 MB a frame (330 MB a second), 100,000 lines 15.8 ms and 28 MB a frame, which is the whole frame budget for as long as the selection stands. Nothing selected: 0.001 ms. - - Downstream of it, the WinForms head compares the new screen with the last field by field (`src/DiffEngineViewer.Windows/ViewerForm.cs:789`) and the native heads re-encode it (`src/DiffEngineViewer/Native/NativeViewerWindow.cs:101`). - - Fix: keep the last state and its screen in the loop and rebuild only when the reference changed. `ViewerForm.Same` and `ScreenPayload.Build` can then return early on the same screen reference. That removes all of the above without touching what any of it computes. - -- [ ] **The text diff is quadratic when the two sides share little, and the viewer runs it before it answers** (measured) - - `src/DiffEngine/TextDiff/MyersDiff.cs:159`: the search runs to `maxD` with no bound, and `LineDiff.Build` (`src/DiffEngine/TextDiff/LineDiff.cs:68`) hands it every line. Nothing in common: 10,000 lines a side 226 ms, 20,000 866 ms, 40,000 3.5 s. One percent changed, 400,000 lines: 175 ms. - - "Nothing in common" is an ordinary snapshot change: a serializer setting that re-indents every line. A 40,000 line re-indented JSON takes `TrackedEntry.ForMove` 3.5 s, and 80,000 lines 14 s. - - `MessageHandler.TrackMove` builds the entry, diff included, before the `Diff` or `Move` is answered (`src/DiffEngineViewer/Ipc/MessageHandler.cs:54`). The synchronous client gives up at 3 s (`src/DiffEngine/Protocol/ViewerClient.cs:64`), so `PendingFiles.AddDiff` (`src/DiffEngine/Tray/PendingFiles.cs:134-144`) falls to the launch gate, finds the port owned, sends again, times out again and returns `NoDiffToolFound`, while the viewer diffs the pair twice on two pool threads and then replaces the first entry with the second. The async path has 30 s. - - Fix, in order of value: - - Before Myers, drop the lines that occur on one side only and mark them changed. `LineInterner` already says which: a received id of `expectedLines.Length` or more never occurs in expected, and one pass over the received ids marks the expected ones that do occur. The longest common subsequence is unchanged, so the result is still minimal. Both cases above become linear. - - A cost cap for what is left. The same lines in another order (40,000 lines: 6.9 s) have nothing unique to drop. Past the cap, report the remaining block as removed then added. - - Answer the pair before diffing it: queue the entry with its sides unread and fill it in on `TrackedWatch`'s thread, the way a document arrives `Reading`. - -- [ ] **"Accept all in" a group still applies the whole group in one transition on the render thread** (read) - - `src/DiffEngineViewer/ViewerProgram.cs:700-711`: only `AcceptAll` is handed to `AcceptAllRunner`. `AcceptGroup` goes to `ViewerSession.Apply` inside `host.Mutate`, where `AcceptGroup` (`src/DiffEngineViewer/ViewerSession.cs:789`) runs `InlineApplier` for every member and `SweepTracked` (`:1277`) moves or deletes every file, each move retrying for up to a second when the target is held (`src/DiffEngineViewer/ViewerActions.cs:71-87`). - - In a queue with one solution, that header's "Accept all in" is the whole queue: the freeze `AcceptBatch` was written to remove, with the lock held so every arriving `Inline`, `Diff` and listing waits behind it. - - Fix: let `BeginAcceptAll` take the keys to sweep, and send a group through the same runner. - -- [ ] **The right side of a document waits for every page of the left** (measured) - - `src/DiffEngineViewer/Documents/DocumentWatch.cs:235-243`: `Draw` renders the first side without pages to completion and returns. The right side starts on the next pass. - - 100 A4 pages take 4.3 s here and the first lands after 87 ms. So the left page is on screen at once, and the right pane spins for 4.3 s, and which pages differ is unknown until both are done. - - Fix: draw both sides at once on two tasks. Two PDFs then take turns at PDFium's lock a page at a time, and two Office files use two cores. The timeout, its `progressed` clock and `generation` become per job. - -- [ ] **Every pending file is statted five times a second, and the owning watch never slows down** (measured) - - `src/DiffEngineViewer/TrackedWatch.cs:27-55` and `src/DiffEngineViewer/Ipc/OwnerLink.cs:344-432`. One pass over 1,000 pending moves is 2,000 stats and takes 25 ms here, so 125 ms of every second. The class doc's "a queue is small enough that the difference is not measurable" holds to about a hundred. - - `OwnerLink` drops to one pass a second when the window is hidden and `DocumentWatch` stops. `TrackedWatch` has no `Hidden`, and an owning viewer hidden behind a tray keeps its 200 ms for days. - - Fix: give `TrackedWatch` the hidden interval. If large queues matter, stat the entry on screen every pass and the rest in turn. +- [ ] Past its budget a diff is correct and may not be the smallest: two texts of more than 10,000 lines between them with 8,000 or more of the lines they share out of place. A block moved whole is found whatever its size. The same lines shuffled come out as nearly everything changed, where the longest run still in order could be kept: anchoring on the lines that occur once on each side, by the longest increasing run of them, would find it in the time of a sort. (left by the fix) +- [ ] A pair is still read and diffed before the viewer answers the test process that sent it (`MessageHandler.TrackMove`). The diff is bounded now, so what is left is two reads: a million lines a side, shuffled, is about two of the sender's three seconds. Answering first and filling the entry in afterwards, as a document arrives `Reading`, was not done. (left by the fix) +- [ ] A screen is built when the state changes, which a scroll or a drag does every frame, and `QueueProjection.Rows` describes every row of the queue to draw the forty that fit: 1.1 ms and 3.2 MB at 2,000 entries, for each such frame. Slicing before describing would make it the visible rows'. (left by the fix) +- [ ] `ScreenPayload` clips a row to the window's width in cells rather than the pane's, so about twice what a pane can show is encoded for the macOS and Linux heads: 4.6 ms a changed frame for a 4K window of 300 character CJK lines. `RowText.Shown`, which the WinForms head now cuts with, would serve, once the model knows how many cells a pane has. (left by the fix) +- [ ] A queue of more than a hundred pending files is looked at a hundred a pass, so a row that is not on screen follows its file within `count / 100` passes: two seconds for a thousand, and five times that while the window is hidden. The entry on screen is still looked at every pass. (left by the fix) +- [ ] Only a batch's record step stopped rebuilding the whole list from the whole queue. Every arrival (`EnqueueInline`), settle and single accept still does, under the lock: a dictionary of the queue, two orderings and a key an entry. The two `Smaller` items on `QueueProjection.Order` and `PendingInline.Key` are parts of it. (left by the fix) +- [ ] The bulk discards are still one transition on the render thread: `DiscardGroup` and `DiscardAll` delete each received file under the lock. A discard waits on nothing, so they were left. (left by the fix) +- [ ] A snapshot discarded, or settled by a test that started passing, while its own source file is being written by a bulk accept was handed over with the rest of the file and is written with them. It is not counted, and a discard still takes it out of the queue. Before, that moment was the snapshot's own apply rather than its file's. Closing it would take the applier asking, before its one write, which of the patches are still wanted. (left by the fix) +- [ ] Both sides of a document are drawn at once, and four things about that are as they are for a reason and could be better: a drawing is not stopped when the reader leaves its entry, though between two pages of a PDF it now could be; the pages of a PDF that is put back because the other side stopped inside PDFium are dropped, and drawn again once PDFium is free; a PDF pair's right side waits for the left's first page, which is what lets the two be told apart when both stop; and `Withdrawn`, which takes a rendering back out of the state, lives in `DocumentWatch` where it belongs beside `ViewerSession.Rendered`. (left by the fix) +- [ ] Which of two PDFs stopped inside PDFium is inferred from whose pages stopped first, not known. A thread descheduled between landing a page and asking for the lock, at the moment the other side hangs, would have the innocent side given up on and the culprit put back. (left by the fix) ### Library -- [ ] **The refused connect is still paid once per test process, and half a second per gated call while nothing can be launched** (reported: measured) - - `src/DiffEngine/Protocol/ViewerClient.cs:211-228`, `:257-281`, `:455-469` and `ViewerLaunchGate.cs:111`, `:164`, `:199-226`. A refused loopback connect is 2,029 ms on Windows. `IPGlobalProperties.GetActiveTcpListeners()` is 0.2 to 0.4 ms and reports a loopback listener correctly. - - The unowned memory is per process and starts empty, so with no tray or viewer the first telling send of every test process blocks its thread for 2 s: 2 s on a one test inner loop that otherwise takes one, per framework, and again every ten minutes. `IsOwned` always connects and waits `ShortTimeout`, so a gated call with nothing owning the queue and nothing launchable costs 0.5 s under the gate, as does each `WaitForBind` poll. - - Fix: ask the listener table before connecting, as `PiperClient.PortIsHeld` does for 3492, falling back to the connect when the table cannot be read. +- [ ] The listener table is every connection the machine has, filtered, so reading it grows with them: 0.45 ms at 86 connections and 7.9 ms at 3,102. `ViewerClient` skips it for a port that answered in the last second; `PiperClient.PortIsHeld` reads it on every send, as it did before. A listener-only table by P/Invoke would not grow. (left by the fix) +- [ ] `RecheckUnownedAfter` is still ten minutes, though a recheck on Windows is now a read of the table rather than two seconds, and could come down. (left by the fix) +- [ ] Off Windows the connect is still the only question asked, since a refusal there is immediate. Whether the table reads as empty under WSL1 was not checked. (left by the fix) +- [ ] `PiperClient.PortIsHeld` now takes any exception from the table as "may be held", where it took two kinds. (left by the fix) ### Inline snapshots -- [ ] **Every accept re-reads, re-lexes and rewrites the whole file** (reported: measured, in a simulation of the applier's IO and allocations) - - `InlineApplier.cs:139-231`, `:327-375`, `SourceScan.cs:20`, `InlinePatcher.cs:127-130,137`. 500 applies to one 10,000 line, 633 KB file took 3.8 s with 499 gen2 collections, about 4 MB on the large object heap each. It bites on accept-all over a large test file, and once per new call site per run through `CanAnchor`. - - Fix: a batch apply per file that reads once, applies in memory and writes once, still reporting each outcome. Short of that, pool the scan arrays. - -- [ ] **`InlineStaging.Clear` walks the whole `obj` tree for every passing inline verification** (reported: measured) - - `InlineStaging.cs:104-113`, `:288-360`. Per Clear, warm: 2.8 ms for Verify.Tests' obj (151 directories), 0.95 ms for DiffEngine.Tests', so one to three seconds per thousand passing inline verifications. - - Fix: cache the directory list per `obj`, invalidated in process from `InlinePatchFile.Write` and `Persist` and with a short life for other processes. The comment at `:506-516` says why "nothing staged" is not cached, and a fix has to respect it. +- [ ] Lexing is still once a patch, in a batch as well: each patch is applied to what the one before it left, and one scan for all of them would not give the outcomes of applying in turn. 500 patches to a 600 KB file are 0.8 s of patching around one write. (left by the fix) +- [ ] `CanAnchor` still reads and lexes the whole file for each call site a run has not seen before: 955 ms for 500 call sites in the 600 KB file. (left by the fix) +- [ ] A batch's one write that fails fails every patch from the first edit on, including one judged already applied or not found after it, and the file's mutex is held from the read to the write. (left by the fix) +- [ ] A `VerifyInline` directory another process creates can be found up to a second late by `InlineStaging.Clear`. (left by the fix) +- [ ] Two Windows-only tests assert that a send to a free port returns in under a second, where the refusal it avoids takes two. (left by the fix) ### Viewer, Windows head -- [ ] **Rows are clipped to the pane's width in pixels, counted as characters** (reported: measured) - - `src/DiffEngineViewer.Windows/ViewerCanvas.cs:917-933`: `RowText.Clip(..., bounds.Right - left)` keeps as many characters as the pane has pixels, and GDI+ lays out every one. 72 rows of 400 character lines cost 11.0 ms a paint against 2.2 ms clipped to the 54 that show, and at 1600 px a pane 48.2 ms against 8.7 ms. Every wheel notch and every frame of a selection drag is one such paint, so files with long lines scroll at 20 frames a second or worse. - - Segmenting runs over the whole line before anything is clipped: a 1 MB line holding one non-ASCII character costs 52 ms a row a paint. - - Fix: clip to `ceil((bounds.Right - left) / Advance) + 1` characters, and cut the flattened text at `CellGrid.Index(text, visibleCells)` before calling `Segments`. - -- [ ] **An enlarged picture below its own size is rescaled from full resolution on every paint** (reported: measured) - - `ViewerCanvas.cs:614-656`: a 4000x3000 pair costs 44.5 ms a paint at 150% and 30.5 ms at 200%, on every frame of a pan and every wheel notch over a document's text. `HighQualityBilinear` prefilters, so it costs by source pixels. - - Fix: when the placement is narrower than the picture, compose and cache it as the fitted one is. Cheaper: plain `Bilinear` when the reduction is under two times. +- [ ] Between half its own size and its own size an enlarged picture is still scaled on every paint: 17 ms for a 4000 by 3000 pair at 400%. A copy there would cost up to the decoded picture again, 96 MB for that pair. Decoding premultiplied (`Format32bppPArgb` in `ImageCache.Load`) measured 9 ms, and was left out because it moves translucent pixels by one level in five pixel scenes. (left by the fix) +- [ ] A picture drawn from its scaled copy sits on whole pixels, up to half a pixel from its exact placement, so two pictures of different sizes can be a pixel apart relative to each other while zoomed below half size. (left by the fix) +- [ ] `Uncomposable` is a picture's rather than a size's, so a scale that failed also stops the fitted copy being made again at a new size. (left by the fix) +- [ ] `RowText.Shown`'s tests are in `DiffEngineViewer.Windows.Tests`, beside its one caller. They belong beside `CellGridTests`. (left by the fix) +- [ ] One of the fixes changes what is drawn. A character of two UTF-16 units whose first column of pixels is its pane's last, an emoji at the very edge, used to be cut to nothing and is now drawn. (left by the fix) ### Viewer, Linux head -- [ ] **The checkerboard behind a picture is tessellated again as thousands of quads every frame** (reported: read; the cost is an estimate) - - `deview.cpp:1334-1355`, drawn through `RenderTriangles` (`:817-851`): one dark quad per 128 square pixels, about 4,400 for two panes at the default window and about 53,000 maximised at 4K, sixty times a second, for opaque pictures too. - - Fix: one quad with a small two tone texture set to repeat, skipped when the decoded image has no alpha. - -- [ ] **Everything is rebuilt, marshalled and redrawn at 60 Hz when nothing changed** (reported: read; the managed part measured) - - `deview.cpp:2114` (`SetTargetFPS(60)`), `:2146-2191`, with `ViewerProgram.cs:464-470` and `ScreenPayload.cs:171-237`. Under llvmpipe or a remote session each swap is a full window software raster. - - `ScreenPayload.AddSegments` recounts the bytes before each segment with `Encoding.UTF8.GetByteCount(text.AsSpan(0, segment.Start))`, which is quadratic in a row's segments: rows of CJK cost 6.5 ms a frame at 4K, 2 ms of it that scan. This one is shared with the macOS head. - - Fix: skip `ScreenBuilder.Build` and `payload.Build` when the state is the one last presented, which the first item under Viewer model does. In `deview_present`, skip the frame when its bytes match the last, no input arrived and nothing is pending. Carry a running byte offset in `AddSegments`. +- [ ] An idle window still turns sixty times a second. Each turn compares the screen's bytes with the last one's, asks after the files behind the pictures on it and waits out its sixtieth: 3 to 11 ms of processor a second, where it was half a second to seven and a half. Waiting on the window system instead would take the managed loop, which also asks after its owner and its files each turn, being told when to wake. (left by the fix) +- [ ] What is not built rests on the list of what a frame is built from being whole: the screen, the pointer, the keys, the window, the decoder, the font finder, a tooltip's delay and the files behind the pictures. Anything `BuildFrame` comes to read that is none of those has to be asked in `deview_present` before a window is left alone, or the window shows the frame before until something else arrives. A frame that is built and comes out the same is not drawn whatever it read, so that half needs no such care. (left by the fix) +- [ ] Nothing in `DiffEngineViewer.Tests` fails if the window goes back to drawing every frame. `NativeIdleBenchmarks` shows it, in its Drawn column, and is run by hand in the container. (left by the fix) +- [ ] A hidden window is still built and drawn when its screen changes, which an arrival in the queue does. (left by the fix) +- [ ] Run only under Xvfb with Mesa's software rasteriser, with no window manager and under openbox. Not on a GPU, under a compositor, on Wayland or over forwarded X, where what the window system keeps of a window that is not being drawn may differ, and where leaving one alone matters most. (left by the fix) +- [ ] `deview_capture` makes its ImGui context without `ImGuiBackendFlags_RendererHasVtxOffset`, which the window's declares, so a capture whose draw list passes 65,535 vertices comes out scrambled. The old checkerboard took a 4K capture of two large pictures past it, which is how it was found. Nothing captures at that size, and the checkerboard no longer takes a capture there, but dense text could. (left by the fix: ran, with the flag added to the shim from before the fix) ### Viewer, macOS head -- [ ] **A spinner tick runs the whole draw again, and text outside Latin costs one CTLine per character** (reported: read; the cost is an estimate) - - `Runtime.swift:227-237`, `ViewerView.swift:54-65`, `Renderer.swift:443-455`, `:914-931`, `:952-963`: only the spinner's rectangle is repainted, but `renderer.draw` still builds about 150 attributed strings and lines roughly twenty times a second while a page is being drawn. `CellGrid.Simple` leaves out box drawing, arrows, typographic punctuation and CJK, so each such character is its own segment and its own line. - - Fix: skip work outside the context's clip, cache the lines of single clusters, and widen `Simple` to ranges the embedded font draws one cell wide. - -- [ ] **An enlarged picture below its own size is resampled at `.high` on every pan frame** (reported: plausible) - - `Renderer.swift:598-605`: `context.draw(picture, in: all)` with no cached copy. A 2880 wide screenshot at 150% is resampled for both panes on each frame of a drag. - - What would settle it: Instruments on a Mac. - - Fix: below its own size, build a scaled copy on the work queue as the fitted one is, or draw at `.low` while dragging. +- [ ] Neither macOS change has been compiled by a person or run at all. CI's `macos-14` job compiles them, and its captures draw text from the kept lines. Nothing there runs the clip test or the scaled copy. What would confirm each on a Mac: + - The premise: break in `Renderer.draw` while a spinner turns and print `context.boundingBoxOfClipPath`. The spinner's 44 pt square, or the whole view. + - A turn: Time Profiler on a pair with a long PDF. `CTLineCreateWithAttributedString` under `Renderer.draw` for each turn: about 150 before, none after, whichever clip AppKit hands over. + - Text outside Latin: `--diff` two files of Chinese and hold Down. The same symbol for each frame: every character before, the new row alone after. + - An enlarged picture: `--diff` two 2880 by 1800 screenshots, `+` once, and drag. Time under `Renderer.enlarged` for each frame: a `.high` resample of both panes before, a blit after, and one 1560 by 975 bitmap a pane about a tenth of a second after the step. +- [ ] Since macOS 11 a view with an automatic backing store is handed its whole bounds whatever was invalidated, clip included, so the clip test is safe and probably leaves nothing out on any supported macOS. What makes a spinner's turn cheap there is the kept lines. Two routes would make the clip test pay: `layer.contentsFormat = .RGBA8Uint` in `viewWillDraw`, which changes how the whole window is stored, or a view of the spinner's own. (left by the fix: read, in Apple's developer forums) +- [ ] A byte-equal pair of documents names one page's png in both panes. With one scaled copy a picture and panes a point apart in width, `fitted` looks to make the copy again for each pane in turn without end. The enlarged path stays out of it by drawing such a pair from the picture. (left by the fix: read, not run) ## Smaller @@ -190,18 +164,17 @@ Nothing that was found as a bug is open. What follows is what the fixes left. ### Viewer, Linux head -- [ ] Input is sampled as state once a frame, so a press and release that arrive together are never seen and several wheel events collapse into one: `deview.cpp:909-923`, `:2217-2220`. A touchpad two finger tap would never open a context menu. What would settle it: raylib 6.0's callbacks, and a tap on a real touchpad. Fix: chain GLFW's mouse button and scroll callbacks and feed ImGui from them. (reported: plausible) +- [ ] Input is sampled as state once a frame, so a press and release that arrive together are not seen and several wheel events collapse into one: `deview.cpp:909-923`, `:2217-2220`. Sent together by xdotool under Xvfb, none of ten clicks was seen and three of ten key presses were. A touchpad two finger tap would not open a context menu, which a tap on a real touchpad would confirm. Fix: chain GLFW's mouse button and scroll callbacks and feed ImGui from them. (reported: plausible, and since run in the container) - [ ] Ctrl+A and Ctrl+C are still by US key position, arrows and paging do not repeat when held, and no letter shortcut matches on a non-Latin layout: `deview.cpp:929-944`, `:976-985`. Fix: `IsKeyPressedRepeat` for navigation, and resolve the chords through `GetKeyName`. (reported: read) - [ ] No display scale handling: no `FLAG_WINDOW_HIGHDPI` and no `GetWindowScaleDPI()`, so on a HiDPI X11 display everything is about half size (`deview.cpp:2075-2091`, `:2137`). What would settle it: a display with `Xft.dpi` 192. (reported: plausible) - [ ] A queue row's context menu is not kept inside the window: the clamp at `deview.cpp:1929-1944` is inside `if (paneMenu)`, so the last row's menu is cut off at the default size. (reported: read) - [ ] Hover never ends when the pointer leaves the window: `io.AddMousePosEvent(mouse.x, mouse.y)` is unconditional (`deview.cpp:915-916`), so a row stays highlighted and its tooltip appears with the pointer elsewhere. (reported: plausible) - [ ] A picture larger than `GL_MAX_TEXTURE_SIZE` draws as a black box rather than as nothing (`deview.cpp:613-621`, `:706-712`), and pictures shrunk more than two times are sampled bilinear with no mipmaps (`:464-469`, `:1457-1464`), so thin lines and small text drop out. (reported: plausible, and read) - [ ] Labels containing `##` are cut short, since ImGui hides everything from there on: pane headers, queue rows, menu items and buttons (`deview.cpp:1687-1688`, `:1716`, `:1738`, `:1961`, `:2003`). (reported: read) -- [ ] `GetWindowPosition()` every frame is a synchronous X round trip (`deview.cpp:299-320`), one network round trip a frame over forwarded X. (reported: plausible) ### Viewer, macOS head -- [ ] A picture landing during a repaint of the spinner alone is drawn clipped to the spinner's rectangle and never completed: `Renderer.swift:245`, `Runtime.swift:223-239`. A few in a thousand large images. Fix: have `draw` report that something landed, and turn that into a full redraw. (reported: read) +- [ ] A picture landing during a repaint of the spinner alone is drawn clipped to the spinner's rectangle and never completed: `Renderer.swift:245`, `Runtime.swift:223-239`. A few in a thousand large images. The scaled copy of an enlarged picture lands the same way, and one that lands then leaves the picture drawn at `.low`. Fix: have `draw` report that something landed, and turn that into a full redraw. (reported: read) - [ ] `[` and `]` never match on layouts where they need Option, since `charactersIgnoringModifiers` yields the digit (`ViewerView.swift:412-433`): German, French, Nordic, Spanish and Italian layouts cannot turn pages by key. Fix: match symbols on `event.characters` first. (reported: read) - [ ] A pan drag in a pane that cannot move on an axis resets that axis for the other pane: the report is clamped with the dragged pane's own extents (`Renderer.swift:164-174`, `ViewerView.swift:180-187`, and `deview.cpp:1587-1591` on Linux). Fix: report the frame's own centre unchanged on an axis the pane cannot move on. (reported: read) - [ ] `picturesChanged` never settles when a picture has no room, so a window shorter than about 176 pt redraws at sixty frames a second (`Renderer.swift:485-489`, `:846-848`). Fix: a `contentMinSize`, or record the stamp when nothing is drawn. (reported: read) From fdde121c53b82a8d025568ec51d67136d731796e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 3 Oct 2026 21:15:01 +1000 Subject: [PATCH 72/73] Quote the numbers of a quiet pass where todo.md and claude.md give one The figures in the performance commits were taken while other builds were running. Every benchmark was run again, before and after, one project at a time on a machine doing nothing else, and the Linux head's two in the container against the branch as merged. Nothing changed by more than the noise it was taken in, but six figures that are quoted as what is left, or as what a paint used to cost, are now the quiet ones: building a screen of 2,000 entries 0.55 ms and 1.1 MB, not 1.1 and 3.2, which was the build before the fix a changed 4K frame of CJK rows 3.6 ms, not 4.6 anchoring 500 call sites 0.7 s, not 955 ms a 4000 by 3000 pair at 400% 15 ms, not 17 an idle second of the Linux head 3 to 9 ms where it was half a second to ten, since the merged branch also skips the managed half of a turn a paint of long rows, and of a 15 and 24 ms, not 18 and 28 megabyte line, before --- claude.md | 2 +- todo.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/claude.md b/claude.md index f90c5118d..63c361e8c 100644 --- a/claude.md +++ b/claude.md @@ -192,7 +192,7 @@ the comment there about not caching "nothing staged" asks for. still projected from the same `Screen.Menu` the other heads draw. A row is handed to GDI+ cut to the cells its pane has, and one more (`RowText.Shown`, read from the front of the row and cut before it is segmented): GDI+ lays out every character it is given before it clips any, so 72 - rows of 2,000 character lines were 18 ms a paint, and a megabyte line 28. A picture zoomed to + rows of 2,000 character lines were 15 ms a paint, and a megabyte line 24. A picture zoomed to half its own size or less is copied out of one scaled copy, made on the pool and kept in `ImageCache`'s composite slot with pan out of the key, where it was scaled from full resolution on every paint, 50 ms for a 4000 by 3000 pair. Between half and full size nothing is kept, since diff --git a/todo.md b/todo.md index f102b7b9a..5b96d1d1e 100644 --- a/todo.md +++ b/todo.md @@ -70,8 +70,8 @@ Nothing that was found as a performance item is open. Each was measured before a - [ ] Past its budget a diff is correct and may not be the smallest: two texts of more than 10,000 lines between them with 8,000 or more of the lines they share out of place. A block moved whole is found whatever its size. The same lines shuffled come out as nearly everything changed, where the longest run still in order could be kept: anchoring on the lines that occur once on each side, by the longest increasing run of them, would find it in the time of a sort. (left by the fix) - [ ] A pair is still read and diffed before the viewer answers the test process that sent it (`MessageHandler.TrackMove`). The diff is bounded now, so what is left is two reads: a million lines a side, shuffled, is about two of the sender's three seconds. Answering first and filling the entry in afterwards, as a document arrives `Reading`, was not done. (left by the fix) -- [ ] A screen is built when the state changes, which a scroll or a drag does every frame, and `QueueProjection.Rows` describes every row of the queue to draw the forty that fit: 1.1 ms and 3.2 MB at 2,000 entries, for each such frame. Slicing before describing would make it the visible rows'. (left by the fix) -- [ ] `ScreenPayload` clips a row to the window's width in cells rather than the pane's, so about twice what a pane can show is encoded for the macOS and Linux heads: 4.6 ms a changed frame for a 4K window of 300 character CJK lines. `RowText.Shown`, which the WinForms head now cuts with, would serve, once the model knows how many cells a pane has. (left by the fix) +- [ ] A screen is built when the state changes, which a scroll or a drag does every frame, and `QueueProjection.Rows` describes every row of the queue to draw the forty that fit: 0.55 ms and 1.1 MB at 2,000 entries, for each such frame. Slicing before describing would make it the visible rows'. (left by the fix) +- [ ] `ScreenPayload` clips a row to the window's width in cells rather than the pane's, so about twice what a pane can show is encoded for the macOS and Linux heads: 3.6 ms a changed frame for a 4K window of 300 character CJK lines. `RowText.Shown`, which the WinForms head now cuts with, would serve, once the model knows how many cells a pane has. (left by the fix) - [ ] A queue of more than a hundred pending files is looked at a hundred a pass, so a row that is not on screen follows its file within `count / 100` passes: two seconds for a thousand, and five times that while the window is hidden. The entry on screen is still looked at every pass. (left by the fix) - [ ] Only a batch's record step stopped rebuilding the whole list from the whole queue. Every arrival (`EnqueueInline`), settle and single accept still does, under the lock: a dictionary of the queue, two orderings and a key an entry. The two `Smaller` items on `QueueProjection.Order` and `PendingInline.Key` are parts of it. (left by the fix) - [ ] The bulk discards are still one transition on the render thread: `DiscardGroup` and `DiscardAll` delete each received file under the lock. A discard waits on nothing, so they were left. (left by the fix) @@ -89,14 +89,14 @@ Nothing that was found as a performance item is open. Each was measured before a ### Inline snapshots - [ ] Lexing is still once a patch, in a batch as well: each patch is applied to what the one before it left, and one scan for all of them would not give the outcomes of applying in turn. 500 patches to a 600 KB file are 0.8 s of patching around one write. (left by the fix) -- [ ] `CanAnchor` still reads and lexes the whole file for each call site a run has not seen before: 955 ms for 500 call sites in the 600 KB file. (left by the fix) +- [ ] `CanAnchor` still reads and lexes the whole file for each call site a run has not seen before: 0.7 s for 500 call sites in the 600 KB file. (left by the fix) - [ ] A batch's one write that fails fails every patch from the first edit on, including one judged already applied or not found after it, and the file's mutex is held from the read to the write. (left by the fix) - [ ] A `VerifyInline` directory another process creates can be found up to a second late by `InlineStaging.Clear`. (left by the fix) - [ ] Two Windows-only tests assert that a send to a free port returns in under a second, where the refusal it avoids takes two. (left by the fix) ### Viewer, Windows head -- [ ] Between half its own size and its own size an enlarged picture is still scaled on every paint: 17 ms for a 4000 by 3000 pair at 400%. A copy there would cost up to the decoded picture again, 96 MB for that pair. Decoding premultiplied (`Format32bppPArgb` in `ImageCache.Load`) measured 9 ms, and was left out because it moves translucent pixels by one level in five pixel scenes. (left by the fix) +- [ ] Between half its own size and its own size an enlarged picture is still scaled on every paint: 15 ms for a 4000 by 3000 pair at 400%. A copy there would cost up to the decoded picture again, 96 MB for that pair. Decoding premultiplied (`Format32bppPArgb` in `ImageCache.Load`) measured 9 ms, and was left out because it moves translucent pixels by one level in five pixel scenes. (left by the fix) - [ ] A picture drawn from its scaled copy sits on whole pixels, up to half a pixel from its exact placement, so two pictures of different sizes can be a pixel apart relative to each other while zoomed below half size. (left by the fix) - [ ] `Uncomposable` is a picture's rather than a size's, so a scale that failed also stops the fitted copy being made again at a new size. (left by the fix) - [ ] `RowText.Shown`'s tests are in `DiffEngineViewer.Windows.Tests`, beside its one caller. They belong beside `CellGridTests`. (left by the fix) @@ -104,7 +104,7 @@ Nothing that was found as a performance item is open. Each was measured before a ### Viewer, Linux head -- [ ] An idle window still turns sixty times a second. Each turn compares the screen's bytes with the last one's, asks after the files behind the pictures on it and waits out its sixtieth: 3 to 11 ms of processor a second, where it was half a second to seven and a half. Waiting on the window system instead would take the managed loop, which also asks after its owner and its files each turn, being told when to wake. (left by the fix) +- [ ] An idle window still turns sixty times a second. Each turn compares the screen's bytes with the last one's, asks after the files behind the pictures on it and waits out its sixtieth: 3 to 9 ms of processor a second, where it was half a second to ten. Waiting on the window system instead would take the managed loop, which also asks after its owner and its files each turn, being told when to wake. (left by the fix) - [ ] What is not built rests on the list of what a frame is built from being whole: the screen, the pointer, the keys, the window, the decoder, the font finder, a tooltip's delay and the files behind the pictures. Anything `BuildFrame` comes to read that is none of those has to be asked in `deview_present` before a window is left alone, or the window shows the frame before until something else arrives. A frame that is built and comes out the same is not drawn whatever it read, so that half needs no such care. (left by the fix) - [ ] Nothing in `DiffEngineViewer.Tests` fails if the window goes back to drawing every frame. `NativeIdleBenchmarks` shows it, in its Drawn column, and is run by hand in the container. (left by the fix) - [ ] A hidden window is still built and drawn when its screen changes, which an arrival in the queue does. (left by the fix) From 1cda517644f246fb13654527a9578e6b36a43b34 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:38:38 +1000 Subject: [PATCH 73/73] Rebuild native renderer binaries (#924) Co-authored-by: SimonCropp <122666+SimonCropp@users.noreply.github.com> --- .../native/libdiffengine_viewer.so | Bin 2243384 -> 2243384 bytes .../linux-x64/native/libdiffengine_viewer.so | Bin 2459976 -> 2464072 bytes .../native/libdiffengine_viewer.dylib | Bin 426440 -> 443928 bytes .../osx-x64/native/libdiffengine_viewer.dylib | Bin 426440 -> 443928 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so b/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so index f53aba4943519d6b92b537225be468bb523b1e6d..ba559ab2157b34581d57ce10af1d5f73047c35b3 100644 GIT binary patch delta 359613 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νroq&mtp^X}Pi&l(pr^r8>#T;fpkofIc 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�-`@jPD!3-<|!OVs_tV76!;3tOA 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 z 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

&9{t z>{YcFekT^Qig!pm`OjkPA&Jq!wqiDQJDDcWZOMMzjv>(IVl3Dq|1h7tG(dz&%?oG3Fd}b zQt&+g5br@j@sDvYD!Lo~^SSA2gR%c(I23 zatldksNvD`lC}aYC`sL|50V{wm-P1AB&l4+pF5bO6_#V$VcbiBByIdcX_J>o`Vr)x zr_3XG84ge^ zrNRwJuEY9EaK@_05Og%rD$@C`a@!PQtZm_sW}7A4dxiV4!u{jI{S5P-4>cO-*|n$$m=OQxN+nWUuoB@NrD!|)T0z^iM46Tn|K8LeDj*tDVqv$Ux?i_ zhv0e({;(cM`_W5{gG^WA_eEGGeCf;4PPTAt8jRlJCj1=;Qf(e~%{zXhvT5?l1Z`ka zFVxT|)uPSRP59g+H}h`A<?k?9Fq%|nuog!z#ur*@I- zA|xC+HCNIn9Z1lAS|I5^MiDu*CJ)YsMcOh+=LtujmGlFyRP8*&dNzE7KitxI6Hn(= zZ>n~3P?JqOWAg&6csI#TH`7biYPL3{GkZ75kYB%@t=vt<$=NWr0cm z?DeADbn*ZAI=M7d{S!8$5y(W%V>j&~_qp-(d@hoI`K7nlve5|=_K)V{k*tcV2qYJ? zgL_DyqW9tEx?0~I8fqNLEotwKmVWm-q~V?fkDfBr9Lrop^>&qV)z5$lD@X|`6vT^Hj@nN zIegt(+t0Eki4BbeCJ^UYt7l{5pWM=|iGn;gfv_1 z0Oa>K@`i>FRL)$%$~I_q`RIo$Yw=~7?ordd2JZaxmiVAC_fvu?Yc}Ik;?Jx!hB;WI zz7dKvKJMVdU>o<9c8H9*=8QHneG$Cyc2eff^A3@Fkr`B|L&S~PQa&SNFqtc*v->|I zT>zf{jKH#v{rMSLn{1}yW$Pk@FR%J8LN4GE`J61Hrc*RsTM8W;^Hh^2EKp6j$@#n0 zPMVk8FHN^E z$sO!}QQ}~`z9dia%r;>+9w9d&lE4wNHHialG#mIeY0QRxWhV6%`Ox$@;A`k7koMOk zWP;A$knTLTV)phoq|juSzaf21Hs@%JeR!1QBH%AaQ8}Op{T5XLRs-J>|MivcY`8_| zqxtAffk9koJ6= zh+lq0fkPp2n%suVl+(nI%em9!I;b={vaFxT-R^R?w~2P}cXN#-`ub{K`=WEDZXbZ5 zR+Y0AKam>{?4zGZRK8TmD$bxkzHs*VX#}`1S36 zq2y(_7fyR^sv8qUMmU}gAwDC1m)ppJaUX4qdp|bx;2u4VuQ>$GEiudtWnSaa7T4}Q z!aWXR;?Hiz)8yK{O9<<2evQMJqQU>Y-i&KM!a_trbK?&q(x4Ejx0T?(&9!?Ef0}!b z)IL>Z%)IjN`XYbn!~P`KCF6ZySuF&=KglyUR9-;yf28Jm?VWMK7x`A`e3o_x#tScC z&^EeFN8{Ydo%p>Ae^1TrsI5N1`q!eH{pSGmc=h$&`DqG#{QKAdHo2C}^p}7`-s#cn zgi^)TIOe9IjVp$7|B$_~frrKif3}lK)u(XBGhwEsotBo2f#JABJ(?nI!`p)?&UKoT zvq_1typ<|~zt_JLMmX+fROaAy+Oxl4o?zU~diZMnHW_}usIO0L#yuDVa!)6%^8hxz zj`<2_D_W6hn@ZmnV!dQq=~~Fcp5zZN8rvkJ1xbPpXk{TZLpK3 z;8{EvDK{`IW=kBvvg=8Yre*@+cG{f?_#6V_gU9r1JsD!Z!0)!zlc!)`)`fOPe}ZS+ z+W)zU^l6ZD)bBO}d-Jt}KbzefUlq*f&iSAo-#1PLwb55ntcU2#Zj@=uh7N6yB9UfiH@*??YMo;2#E?C~o;m;v zsbRB|-V&=*`*ml_6Di-p_*^2r3rgcKnvx{ix0m&RU9^9nf$auYoTKF}!+pTeST@q6 zA--NdNW7kfuEm(zJ~9t{o~Kc0XA&L7O&Xdw=uL9bjcl}oW(^y3V{JnuAN^!%{dln& zuh`R7d!Mra!EiND-3xxbfhNX%58U(NLCgfg82a)8+V7x;k;wB3T_Vrz6>6u_uC`?K zV5ss@HjdC+(c^6-lxyYB5!wcqCX^1sWfY~nH{4I@9Vz8T^3n~gg_GvG&0pSb+RD?= zsz84+K*FJ1xZaB^-^B;#)>1wgSm>m;;qrx(@-cxum0piamsGl}1G=p4T2BNIpn9Fa z6c|r{Yd7(%0}1R;qkM?+XPS|R z+(wj-L?$$%w`4*>>!I!X@!D&u!aaI1glS}W{>8ea(@fSWowh^3;py~I9%;JiA>D{O zx3TeSXk&V#y|T2j5nJ4tj7=o0VPR!`;NZbFe#-^k#W{Pqw)Q%}@^a zsBI?MJyp*YutP0qmb{~f;hUP(6Pr}!{D4tw6I;@p zz7^dOgGTn`x`C|%ffX$~)ryXmFZN)C z*|b1D)gv@BoBkU^!6J7$OK?%Iy*%aZ#_WCD(sRWFR?V6JIu;faZcbV?cDZGws*t96!U#XlhhRH_{r?g?2Yn4RoQs z?E87FySmU@AS7WB)s^NM35B|MrCn_DSDo3!ZggPNh&$K|b}RCx+PU1oJYkcOnO)uJ zb$$$>dTG9KM32H2f%iw=5kt)dSgzih&qws5@!ShOk?3E<^C0*nq92Oq&;t7=6aAxj zj-AMSQ~gBW7w-^+!*rtWisw=AnMB_n&s{fazS%^tjOWm8`^t!35zn!ym~TGO*K_Xw z%M87eA|gWHlBOH zcMyF=%mFSmDhie>b5`A?&x7C!)xZA>_d_;{!of-Pum9ozjs{s6I8Ghrvfs{o!~nDVlFI)hEVtFZejBd*gY~ z4+kIBN5?xv!6#CEcszHhX#1&N9M7Sm_D!bxka!*jpGx(@cV;;PU3k0d==G`;&~W+4b`Q;azAQmD%yUkUxh~SFO>+IXWs^@UySEL@O-C!Hl9bp zyE*mK@!XY$+V0eA;<*>RkKd_(7w-^+Lw~1!B%Vu+P}`k)B%XW02RrqH@f>ZsSE%6*$6yF}IzY))&MD^{X`i6M!YJy&q z>Op}g8J}N()!j(T_^Nhu4SBQ)Gzd-Evc5Dk$LOD zE}Ry0VF&xtyonEWtYw!Iq&zR&xLC}Wri{nmoG!-nZeEPJ!DfM7g5UR&q^|4arrqq# z2lkl*9$hXC=l&jt`#xFfHV_Q^=XG^id~z2yx*yHCH^6mBSe4QfPvWg`>XKdBX5ycLAK!y~U|_j^|PE?M}TzJohwb-}a+DI-7|!*V1_+2arf&ERjqtEf(m2 zm53*k4d_qX7VuomgZ)P7umY{ngY9twnOYFj5iT6l>xP10?tG8toqscSjqRmPI8v

})4U=x!A$K3oSW!9NcDg-mSC240*o(n@E*Kfe-3H9Q<$ZVKT09zHLds# zZpN1bH=`5+%sGIzGe=zEEcEkK|2W={s|C7ws(%pA1K?+<{$4x}gP)~(RXlgKL^n_M zt?}I3(vNTkw7gc0B>)nAL}u2$&gss3_24}!~1{l$2WH4wfer~X_#ht|`lIQ3G%Lq@N}m>H=bjI!f74~m8pci4eR=?^8omCr~Z$49tNN3)bB9(1ibWE0c!^=$7--_oj2pmKQCX_?_nsgIw3t=(L@^7N8xTd~6yW=L> z5_g{V>`~moF~F9>5jR1$*}RFeLzedr>^IXpG@Ge68{WMv|7OEGR%+pfN1DeTg&U7F zk1aEO1=!}8uS1rv>)CIXuj^UrU@PhT!Lhh-!{h469)%l^3-)v|Uz=mT4q3iBvENKL zFLT~vWj-G_2DtgTtu^2ZV_$K;B9ab?PtXRMd0Eh+PA^!5S(H$bT?!8+Ki$5Z4EJa z*@)X{KPya>t-_C3hI+7Lx6!^<41peI45!T)ZW`JULzGP%ia?ddQ+NtOuMdST^ZKss z&7LeeqrUsWJS;wxJXOOxm{Z9Trd-j+RvPL{SJO~(G0n9#ujD&%xX{c8(6pb#UUKsb zZ`bEZ3WKJkDI0YMz3zrez78OC-uk9iJN5VftZ#O&75h&}k$*pbi5z;ZkEH*RBb+`sEt^?wewEeRsN$rJBt*CVx~G*`xS+X))DWfKubr#a|L!7iwcYa3iLE=H&Xcv zfuAdIGmbLGJd0v63}&##x)-~vg!XDvSqkkPH%OI-1giH!DOn0lo*Pyn6XqrA(}olM z<#udy3B~3%M$M3VvSxQtS4pJ=rPDol%lz$zQFqEhId@>M-M##Opvz4G+Z zhJy3GiMT%_#z1fF7O*eaoECC37QBnzYpYy2obt8IV~5kX_+GA$<7mtPOCL#R$`7_> zOGnawK<#;QB>fDRZKLQ;T&CPjo8hwXZmx+9Ro+dfag*fSvGgve@QrkWZ1z30A7+ks z-9srjn^E1 zt~MRXeJC1Ci{FPy3hZ}!A6O(j@9ZQSGVY0xyAx3m6<$rmFyBQv1OUB@GzGJ`&B zMjo9(vuru+e>3PO_ePGNkYIDvOZzt_LgwNxw*SVf5FJY)CdzXH)qF1wZi|3Z8P4(S zaoxHUxL%vTWuT#Bzc@Ex)5(OS3h%m`_2Yhtmwx#JOQG4to*gr3C$)US_e1rX_a&GI zvvD)&2>Uxc!|%?d*k8wZ+$&Gfq4Ikz+2C0;U*6i1O`k<)b5D`bm01)!N$qMCDw_?x zb&eP604b2BUCxGf86S%cmJx2u1WE~#KAx)zV0;~*S=q+D0_$sl#@Ip*dVS9sx^hH}_`_pub&DMr( zT|^%dGnBWOy4j<5)28+ypH!Q$nBKrr%VFxUaWQRw&0~NaU5qa%vT_LxavCw7C%`I} z&`tPqhd)E_;441YFEggr(#k2{pysA>`Z^rXl~X@oIxuB9>T+f1%5pl0f9-vrqtiI9 zTxrb8U0i9*aoxm>S*dM|J`1-Y&l~e>E1svnA;i2FFx>{aZIv+%bZ(U~ozvw--UhMq z7mYOczewN0ug6y#AH?G?AyUj}yhJBBk0aMLrBMCfAU%mg^$OO|PH>vA264iUWDRvW z8#k@xd)vP~zP^6=iVU`I4IOAN?>)D7D0wa2rlger4;I9u=k^J`zlpw)kXm^Xqtg0m zwkNqEYHLqu_M3QJ$>nCjgbut#C)o;~wdydRAL4T?e4c_^faO47t$$DI{d~HS;_p#O z8qQP33i;tbH)0dtrrGwn{99W1HeGM$v9K;%=mg^~^!yh38jfYEKP){NM2CABi*xSv zu;OiWsp&Jijegb?b8C&YoqKRTsWm}2hexvi9r}QMr4ikB`V>y7l@lI9P2RGd-W~ho zGg#vgeb{=AD4QRmZPUuRKM8gUc=P3MPgAxtM2DtYw24Wv#rM0k_w5G6mLO;h*RJ9{ z2M^*3G}XARsB!OUq8*OiW7aJayN5jmHxsbI%-4nwu8ik$^}BR9+jWSh;P7)aFGfL( zt)ivu(J)O?AyIGNjoCx)Gg3vH*o|jAT}8ihaTc5Ck}&WKCzw_${3RH^PVS&C(|^iN zdi{fu!szw*h9y1cm!hf~eCO`f#rn(0#z52>H!J~ccFBmO5L~XS-{wZYTL?EXoDcS$ zhJP3&#QewR^|_VR^Ts3Xq$430U>lE}^mg1}_2w?xUqLvtjesbyi{|ud_>GMl^j+p_ z45NLx#xu1G;IS3e+yZ1C|AJ5NqQjH8FSLn;yXlCWh7i$~+It9*i4_@erC#25<0quDELmrd#GE;U8Z&z6M=IOFW(sPFP@Qe?lu!{ zu-D+PDZ=*ep?$ACYnUnT(H!Ra0=u$$-lOfE4GE#Qylt1+Auf53=JGcWi;DN?LNV~* zFm2cTT99l_*=5e!8cEFy|23(DVftVS-<~M%)o34f<6b%z(gf~a+)LZrkh8r;6Z+>~ z%rr-sYad1?IN^C8+A}1)k9IKVOFh@JVU@>YkJcq59Z+@EIJ)V2ovA6z1|CMDH3(Sw=Jw(~y zgLHnHQPfzeHg`L=v1u;#V3h}H%Orzh9mPS~&SBhRfbs~leN0=h%8zMEvcVuakNlW+ zGCgBEtdD8F>EP;W_NvJ#uJf(Y`*0H)3q*a zXM;nSo&AJn-HYcjJLWL9(|^|-SVXW$-fB2Zx2RkD&T{)tyc-Uz`qFaS2eeSWuL^Exl9S+O^bkCp=!QfeJw%)K^hMav^-d^KFR4LGuB}X86V_jr~-qFY`;9z$x8L4KVwPtA%+C0@| zHle1gr)y|ygif)gm_Ma%?D}dt#j?Z&&e@C4d%#Ve zS`1@qOQq~?_wh~ve~;qf4Ywg|>S4+ap5Hi3N5-P+%G58YE5k~&r?K68R>S3av4clwaY11+ECW-o^o%}KSmj>7u$u3)iAB=q`+|F& zCciK!K^t$lHAdLV^F5MT@mDlM?wrgfenqFs>B;QqS6t(B=KY&{yFGo_bzfuHbt;KX z`kJoHv!|G9lBLK&Op$S|D)!Q%@4(g%sZUK|dEY<+n3%#we?z;;uO_jj-_Q|lu0u{T zf(uKIV+~+%AI#)W&aFOVuVp=9*~Tr)F0adH$w%oNY|P9S9i{)qPW3L>n}xHrqe!tU zUICB&LNaUjE$ywMV)oXe_ey#@Wba$U`e)&{w2NGw$aZ{7-6@g($w}JkK{v7!@Gak$ z#InD`lYW)N3cjNw{F{)Ms48_|(D>ig##W|s^5XSi0kHWQPg^W$@meq!*uOKMu~_2b zRbXKpyfd$*W-9pF&q*QqwEFOdB$0oCV|D`$d zpk#LHzw{e_`DM%8eKZ1Hz%bl9(~TvY(qo@u$c?H|S?0wNIXLrm+_m$i<<90@xnMd{b_ z)FhU79A;!6C$hoEkr5wi<8j(f9+kwF^J{Su+rh6lC9xWQ?UTfm8eF?1v2Of|+B=$G zTPCqGeoaqe75ti##H#tVE|Fd3*NcfP=LD{25?K+yMibdoem#=NR^eLm2_C{*n5~sm z)w5iDDqfT{H`?MQ&4)uXlDMU3s9_7K7obMzZCRmlr2sdL<-_PJSi8eF1I4Dt=_m0# zTN7BpNkhFe_9XSl#}n9^lXRl&Phd$uKnFE8k(K>GJ0(=2``q#aU8k(Y2Mr}$-kWwd z?iAXy7wl~FDVi;RibCbr4-(ngQ*@5Ml8?LitMr~9QiYvHx=-8JM&qllc)Mm+jlNn? z#+v6ONq;$!uT5@(lfedy1)V!%izp!1rA#fhge>Vu)i5$ zw!l0V%Mn<>V(kPLwpgCPBrDVT0`q$;*iC@3rz;Rx*z(uMU=j0)ae5~&nf?NES*%cC zUW*MDSkPpCZ;=3_md9d&xv(&oCsHC5KbE2!Y=pp|WHs1mA*|O5J5FFhi}?)ZH=hLd zMn>R?qDPBO5*X}>41bda22&z~O%+(cV$%f{w%AO8Nq)N-c(wpN7Aq52z+&?S7Pi~WI)Mc&wn1QFi&Y3rN;c!$Y_btX zMeB! z7RwPB%x{da*q?%VXEbZVg1^#K;lWD&KMw{Sun{g_h%0QdZUTc3k8n>iwzbSEO3m#MFNBMjlqg-Z0#>lYVmi))}Ey;{gv*Z(q^ z*kWsJI$sjY$2Dx@FSMCZ!wLsg1^fKXrz2&WNo)|J^H{7xU_py*7MPS}hTS4CkHxlg zW{e_G1_2B15Ilx0wnt!63p2uf0`pkxfWTm%W0cE5fk`b*c1U1;j|Hm*2-_PY@DYK* z?#5t81s1T__X3MrtVUq4wK2k;5?Ih=e(xCp!p6q%cvfJZ)+ReIFsS(qf0qOnwb)gG zd0eKyI)Mc&Cd<4f^jj^L1(OVDGLPE~tOyKxJtJYKz@!|Lr3=h!u?&F)EtVy)sNaG( z>fIbY@^-n68DWmVycTOGu&~AQ1m?;$!{!SNdORc3-2?_5p27SD0+iaCu#do?)H6Kx z7g)ezg#rs(Y_Pzjc4pWjfq5)eY%;&u&swlV@CY55k?;tC!JNlnqXmYgdj=aPuz$`u$IzbTLc!)*Zcs3%2)`Ft)M7OP!;X-Kzf&>h$M+tz z;F%Z%le(K8&k77SGe+R^0t;L0lE7d#WB9u&Fqq32tWIDslL zENC%BU{X)hpHpC7i=_)JY_W`lzaQ6i8(ihV%GkK^eI?d{nek@}aRn@vBe1B&+6m0l z+YFm0Fs#Nho-3cTM%K6vOR)^tEx{O@34?)2gR7(-f0He*6{3$2HP&GnvGf<1_ePTy z3JjVm!{1ENZdo28$SNJ=6?_znKCHn9T2;EkLLg43A|3 z^Vm!_Utj@?EfQGRVoL=EO@R^La)AXbw$fl+rNFXx(WAxI2rO!`bpnG1z({0+ zz=9U55SS~`^tV}H0lx*e2rz1~?E-@oZzQrqU_p!R5m?k>`veAo-3WU?U=Yp?=07Mv zNaqGTl)#l|X34}VT(#gYX!$!Lu$UlzRA4bd{Cj~#EkV4-WaeNXCW)UCJjMj^GXjeV z;%5aG6U5I8EGCFw5?I(0x~~dMB7XCU>kMcP0%JnAY`@k-hGVj{z`T}>tOzV@F{i*> zmWZ4#u%N{<`~r+xFiT)AOK#2LA>OlTe_ zu(0LNXBP$ohJ=i+aiZWcU(wb*%q z#iZR!0t;9|>{Wq9EmkM6m|!a>UV8xn2(gX$AT&vUQPy8}=KuAzWEEB6V1U1QEtVvk zE`$$SEJI*Xi)9HcCfsHVEGFFMBnr(zw5|DC+6f+Gl5C#9f|k&lFEE!Scy<$5&|(Dw zlPr0%PmJ-`;}}w=_V>5;CU>9=#TuF0io0 zW(o|8UEZ=g+a_BLCHvOy01m>|s$^!xmTI`^}BujccbdCAlUJF)VgYKxsjtDF!QXUmp&=M)X7no#;fi(j2 zTI`g-!Uppn@tzT&%aRSx3M?iso)?(Q67((!EG7_M6R+ zacIe;vA$XnSkUt46j;<^=>m&MlNkaFSb}4g!2B_3GFyPL!F`UvV$x(gfyJcBJb`&F z!7*Q8F=4Wsz+9$4==2r{5Idly#JBb{hgJo8{!MEilPC*~@Rn3!35tUS7PMHAz+wVr zvA|*iWl56J+M5x^q{k70$C&guT3|8hah$-ymPF|jn9C9rCko7Ku}LvzXo4&_IR??% zOP2IFRbT;&O&3_yVlxHiwS>pn0>f0X(dd>5%mqQwXzk|<&}&JLiv$+7*iwPHEa`E% zzycOqDX`dhZk511mhiYHN%!LmFpEDXQLYm_#w5xO0*gtM6#@%e66I!r#RSSN0*eWh z+Z&i42VE;>(d=k|6>g6uDee(i&|>=pCRsw^0fEJY$Abck36F;a=Hh}P?-Qy87~l}> zh`^#2J1Q`bB`AI`u$V+yBQVJl08a@lCOn=2L!V&Pe#_%o!DCEPJTI_-B@|u~Skz)y z1?FjFK1iLxDh=TyXfZjtq2cpmn^@Ch(lzMzT1*jG*kVqB#e~9ifrYJ^)C_@nEMYH8 zV5R_wJ|X-6(f01)QB`OA@SZ&(!GN=30wD&N>-+x5mAUWrtn=}C*4k@nq)p0RvBr7C_0Tw_?3HMomoGEYSL5tXk{h6LO0O&B zoSGAC(zk}|g2au|IHiM?Yn(@0kd+!|le#rtlVW!4~B^L?L(nzI5&CxieM9tMWHz)&~uW<(HPzy9p=~as~&Lg=R z!O>2jMGDh0O;9OTD>P0iRx35mCVgp@#<|3;(Kw|;t<|`&vyRD0upy<+mrqC-IE48P z+qg%%)h5lq(yeMW&Vz2nhmb8A7bZ1mtHxQR-E7O!R34AW?V4bi)SI0eXOJqhOXI@C z?a?@;^6b^PB+2blTpLVy)|Jj%Ie{xP8X9p>;_IA%h1ELLpfGac9Z-TewdWCcP~)s# zQtq(EMTtAAaY^EiYn)vo{hrV`mvb1Iz0Wn$=q&|LXcfS>Z@HndXAL4 zT$3ZNM&ptZC0Ljigz_T;)VL^dX6LkAQpsr?bRQXUm$aNmT#d%rL!?~9?5YV8S)*}K zeq?~bv>cQlnLv$$@+0Mn(sIy!q@2b@C6|Ofhd&A7tnLu#;QYY~ToyTVUBXbib-2X- z#fwkeV%g0@6U};jW^<}pW2G!&nX1+Rs81|d1-C%sFy9C+HQzuEbB5q%W;HuQI|jOt zCg0Qf9stIMBx!Hi+POHJG_ZiiDXlD5i7U}Kr9}1BxF{)612oQ%3RAdLNFP#*`)AHPLm;}7){Z*B*{(HIGgmHX&UDeH&f#*(rspGoYa9L zIK!rq1}QglH7-ire2p_mk6EB`O5a(eaY>S^(YP?_Hp@7tPKqk!W`!$QF$gx(FKeR*iE>?bxPq zmQ*_;;q4l!^p2exXOTLwOXH%%?a{a-aeFl`OzOlwjZ-Sde!5-O3rC1Np^<7s>2r;(fKXXF^V-orDOEa zIIFW9Xi79LN?c!!OAOH{szLX>^s`D2*c>BV4X=O2w$uIE&PY z@fxR8j4F*&Dn@lgBcr5GOxCz0aZ@zTCKY3<#<|2z(>RM%hnX6u)QMTdi7i{DPt4H- zqogCu6&zMj+>}K6zI82ixO9(amE$#T;X|{Mn;{pT>=C6-VGF) zp74L=7Y8-S2 zk(n(T2i-w%TQv^4gW$GloJBh$+Z89Qc|`71Bv)=|8)TQpxy0?!IE%JH_G+Bk8ri3D zPz^+4_G_FAE|=G7qefyIHQonv-gnI~XTZQe>D&oJ>h`?WJcEPqQf<4)@Ynfl#D%z5V9Kgr&Brzgcf5 zL)batIS@;6?4F2X=T{F{!({~6#7IRDCJvhzDGtkJQ3BY+kX(eX*@-kW(}Gw-3&Bi{ z3lo>EaV~KIjY|@jt8o@JtbC2*jgT9t-9n92EikBY*u)TtDb_e_VhFB>#;I0WqH$qr zseLuhBW^%ubGua0SficM#ex2j^Z>W3B4Kp;7E6uVWjw0&M77I!T;tR(;|Yy}q8&w+ z!=G!M!FLbAo#LFb7>0>Fs|hBFyP$Dl+EFz1GoZv}YMf0wirE_H5f{+7h}u%j)ku#H zv*v4@+EFajIG1)AgBoWImboj|IG4B{8fTOWxk$J~BcqZG_tiLqb_xe*T$H#{jY|?Y zT;pu9Q;1I_HO?ijTySJDG)Vuf)C9xCjn_DjxGIf9XB72Wt#MJ}CTkq}osgTNarRxL zs7}>LbTT10P2&twUT11tn7COQ=MgtY-pdv4Rf5Eng9+6peRhq;xx}s2xFm7wG*0Qg z8#T@)y?2wwS){twf=emfO2^%z2`U|TtH#-+&u-H=m$>a3XOND&Q{%$K?MiczkW1vA zG|6o#qFDE89HuqF?bEn0ar-sSC9YB9lEfX*I7{flk;d>rjZ{kWVU2T1X+ElPN#c%c zoJETC35`?A_2(MrlH4iIU951Q)dVr|iX30ixG-_1cG6QR;h7p|krJM*aY``{Xk2!Z z1arli@vht&B|66|SBlQ@e_qm3yCr45Pzzfr_(8$diT3^fYU#^6$3|_$|Nn03ONl1K zLb0A`;(CBfbqJ`xN?p2h^y2%WnLN2In_CoeWgkhRQ46D z*UQvauTA!q$r|SpH$~$NGNnw_IAwB~rg0IE1ZQfbMccKrG%iZq9F0p7H&^4-w(fk5 zbICTdK;y_Z)A|E~Fxh5mG(lyXStdBy#guJkg~ln{%u0<@wwYBLr?!9B2#!_+E*WRm zYJvvYVW733_+`Y(Ub9i-Jd)d_aTeKYYBerO+!l>XP9buuMyh?{Z5rp25of!`8DzuR zsc~WAcG1T>^u-4vIE=UD_}dgBwQOt8^-;Ivep;+-sm<=`Q|s~-HBV(LPk$<%i3XFj>=!e z#`aq52zCbV7#O%J((nggbpJeah%?^(o$@Ag1y?nU&Xv3~B?*9VrY+Ntg`gp&aVNCjMrZMR- zb~`>mYD2hw=FsPD6N_CZdr)Aa$rCdOd$*ttLBxZ&wcMA8z-tu0xyEg~mnI@@jr;Ee z<}#xVQ^=0K$xO6GayiH4S`fw^kR1*GT!y;~c^AKJe`0k1Oo{KwOpMOCBr*D-OC&DH zPWU0{u)%@+%Mch3hzD|rm#*uS4h}5j>3m^upmHRSAK~o49WQqv91%Xk68{n2OPn{_ zC2&(tbq4-$%T}j?>JjLZ1-Jas@_So=%eRo~{?w;bs?$dY#&l^4tX*LEI zfO8kwkNMEH_^nbMuW6fj?c;O&DT-R7a|W)^Hag^Y9@G5b=RbLe7m9(KfnJ8YH*4^j z!!3*V8*n?cVBVQ|c!S!w=fN{OPB<&C35?2r5Sit16d8H5$KfVXuW(HBeV^1Hz9z8U zG@t#*SvM*$%6$Bz`h%kaKj*i#-cuI1p4Bz^+r~d=6U{x$qPhO}oLyys>-a;xogG#l z7-o+8$QfTAD9nA~_&H}Hdds|x{Ql_5Cu*G?>7@$6%GgEO^s$^v%v7^Ig7>$k9JYK>7bc# zl%NZI*i5YCxYMOe+aOA4D@{ku#7~7tMr^5N;kx~Rg;+c*-gLrD%u}9WgKhfUOw3Z) z13qOY?o9bCcGh#BbxWfN^MaX}pd?{{Z8H6dN`+y3ZOZf~MhcAd;*o%BMS5{cqbcA| z^j3m)_jns-B#ISwyT_Yy{fWy3=83(+dF5J}*el{qh5kgAlC*lnn}Ytt1?TE&v;XbKXF7z02^1voBH|_2NZUJ2lx|j3(Vu{<-9*m#05)eo6i2k zD@xKRi8l@RC$=dZ1|H>4{8sridOJV7PWZ%f&iN6UdQ%HrKeK!Px(uX%V-n7=A*sb}nO5;uI{E6)v<$~JiPyAj` zSu(02&K)-fy2?;s|7fc9C)R6TaDJd^i$AeOqmrPu`V+sZlBjQba{fR1#f~}%ypFc5H z4`rmoCZs|^Z*24@25MfcQSqh&{zQpJxu6dE6Co`W*!I?^Lm7>6!k=K=y%606#)hWj z{zRt0sD3N}ZVH5W_4=HCH^~;{!vNt=eB@kqlkfuDLDN}(;;_Ol@CAS3e+7n5!|%Kz zeZnZvl$nuuT}fIQ@uuvI#7>2w_csMH5-%#BRvTx+%`(n5@uvKY#4}0~+Iv%BMq;hP zb|%J!j6_^uk?eyvizaAf#hZF$BqB;M3|x|tn6GdWxNk<{Uga_D%&C@bw{5(sG$Zjn zB^bU0qd`WZT45;3O`|dr*9nYV+SyJ^wHyty<4xrmi6KhTXot}uBhgo3*uBv3cDzIU|v+FgC86req|1%A@N9CrOV1^!ALzr%rs5s1ayU zO*1nRM+HUM9^vG$#JA3n|8KjeKJ)g# zR-b7$)o=fPV1wDG4(~h1XK$&9mm-+OP%OH5yGP9S6~w!GuZ<}3{xqV{+cRPig5z$^ z@^IkhJcP-?vRjKM3`Tsy;p1@NCzm1;4we>`R`tK9e*T?-EoQLd@Hyv$3jS6@$J&o? z#RCjx#v@<(yI?KdzIMdn`tlh8(`ObPsjs{%(8ugu*F1atZ`+&E>aVj#|1dedEb-N? zp$W$-Du&&G6d;p$ynOTz58Yjsxb-$?-Q9syAyiby(!>e~dWR!MLpJ4|a|8TGm%z?l;c2+d!GpT# zuTDLef1eDs_Z2@(bbP?sGCMHc_fUQA4+3jVbHn@2mN|jGW+GXCa8BT6f7{qGzdt_P zcTN3}xq*j#m&JbilgIbZ_6>^Pg*z@kL4b}oFOcsWRR8yRfnII8^*?yd;Y;bG{*01H zrg8skM%iUwyuQBh5H4R|Z*-hpY7DCH_T#{y46N+1H2vOB0$tj~u$-%N9{x$-a^DTk znx6!o^v8;Bat164jErEDuD4jV^0!Ld@-c}h_8u(6`YzU329)*H*mw=|?UGSuGx(Tc zXA8`q23uU{mmI83TqYV67`ItpCjFEPKUlRBu2f;j-KuDDLlSwrAOgkjMDjxNA6gt-Ymx{(N&D}=x%!Z1|`TuT^c3W2u}P7>Zq7}g2lzKt*}69R81 z46B5|I|;)g5qAE2F}~T2rA`-=R3@w`I)ZR7r0_J8 ztB}{stpZ!=Qw9RNgg4^ghZLZb1e*wB1uY_|Rqk|JU<+aGM1duGX4<4GusXZdgA#~N zCBiEqj7}wRq_1BlKr^Ar1d*w9yGl^nbSmA+Lb^-2r!A(^{VEy3Ugb`BA7MIi5DD*B z0(1nSQ3>>w0UV$rN4FO#9zZ!jw->mSFuJ|K!wI9?3p|Q2y1l?!uLp*ywUPwT?S;U2 z!szw_R}n_H7r2@*y1l@Y38UK!JcTg2y}(lmquUFt_4=sThnh(O==MTj7GZRIf#(oL zw-RhvE3XE-F-k2Cdr*fm)S-v~^MhfNn3`x2gn?0aEMs!d>h30&Cq~;9Y)k zbsw%Hc7FELKnH$LXm5GMX#SXlJ5bJohN_S8G?Rs?{HqANgsTaw`k72v)z1_qPZsB? zgjM}a!|h$j9;QyJpqa`8;aP-}gy#@e^)*-dr}~+%{1aZFAOB@MrBtlt~HxX9W=E8d7*;8ffNe^i@OC9ncqd^?oCd@ou!{&-kwgG{ln26lm4~jVgO z_-4}-eG1oS({aH}!b!r}ge^J|7$6)boJ-gvoKM)MlYw%oMEHb*# z@r2dnT}3!a?$v~Cn!Dx1fCvf8i2;xF5uQr&R)i+^X+)^WeI{WT$wUHX5r&aW;5mdn z!gC3$(}D8|M`>WJ#eZ=o85$7%OsL4A}&-ki!UU4v9IdrUZ{iA`AfoahFVJMFoUhjC>!_JyV1A}2R zfAi5mD3sxiybG=^ox253cQbapSG2S0^c}{Id~9*t34Z$+C-93vg)iz<{{q3hh}bsZ zl+H`P2=wpPa63GYwmY8Vf;@^*OLvXrzrX+Ru902rWg|wz^UA<<6CUQR3`}YlJN$(a z=WhUFS7raoK;KU9LYQCa{}pyd%zKvX=U4l$HU~MKei`U$KJ#9E=`RD>K6Aw1>&s(- znLhJyV|{HrFy1sLG}fPbEU+!Z4E@d7@fc}1hs_sPIavt6UJ=1J@#yoU&$3{;t~ zz3UXO#s9i@>*uZwRJJjvzT<3P4`Tc~_1SLVNi(A%1IqAo8v|3aJiH!(*SYH3J`?zX z&-`@1Gym6t@B15|5I6ohu(PNPxBKgdS}h#%;%VQ8{e^e=w%4S!HX!zU2 zr#7@WQQR$#>3dKz6R+gpOh}k(!}$C_VB->r_YsDLOSt2+11V1!UmOT*kv5I54Frx7 z#+L>HCnH4QGXv>?v}b%`ATS*UjpFkHfn9Pxp#mU`uL`7p(x&l6f%H!pUlU0Ggz+W8 zAJ8(Q5v-K3`;~~|iSfUoy}h`rU)9~`GiT$cMFxfRO8*C zawl9&*ph0z+ruXlhpWSpxQI+$lpOmi&x8jM#^RrshFeM)i+_QKD|y1B2xF}&+{+0^ z30D%v+ETcWhr%f81&d2TR8i_SB6a-b7TyS<2ne^y$}{09ge|G=yHg2c-6`a!5q1gB zRQ?Ii0*2iQk3>oR-<_iZAUszEKzP0ifbassWG`?RDS2rxaBB!-9V!yEj4;-r05EaBqQc(_Y$C|)N!nj{eV6up~YY3A?#KpC0!rhV<5f@jg3G5Qab!q|| zon?f$N=;zc@I?an<&J^~lK}2e6WAk+>(d0r(pq@H)oB7p3FF!{DNlHNhU{LrFO3@T zNyF+Y{o;-^>6b9>N8|N>((s7D!r>x`aUYs+$7Zf@KR_6( zXn}DLnsAR2#vN!fJi=DMDX963=QXco6NqNHfHdf#y zVcc^ju+>ecbWs+(|Tgoq>&*==O;;a)QD(7v7#38#Y&!V4`9*%v7{CPB_!Yy?n~GryYT?!PPmk?A-}nIhZ7DH9;M_7mlMW{ zS;SY_hWfuPKfHIxD-VRL2xG-8JX90Lido>vgt1~4cnV>xm<66n7%OIhrxC`AS>Tzt z%?1y5}rdCD`eq5mvETye8L{#1%$C87V?YQGl~tCK;04^afyS#s^Q=Q2kB1j1eZ4m9HzR*#SK!P>UNuwCye_V zq&!tE?rIRY+Mv3`MGaDbFfM5j*d>e$8U#)f#^nqGTU3|(vzloY<#hgCU{Iva!if%} zt({2nl?C!ELz7?g@KpuJ8^&kirD#)T8DD|R7&0VYKv<1L`1)JMNP`8w{EqU~%Nykh z&k%-Q4CsS|-wo{|c$oE#OeyfDCV-7|UcMW!_Oae1_jk(^cr02a64Rk9Q%YpR2J|~a z>q8>a_p~s>gVSL)P?(W_wh9zOoGhnQ&T&75VNo;3y%ZwQB-UX_2w$?(It-J)3|y?k zuxi9Q3msl^E*6c#-v?S^YJm0M$oh)CoXOI(p# ztlCAFz!FzrgXU-~aRm+&#u8V}zsdK|uS70#D$Sc8Y8(PgFz0wbCncKL^u@PPhGcoAX4FRN>T@f|I&A|+3QEr#fj20%mf(D^UvaPgATv$dV5?4ZzQE{x+9#E1}&w; zBp2~W;66>jl7oim@5W_k#F+lTMPoXxhEnqcY_5hujroFK4(Sh}y+EaH)n4$qoM?F5 zUNaneHHKaEbIRE$)qn_>3k)LQYl*LI4Yr~$jxP~a&yv%N;%Q`CsSgQl5?jJ4y$#eN-W`N z9Ao`wSTt(QB!MX5S%lT7Hixhp)#egbquPAJ1`T2h2!{zTBJ2^a0me5^NPz11BoI~o zo^X=zO2Rgcf~yF-gx3%@XjEKFI81mQVX{`b8)f|?0hh>@y@>>(glh>W32z~6XG{65 zgk8eh2pcpEZzrsV;hls%a^HoU7SI5Z0BX5=NFYjhFJWaB+(#Iv0K{OkpD<1V2;4{* zrvL;#Kn-#^+72v?T2DA>;ADX4|Dy36Q~{C4!zv)M4jv_J6FyEDrv*erCkW%TfWV(C zc`^{5Qu2h)Qot$U`WHHKHIPXnx+vZr4CA;8Ueei5zx~jAjLy2SUSt@ z-GC~PgHc0DX-VcrL`pk;QDT9QQgo~+U{@E&Hbq47H zGGq7(egkfJHfYW79;emtho~0WVA83zr8!e1wuefbp(*epVb&O-F^QSclj{Xp-(6*WcTYzG8Ek)Ek*aErH}pWM z+t`B@-9=iIutKHvJuE;Xk}JokPk@rcAxpwgC#Vx~Z)EfwyBr7gA2Xl+YH3D7Vt zO{r*zo#|SNTCp0fGn55G+ERhL$W+5tDoSHetF{m`XoZt%3zPYppQhp(N;FP$ixS>O zSPi{r(ZxKUoDlP(FXZic2#EZ%D0J6uTKbBV|dYt|6>?ky#|& zNkevP2uG!MY<*1`8Zjo4FksTcxUAK$EJhJgHPxRg%E_ueQFMHtWeQ=J@KhyFB{xmU z6P`&}mFz5>!4WGUWqO`NINDW4FjsjXJfE-;ln^`9q&#e@-~3F9UyAWKJ@wT1g?qj@#VY0=3@D0Bww4mPZon}IN1NI9O+#TzMN zOIj+Un^Zyw*9shgDkVp!=oS(P6W&TVNqC!bmu9!~!XC%lKSEoZ;z zUXE`;i+73GM*_4ykM1Yz$&oPHr~;5ZBzk}_4O-EI%6~8C>)nAHa_~%q92XrJ>hSre zbL(r|;K|#`A$(-_!k=3lm$p@Tm1DaZm)7>fR{$MqeK;2uqODbK4%mgQ)f7*wX%E}0 zT#oZ0+G6#v#hT)5X~Xoe&C28B@gD!Pll`Z_>tZ(-_Ru8kp{Zb_QXG}sz)hkeX)uYl zl1XYZFpCNqm_=PQ^;3KRK{SUjxQECzDv}PfXo@HEXv8aSBR#`D+A4yyjkLjnjZ{Pc z6X`_}-~n%02OumlOG_6IHd7G*Y^JRe zNOn_EN-&!W8JJDKkw7w?itu4JO(js6PjT|ggZ)%^hW)fv1Zf*;g9RI^kbwnha@x|^0tLAUEPc%=N5#c{qD+x=kNxXc{ z$#LZ1yEKlBiO9exvW8HS?1^Y5M=*#W2Mr=uuqjrMO%c@+vmWN9AOpJwJ5M5EH+)AG zxiSGFVTD@4xIv5`DD;Bq`cSvOdBqxMNVAOBgR1DJiiF*|iW)*>9TSnvf%QcWE9l)) z5%!j4^6HS82@|&hk3fi&Px_7`4a0M%v zPL|p}S!&qKxaT6zXkFGGr1G)fJ_N_du%Q zQM-dO!!OU}fr(tgCX{M;WE=8e8xj#bgkpz+bJ4(vk$ZI7|8Sr1FGm8&d!w|f#Fa`s zF0Wj04ao@aGGr_ADv9JA*^9jK8b>xGuZoKO;Z(K78ga@kRp&I@i44JRl**7rvm4Au zB16%NM5NWgleQt%S+F4qp{0nVqsVn#tErakNFtKSTCT~KXSu)FX}F zG>s&?k~dT1$hPFo(m1j&d2=+5Y)sxWQMklXE z<5Jy8(i_-gb>6gO#^a<4AMzc4-{ht-L*gqpRl0c;)TY z1j&Hq?bA3iVtM;Djtp5|qsEaj%R4|lWjQPDf080%%VJGl5t#`bOf~E!JVt#VqT^gwyQiE;l8l&TVBKQE;Bx%`2CNM8o z%Qu<9y!CivWIy=jU$_wS4@TW&u`=v&wNT{UL*!4G0H1GDV4kj)0ily z50POxb3|I_hU{Y^fF4?IJZU5IO0)!#oy_a2ah|l5c>^@gmi98QRO85G<_(APo?3z0 z1#&JLMLC4s?4p%lEJU_5kwDnZQaL31nTJzYXdN-mhb*aeda$9TxF~V3qluD;z>s#) z+65~&Ih%_}_+c0XCYoGQ@*eDI9Lq?g7USVij0g}mH8q6^KV(-EZRrDQOR%e{IB|Wp z2s{=dmRtDQs+{ezvYova^XW%eCsHBZgk38A%sE8Qi?_ zdX-2+j#ouh0;8J?V~<*lzlyyu{1!ep+;FEFB=vU>#ycJk=Tm(h2D}tUN|^^EUW${3yhtN|vNyjp8SsyZg??S+bYipIIbP1QI<8uL8<0bRQP6FF1k$jax<(l|2od2=+5 zjD6l*jUz45o3C*OX^0EV=6V=zu-=u+|LM@clK7C`?wT^E#MYo1LdIorzLw=JJc)q` z#dlH^Gc8R-sT8K##mSH-_tCtdpJz-CL}57xCeZ~`oF}R0Hav zaca#{qH$`;g7eC$M5-kV&Mc=mwPYz399_q))-1y{LA7QXrEy}zjjIb9=h4zc_H&tN zi!~1-hPeqX!+KtaS@x=ZwE9|Ew2u0oFQ$o-eI$uU%ukvb91{)&K0}? zhiE`?$7{oRm_Gff(m0p6YRSp|PlJp*Sreo|hVPH1dkF2LPt`aYWZY>QM}v$zQ{!AY z#<;UIF4;l$e|L^X(!k@+)wnS2k+6vu|^?%AUEsfkpP0*G@sCz);qQo84I2uyj!y0GHQPMrCaZ%!qD~_-KX*hLH zC=#4Od!L_cT$s318kZ#Qtj5vk=w8scup9+lQ=3OzaD4smW@==T1hX|x4wa2=K;y!4 zq;zvN&Lb{g<7_!9x`i6&5*PG0^Yy=6G8uAMbc;1X8a~|~8t0K*iN;xS^mO}b9PQJ& z12m3CRJSz6;n8CnQr+Px64u@xVuo`^X`Dw~xyI2j>sD%9SPrx9c#U(3tJ1h6=dg{& z&o-w@frevuvc^T_5baLUxFm5?HI6n8-Dw&}TWIb~jZ>c(%>svyqGa)_?~LYXg6dnN zxf*B54H=pkwGOHO?k(mBvMh zTcdGF;?`=M{B8+{H`i$-zUJpE8+W6|;fsF3ZPGZapX6#a4qx^Qxh)#!5w}(2@P)sS z+r~K@-jwPTk=r#veCjU*cWNBI_7~hPjkB(n+#ZdK61P|5JmU6gTs1!b7Xj|qNL&FR zxJHeO5_dr3JmL;&oH5Xu&=eRuksEx940CqWFeZh(-f^o-TX7$9F@AGg;aY;L$jNB- za9seGPrHTUoL7F9z-^k>+d0;R@9Xh@;L*U)yjT#o036CQ;zc=qgDn;QGv&*jMMndJ z+r_dn4EABqm+v)}*Y7+USm!f;zuTGmVc_z-*p6!k1%G?V=-{XL+lN0$toShStWWy+ z1 zjJT%-58`hwu(8}3^>N^AAc_><5B$Q=8Jw&9B(NhATRL=X^GSb3tzi~58n~*MpQ1K0 zF1?p$U*K_L&!>LhAb%IpEycWel84t+TiMUe4H`XzR=BLWsEfU$rT3^{Q5Qp8B#uaN zeg&V2VdgQGX7=G>DgV)SZHxw9c0W52sIDL(bBwXWSehjS`R#l^MI;$rjDg*|6bu~G zC1>D_E^P8A%zPqNZ5U>|(8E06 zK9O&po*Hb};(Ses_44BCa+|xEDL3WL@814T?%aQPW9&cpza&~s0#3h^0jquN3tU9O z??hOGV=Ui08JH}t13wwKH=kFQ5qof$`*qe3J`hI{cPQ$VeikV1!QDPJi-Se?+_>Xp zXmqfb&zN+kn-zQ$|5LJIXVGVY(oBxwZ~JF~!Rgo@M{Hkz7MR6jyZiINz2m<g|lkD8L`MQ=d}n2 zF3m{~WV|JW!b_@+#nI~WjC5z_d|8@zZao#SGI04zH)r9gz?BucTdP*ciwRvIW}M^+ z#(nb`ELF?2W-Ly(%r~5)rvklhiy0u(6)fvlaNki!ynpe_^L^3&!*~gCTtvSqa(t9= zpL6%=K>vZUP{HWnbo?1h$26Do|M*kM;?nAmmy=;F=i|oS(}62G#lFN~z~8Z7U3_(1 zyk8Ie;$bKAOrW%%7$~rIxpsex6RxuH)ywF{qV^r`4_#Co!L zD~2%}t!UD8Ocp(x10y;#ybhNS$5bbZe8%i3T=u}_N6mqsUYm*z3xP&lK(QKyP=h?T zj5ZR7aGQ=>5vzU-L6=Xmn|Z%IJlal#kreJPgu@TL5dEFF`M%<8U{psK6;{LVEnIC< zGI;mzY+$(15jYpJ2giNzvv`W#Y$caeTRcp8D(Iwe$BDRRq=UQL-{x+V#y=zX=>73; z`VW`J{|)z=YP)$`KF*M>k5zBjSmI3hI&f(^5ngHhAcVsF+#{c9@0m5sZex_D5*-~X z3M1wIuy7xe!qHj7yf#J}FNJ%ihL^)#$B)82%jl5y@B{?1j3K!B&-wK0K-YB2!UN-5 zk+O$Tqfu3aICplVo?4{F_&O_{TH~7dv${J{7d@-F=BXpPm;ftJI0L$0jZT=XFq#MZjl^QSxxuxD&t5v`oJ0Fh z4zZg@WEstz{}>!UDc23xZ7I29iepAIhCcYk<=n(2ud$oEYB08vR z#9zcEQHK!t>Qjr}N#gSBhmgd_E!NB2-R<$~SrGqToXvb@o{;x^@y?J>PQZYM5h7x; zj`?3~Kj-)}?D!#&<(S<^AQyK`a%xRBGk7NgGk68Pd2KWA$^S?6zE||vfC9c@Kb6SxY z##Pi=ZPlV|ysxFx zQhfim)aVyqI&S*V>9~)5#`5luM2(`xyMGX?K58wgwh?GWTXuV-!FcGwVPOm(cQ3A~ z&I~Q7{(#px??~WXj0&9RJ`QSp61|=CGr_;7_y-;wW`Tb_D#O{Y@!`{w=i$7m@$M-n zcnO;-hD)CM5YCC6`YYn+U++PAH*TBp&gsfz*q1J&N=iMyWA>6=n+~-Itdm zy)9X#c9hQ|t@-4ItWx7*eksz+`3b8ctv$dYd_Jo*T6IwbQABVK{BJIb;Nb^{CHeTh zDAqb0@D_OcTX5mrjTvp=m zF3K&J4MUcfvXcD@rOkPFY)sUa;y)!G2Ro}XyP?{bqWb=Xs{6O{00$n>S;9`2cI=&T z4F*czI+0bH)Jnf)iTO6-NcE4U=pRS20==MkB)aDrrRW!%c_%&OH{++LXKZ%R4TiL5 zpX7GKSHg!Y%=ia8?dDhCh*w9JJEfPh>4jKxOiM1U4jDfc`r`CI+Rb6~Sw6nJa4EZ& zcZ3GfOTtb`fb|{*`C{*z@^2&QTvW6yoV`oD+2VWxj$`mR)mpzYz)YVAPYO9}85^I) zJq@uhaXw;f09O)=a@ZgyQhJ0^TJ)$hEr-qHj(^W#4`1ZC+?jS6doZto=Lrj}X0G(| zJVqXMj$g*UKTbTFEOfa^W1ExEO#;c`KJ)o?nbX&_WmD`M@IyB_X4Iyy!OPLN4pfQ`|X^ zT~#DY#ke%S^e-*WXDAgu;_*`9lQl+|nR#q*`-U(5{t|x4;*a3%xjbfPA-oQJ06LM! zLOC>cFn*(tx*XzA^6bnF1qyAgb;PguB z*D?9)fd?JdQMlsQ5cRA6j*hIOuhZ8ro^vo=H5|pn%AXuKf^_w4Kh}99pMBg#6r90_ z>3#%@loQTfikPAtT;Xr{9Gbtg6lB~(AVfOYp}G(5(oFK1JD zp?!Ke8-xck#304uf5lfeybJNt<)tiJPfq-G@Vp1L;*-vlLe@2-;Q<7*u#gG6!?8kk zRR&g2mpPp}Gg~HjI!`dx>AO*vyw+8M=XGZHi3A_*%tHTJv|AT;A50GT@_qnPlEmU( zt-Yq90=R|7&V`wwA*~d0-p8BYMZ8*5DSzSr;LiQ0-JRU7$StPmZqC52>~{Iq2ij7rHW-Aqf_!aQkKuG3P)3fhUpi-i5tDYjUjj5^%g;Y_qx z4R8H_x7gL@?$=($@cnjar6y*La35`Sn2p{sNmYl7 z@460S3Wrssr2MrqVU|Ej`L`M+hjx_-MdWm6TOKKCf3tY1(1VFGAI~E4elIF+Xr+)# zwGpFh{NSDzho6h!6WcbZ1kRZ&SYA5A@4%TqH<^E-We^wPPfTK!QpZ;r{d%wwV?_2t z*n)luk_L+B{K8j-KEQ2XJYrrvAwF2XNggx|af|FactnEt$t@NU-ve65v0-Sl@a!XLE44bx*h zfRz7+=}%mQT_^WSHg*!So;HW4YqmH(0y&PfH|{TkaZVJ;(6n3xme$31kW=t&)4age zwa))s$t=8M`R0|Zm+z!=>Pj|@)!{yDd^>BF6r=c;o^(d_V);U$twGEEUN5%5#Q(qd z!s-W&qj$W#&Iy*VK3P~P?S3Ahx`bWVUskczE&jVdwQel>ES1WG)y?@!2^(5Kb=W=r z_@7!jh0%}1UXg1#KkSX=75ADZLvhFI%{n;Y-Yg@FXlHhBc10H2;z{h^IZkhOZwj=# ziv5^_2JZ66Rjg|Y{O&4tc@~PJp&Tx6UByPGKwcka7sNu`+>fSh8SR9=jb%s-lX?B@ zK5T>!=2tkIvFQGg-5zb$5UM$?R=60wdMjVAZHZ*{TJyX51AW<#eVE{}dF}aO0Eg8f zgk96nxbV<08mn)4=n)HzHHoQ@UvsjUD$iul+W(-(JtOOjP?F=D(q2i9kKg z0}dag1MQLiZD_weO(v=H+HagqNQGl*5qrJT{7CHkr-W?nx1s&EWeJId8rpAYDp#`y z&5jMQ&BjA8aq{_1EX+|kPQf5n)FB27ap|-yyV=jT*|Kc@cCK^%AQsF6>UZ8SRzuRxQ^Qyl z59y;}BBc6u!&$ZPbPk@TU&H3};Qw(ATbGM~gjF^StEtZz@)h_;MzCV;{<{%uJP(l1 zOf4gLK)s!!k!-v0JCd!=;62WnH;VP?h9=)&V2ic-JfEO;Y|cP7c{8Q9hjk5XPNUdw zGU~YfdfsR@mj`xC{;&U@&3<6^6akpnqwS8tUhkQ_JK(~@U&_`uVsBYa{?fK1R3IO;&CnXA0B7DvPi&Lf1F(*q{(~yPw>GVLm2cBLVdS!Ebcdp zHapv{M^>{p*Jt0rj+$os+WOC{SbnCtcT;`#Ev(9KZhfwP%5ChEwpn!sw)u^B>#Oc$ zKfW{rE8RiPU*@pq+sBG7f!1}Yv7@N1?L>aa7MpKuaLoHyW4l!wptSMc578s{vG2Eg zNF%PlpWWMTibm|dAGSmhY`eMa#`3M}&NBH4&gdnzB>98+$RGG&$f4P z?zmgOU>;lPGqX3=XFmv=YF4c9E~8JUG4;7WV!sD6aHzp})Is(O>p%E08SwIC ziDF*(GZZsk*SzpER%q6&bqbfW;UzCTg~y#Q=@N9 zoaOq==bv;|{T$8tZ%;cre~#p>ezN}X&)F`222#=BJpT)Jzi&)^;YvhdE_}i%jX_(! z;|XU|3|=NZQNKUN7US7L>&r`0M)g-O!SFO=73=Mb)yGz`Kl;qGYn<_`*|JQLubb){ zSF>3@^Wim4`5LxWkinarvuoI3U(D(6u*dN4HHUS>zYiUDJz7Kmu?{6nGtlN0qzpJ46Vm^0SYulf}`;WIycyuM~VTjMkLJmwT`KwZ4> zm@{(&TVzgny#DA0_7h)LU56WuK9`MgW8qTvHI#-wgj_9&-%ar55v0}a5?fD_Gk0^tLnG>7FCTE5XRqEX4IGdj{Vz*2STjh zvkLs1@p~5Q()pL?oEHsaFgK`6W4au{YA-=c%Gt{5+WqmDc)uO%Q~tW-U$(OT84Y}} zY}v}LM4^N0{Q~RaZ@|+Z<6q#`6YefifInrQai^T^A154A{leMwmFh1*EU@v$RrEbBqE_Wy7xF*B{<5TTv*aiNG zC5q3C?k_k}A|@VgdFp_0lX#k)55EtuJm+)-hU!_HjVIY7nfCeBna;95u$%8_z+eM~ zIKP%BV#s8!mgU#-qTyR)r>9qlZL(e{lx|1}j1RTN_#cLB*~>=rrCOpn51G2@SnqHn z$8;+gx8HS2Uu4%=v5?g#etM(ads7=2JY|F7;YHNo`WM-i{uuTb_P)sav}-tWJr)Y> z#`Qumo7>pP-uURRcf98_*xH#j|ID8zv^bd^>_ksQ=tr&=gF^{bXLPW8CEs;s!9%CI zJxIkKq<{-GAvN4A0>_=(*x*ie&%*IpIPxT83#{Y=lp&IuUC)N)eOn$T*Rwt&8j={T zc_BTBO!HddzYkLZoL~6LX3p_i;r#oHTO7XOjFyB&a6jjjdUji9OuO<$o3DEt&0oWn z`?xdPP9U2D{>X00iWQ(ioZeNx@{jDNzKl8-1=DFe8`QSp1$g93j)~jZZC5tjnQ4nV zvdWF6`#<^V%AdxZh8Au%6D@?d+C}25ba56JKI8a%AIl z`^N9t(BdFi=k=HPGJuQcz08*ZJ>x@>s>^rxcJ6+e{i@w!4D>=7xB5722dm}+FXB<2 z0tn3B!OF5z0-m#N2OGk>BjUZOAhsBi{5*ruL2sHm3>PSsK8{{{>rPha3&4>F%YBEe zeoo{SRv7^oF(aS*V%Ng-T$F2|2fX@K%cK<;Z=%9&5xE70+nsPj3D(_-aLNpKZZZDz zvLAVilK+X24;jG$zE~E*>?-_)zLfqpkU!pbxWBA^(xY>|$1K>dL9Lr4f^vQY=1Rd_ zCmAGkJ|!k!Cg!u2NwP8bc3$yV;Q*1~2T7)*jQFICcrnZ*Ji#jB7K)|atIV2Fcj%(* ze3pvwA<9k%%1(g@b;BnulX&rjjDi6X^I^#FtacG@W!w$niDGv9$4{-7`T6Cm?DElq z#2Jx~C5bG}rR3%c&#!(&i}ScQmFEx;NWe+OYLUUh9EV&3<8$jHgH zcpd(`WfC86xf~x@LN-6RwflLVu-DhObaJPbHGeiyCT!v^45hI@pbjq_F$dMHoG9)_%*?I=>EWZu`^kozBNZU-oi4V2^YDw5k; zMRJ*lgzw{|B0<*g)&k$p%hvh*9eERitSS4?;%0hC84_}9A33f3T zizVJH4bNHe2Bvlx26{UG^9H+$)fJucGd{AH8B6!W`RE($>UMR9VJ<&3oe%d;@t@fh zMSLHl)<&&tx>lRXvE1XW7D6-sj3w5kk2)*=%tnpB_vh!FuOQEBnp-Bz5IMikYxWA* zLp5GzzBGOp_%j#txX9{`6;A$METf*o9_3zy-{(RwhkoFV)}*V@fKyr_P7p`G{; z>$WKRpMguRo}A@dorK$*NBHaOT+_&_z2i}6ANYUyFPwvWS+7W4v9VmNSEgZ{;!UkA z!@l`{N4GdUGu+}>*qxIJlfB zT7=Ja=79)*-mc4f$I*skVYJ(q5dfwV$N38zo`L?e-dX%6>%ga(kN(2?=ZI;>!dxyr z_I7%|$qfKKorQ18*5$m(uJXrF{(IhJ!AJ$lC21Ic;1!OtMTPHrKI9G&b5X&sS~~GE zSh@V1gXHe#H^NWEZx~N&xojvoG|pF6+jtn@#-aSsL9T|S7^g(?YI&GEy!@Y^>%`^x z;1I$G<>s$ioHOVQ&sVgxOFJZ;Ie%q^K@$svax6!%wuqNoqv9yvn76w)cnE(;^rpYE zP+knHh!`&<`{T9=Zq^<6u5;k8>_Mm>H|=9LWpzRrUm(lR?PFbYpZXcjv<$d9ZrXBf z`OtpA_4Sf#%h4%T}t!N-|H z_+5^%&_Yg%!95Nxi2(B6!H$YZ5t2CP9kES@HnQx-7U##qS{z=_SX#w+A%uA$c*Em& z_!b1n1G(z@ zcMQW2r?Z4mfsBNgUnp7z8+~Y2veWv)RG_QNgia`ApOC+K0t^%=@BMeb3j?JBkG#vQ z5wH>9Kxmgtk#?ovaqmUMiJ-jc-*7kHnC={Vm)*cM2Anha8yj3i0mr-I^MoT4jridT z814~N@a5~y3-jpT*lR;$9xA7KcE;vm=olS&x<0IEp8j`q#NGYkzVNNX%KXLKGE z9Q+kjToXTC;{^WB{$lRN%JrYDqjU1_Yy$_6y~l3pbYPim_tBP?Nqjy(P$6S%d5`tD z6an*q=CKj+g6YnH|7CBb0x3AaF25Y^V>9gLjEA3jDhd1cCPXg#mNWhUixeVL=E?GA zI|Ga24C698!$@pIqvMY?9yuV@#G-$&j&f2+I>Z0Lex}0DvOaH_#0B5~2OG|H*Gk0G z=HXvIbbJU#6a;iZskaYwS^hXxwWU-}D6zQ$PaN2KH0gKVEl952BP zr~mux@f7pV_t}$!za_s5kYB$)T8*r!B?d;k*x3nIzUlaIrlogra9Bks_`yUU9tGVs63K0N8qa{XfExyRp2W9~vVzWa z{4vl&6*%*Tp|%IwLP5?`6Ykn*#ixvM%wudU@;2@m>*~WHlVhwhuLE+#*HAo1NFlmy zPv@0md`sE~zw&bi=kPJMCX3SVL_TCUrocNNvawk_3~pd8`nNQ&@|=-@b+GgNzuCaH zSTy|KnOJ#&-Wk?Rtem*m#HzxFiS;Ue+z|zQoLyOH%Q)rF#g_>%eG;pRFkKWCTU3L6`Qg5M!zu=tYV?{Kr>*5f@{sA*>{<_?E}yF$igj-1YpF$T@N1O`W*&!#}owYp09dcDXmr zR~^LrYp37l%=(h`%82oUF3y+iN-M_gb|GxQD;2x@V^Ey2yMciRL*LcT`(LtiQvUs~ zSpV)Zp^`(M`-@^=;77CGTBZ33U+oM$#gZAk;X0j8v!}cB*hHSc#D4h~==!0D%bU@( z8+cb=ZQ2Qb3ghpmSvlWv>U>6y{!7lVzI@Y``?*eV4E8h_u0Yt z2hX&LpP4qg2nPyd&h2M07>{uloMkt{di%y%Ho|-)TA%qfd)CBI{hRab9~m*sCH0S7 zz`?t0Xm2OUKwjIzeuSR-c(7nb1qcQSK6G;gZo9Zz=doOny;p9GWm zn)8m=GS3@rM`5BV4wkKK>12Fh^h3L7C0k^Nh1@W>bBi!WvlyS4+GXcpMl@g`?3bN0 zCJ&QLzxaY7Ee;=XA}7Y~2>!rXmYuWMUk9x-yIsx{^O^?B zr9XD|w$BOXmH+sh+AM8!g}86(wwWScqy4ijW9X~@3YTybAHP| zLVdp)Vl=nB->+}WOB(_$3$yO+fPlD7_|B;qzOk6#FK&&VYOLle?%|fj`?)_PWzD5I z#XZhG#ML2O=7+X3TKMZw%hjSN`T#GhJNc5!bq-#d(<4*-PCD6voRQy;9nLfP=^9~p ze%8jx#R~iU7A$_wFSIwe&#BqZ8zlG8GX1JYLhfZkM@u{^3ozB`WG>_U_>aYnjM&M= zOdWR`0yzZ%{);zh5pCGn8^{SkXZkph(;5HTvYd%5cC?~xys1qz_X8Hqt$5Fw#c~dm zzVf4U4mXwaS1Dh{Z`U*)d4IqEexBHxV6=MIs+z(FF2M}B@!ID8aOZMcf8;F4$?1{Z zun-$rrro^n$4+fdPB6i|%$ak}oayJxWxOb~?imI^?*@WY!pjj>6V9nvcg()lw>)ze zH)%YMU-A*>tLF4GO2a>v6aNRW#sI z5NBN_0hdM1*i1=?jP~ZkOUHo;og2nIf>xjO?Nn}n22498;b}`gNMiA_@FbNgk%gv` zHA=OE#;;+6?Z&ZgDInjIg^c<{Jhc=I#)1@~9U1h7lR<9}MQF@hqu3Nhz}6LL6=4U3 zqeFzG04j8u41ZxZwmL+Z5ee)U%@MfG2y05Ue6yM>PeCoOqd?10p&RU>&1QAp0mH02 zW+9s&Ds&{$j)V$5C=3o0Qiwz^g75V+I=p3%#byr-UF*>m2u0?Ll^JA3?Xw@<1HQ>M zZ5$b;5L$bP8&4CtZFu?GHYk5ORyu-dt6@e`%b~py`y|Y$FDhKXO;LsrH1+4gM^Wc$HdfM;=pu9Oo9$ObdBS16u zHo`P-vype#r-pX`!9HCV5Av+1{B#ci${Xdu6C7#aX@;;C4>@tU4L1gYeWWfP&|3P5 z?#j@Q@_Kmi6h#WU@xs+e;bB8X+C~YJh{9K+gr?Nmr=l>_A>OhfAQ4~PkZOiuLPMcf zu!~w?9Xaw{*RWdl{cyWx8M&>2USq$EZnTs=0Pr{S0F>UcTirM zk;e{28#4R?VXX|wQ|_{-O#z!w7Z2Lh`n9J`kq57Os)MzRG4S+6SlboRZjK9v2M5(z z&jUL*Mo0QF8fo@O z*54*<^)q6njE@zX1V!j}S^0@@(ZoKJb%+(>FkwF)D>S0>hnca&DGr-(?w#K(Jf##J zlcowg4*uL7^qXW)o{*AHBY-FG1LV>C^$E%oo~yA$DW=T0d-y6+ttobFi@jxDuY=Ft zVN8m{MD7dk&sm&vFA-1ZjMf3W-b=H_t0VNZZb^E< zQZ_2V=tLV6gw8ODo7%OSIJ>h8w=&?)R8!-!S;N#p=|yie{t_5r(o<#E)rDhO!3o*6K7gR#Bo5(>p@#3%F9y zl~q&Yq&?DjPaJf?dBLns_r&$0ts>QBb>pRxssnKjJaN|c>}sOWy~oTc*!eZ$+EoQ~ z*=Dw{JPE~9bEdrdGv{w!ZFSeH&S^!SB#l+9yWItNp0Nt+Uhg_8|6sklODE$f9qXd< zsjRTE&?3%l!{HSjw%O6H-nPsZ9II;Es+4`)SZGNKSku^0$fzbla|MUYHg)rSh#5+f ze`#V06oft2M9_^h<~A`p?eQi;XEV-Gn3ROs5da;Ng!l<=ZkDOPkKOkX5Z83wRQug{ z#OD^9A9?si-=tv`{GAbCAZx2%`ACG>&?VA&_@|VSzRx?FQ%(AR2>PGR&0Cd%-U7W> zt&f|kt4`PK{wWS5dG##cs(#IE%>|iNB?(PhMniZx7%xlF6HS1jp8adey`Eiltfk(w z4IPbP?VAc?+kplS>oseAE`|EaJj@MVnK^v0vLRjf%FyAJAv@hvu!TcL3F^vuH7o>` z)~aW#Fc#cQ2oH7>+r?np-jFLVn#xj|3AQMAHW#f%0-W$>+oRPm@9%szxtY+FhQ7C( z3D$;~y76ciaC7*u98@H%!ppQZf&Jc0h_|@0w_-8P1*@-{-s9?O2x3rkK?(i^f}~A7 z88-X_7-u#Y@@R1WDw3-nF>A)sIUHYdzCPzV=j+JGcE#a!8{CyQ7YeENi7kXb+5@(f zIzC>!xp>M){k6b!;5-J0B|Xz(ei>~#puphjP(W(*S4B}V2LjqhfB9^948gNa$wC6Q zO2?9g-eJx^I#y)R(-e*F+P4p#%59HsP?2GKoh7#v;5~uGAsg0GNRM(&$FWDa8Lcqg ze)r>gMbQn$+3(Wf$FM1EPfMY-C7+H(zHce?l79tTbFncYr&8#Ob0;Rzo~;B2+3RCr z+e&ctgjb6%EyJKszWN4tKyeMbfkh?FhZm06%lYduD*QZ|2G=9qX$Jt%V4S)5b-xlGZ}Q0WKXBCl$4zQCxZK zZ5@q~SAkboy=dCp%cC@0Z>v*Km0ktT3y4*G9E#m;Ej+}3G=U|z5kmXDH^J~Jo9b&g zPFuOsla)v#+mI3UjkGGiNjnaB(}E1gYxJR$d%bCr0mpGGPVSt*mbVeEwnkkf!euyW z)meiJ_BxzrESZaLIs!|NIIjIJh-vsqPPGE=-`H>OY%6?kGCOVXDM}F%V=q5#P;nTj z3i;7%H$lMUfF0d1JlFPX-|}?>*mo&HCh2Cg_QLW=fOWdbZGUG&ta@~VO+^nmQ1cph z0A~W)7wrXsw$xlI`>_KJRX8R{72>=n8Y58etCgM96L8luAAXwD zjm~)>2e*Dcg3q3iG{p4yZyKh{zj% z2XBR#nm+#YJ#Tp0$yyQjTBc>f`8VGmch9tzYMaG6W(bXnvMe|Wz}QXWBOM$M0d;f< zPJr2{9F(6_pE35+Z2TQY>O=c*N~b;cBIJF=bCViaxB;KTw2g=%_x$F7rAu=Tcqk2f zM>t-FlwBAHDa^F*z(jntiG^dIWe7?X+$xkZy3)lpkgk~jcF-AINZFg?nQte-R$ypn zg+&bms^iG~8PfnM5Xr~J`Rd9>c}J0Fcw5S4hJu-Nga>tmVP$%GkVe)hRADWSe72~Q z(5SC52wKf*AXNU;gFqE#oq)|iM%E0IAFKhS z`l?qkbdcoWkhE(KBt`sP#CZ-$XD_5qo1@!BGf^yv_!vvmZ-^Hq=b9lR~5 zb5QE9z61`)|BH}Y(8?qoGMzM}W4tWlEkjbW<=0a~QGpHReyJ-V&X@gY7sCBL`cQx-9vW(to&#IoIOZ*5VZa8##kF)6rTNge&Pv}}G0YcY1EYu1f*M`+fX^NUT z&T8mXsrhF6+GfrVR2zX=(!HhQ*tBc`&I>lKK3kV9SO?&julg!zfgVq+EIY&s~FN|YpIapGk8qe}_gxIK)kQALqmOfyn(H0V( zxm}K6ujdE~UonnV<_Kx^pVH+TQZ{-V^X)9;@hiu%p`EewOdZP#I}4$F&N#Nbvk=SA z8OQc@#&Ou)@$4F>b8F>?VY>if+P~=tM+Gjh+D=rGYS10jjVdZWpyR>h98ANa@LA zYNXzbyCUpF!pmr+cMz9%GADJ%aUtdDozmKXW`%yF8s9%pEg_dB0?u)#W;gv_fV#fu zA=udCLj`|!y}Qt=$p8qYssQ`bKt+nN+9#Rd(MYK1As8DMq`p4}`4YE_IeQ99Y&}AT z<9_1RfqSam9=+C~s~V`~V_0DiG{vp4Y*h~-70quCVxRR8TJWdFGT)v;iuKP}5j?Dn zsmBdi-b1kR(DA~aSXXFc*_NI{TC+bZ^bL3+{-5$S2-ZhCYXcV0ONii0#eZ4Q6nE1J^LnBw`H+4F6Bz@=NJ?JI73+hzVp&kLtr7+d<&VtnH3#lp4 zN{c}&jdWF*$uM4D4aC7OrB@&wHij`Y0yU-4$2%s&%b%LxNsQn;^>S~Vi}f4Fn&#qg zZR1#$mn*dJchWGij2Bo*F67hxDYhk7$fyU;p_XbEZv2?zGv9{HzmE`%m)HOm)kkQQ zEP+9~0LZVY*^Qy`r=aS}_`r;(*RCyDdqfF`_k|X1XW4!t#@@h5| zr*AG*)bEomc<|4@{pu1QH4X3ulsALhUVyi?zq{d!ysYhnKjWFK?b)SaYRwGO_HT#y zt5*)zQ!~fI2dJ+Q80d`1w{NdmGB4d`jnG(MA;iSDdy2jBi11t-h>2AH0Vy~9zJaK( zCp?0!s!T7z)<>N%hV|$tG#c$JhtI_jb3-)>LS4DCeDaEw>nBe`%>_jfQ6t9A>~Q!( zluCsP{O8I=T==-|7>drDBg+N>`Ak1fU1R0~4)IarUWDgp^|;R4rdGBsA$VOP*j3H> zd02!&EN2HkuvlFGM|wGNr!u)R-&WBwVBnSkK#2=LEpm z0V_;yVX&IHpPLjfWX}i_*eXJIe3UWN(G)nvms8(EoD2#_@Z53gHJOML+~GQK2S>3U z1B7OsP*vs_YX_P^4N~ualdIzEdHpIX{hm95PDuGg%HcV|7E8Kw5-wAlB<@Vfb{I^i{V4g2KF$69o8+zCM)8PJ<{~Y0y}69y7@N zCt2h`VQBU_U8vlya6MGY=IgB*TJ|~O`B(@@2uZTEg`kz{x?^oRkVd$XPW03t&Grq% zBrt3YJ3UZn8aM!SRsjz5NjUBEQ zP^@4R1`Dx~#i){&F;JtXc07ma@OCE$D;q4>%yeS#@nDRegT^pv2Umme1r0&s}qLl4%V8W#El zCW~dL;t3%(fY5nnM>g>Z%onXku|-b^3C3Q^ScMowO$8S;3wQHpJsw9}3?I#|Jt0Il ztAjzGUr$W0VgCRzBz=-PaZE6@K4?Ew$Ox*-!QKKkXQ+_ECqt2j3X$0lB3lP!uL4t`bJ0Iid7gNmL3?HeD7%n86LpuZTB1|UeDl6YB zrhK+#q>#%$HiF$4Da5w!H-ZLYJk^Ik8h~jwH6e{OE(+!8btJ-3r+kkmg*{Q>fT;#- zDWvcfHr7ADap)VY_P&8VMARtZBYw{a_T4BUxjr#Q?Sz-%Vn^c;`o?fJcC;{*-!hyX z8!g!UUH;GW{i)P1qlI!^Uvy||Jk!Pq59zYf6R`P@nucQ;PmAbjTmtiZO2G4cL)UpMfVU!Eg$w-BW9>Wq zKDkkU?O4iQ;^*mTZh!;)xEC+#_sP1|{gNlW+%Lwd9ULpHGW!|buq7KdL5K)A1`OVW zxf6sI$%oO4FUE2Y#o}T1^U)@eOmIn5KDpwJ$HWavWr5BeJGRTyKmy~qmUdmTb5!w|I{_!c#{gVy|PX#Dl?3M!f|rgud_3T-khDWY^WjJUAzJ=!u7L~ z9HixYI9QMIoj7nrbJf3#+%A#`N$1udT~0->s0_}agdgy?-PBf%S*8u0D%>#DO8c>C zf-T?!p!3qaV4Bb__S+}!FcY`% zu3}!HK@OMkA!T%oOo~)IxrPlw+Ccn;=QM$NZWHy^QWI^u`_Ty7d<2{Ptk9#V0hHck z#X~hnqrvbznx1eG-cr~`6F$OAIEMl!l?_B0>z$gm7f0L6i@4Bnpbf*hQkD!xsBAu9 zZPuph4#3mfhxG0trCk6#<=fy5`WoT#>%uxt7i`kkV1%~z1f&C$vI$7<2*@VJ4g}CQ zMswvx^-#|hpyeUK3vFW&b91Ka)44#czvrC()c7&XxnSRmJ1-~DkW#9fT zuI79=`*T$B(5YG5pN!|GlY?gV^_;zHVjbx(M4HqElTGULfsPELe6m`Ev)_du^J-_5 z8FAgbx7g8Atqinpo41I2t`l&^HsH49_;Rwl^1A)zoPItx)3G97TRAViAfGLMPRJ14 z(ay^Bc~Zc1*cCOk*&kwGAhpR1u$F>Z{{|962Kk5_tdpq`!wVi#tKlViI=6InD&0ib zX9&&t?!(xG8A77}5ip6SYr33;g%^0|T?%n1;Iv-h^aBI*1Gja>{ZFx0A>Rg(o2-7R zv`3?OjORC%r{gHX;a$klY;3i5WnnXg4o%#&%CW&^j1H%$;i@JX@6&l7GdmBZw^`e; zXJ-obU^k@e()FT3P=_65@6Hr#4PnQHgWL*RNlYtSDjoTqHzh`+Cr~;w&l2o)AOh1< z_dftJY?cr{#=rqrk(i2*J8uG_=HIp;;Be}=_4M#N+wPS#(ov_*xGOW24C+1g*5<_^ zea-#p?5kNYP9q3reqMlA9$i9x1|-L4bba;+XwjBy=#6+c=Q?D-@WLM>~WjR+qH{Utag1JqC{mk?XfdWb93c z(9ppCiT(>7*6c@zkZ*B%em%sx%@G%1mlP$YLb*fIs8#8+K?h7#LH9kWKz-Gd z&t9EZTgN;hzLhJcLw7us(IMI^QBtg!^g3w`VN{2Wmsboi^FfcxW^cm=(l4F6m*xxM zJ}yq_Ud}4MZlJtcF<&q#`B(($U7TyD#;mE#Anj$JE)ZH~xoj9=d5ngfU@wmiAX;AV{&QJ7h)mAXARa4z9{@*=2s482c3|7 z$zbhbS$IhQXH&hp}5c5Vr_CEQ>ZyA(U0p9Zm^ONH66X{=f*OyzeDVtLC@YV#nr zco`OH&kxkDEfd}_@wP#1?Q$#|8w_ICmSc5p8N?(8E0`Y#vQZ3{R!8#~0HfJ;2Ak5I z16ke*;TZ22sKu@n@H|iZfvn3alu90`jYWueKJwV&)krv-r|noR_?j$j$oyyj8euO# zE{{!nMVQRz=CSWyfyJKqC|kQ$$krjWOKXKqCVtDKY*8u9yk2^gT`t9nyZBKit;eEg z+@oyTdSO1FIzanly^v?JSb88@9vbu6I9nZ9DdH8U0xD8^XJMKtFcl4a9Fh!cyK8 zCR0^z?e#Z>*UkKeKH89-!UqsJi{CBGGnKNk-NHV;WnVUG52%gr%a-gBHp9-TgC@Mr zf6|9t)*#up`)Db9g$sC%rneTkAJ(R5)AR#Ee^@MQ&O^d&#Mz67g-v{VZ`QgJ$Hy&u zYojWKG82Ea7n6>n(f0IWJ&p=L2Ud5-^D%oH#DFCDrMx3_<45*lOWwg2Wl%4z@*QCs z&yVP#rM)lAu<$wEwLKpSDL(vfUA1c`Kpj7}s}}hwPObS1U9_~*!WN$I&_%oOIkno{ zZp`-#V5WD|TAvXXnfaHyvV&hDVNqA@yDx>0gZR^(*}m_EF7=Lf#>*nG$qiF z3CHp*tn38hRX8iVn!;{`h>Q5gQ?)svVxc+c3NohSkbp3J-HruCirdZZbLs40r1&Op zv9pO$;)?-p-t0J8;P6vlYNz=&6rbY*oO%k^Oug1tTNEw6!^hzE)KBf$miA*|s4}#S zATGkRr~pvy+Oi2Y@zD;hjX00VSKua$D#=2bj#z5UtySvcR&aRPEa?Ys%kVp9mi;a* zvzLuXVYh9fE#;loxRH9sadI|q#X*%^b{O$29K>;0^VV-;tk`Til2EL-xiUXYdYKN^ zFIFtzao(fFivJ9K4`obv#JCFg4oz}fptj` zVe)YU2%b$4hZ3UC5=2|e?|`UEvR7Y0SmVo;*A(J97UyuZyfJRC-qjDVOKDx=2xg5F zMZASuj9+~c#iyi7qJvgHXcRj5I@nq}mMFes3UFU|spqyUQ_O12Gi+58F*fug$dvBb zF2ULO2KGT!W=q-oZMBn4#3#%F?i-`SlQ7|*1aw++v8i+sav*39X$1XM8#b-ExYF#( zhS^685zlr|OK0Ok@yBbpRJU-h@1TO&RcvSru~B~`lk-!r{cb8h?*aIM0IYucxg8b$ z;kK##4DyKlACX5$bfk7a^~V}h`6*AiZ>d~9`?!T@L-h{!a|;n4?eW1nzJetui%%jE zADl=Qzx6YUmumA{iv4&#wk13Bka(Hj+fu7+Ef!k%70E2Sz4#B0y(GT9(OyjCCnjr` z+lwX}A*S$r z3$`jlER2ad-(B|>JU8>uEzN}`O&v`a(6#Xy2HZZtN@L6-ri}y%Pq9u z&F`2W9R){++b~D^Fo`YcA|7t(yc*|=g={R|k}@4I72EIrG0t@0?iAC3>Y1hkvj%6j zc=lFLE|)#kMEj$UC|UTMNt!f39K}l~6EQkXq+8zz-O%FWL~T(XFz{^>+37)Ia!O+W zP^(-RZL~}kTI6fA?d2nQ^VX9`EmpPEUhPefOw`f_i$Q+;cZsY=zL?9OPSjTAi}QKD zZ6b>;5SQ~oiQ2vb(y-?eSkNf(kCb;}@35;&VONDyKf)zgqv^{uwu<=Zwh1hIw3x=1+gRafF~ZMz8^;ISTy5=Wv8jna7Ox!}1Ffw0 znGMYQb=_uSha1W=%O5LFkG^09+xlTksD8M#1aTTEZ(ziH&Bktw6yb z<5|i$w74rBZDB&2SmQYLiF7t&oT$;*+-AJko&Pe96^<8&`hALlYgsnWE{+$g`FU~d z+|%N!`iGI|KsUvS)0_!nqI6KNF`{h09)_3gv$A~?#D^`;r!cIUCj#9oR+c+a?Ai`P z;RO@!*(*2W)L^}VW+dJ#`Z24qy1m0d|w{lf2$ExCJk=WUX&x>UB=ZRgSJ4fQ2;;{}lXY-*w zE74xzew;|>AL}b^B@Z`b6XszWNQh(~&%?bzbR_$3o|w&l8EM=joQ`BY=8M^3(@??7 z*gKOY#Ao^?glXIE%2sUSd@+?Tk7VcOi=BcGH>88!VEtoU6=;EG3&a!rq)0sU1}*In z!TK!}JEb&v>tCP@UPS7*#_X@oH2X2X7sQ8StHTYX=W%dKhy@APp}l8EwF+q$ay*q`%oz~vQNlSj=tflAYa@A5pR#qZDWOj2^>|BZ1LU#XZ8nw2n0OR;l zAGMqhEiuhy(JzWa_~dXl<3$mduaRuai{kQtXCd8-uVR{l;JW@(e2Tvl&UXA$j7|9k z^x45MgyFJTEo#?N92ubrIA}>#fT{c+Xe~x^lTD`opxdLaV=6>}~RQS#(Qy zUpDL|u?4?7Ok4btxWg1w1)k1hFdEKt)iDm1tBM%`t_j$01sB_UqwsQ7R82lE>Kd%? zj1Yy{mx{sunAhmrvSv1LsaR}w+2FsmR2=RLs?6$}?EF$OhI*(01+&U!q8jEVoyKcq zx?YEX;v(pE%j+!kWpOYzpQV9n&Yc=o0N!D(rWL&`KFsr9gtK><2uJcG5XEgKHsZ&I zvd9%;e_E_eT!9f6;b$w*M3lcmT$@PJ;6yd%{rC>hJN-(J;>Nngut}-}?4gz7AlY3E zh+?=l(kwxXkINyf=_)ZtN4`q5c6QGt6v)iy@a--1X4n;${e}^n76`lpCSDPBn)xJifcNHHBuo<^4;DV(m1SLt~ow6;?pkFoH1MLf+PklBQ_ zsPKl&7Oh45Y?s*^6kjE?V{63}|0+n1mha4A@egIu>%<`bpE65cCq{=phw7$OwgU-~ zAi-GaPnFq-b>c&QdY$1%*s676n%{Kjie;|MzE~$Fggpb{;)wRAO_BCn#rVU^HUl_h zhLwW-9x_WS#gN@zX7fwMiNoj0IL?VEE8rUF9)@&>I}`+QTtta6PK1^XL3{%*_XG}T zR0CLMwkhGb$dYU{RDa}=^!9*p$|qa|Lk@tq@VjRS%Uh2D|2v88TaRi#lbG)YaYour z$vX~(=+~%sK=TL;!@uw_{D!a{d|1ivNUP){d#PwJGUpU8AjhJTy+Nw-BNxp^?DO<3y=~^k^ei zItW{CqV6R#wh5~+gxV%?1BH)m24@HlZN^#^;WwMbeH3ooB2J?)>Qw{2dy=$*W>R9F*Zo?C45(u_ER7SH)y1)p#p)Vwv^aYQ$%56+ei44YHt1l^8QF zLO>oAvMDL#Zvq>-O$_CK6xg(F7&tEpY{NFOb>xD-fIlIyYuiNl+RsG|a+#RKpBGuD zGO;7oIJ1oAa+$qXCO*V37TB#av5!v4YvMnm9~bU0A5Jd$imqayQB}ACy?~kJJXQ;j z3hdl#;v|cE8A|tmU9<)C7w@pq=#G~iVXWwNhza4v*Tt9lTfuC`b}=n7_Ts1RV+G8I}!UYAK(j z9t4s%#HEB}*qh=?euKzvy(wmgugB=FcT0P)`UZo!{DR!1=RgD-;1c80W&|6b{o06$ zv;bB%8xUs0!e%o{ZMF+)AR7FV#bZ(+g(Vb?<*fyoX=mAAyE0fhVQ>89=3_E2{GE%BiM zLOcXWIC}*1+aad=yQ6@rz#74N?hsG%bHiB7PBDbv7|c?3ialG;4O36^5m@(;iEn5b zNykxnXB-?+EJd6t&H)8Cw9sC<} z15O9CGL&s>&|<*k?c~Jl>%%&HfcBwjr6ocVPcaw6e%vKCYN-R4#;9wLZ%yB1<;o9P z92t87beiV^sI#A8>%-T*Anv#v{>D^*N@>UPPIzHs;dRP+eMkZ0b@q!hd)TS06 zNhvujaUuyBo7%;@#k3--sGDG~UVD5qETCf5g#x$%=NHiv*P+t+bt?S`{o_`Dd$sK2 z=trC{tBh6UaXVLc4$De%0C#rqJ56YWe9lv5m|4CGkE{W^QU6@zpF-WWQnkmanPVy)ApKXICFr8U7vJX{i7T0s&*{xN z2RLk1@#gSgNBM`s$~`@zHr1^ z^4K%>?FKFO?KXVIwh(KP{}F>RQ)RHvUf zlx(S&Y<8GSEpTVwd<6=32v>a@-TciHL4VQ|_=wVRPdeeT;=%k8U5qAJN==0aCVtr~ zJ{lGZpkMKQmkT-g&=h7O0;XHPVddgONo$aK{xiG)V}a8+7dCGEXEg)fhtCHA(`cpx zL181zby`FosP^RK5|?yEP*&|oNPFV zBFn5fNau@a`4*yo)2TJ$G)nYpz$Wh(-{4_o8hZd6smwq&>VSAT+6VcSg@vbR#?Qw4 zE=1I>04ft+_HiH^dr;ib=c*X;@Fv&?>X2*U4PaFkfHU`O)S~|}nUuWm-PtI*r7SwsKcI!j&xuCA@t`@$e%ddr}(l^0j9}^qQ z2m5^2()a1-VEou|tC1G{FxMx#9;c?gUYU{A-&%5h97j8McNHD;z#^xEOWXH_I6sij z=UMg@v~wSx&A%cp4oJXx(a0_9UOP*_@E&5SB$^%=UpT%y$&QFn8%qb=B-syI#yot8uXK^!+SH3}2pWnpN zKzBSUpo76Apt}8=ILqQLMs+i9h^NWPS^9?RT*muzE-}-xNCsJEOmxzJzYW zrMulu?R$`B*7COajDc?BZ808uP(oD?^?Y(iY=dPBv+`0jP{!RAdk4`NM5u;do^fhM z6Rq$r4&VJ<#J>ORq?db2&(I-r((Xf2T|`$+Qez;Hd5K8N&nK2qaaWNe&| z^o&33*^I`y=p&7^xTu+W`byUgBD;df96#w{i6#>|tG@!^>0i${wX%t}%1?To#M`yL zl%-SM7D7mZ03iD1^`#$pT&)7xf(FvaK&Mx_J!U6qzc-K~EYZccZ!_Eyw59hTt?0kr z$9!m}54p{fB`LZ7V8BrP&0B1gB*pT7++d3&DUyHf2HPS@PYW*C5vbW%$YEgUmlf{I z;$&$*_Td%mf-H67$NbJ>6)BA${5u<}NE>1UZ`{WD1nua^sRx#YlJc6yvN z$?VG9&w7lPY$%VM;rJs45A0_%#!F9|o%lqUp6k3X_kC~f(Lc*Q%Jw}iJrU!~{16sd z7=Hcy{YpByjo%rc8e#h9TFL}zrRje{U7IM){@+lGCrMfV8|vC*$@agYlBY_h{|Uu% z{~>+wzldik)1>l77~WO>u2pA!BCU}Xl&pN>i$&q>|Y1-wm-$p#x9a7BdIpZ&qTx0?@nk~oq`J1r9?U?)#iKBJ5{jI7o|Ov?%qn} zjC42B&%G$EtxxH6>7DsGoBvN~lpf#5ol8&sT)Xj4$(NU&1VG(6=intR$SKt`iT9`O zMd!6Im6~XMRmp6MxIgn!Wd@-+KtR@IQY*G*iL?MldUd9LNVH1)c%{_BWJLC| z!dIkz%(_alvRSL8-}TgbO)7{p7v`(Q8>A8J`!&*B%vE--b}|NEDEC{~{fXXU`>9wV z^Is>8exMlo>AJrxR^chOUK;m6v7=PmT4voK4g8BLk7}qggU2-ezO7^~D79f$E#J$| zY?3}O5=VLxv0B)%Svv7R;`?mLmj6gR$|k=my%3BCRej20el_=@SCtE|u=-o2Z4r7! zQAni9_FbvWpb8@Z!17;{5?G5eDT)PdlUmX@_xQ4CPwC7ntj9L#6}Eb}RL_@6zI}z= z*hY2GDWSKHPQBRTGAKrE9V4x%qZjM$zIQz1fQMS`wHpEr8cB1z`YVXDJ z-jZGjbLM+$Cyu?fgX0@-Ngv#+-H?qzKh>Va{`r;^!`kkY+Ti0nptsY0eJpWiTw&98 zN*VV!Cygja<^!Cc+zBb`B{Ly2l0e3OHer{PYLq07sU)@eeI@s^gKtXN?5rjQGXFjJ zXWcC|dw_&qY{+gYs}2do{(~g+V*7SW^E@O#a2^tJ_jpU{B%tIzWIjN`8+#;GG}wOM z%Ql852c%)EZE~G)WZzd7?69hxQfGEWliEMP|NDQ3|M&k3|6W@Dl>Y}Q`BVPiXMcnL z_gNkOkN$W5k^Q&%Kl*q0Kl&&9H<7Y1o9SAJ`sjCtE`m<6594>;PFs$AN~`UHx)kQr zmd`|6>*bG7I~&g$li^=KCvylIe@#s>9OO#J^XBmZI}R{~VU}I3jh?^JPC?o)^Rc^c|l{F06_Lw_u&$9U+NYSnTc6qco!G2M}PJbXB)bWVG)8;H&drXS`|IqQ>F=>ll zKFXkD)p05D|5g6Dw6-7kaEGIO3gi)L4$Td%h}lmjF~yuuNr9D9!|m(R-8i2F&3L!# zKKZ!o$j9xGj~nti^Px1K=yHbvZ-=vN>_>)t{$6=QK5oco-$&A7oxV`uX%G57nZS1>GBwORZ$6y6(?UtVKb4MD| zS?-n|igT0N`9a-CY^1}q|DfNr|DZ7aEc?zaJr(uWfM?l+6Vem1n>KZ`X)g^WrjluA z*|`%^P6JO=9}v#6Yqn}C>|0|l@e@V~%ErP!Lm-PI9#kBY{Y^qnBmiqixs&Mx|>3^a5 zGZA_ulW~@zo@i$MTxu`>ryS8MK9{;1tpx*~0UaS0PiwvVxs=(!6ZN!~^l$0WmU`0% z_&WO4_v#6nv=fFWDwpxA5vF^p?+E*!e@h`IKleQajbtC5kpde3Jv}6IO8C1)S--PVb&!jOB^p+y(XhhSAD3h{{!1w!&P80+GnjCFb&m;`hY44D1zYu{ zwB64|0|@HQJtrl^xjaL>i8Gf_2833BCH?Ea0xYSLev5K> zlvS@v-!OZt0*3R_TMb>$az`?9us54#F~WcN8{yQzBW&UYX(7F3>r<8~9HGW>by76n zi_%bEzbzQ}-^Bs*xNoH-i^-q6uC4f1O6QZO9KOxCGYe1RYO*9|7Pl>basjT(xLr>p zy=Zb=bilU1xNqZjjXA9G-%DqBcowm9*Q6Pi^LXc+J^mw3!s(ZG^hc>zfTfCl zDz~Nnd~-LPuH41;Bz3bhQC*Ky=ch5$RmF9RcHr7~B=TzW9r0}GU8!xLk%D*nHgmDs zsk>4W9$&}=*)=s%H!ECXl2luTO&ttWDTDI&dT*_8BTY~*kCq=dxpp6woAbQ=Ap4n@ z=fTo(x>-&!g=ue^Wjh%@Ubo1}CS39R$SV-r>mxTqaLGqrV1jX^uRNMyKJ}B2AiBa| z?q%WImur^;1)- z*zU{Bk@6>|7VK1{oKFx@a!19PiF5Y4&V>0OW^R<+3)Q=$;^lb(>v!K~W>8aLZwo_yIo;1`%WtDD*~#`L$j@0^rixaq zeWLs_|H51B<3xFjPsxtk%*t$t&^3x`N{pyM9&`TTGN{;Zae}SIk zn&lq_yZjj)e4@yL{+gVXE1t4eBY6)G@fJ<_<>9&Xq>ZZX%y*X1%m?z2p-RZ5^_0+UL2@>6rgj za%f*U37;nL()?0?*@Z%npgPhtNLrWhL#T!rw>e_f72(>@N97iLZ6St2iCXzUdC~ta zIbyJ!datCm@iBS7DaPfkZn&pW9;mMH33)Q#v=X{pGNn=fvClN>pIw?;e!-V(i)XmY z$;P%OfGa-_7w=zWt{g_*k@+%wRiI?7XTH45?1cNpg?#xM|KUb?;Uz^c8d<}AtLa*etgi3QJf^#`bpE5JJzcMN*ufBp-bGN&$In{Q za(qK6@_hqZtu8v%YL=yc#D_-wMPO?d$VqgGN412zwbPU3?WQ=rZf~mjQv=%hTj43f z`XaEze6DSoD*ww=;Q9nq9+=1Xxda?BXAQ_R^DTXT_6aVDt}^1<0(@@__#0j_;(Na4 z`w*t6D@OcZmo0rxfRl*tjrgu_xIQ0)D|ZklgI1M+aH;D9&^ zwHomkK_hV#5^uzbDyliMTNjd_vp(jAdiaa5>v2q|j()yqs_;A7&{^_NrVuCb#Hsr{Z(eufmB|ArJ!Kvuqn z6r6h?g^zuLN}>!YI72L4OL`I@(vX64mq#k$h7_FdKq_uXWfP?F5u_1z-F`Qab7(p9 zrx%jRgW&Vk1w2dR<5 zt9w_$V)C|iC9 z;u2@Bfn~(utfg$nM)b_QCEA&da(%O3H}q#15U{ITXrd6Ig;77$whi2P96qBkfD7dYc+u%C z=s`L0sI2k^O6Zx6($0e3lhcee=$M|?jpe;3ue7*^%uUjMc~5qj6gP**dI=+~5J`Wj z+65oTlla(0+N}@dN}kVpfgSu%e#GAeFsOS+7WR?coA3Gp8}*T#5avm3uinP8trWVe zLzQY9K9VJ#-?@1lKEdjeZ@y5IPRQLYeg<3x8}To>Dc@j$w)kK7QXTBv zzvV*y-}BheGcwGLbd)f@I3v&VP+@P+CVnA*=%p!*<(!pE16`=!$vIMW+5LD{PVehP zQN1_GQ0VH5JPb>@rkTeRI%Gp5DNio}yEd?09Sj(X>t#wisJ@8T!q{~fZRVG93$q^< zQrAhx-mHR#daAW|)T=GHAb0nRLp~X)?7Se)67)KL$NOAdsR5FCQLYL>*Gf}I=+xaC zKv=`aED@~tCAp_xDo~`NnbuvBKQPrIoOoHDWyZrS?Am3y9lYi39a-aVXs5oHFY$iP zc368f+OHk_QQpj(oiTm2Q9sM;Ek(|l0T=->B7O!10t%--)FOV$8-Lu$|HK;~WWbYd&n@>Rj5Gjtd*k^={4K<1VqiS%O{bw8 z1it2t(-4mMtKRr5BfilapU%GfU4F;n9u8sbyeY3UnUb{rw`4rq?QFEal700f#Vg*L24evU8Fb3BqtfUxyAh7YP3cD_d3BdJE-xJObE z-nd6H^mKpqI6RWzP1hyipBwCrdjt{SjprX}saNFZP4I}^?2UUwTLX@D!ltwNyb_zJ z|Mp1ZCvToddOvvMo!Q5{@_eA%7vH3S%DDW{aR!=|mz!>eFl-P4CB`DN+;Jp>(x6jn zwj)N3x?%3aInva9#agIEc?w&ZuO|kTw}HqO_$ZrAdD$4&F1*H7Z$O#2SzOd?EVBkI zJd#227iK9@3-DOgqc0lq`Gs6m71}t@X~gfq4iUcIO$RPB;y0&o)i=$irh`_nIeyA} zd_^m*r@yk@q-+AR)Q+ojAL*#(zO?2@2E|!meI?0M%2MhpS%L2Q9=?3R*WCKbKeI_H z=O4=|S3nE>&gM)37dCR`A)tlg^kjc1=%C+O$U6`3)iBUO@hfez%EMP^{Q{IUlO+oS zGIIthPk|hKYD{@P4Iu8|{(3OAksoA1)UZ1WWZ~2jLzEZbg2`NA%6ikwtY5g&xY5f; zGS|` z#M2T{uHsptQ3Ws)?p><4lk56pc$5qA+%?*nhDwrIbWKTHotxTmmA7$ROtI>X)5)s5 z^mV;DhmaL=gALW>*5siBsYO-CuEyqZ{HosILTOu_~DTtA7v|>&{$a??0N@FVX`o!jY`K}T67a- zxEbF>M{M(e^{YdAu|>_4uY+Bk@zCVVFKmUgEcOhkmsZ$ZNwowz^PxtbC8Tzw721!V zH(5LPkn+4w6FrYs0rVUUO^JEvq|mZ^=~Wq&uFY+)T*ByOb3CMtOI3afj5;y)HnX9> z0l8a8;OL}3YfsCGXS*naqjo(AkY5X+UG1WL5D@kDXdQ){=+jY@2GyeYq@OZNp&XZ< z!?mx?8P;DJ8K~!Q6*|q@C;gSz&EcS}xyt!h42eZ2iL(c(R;Rf<2c$0@s61oQap_M= zartI_DkMU~9#_U#oTj>$EFSyO726NTIeAHVZ;aBy#D9{{ zZak%A)B!2I$9vbYijCiquZ47m?}g&7As$x z_;&}h$oWcS%Zo#9vk^hPwhiOVSL5)IUw&(NqO|7P5fxO&?I{m$)9Z2g==BuLSJqp? zytV6l9;=T^P}F0iN|d)+Zyt1;kt+wjAdd4V<2wtbNTc^mHoyUNIX?A5FG1LFxN)Hk zSG{tO_D6|QX(Fs{)aBN(R+($De)do0xuB8Ai1x(;3V11Z-Rs)W#md9xKmvDp2hTTE z#f}|RErwD{Ee7*ayYkpc#Q9BmctA=S%d2^;kSRT+X_ODQw5b%rQ*3e`JHwQ<{G2>CV}%mS zC*T>V6-qAuBp#Ytp@j0o@|f>RC6PBh%92+qX+;|#GU|u)Rs&|6U273{n7Qf-da%Ba zz1r7<-{Qf~Q;123L+F6Q*>Ul4_tD$TBUP8aLc~?*>c`|&N{gb;Jq1pC3Ve$2QX4pqz^&p0 zeiK#sw`z8MjNd1yc5rc=U{T2j6rz&%JaE?Pnq5cn`#lfbVGrCP58MF?!R^}!4*~}J zWp-$lf>%;^&w=~MYUL&$=rXiJS6n8q#UjB-!N(S8BFI^*G_(kMk};e3>5V*bgJOk? zKAzSAqx!f{O}}n~(xHQE-7WK^Qaq}!BgUHvR1Ue-A7EalG%CS4eAUaKs5XwBV zra)|bYfET{HY)!9UJ8whPraseGsw}Ks=`QZ_PWx!p{oerGb*~kr4rJDpg^2C`PELj zC9f-=3QpuWjVAUt*x0U&sgqizW7EFbu2kS8u@=~&16R{Vg1OGg;p}sV(un=^rjjV# z1F{=HSDCm~iDJ|D$qiY)OIa#7tr&m|T8;i;eoN`xeNtD#F;Yd0shtrgwWKt1LnBwV%v`o*ukv)DQB#G^IEyJ)n#b!x zq65V0IIfz+K`%~{I7oQjgT;yE%Hx7__yqXK=wo^(H6OHpQLbcUO1*FEZcC?p#2914vE+N=ANAI$u~K5Y3xrFG1nUeve3%61_HJ(xLC)bqG`rO^S< z?3;tiKO~iamfEXdqVOeq^*?)Q6Amf9rVxT8E(kYgt*@)V8ur!}sE%{L60Ys9P{x=V zf7SCgqX_{1n63*o%_m0(IR!RjIT{-ilHd z{Q}r>-v#gnq(688{7O%jd_;-lm-p0q98p@C#6@{B zcIv2-z#r_*ZXH#MO%1i8cc5hV>aWn*(N4XqtTf3Us@yuG|3}%I$5mBz|KsN#E`xxG zz}W`@;ev{ait{{Oa7@dJOv_3UO?}kIa>&d|uES$xW*i5WnFBa;QzKKaIE6#b8Cj3{ zSQ((HX_;B67gK)kbp8$E<8^C(6LmGHJ8rq}iU zG4vaivBgI0g%c6JmIz=e(uHh_Y9Vf~qR?I8k*O&%L|4#%F)(kwr#G(};JP=+-Vq`dcr;~b z8C)Hcyr*EhrF5Ne`teM}%b_|^dTfpnJM3FXF8UGI+;1cH!m@#9{9MxiBt@<_UygXq_|hlTuSTR; z65mMyUo)`eA86N?{Qtw>a4ItKHe7lL`WWCJ^3B2w=4f|l2rvGqe7iEO?u()d2?XT{2q>Rc0Je6RJDu~HQ7%*DuW zwJpW<)GrY?ERW`UP@Mp(r9g#2UOuB5hvk*!K*itR0@Wp;S_V}7z1u{!1E>ly3-Vtq z$9w>k?_Y;?#&Y=+Hz0!06xZk*5%2l=OKcKA`rTU*F^^|4e9+5v!%l(xY5CYf0p=#X zx#h!Oe1e>>ZZp2e{r=|Hwcqf0YU)noyJmnC#^q0cxz9bo<6vUAvj+0N*3>oXcEk#c zl7EZ^0jikcwe@v|^C{9D(Eyw7ySXFEe659O*3_juqN$wF-8Hs6Vu7VrQWwK8a*~AM z)G!}Kp%{xYuuCvf{=nTJoWf?Z1U3&N?9*`G(pDkN@fP;szXZ2Y{fr!(i#0AG^A&EVeaU+T+8dL0zf0jrWAAM8q(tV%rUDZp15 zFOTa=Q+<^*`Bo=7?yHnqlTclh@2C9Bf@?4RmBT)A&n{FNs3hBTq9c2|J=bUDbiAu_ z;kKT^1sq4kafi*6JizbIU z($)mv(n1)~^)dFmOL4w=-CNLtAZ2>+byNlST1`9NC3+%QsYA_zm0ICkuFjMrSbqhD z?fT=vN(>!|R)nPmO|Pj8prT-9jJ&!Fb*iZ}R&i$3DD~d!Tk;aYBrmZ4s6+0MN9sU{ zn5$AE2b5T_w(}2c)UITs0%1Im{U2=X3jrGmCL8G;yxAzy>#+(OnYENG%xr~*Dvjjp zom`zll}VOb_u6Ang24vr0R34D+Fe`uPr{ydd{WeS0gv76o%lAc%ixouigQ~#5<*F& zx5Jd~t&5P^a63&5?T&3AEXy(e6vveQD7bAblAgeQCS`3SnDcP>;p};CY6INo1vi(R4scc zT)oi9TT#mNfPrQ~RA|EuTl1rp@X(4nH1{pg$I(jUKWg0hXyura&l<)m_%@2=v5pM1 zls~Oz1Qo?7p`mCiH>8usP01Xl8!<{x`Q!G~uC9_H%WY{{U8SEqyFFd1tBjSuX+vqT zO17NZp036!qvXZ-j#DOP=G*K>+eCZGw{<-Q&uSmg_|Y| z;*ZuC6X8C|IcQ9C(1fA;MYqi+JR41z2hMZRgt^H=V5v4`Lf|2A$lrK2W0y^7hQSFm zQ8F|>jT`Q5o6P?rE7RrI+SB=XrE&KPVY2QvXOj6T5M<6T1)04Ql$C+)O)_6;P1h5Y#t)O(u%6N~HUZfF4@^_* zDNgxHJH{ZWLw#j%ts;+z|5&59sg?DW+Lmx5Hb`>+QBT%Na6>9u+kpnkGD}#43cc1J zvvE#riCJ3ZY5#l&Iv>pU9&f1h3%lKhTN^980o0=g7OvDJ<-SkY zcu1gX**lw4TCy@JtiM-0HFup!R<>H?bFEzSS}19La<7)I^X(LiwN??oYsq!Py@b0t zUGJo{N-At&s7Z2jIzpDzI82{3e>Nm!TN(oGRT zKH%v^42#y~x1=w-DUIbxxazcF;2UZ5ag%=^_^X5 zAm3<0a*8rZ?%af?rYH%C*#KZc*~fr+^wV-J+@fcbI(C25elHhSazcRjS~jJ9Dav&J z1?V{rVw$yks*+-n3!AuR^-$7$#HUGjX>kG`GnSQWDf*j9;m$2dbhWo~T7IE1?dzlT zmRBW_UteW_{B9Br>I;K5Es0k1|BFdS#&d4p5#IEt)_t`lDZIE^SN4y)gX5OOqzJK~`BP4{GQ-_qeh{4mi{hK(HRP zG!6Y=K||V?rUsvHq($M4OE7PSXpkzJ9NnKlRB>IK<5X-q=hx4Ax|rh1ZA; zk_3w5xIH?OaOX|@+n~AZ_IX|lWR3hKk#0V%48py$)NhdTm4B95?FoaGq@a>UcWD$x zjfbI1g9j@u1sWMUdT27 z1!bVD27=w6gX{%$Z~44*CEQ+samV9BEqJtcnDUPQ2xQc+)JRtv`!g2C;7V8C#?3YM z;mTzEZ5ys+;;&7H@)7=uGnC$e&9nw!rjVuFVubP(qUVfII^(Z!gwnj`jYK2{r1)t% zz~3X3`ToO!8Cx*v{gEhU6h3&<&1WO^V*0+Q7qjO@y_hbe^kS}z(u+y(6w_g}Ud;T_ zdND^wb20Uhc-U?fv%xw>k>$(r1TZN zEcEw?yZ8F0Jjks`-w5@R(w6#8P&!9uL8bCzf%9%qXyfjCu;r{gAg?a)emFt-pBz_@ zroN=4hE4avJJm+VUs9r&JP*DpF*+)pJfP}Uc(5yz8v`;K-Rm!d%#8_*E`g>@RBR1> zyl|GsRZr{giOSnC`Hc6@yKy?(rT&(J(x*}i7(a_(*d*l#xmf~ro2>K>dkbi)?&O*s zN7<8=Q(+h4@8Sa32zan{^otjp$I{d(N=qwdz*^ErQ?$l_iuUW%X|Qjo2wF$#Lc-0%0qK`DmE(Uv!rRtdv(qtQ}}mu#A?ukBsV$I28bJ-w6j zKN?5!3}u3UI^bB{K0A*of%!9(rkPix@6rJuDc|$JDX{0Wd=3KxKX7{3uIdk*`rryi ze&Dnwu3#(#3_oxxRrA2La0>iI`U9tsYc&s?)~LmW{;$d#r;leUSZ|+O zm&Q7jc5x^U^B9rZ#p^ZkL{xMV`ztJjSX`qQk2@DXb0|vYiI}?-Gccs~1p}8Q+JqY-Erq^O*mEOKqfzo+qW~qql;&}xu|KBD|L}F$|AQDG-D}7CWVU?yKED*FI&NR zwIxa$IY`i;CCb9E>w?`3OqQ>)7hL!ZUHi*awgki;R*amEY^96*iNZMt$SV|Fj0g|u zB?VVMqjMar$48NUDS%QG7s~2wk$=NI#vh=|!fLS;;{WhQ~D!uPbwF?T&A_(&#C$jo(Ke z$CLi@r?aB?+TU%sgm|U$0*)b|86RA!eTc%AM9I&-&!!U_|yBCB^eLd>s9_M%kvqh{S8lmfgot z$G8Li51*K%31Q@1i_OoY!|3o@CD|V&@;$NV~_TWU*`%7a*5+~HQ? z;9e{zL3;`q`A%l^yr(fKk=D?JD+JtA<>hP~4cJ20`E|-;)+fPeJ*~|Lm2^x-u7KJG zcHBU!cE>|j^6{cU84+KV|H!19*B>)fE)+v#+*r_bSRwDgAX2@yU=91Y@lu?t{8J^s zw<48l6)0WhyigiYprl4!3BHT_KkGpL;@!{uq?U&KBc1nalCwaG*LN4umjy~pKo-BG z3v~2Hfzq=QTlZZ`M|o(dYx*wbu%+HJHQ}A0;c?MClghKIp10x9i@*hGNh9_sF9hYH zv2X$-Jh4Z4T944H0lLy;ukwgIE`+A;Rr(pVh-^ppLTzG$>FQpLV|E3*cI{I_ta>&s zgz^be82Lxl zbPYMIoVUnB0;$u{s`-yrR!uOHpm=)L#Bp-~~tOnc-?C zqT$(nq;~8~-NM|?k4d~+1j{aH9z2{YpZ#{1AMZ<>f4pzmyxbp)h!~BCAId(2S> z0pW*k|91SOGBV`rNNu(0qwkeEDKjA%1H(IAhW#yVE}uQW%M1fU7BFZfvjcGFz5c4{ z_Gmw;J(JA>U_|k_JT{X`zEkQ^qaT#c(FSIFZS5>ts;$hweMM=-G~)*)p5Nz@@v>tR zZP5Jt^jsN8LbJbXr5!&gNu73D@6vO>8F9ZN{3^)(6#t*$KLaI};{g*U-9xb(6St*3 zw1EdegJPO|xdTji)5_E)8VYDVq8@@B{&(zprpJ}nu8&T1G z9c+L^-w~KH z{r0Su+8w+YefvPP))_qSfRyQpQYF`tK{rd`FC3Ps-v#bLxC5GfK^bU-zPq428`xcD z2E(1t`cSuv7~1GClP@YyMBpq%OAYU3>BdB(!f$-+UMR> zQv3~DUPz~ID(A!BEHCr4OBiLeOQ{uo_J{JA?6$Z<{#4Fb5`Vj2roW=`DwsM)N;QG~kXh*QYg7zrCY8B5e1|)VTJBr-(LU7U62=RuU{er|*@a zZ76oefeyeytIL$^kYvf67eWO$kzBp+D*LSAqyH|`Rr*E!KioOu@3JMT*c`}Bgu9n` z$C6WGnNKp3$5})jKfUP`(madkSL-bh!+pFx^Np|P+%I!ou!wt>@R#p0M#VWn{};~j z`2WL4l!S0rZufep>2Q@=MY2V{SVm!fqMu%#kwByT#Ce&@D7l76qL=-Jtx6)UO%+gy zx_atVJ>fUielOnP+EPOd!GnKp3JiJxooi^2fFIS*P1A!#Z_ZI4rdP{SKCkPD(*nX$=jYKCo;&&=-B;GTUCN~xzSmbwZP)HLbO}|0?ns}1FYa*85 z&AZ=dQZpo#{6<@vAt?*Z+toc;90TvaQD6%(L~i|?Yg7wS1A7!WZE`D-7nC^MtQ36# zu9l-~+bQ>{yjEdX_RX04a>Skeg;KkTY=4FYoa@JK;xS8LMNS+5u!~szJDo*PNJH&n zf&R_6)5fQ}ZrR03*~o710AOgC|5k z>e~9ez_F@&SLpCi(N7M&LSe&1Z~6XZ*N|aim#;sZ>l>*z8o8oh6yFE%nZTBG_urzg z9&+`WAdbm$z>lu5i6Yn2%JDSdBr(-0FF#MMUKOudv*yoiNgux|rWw1tn@kfwS>#85 zps?v;y?ph1+BIF|`s4?_>>B#IxM}fEVb<+kXz-h&X?WJ=8cky_%*GAQmJYEOHt<-) zmHnoG12q48*Q89*0O#@eX1MaqpuCtaDfiNm**)7wyYFiqaN(ej7I%ntIK))>vF|8( zrg%C$Yo@>hO?W}$)^m~@PmfH;*d}|XxGx|4jtl#I@2>KRHpUP=?Cxy9zbi6ytUOD|KBDVg zF;jMaPo3tA*u?AKl~Ej?3oDcpVsGQU)Ro_t8PA95Plh$upA7ryJDM?HOz_9(u88}j zKjw><a&T|#_rBk;>qAd!YvPkr_Re-0AzhL}EpNxaYm?%z zn_;bp%+&Ga_-H&=TPjOgsX1X9zxAxg7uVAGo+Le77@~dQ3Fp+*cs!=ZV+$2;w$sDd zPQ(Y>jQ9`@GYv)<`+0c}r~zZuc6-8(8krie(i<84we6lTb~JAFgo}MOemGi(k!ow3 zJYf*M7hw<4yFBrLae2ZZdYdNPZ-><^Mt_}?+f&B zz2vn#?@Z4tu!T(@Vbv<>QW@%ldQa(W?K#3jI=#_%^>yPbo% zzw1`F-GWoGRW&FbZ{dolOubrj>S`IwY7|@rY$-a;^y@v{db|{?W!$v7FM7w@5r50- zKJOimXF)Q`tnRbk@r8)LZ*`ycj+f#xwG7$UebPI@9;apa`MM8#$K%LZMxd{|&^x{u z@gctMUEc9_o0bvg>)z%apM!Ye>)w)+>CJJxmJ#La-sqjdj`&z#_iFEW2jUZa-OIh> zaq&w=qOUvKJ6=lAGLn4VS%^A~l=T{Y-i*L?`!h>v6U^q<$d& z6QwJI6s9ejW!JbC*#_t}lukQ75WQ>YVOxZ@feJnlaa4bq=;^N`knkeHGSRYz{*fN7 zEue|ZL?rEBCR9H?u9(g*6RnJNdyF>8NN@R}C%upcd?;EO$n16Ltq(=BOe152_Q)(< zdP%%*Mvt>ATE>nV1wFjua}d9)MnPBac+BHw?5k1G-a9@A@rP>^wDgX*sanSI8chqD zcqil_;Z%)+2Hx?uNE)_W)Xgl>t=hu|3vw+=MMLDX$a>foqILI#(OA29!f5p!Jz=!^ zcAhX=eQQq`jlP8^Z1dNedBXO9OfAXtfmYnGB5c*_d%`${5bp`Y4Dqqx12QZLY-hA5 z9%d*K;q?1G-4Zkfui`x!*Fl>24lXFtiGNr@Fyl~1J3a?mo_@He+g4h>Jsb!i4J7=7 zG*HNIo&q76Up!$*hR5xCL68h@ch|#^4BiSh!jKFP!wpFWX+LJhD@6xO zSUNadgLX0pzv1}B;nC+DksAT;vW9jG8(T1$S)gN->e22T(KM(Cx5jE$Hq^+o71GTd zF{W8v?A3{8)^3#IH^SkgrAk)q^H3?T1m6b(Ebu4-nB5za!NS%$-7} zu{FA7slMyCT+!1K{m&pdG+>Q*vWWrjNYuK`zDIX))`aJXc>ALUz8}DuL&w*M_y`?i zF?fUxFf!X3Q281W3IAUTrRcTd4Yi_F2~Q+ez!lP#wW4i*3=={h>dAE#aUlMg^l5qz zztQO7^?0a=cRUL`&Q8heM4e1*)9}&WtWr(WJ=F(&;&~5U@X)6zo-p)jq9+V}n&1gT zpT>E@XlY|SVN@b+<1+F1YZ;y})M;3GrbmZ-wdXwv@D`r+grQG^JYjJ1lqU?L-$2-- zTd!4#zlphAPyBBP8=6yF`=v^luM5-TGf}`LPXf5)Sr|P5T#odFA&KD?VXHRO6Gr2B z&JzYV&v?Qx8&6k+ty-EV3~4>?2}4?sBFz3*Q7Xjsh$jK!;_XUCe2Dg$hd2j^`Oy*yzQP+_4Vl}ZckTWO(D#fF7`)G+ClCOV|jM1$iB6AdmaOfH5*+BN-jlj*6dkeEV%kPAySCZx8fuqk-qW8oqT-Dr!fIo? zR6kF2$6Icq4i)E#+VozY=v47J0tk9KMIZdlH~zkHiVfzlz}ARnet5g;pPr;;r24ww_Kq(^ zd~aX(Ebn+*6D^~kultP$L^c^NG!3T9U-OH8GOH?&SgrBPpxBmwRmuY$?J_ULfvod?Y5daU=ZW@{F6C z#rpQ>ac=yC-(lPpvJUId7ZGOjJSVHYHX^6Jb}2&2V^e)G*pkP`g4j&Q7q+J_w}=>@ zd|c^peT(Q7ogX(aE3lHmuWT)3gPK|Eb2aMlG{w{@3@BtGaYHSy#ejbwVr0$ z4ezv^WUZ^2#=WJdGw@}ukLHUq^!2I5#KnX)pNaF5ucearMJ```?8Gg zy}mDxal{|(ymu1*Js*&_NZ257s*KVPShTsPd0Gq`^DrgCkM-zz7WZ-MaC3a_ z%=)TK{S~kQfcvuwSJmV1TUo&KW&snB(SuZGsJ!In5|#WxG@UsR@^M!sLa zqS)=?l>E*qy1rc`$u}W^9U?jE5;*6V#qbQ^HHWXUwl-vqq>VpC89T%anfb6V`F8w9 z6t>h-ZLKt^u(dXPiz98p7iIKmS^0MMXnG*M0uEO&rKY#j;o?7n&j7dw(hJ*G;Mos6 zZ&a6V=AY@bI?|?mL8&g0VCDDNX^czstv??8;ElU$)<}C=0F1Z%o{$MwfksaPb# zwKNR*jY~9=dlk`rmxz_uf%}~zDzp@Zu@aU0_`*$e6e zKYC`Tj%WE!F(;&h8S_1uUH1hg7l@>=mB3}g&Yxe9n{!?Ng2onzC^_yF%`FhE!tNuU z)4ws(&lu^k{=l_JmI@p=+{^Qmp7)%Xt}b7ZybF1sGxKgY^SX?@!B>%AaV!i%;f)A&iYR2a$Y>;ixpb@4#?ywz0986jNC6z~f-PWp zRw`P$TeOj%{E|-XhMJuJlFD|AH2L3O(11Nc$fLiYQG0|_Sk2reK}PQ75X^>?l(<*K zT4kKCpuT%Wqec#ppANxZ0?QE)(Up^BGzDdGxql)aWiCXSMYI&qv7x~EXEYvq2E^i! zh%km)m0+JJ!6E1RNeq7sYa z>;-xm;tuB=sNDpSCwt49^QpsBxh4;915#HG>Bed1WjLtR@kf3J zh08xlsh^3os1bl-`iIx>NcYC+?@*5KN!s$6=)}rgM8A9{dUiqEx&b;hoS#XHJ9@Bd zdaxtxr*KPNxeumjQ6}>Op4udvl(+Dd<uRiWZ^InlZlv|KSs5M8Ug6qo@mrEkwSW zW4~em%1Ce`sGGDETZQU$@!b9SX;N0V7#D+z$+rFQRru8$CkL&IyP{!0; z284$iv%Nw0KNl@pl>&lG`U~^IUm~mk`m^5BL1k zZ^y{*C?@mU9H%t?|KJ3zJSw`0e?x3Gh$9FXSsdSh(BR{A^QcG)e1X&Mm$z+yoDz?T zq=2=6`5KH;i(}BO@yA3o=z9B@s4u^VCUi_B*sdIdDUhV!|5R5+VWG5u_tVb_v`;U^ zlBlkgH;#!e^5-Wg`M79|%+DMb{p%D-&rw*7mm}YFU0`4^-)}ehh?@Okj8eV$8qv2Lf6&K#IXw6n^Q*`*bXn+6^VA;>LWf9 zxOu<2^c)^)ofbWb9gYN)#rAZX%q#XHX*f900Lv4;s)?%(-WMqnsZq=EZ3~s!7JmvK zH#j0J4p&kZ-Yg#|qei|GW1~8Q58z6=TQ5-SF4=GLp{(ulsv&KU(8{kwom%-rKI-HC zdql9tj~Wg>LWjQ+$>KXm^FohcjjM)S{hj$d()8ahll$hp0UcWl&gUS!<<_ImEg0Qd{c|G^0(e6?Eu`Vl*fFqeScP|(5S zboDe==4K(DD{#&c3j11&4a)^l9)kYDVC%&rwBTzIB~Akl!Ur=-(w7JqUoLN}9ie?+ zLoJ^?Lg&BcmB%9#^^Hg!(9Fcy9JoA6u^YHXRKYzL-wpA78|@J5c3){)gLk<$Fp*z9CMUT{}&xCLs3yH#P}Vhq%$HxE;&X6 z&cI~eIznU5h;H&F&~ygf$hjkQj^ka&=++q#>w5w;-lP{AMb@J(-wK;taD;|_D;m?~ z%b4+vQ`IQTVcPYrh^jFRfF(GJkV~Hwix_f$E8;{lh~fqFc=YaU1LEx+w86(|i>j(M zSl)=L`#B9Q6;YiWsKft$u6Oj#K$v5=Gx@1=SV0u-T=L_m^>KGZ9=+Q{zCgfo+P1@V z{|fx#=a|DrKZ~BCD+*-`T~ZI~1WA=blb3?KV$nXdHExMPM#;}{`Y(jf(UaFPq{f|) zGL`%+!UO%0m$4o@#8kD4y@F=RC0ap|QL^H69b%XW=kUX{r4%IxaLEIUMVF{wfcgTL zjMP%IbZ$pUm8JKoQu^B!rRP)04V1p!qD`IUX6c@i znF=m_86EpYbgp?D8Fjv&^ULc%wSN^6z8LeSAEV^6LIiFC8m^8+z33?FSt25By&fuG zI3x7(73V&bM)oVBPEc7n8eh2cMJB|4SG0(F^dAU`JxcTLicX0es!(zT;al*6Of4zW zwZzd;3pMDf@w`db8M=2vL{t60MP%$>(6k3DMK})~G%9Yw=XC#uhzg!*QpLTHLDke8waY*ID13RUZ>p=ydrRje0Pp97ZcH$+ph86|lu zYnQ_;r}lOzXblfh2=_zyFNlf{gP}n|R0rU}9n* z8dH|hm?F3_WpQJAmRkM}ool2+M>tO((ghc|-xSvTJ`6mIVO zEmB)XNiF^-8aIY+xq#54XLk^OsCIKYX*NTSf#V?uuJKC;^umqm^{qyb-yATicZNY_ zMfEoD2(o_7Y6N)^#e37(H1%H|0wGf;!Vk&R)>%6ZycZVP^LXo?N3P!jmSz5dPHd}K zw$cx(q2hc?r!&IY5^q%fE)s&z0w&I!yQeNUM2q@+fyKMR2ZHv8>8w+Q&LP#&>FBJn z%i>MvTPB^4m~@V*hR*gToh1hiI^TYX&VN@!=Se_4Oy@D+@)*>>>gX))thK6!&h{pq z?)_Z(tzsjqq4V;7mU)CzGwJN`5S?|ap|edjbT&(=Lgp@nAF6iTom+~G-r~Hhi%N0k znPeV?b@Q%vGRaIa$h2NzZ90dv zyD+xTToJZb0;N1)aco_+?$uD!)1<~vr^e{d_n~wamD!&^WP%b*in&$&QE1fk3eyzq zIV%DJdYa_Y(X&{9?sG#lsNVqPc(jZ5eETZodwM_Zx(c7F`5`)URU~(sj1q2D zSaB7n<+^Hm?_FVWaEA`eVlLp|C}&Nc#eR_L99~G>u8BI~rXWRyEuVFW#$FSh>W|hd zA>8T7R1XNY%REgH;Y>#w#z9&1#86C_eSb}~7}*S5ctE+l|LUAaIQuY~=5{w`Ixsx8 zT(e**gNNWHfai|7c#Wia@^u01AMigpo~K^;{~G?ePA5VtOP)|;u_0U}#191a>N?;V zYzLrqh4j0uM$^gfL}cQ}D9O`_+(7si`aQ;selK5l5pa)bSE zsm1pqvO_6C9{;ffVeazop`-_EQaDd?F3>uadFR}Y??p^-UEt(4!dR%$IngNIYEo|u zXW>F-zJBqIAeVXeXq zj$@kKY{5(+|Ke(ZFS~dKG^vnvmvh5MY1(%`aC+>5Tpc&KLo}%xZkn6i{Jzhm1$y?+wG&zm zH$QSt$orj#xoN@NESA;!q;sQG!_5<@(}%g4ScRLd2tTB2w(iG%*gk;N={)9umCVGsE$z50&c6fxcYLRD3Zsuc65ur=6^ zQcC>!h@0f(4TQIQNbc_u$FgL+b(k6he%hZRxbHZWb8C&Hv3@dat!g;xpx0&!d{aJ} zZE)3<=|H%AZzWd|I4>=%N!76yi(=TEa>IY?uX0@}f89$Ve~GA=)QU9Wya048wD*8s z7go=|gx#te#kc;x)?Ct$t+d)qMak%QT+VtTI+ z#1eW-q|2N3(WG0Vl~vb?jkm-zv4y}?qNe2WBSx#OlC}=_#vH(9Ja|^k{hz%Qds{?B z9RSQ-n5f&(5eG^w!Q4?Prbe>%Qrc}XH82gO3Y0o?X*c>w)bJ1ohiTfo{>ydV3Gr@DtEwBm+ThpGT(yy*zgzkkhDWc<+D3O{$zQF zI}7>yC6wk<*~!kl&tvHbr@|#eIVG%Su|&M#cuZ%5qVt+;sizE3+(XB$I`bH}uVlGF z^~;3KdV%%4Z<%PC)*Oh_F*}um+g0=t9SAA*LEqX$a!0aAFd?q9KU>mH>a7c62Jvz5 z0vtF{4DVkTK?&IZ3!*Ca#oM$((Dx`t-VTSUOhiQjB(|1c1 z>VHG{A?h)$r$X?CdG<7D#TmmifRppP^_EveFZ-y`BZ{hcG)1~c165=NW4o*?8nT=; zvz*brM#VV=sM2Ri+R#4?#XE#_EC*tOyi)Pv^-(|U5zYhM!}bB4*(>*iJ@yQ8vw=qQ zJ{^S8?AT1fCAr7>=XKvhz3+>}z|VDJC2iPVntERhdVvjj3DmkAjh6+=jjJbMDzppD zU?*UT0TUO7?OblNk?1V>2^h z4~;Fyaf$TZw6z>d5Vv>JrE-x_H<>v_{*lPb6VL~48WL#4@j9L*UDN>i_0N{{R^u&2 zOU9@@>$XMttNn1rwk&OrLOzGNlrWQNG4d3vwj{er;wqg)#W@pT{#=Z&)E*aQ>7B+E z{IA|iNfvd;knjgYf_q*el5ECNrNISOh{UuvrbuioI*5_2#+%5)Thu+@@9n1Z7PXUn zco#*aD?x85h)X5GX?5@lP833hK~XgL|4;JR1B9P_YJ|`Q50$F3jXVXt1`AuKTEUz-fS0 ztzY*QWMx&-+bY^=3Hp!kxt<>6vS$%cdbq4z9hW#8(Ggr46K&k-D$f2)1~{~sMn+MB&*)!cP`j)_%nfcob6!LuhmQlvT4B$# z`P=i>$EM^Z)WQz}eFNI%MhoTMqXP3n29C z?pIK=abwzcn2FZHEheeJ0N$tr3%cR9TIugV7(Lf+@(WVC$s2Z4?;r^MubsH&Qx!7p zqV+*)Z07r5n=9%Sy`qG^Y&*y-g_qvZdvwHtT}Nz~Qy*X<-BQ6q?k0l;JMukHUtaam z0qM8lXz?y=Q`8N0Su_82k;pQ9)s!pCiR*>a`W4XFV3ijr-wsxvkS{?`gCU}GyD6}y zI!pcuJk?aAPd3Prd&EqWqTfsB;C)-fu z6tt6cND~GkzdPGvuBk>lzW_aMs?O&M$gj3KRs6aG^tZOV3m~UeLDEFa_40uiU9_;axN! zbJ2n@H8HamSoW}Z8OxJZC$!gs0Z&>n(#~8cZ)>FUlz`$402#%X{M(;IaSk7Q$Kr#Q zj=XpHE*O1%b{|X)-B~yc8|F4*ecSFYX*;>5Fy&F!S#mD~TydbCT8FEzgk1;SRplV> zq+Q`^s{G0>T@LB*B4brKj00h8_VgQy;Cbf!Rz9$#q2YNt0P7)o4u~#>)|aE6;IZV# zV^@Q$?`p7I!|logE!fonQ;c(K5o!}iCMQBw@wYQV9gM$FMU6;oZ_@lHXy%JQ*dE>A z4qp}YyT{dqYQ*NP+(G>m^$g*qP}>cZ_&60*`8edG!-9Y&I!v@vLmm&FFG0*5{5&uTCd}JaV0cd+!_zjQ zHVX7${%8kX67X%%K)%I9V#)$!-gH2OBnizL% z@x?yctFZIDKzNXq0dZZo)A@#KR7VHAi@#7l)5P<;EaxiTslHzOEb4UZab}xSAa`?5?D5rR?{f?!J<23HU zrMuvB0?22)Ma%|F!&boN_}TN~Z@l?+L%@87JH1~tVUCzEbqi=;9d)5R%|&TZYMMO4 zMeC!~R`T&3bS_Hm7SbE}943wN;ZYB@4Fj2v_kT>5pX1Zqk@ysBE8m%^s zd=4>Hy~HRCgmtTNGFt5*-*%B-jJnn4+{S}YSs#Q30k70VYF~`2c{G zUbUU3)>Sj)1E12ly6VuxOMony3=Mx3P;dv?ZTuI?E1B&XrdqWhTr@OR72*%X7Z0<$ zb6Q~73^iuUF~~*pVqtNPxoAr)EaCa>bUao~jIEEFo(T&Rh5c;%YfEj1&l+}ztx$S` z^wlRW3W)>kVQ6Wbni7;X1a19FbIJYOr!+NA9U>f6iGulJqI|Z~r8sqo0W6`ehHa<0 zHnpF8bQ_(vp}Pv)MrAfNs$X+tE`Aqnd$!dWRr0`kkIWAZx7V=yBujlwvw}+ znvwJ%j8#i5v}%&gPqWx@izV>L%o`eB_pQ{fKKN+-Db1)4Z|Siew6eY$B{Dz@Z#>CC z6>_yp#eUl6ZFH(WcpbcrF4c$dTkfEc2B^~B+bF4lIzYbu2~BUHCdWQdb|FrznPuEfZ#2Nn#>bzq*xON;L^Vd-g1GfjCq&i!XV^iAamgn%AyI8s zQ?D1^$!_FLR3q99cVl)#;v0u$Z7Z-ES!InOSjS%bq>T8uF2}Pg;K>IQeW7crJS_S0~IIuTi6a(ATJ&_NoC$$=m?a4`I)Y zsRfn97AoFWQ=5c}_nt9*6|kJ%5o8vV)*({msrj}r1X-T7buNU5<+juw1EGa9S0 zQH?(>BkmAJgF!Cm82*{*xb3u~v3f@SVJj_2Qrku8xNusC?+#>KAA^Rrz%~36I-jIQ zMV$t2_EkeoJd;d3XtZHX)N|rBeDnNNraq95)<>;>e?oFob*S7X-<8o+EwhLpK+H@4 ztdVlPpKxs-a1=3)_Nm6eBa^U z8*d7?ew5!d-@twPW181h?PNW`a|1`as(q8c-^^MZiLp8+;n7lp@$En-RU7~}_&dA4 zPT=lrahG+sxLf8^w{Ea-oj1{-ZfZi{0X=UW=kuFsRyTD>=3Y=x;)62%EpB$txR0^} zrX)P2Vt#iUQwf+jDbk#RO3^1bj{~j%66B$XF~1X~&+jZpoV#-h%1?3M?U915dMWOb zYi4iJ!(Yo`e4w+$$G=Wx-*&<1ueJjzG{1kVg3Ve$r zn{cr-Mht^LBEMAN-t!T)N>!KOE^y2?bJtx0AO6H9I+F@FDdZzc>VY0)?Pf~rp+3^Q zh^M4W8=}hukR6lZC4D6KVy2)Ed?X)qx$x67V0#&6h?9=@fcH^%GhOe&1N_Yt(i0_) z-AtW&!i=%HR#yR2HqoS>>Rfr>M^x4m`I~K_*j}jY9-F9LFEuG-=|@~S#=7N;n`lBW zNGfa#&BK3eL(qa7JFey4E+5FsV~a6nx>@z!-b@F20dMJM9bd>D;Nj-MzU5yZ(S+XW zAo;^QI@}wybw_=9R(jI$-n)+L&+@kKIO%?GwV5FZ7Q&bzFbH5;f-v%#FoanU!*wA* z8z7jec{HRCu0-sg$JHt*rZ2{m4f1F}Ur-*nna1{2Gcr?HJrBYmIRfc+HXM>ePQ-m} zs@QBltpi|+0mBZ7gFUAchIS3$f~)92GQ*jwU04doCCE_io`4HOLmrNXo5`bFNQIk* z(^*!J8Xy5CGYi%$3nn$o+bI8xXG$MYMW=Br(U??37mini-CxfRl2$NS{b|U?XPn{rVPPn9Bqc(pNW%N^r_B+J->t!tZu;i;q zbT?o;64fPdO7tthacu#yGs8)N{nb(3mR5r=+6&+N|A23u)3v3)nqZNw8|n0;>QK?B z8e|{kQSZl~te-e(sGsB$Glb(;b{rG0P#Bgkv79(yBlj3hQTgi&2E}#pgtx?Bn3eIs= z_DK8pmJe(R+@;7{nMMoJ)WE=ET!X+)B_zf~)vYKrxMC$G+Bs>x!AbU0YGjuQz*G$L zDzVH^*`tt{Zc@#wg&8KWhkEw)_M05gz^7E3?I~}F5&l}SD!F?Cs#0M2PpQ`W9`arR ztKK4L??HMNNJCozDJ%CFKW2CCgr&%9FAU?d`$d+(L1tIP|}fTIN$!eU`TMPIGj z2V@ev#@NSMj<9F0AFi=6A%L^g4WSI)bNx-ZMleRXz7CtxSrI~?#%fi?e1OgY+~S%j zmMgOAYSs5<7S9woS1!+7PWXYv9Pa!E>E2V|p4FHW|hKn<6uqUzYX6=L!VI_ zbCo`$wvqR*r+v?$L+-wjE?O{@jDoA2#(HP<+)#xE$n|RUM4me#u`aX*p z%4=(B?z0$7`fj9C&*~Dq@~j#oPu@U&L)0PNz6U*(Vlfu*hOziOVwvrueGM3oSkifd z&J@ef>uKc>wN7ij+2Z+^yrZ1)Ig>)n>J@Uv{)Q!y0?~&(Wl(r#JzX7wDa*Il8tJ8@ zVZtAmFrS^!feYf38yC=QOY!6O;oUt=LO#}Z?+tINqi z{*oR&n(O@s6UYP|usF%n7^jg~Y92~bt*OL6an%eG1Ac@8l#tan39yF`&*6*Oo zL3Vc}(%j>o!kpqjJj)}Tn>gOb?hac^)1Oxp14cqHsG=;|_`KTG1{U>UFT7B9Q#1k{ zn-5+mUSmT2`Mk={GPJ;AGyeL%ptea)0qbmct^j*Cgt^@tTSOFRH?GqrW;OJ%Xn`Ba z`GOkNCXTBIYOJgK8c8c>9I&n>Bg|!gb~7-rXC;aNtWMz*yoWG&C}zJ_gB;!u*g

qmjvjrBV3j2tzf+>*}FCvWPi!= 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 Vk5$}noBm^m#FrGG+ou1Q{{pLUeLVmG delta 354707 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

L!nucIgnW3EHW)pE7IzaL!oAmycIN) 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½k`|_CnDi) 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%0DmUQLomgu9lYoA57_ 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 z⪻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 CL+-f% delta 456310 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 jfd>;rZ97eMoq@KpqxuEGLg> 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 z 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�y52+7YKXGfv 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

I0a-$ zebgi0v?!Bq%;Fxl-==_=q+lan+p8&9ANuD;9vbjz%Pu6UzUVnpD+S#JeSXAhmR@Qb9sWE?JA*kn8%ke z=47qBSilGB+sw^CkyP2QyOR!&z{03k9Gct!^g6`gwUriFk2o{AZ0lRbs|Zep8jZo| zD#+U1DD>YL)Yp>Mr1Lm7>o|EW;v3`i(N5|`-XIHn7(+@xkJO~A6Heq}T7EeG%63|G zF;Uu35^+JQ#<~_lmTJfy8ftHZBsCO_kYkWpUH!2O8cUT+i62`$BLElMM?;d1<3Z=3 zZrz-8VM!-kO;6x(+(@m6|72AfaoC}Eb*5Rw-JB|p(qNLS;KLY!^J}P!)R00KG-w$=>asRcECo|8ym97q|15y+=ml4|K_eom@p6#y*-L27a(>(4QUqp0 zDEn<^?8Ea;s`9?kE{a>h>r1Wj-Ra;8KCpI12aFR=9)R%UELDDN4`NJj9-)9y&dhVy zJ)QIYtXfEl+wflceH3+n8cjT-8Ia;K6_q{{Sh z9iPr@f2X+hJVyVV-mS-mvEc*t+`zZ6UJI$@M()i1dQZL^`H(VCF%0Rq@eY@9O&X9G zuX^@;Pa8J!S?uyVrPd~%u4jR7>GW^h$5866JABVfcSkn((rRW0>#KqDsMuzHnoXKR zmpAi&^(N);?;x4_C-i6w?}(pzTlpRK@&!3=n)#fqUzIa(o zf&Z`1so!?qwbUa-4M9{+Ym7DGe|k>Y+i_LL?K$Oa=R??zXB4>ulEb!HbYuq)H1vL^ z4cVqlF=T=d{`k~gJ8uuz$;TP)uLQqmJk$;_n>w};=96->rRUjqrffDcE zC*-O?wX*05jZ#3+YyV2K6uyyNdQ7$Vf*YRsSc|W?nilWnn*%c*0nU26#2Cg5f}^Mp zNoyf1a6vl)lIsa1eJ+qRRzuQ>h%xOsts?1+M-;b@UoN-vZ`APrP~PMv(5U@dHLG9_0WnB!p9t^a*meTX;J-=rspcoo;1|7~75wy5&Ej>PTe zJ@P-yT|Af97F*1t7&HEDgEhbYsz6Dj~J?zt~I$o&?rk+WF*B2cHGCcoFaX!k&=-K!?%A5>-Szj}$nv?FS^M7Ec21Fx9cz(oSjsYhdGzejk zlV9O~0L;diTeKjPPpN*TDsrU;ow%$fmQ)k{@7+X?#iMuw(jseoFxy#*bLf*dDfl=x zx0IVS3Y=Y1X#}DH)zQTaOQWeQ{|IbZ2s5j=1Jbw)Azc%Y71@N zSiJqVVmYbwa_2Sk!i~$~GuZT5WO<4&(qEvJr@-7?pv$MA5LtbN`v1v~u=|&(;%Vqy zI}W2gr+G3vH4a zHXS*~uj>D#^z*z6`%r;ioyYLzo>#0c@UBp3om2W}^E`ZM_OO#~pWrUqVMhzCP1~;U-t65eDs>fm z%^?c93YGBhr>N^y9#VREZ&%&uPS~=H=EJb4-n8{9-|aKM=KrJiQwIyxKCGrtc{4Ni5ozYFC+4u8u#b2=0_=|&jzlBJcC*P6>zH3(S8{E<|_LeW%PJGZBUJpD3vAEs9gz173_Z zD^4>X0Q881wEF?T@jgfo9`Mr4?jU`5z}s1m?W*m0Q@c{ThfsX$I@95Yp!g3v(Vd5U zsq15?TFth`mFK&oqv8^fpxQC}%?;l7u!y2EkGO-h+R};qAMyHZ`95XvBUHu~w4>`! zctg8u#nt6%w_IJz5B4bD{|HU=hTTd}6YmEb#Xsmo4#x@dE=vEG?_h^_Dxpt#u*4>B zqggL_7k7_s?z)rl4?ubK&=Q-yFGBzn9=nWg(l(M_@Eh_HUq_sTf6}Z}>sxG?*;jipd{DPu_xYP2NNa?|6U5v70co zDo1rNUM&0L=(F`EbDurm^KtBL6fJ$v7qY7xsKy8A@7DIGi65X(Xug4te&D~dU)NK= zk35l;TTiBse2U}8bpY-|L{D`8}w7E?;8b4>+qDr>h%;9JGr5%;mcr?yoGUtm3$W%3@Y(m38Yt zweq1Hth0hH3Qr0KkUAD~ zRmujy*?}}oc2%DKBsY;*`+ZcszMN*??ps+wlW{Fr(BZK)Cs_v*yINk(}hl4ixYaV4bklV4>y~z+LPi6aZDLqh5W;JukHAr@4 zXM0ioAUT6s^-^+!Rn#c>RN_{FTn4kR3)VHZTqfFvQ1mT*{y;+Uht?||dTtpa@ zyrwb;>V5?vwsH`2X+zK2%Fo$?r*ylWe1`Q1S2jk-)Ag)JK2`4^H)dZ<6w^T- z#J1-tcRR@NhBO)j9w~Qc#!#9RDc@tIo>0`!@{ZDNTL5iT$t%5_ia<}AlY1v1(3vlk z*-5SoL+@`&UMIl7PB&2kyULFGa)a+-V8qUhA+eoy7*4zX8y=en6x|IId+)w7x0_sA zU#(9F#F;;{RI42hOwBp^LOqn0Gj0_c7Y8eKTmnMqVwAj<<-VeX?(z#}bC;rfK$BA9 zFBQ>nvokg5T^fz(DaW#uJM_4x{F<$QPB(hVciG8Xw70jsy;R2=+O!FyaWP^17ESCU zFLPOc9r42I%qHq4TAub90)R+wbCas~mED=&O={m)4r7Ds)AGI`d5bP9&-%(GnbqiP zDpK{F1)VciWByedIY7=~URSB>K=}ZB895AxVe-HFDzs&| zT-N1gvZKya-U6CE;{mY`nHC%pUSwsj>hy59e2@*OMyp21RUA&ub}S^$;F>!i*jE%edaj-8q#gC;S;ll43Bn)FxHrS9HJf{b7sVU|) zHE2STqYzb&k*s_An^4E2+JGuXN0HVtiK0h=tdH`iMWZl|K4gfNJ*rO6DXSZh5SYd+ zV@e{|I3FinPGe|#2AI#laRB~aus32%e)Xe%(ekXaBXIB!jyG7_M7K*~6BT<=UKMwm zXThgY>S&vO({qSd5jIT9v5qFD}S6s0+Wey{{-+;^ZJbb8(|*@v^sd&?ra2YnhU+ zP}u~zdE3_(**@s3)(zhYX1 zruZ9OX;OmhUAGq!#6QRYvBkC1W}Nf|1H+y^Jt`(lZj2mHcNZKyX$M7BUFk*wHsD{& zD*X~=Cq0|#0zb0yVJNJFrh&?Ly{;UeCjYEw|2mTEbh#6o=SZ>B<&n(Yk)BMKhqE0H z6gdOC(`y46X3EvVeK#OBOKR1sia+mRtvZqz^|*G971 z1;I$lKcCa^Os`>bixS9DN>q^c1D=huqq(VaszoZ4A zV4E`O@flieVkwNFu z?QLx;{^+r>tC$ z+@uQdp5!-Q2xbj7P~3dzjK5@(7YH$dyJg;6Cq(&1!?OT4y9V$VioLNvYr%(Sn}+K! zBeW4duB9;xpp_n4ORE-O3J_iB?E=A6OX$dlujtf%vbktkenz~Z%VFFcLN%G*cfcS9 zKcU$%Y2)~=j`;-+Jn654@RY*h5J%)fVFfEG(c^_eb2fDiRU-_dSZ>9WP{DB~{KG`V zL0{MUEC!t5ULwI+S#wsQJz)d7r1VDc=8jRQ=^mlAhvwZnY!7$cfftxvc%L;3OSwxN z(+GiPFA};s*Z(i#%q5)Y@zaWw#X?$*ZL8q<6rM$sk}`43ombN8c*wQMwV&`Z2=~KW zKB+>q6>lJW+hZKxkC_?2!xH1^%3|o!ZdUYiF_h6&mega3u-rEuqihu4KGQ35>1{7m zIY9oXhi(gcz{r28u!HT}M>m%Wjhw5p-?cvemRI2jea=wW=DI9H+nfPIm?B&{@*}5fxe&D3uF0j zdmX0H@4#=-#srf`ffqgh1B&jAUtVhY6#{l47cHS}D}_g_^kSN~N=P!~lk;jJ+)ilD zYX@@;41}p3E53VC@6|#Rmf4KlRf)HUK@mH!$<19LGZ>WWrN_)T7FUy z%}^Zh`api0g!+beG+>iZ)8l9ZXA6BRFYo4YF5P6_0MWjLh!0+5=Onn$y-iSx-@PZ( zW}%be4GrH6^}O4ATC-WelNRqu+#(!elV;J$El^wcq|w~1LNiZ~G_EtXxn#`#OLGPr zaM9>^$>_w*L_$gm8MdL_1*K8(Z9)LcdPDWL!IfXXH?(w{(82JU^0x`SJl4L(n-oW+ z)OoW}$m+)?41!2Y)#I}9v#Cepw+ka!pD6mYU1(-_N%eO?qKjYAfE_|2T%Et#A-D%- zMxmx#q0%0=#t#^UV^V&gOHO(jfH5nzQ{|}CCYVr#YcHw7PQi_JjG{(6p`q7|q7^%Z zvaI=ey0la1?KvTmj|VY^lMzWcM`D?1{6|Jau;|@ou(7W7ZQhuW%6$ug`^1Y??d0yCOt7+we}CK1t9<)j=?@ zq5o&*d1>3tl(9z`Vq*q_MGNe7!zf@TzrDg#zny0EO}+`Lch&btcvl6;`>Sn?wrN?# zOqcfxTbS)Kny^n;ACQaEB%L&vJF9SnR=qzq$!EDi$wQ>sPw{B2?#oa(@RVXz!J}Bj zaU}Z3BatVX{**?l!YF2XO7B#`#P&@lIa8?ZIefCa#bFDKyXJ#!nf9D{l<#0@Fesi! z+sV`;QwYY6#Jo(Q1Z(<)_GJoh2YkYz-5GEMT}}`Vc8sth%ba}9|NlN8|um-KS1Uky9Atf+Qo%# zO#XoXwXm~lfPNCbE|JLkM_L|iucEHa#<7A$$}wPTJ)+YGgzlw~NQEr(bGRvc;q;%% z58D~4;r{|2%)1}*C|Wy(3;{c`wu@&iB#gT<73yiUHmp%oyc{i5X8Us0rhf{s1JA8S zsfUC?Cbw#ZON0o#a-7zRcW2`ts`0Q8WMJp+QH>**uD!<6nj^w z6{7e(vW`cE*M{rV=okjBA$MrOF<~Fuf14T|7n)md9i=UK3IDK#*11N$oixZTHR`>)~Bz+266{W^>e&_ zyARiJ{5*(_Il-7=Q_Iu&lLD?{+#pl7(3QO?N29Z$ zj#%HIAKAi&;+?O1=^LC_U_^YL!Y}d~hR5(j4zq?*)+u4F?aFIj76~y|gaF^wK5_;iWA_UCs!JzCFumMXt|3|NkPFDMMCgg*f)Q zG{v74LQC%H|9^|@IQTzBUNi_B98jT3T~+U&6>1nt4hrG}luZ|WqHydi4!5jMN2H|} z6gIk$mO)hWJO=x@S194U(23;@pljzb{XDp=`d{G7{lNoh+eM+Z`>IlW@cMm(i?3Xw zQ=52W#(H{@ye|ok4l}?29Rm$>;2FLKG#$C9*1sf_H@I~1N6Ty4gSSf4qzhiWKUu}5 z^zE&w8}#(D;Ob=d1Iy{|`e5@`U#Y)4Po^uvR_8LDCKS?s%Gy9w_PjO_#di(M_62nw zyrXjEZ;eJ3{ye9tn?m>Ad|7Q;>xBhP+VIY36Q<=rX^&ahwCKZ$Ve=3kjYqrskTiWT zuVk2`CQio>@C*6f@yfI?+;EL~ zQDBZx%JH1m6|*a$x39v$hLW#7L)~+P4a{~L6}tvgV)AL4d`(!+u2-ZI*M;I9BfTMD zjFsj2sU!TI!TR+oqCp;Wy(#`Wl*TEi_#_``8Gg!(A{?ZeWO+j<>3jwPa5yA#0VJQp z^0h)1f;2coHE#$Wtnya1-3`IVz>1Bbi8qCQtfeQtx+yfq_EpVWLLfdpZwZSHrx)H9 zq6~+r?rq@>d)$ty+`-amcsp8mM<{1=7zyl|%L^g+9aD4f2%@1_V>cknm*#b9V|SE3 z{Vkj^oS-9j1$S20mHxgf{PL(X9_z(0=mP&*#%R0$c9<3DzDW#Jz3&UN8S6hr-IXh} zg!y$pDUZ=ckk2YHmq`xy=vyz z%)&4By)WI!!@N**kNPc7h%i{?qI1!t7eaX&^a9qf4LjA2FQL0JpB?n*m9UA8+)nAQ zg%rn^+mK|^LA;%S1-FT}oH{+I4D@Q2xs4jX!Hb+_V=4Ttu*-6W=uDs9q9)38p|04zD5eGdB2y(u<{&!H<3HYV$CG}eGrSF2A z{35`MOgx2u6>7MptV2e0h3E44{!n;~Kb_DbgFpSC1z&|(-Z7DU?3rLwBElV=A8tQ6 z#J#YG+v28WzetMA#{|9nr+O%#H$vYv^zfU|t+;c(lZCm?Fu2yS8EIvaH;^B%Njd?? zFJbF4sLOXW&kWk}U5IqCTkU1>MI9%t~Cy;v1=z1u-3ad!(KeMFp2ZE7E02{F9AZK(l0VGz+UpiX!%B>GNr% zA~s@QD^j*1j%P>bsdcTz?TiI9Q9l@d#tn8>kEI#DNBDi&TA-trkGV z9K_1(*bItt5GNSY>9~XV#_o10jI>Z35`1x-(AHGoPsbg_2xgH&qDdUWl!r9hB)S`t zXn{$r#VSl!ubH&yBWa5#w za;5JcVoCNak-R*`73^Xq%JLMq7{<~7FVT+;oj~)w#Lgv77sp(oDUddY+bDsl#>Ng~CGcG4FYb{3kXn z%>N&gF{sYrsQ$lEMUsG;z)_>8Vwsh#X*1!x+V_w1`n@ass|9a=+zc5zuCNzlM|dC` zf0mk-6dSTWW7Xv)MPCCGa_G1Z%Jt&B!_TdS`wh9%IvKqTJPhOz?1imZwa zeGC-6eSX-wTioKC`_Ssz&9L+FT6(|m-H_Ea@UENePdl*46?@fj2jkN7|z zWlLj%#Cnxn%DP*?Yg;#~$=W0Fvm;Xf^!*#QhuBn`z+wNN+A^IhOCN&7bau>0$)&|W z)_N#yFD-6i8;4MbGU6cXHr6~XThriT>h&_BrGY&vN_T=qZ?-Cceg=z`9C8MsQl?-X zvyv~0(R%lvp~$jgxYZ;OsM;wgf!oT8%~{J+#L8hj*fx;bloKDhUpnPvp`Ge4d|^ma zzR#C-w|G&%aM!fFc+vJS9)kIg>gjP(ZB;?^GFW8;Q%q$HPHZ<4yLh{#bfMLZ?$%a7>+aIy=YPuu>^lgXl)fV8&fZOR|WN9 z?n$0iMQ5j%Sx($i!HwdY1+*I6S|0344XcXJy)N~@T8$q+!wjDWcg5QA*a}%uDY;12 z@~|3LO$;%xvE3=PI?C$TopP&-$?WYx>J=(>VBy^;J5-D={<*6cb~FcJPnO%-#s(Mz zqkKDa#7Vp?8B{|IvfBU(tWs^Pv?e1|cU61T5FZ%Wkx-?G zH!aZ+Qf-=kB+qE^7aO>VJY&T6Ox#4{V#IJ39Y=>_#64`udrD{^j$&J0((4AIJBxfn zMH&LW@Isx^Pz+_PZc{qiNL;oX2o?BloY-1`n*X4N1$RqfNzfe&aX^JCcn* z@Li=gFO31$i~)D^Y6JXzLH}K>YHB9pU4p+GQc!d8F!Oz`K5s4-g`A$!*A~cO<`Y^N zCsr-89U0?$w80CX(akt9pDle#S6iY*iO~yNiBYU+F4b!#-eZd%ss63SG6wJXhi-7L zT`s963?jyocIhZ?Wo*JNvh5=FV04E@b`jHZXn;7icKa|@z z8U@r%ITw-i$dI=OhhC9h+pDy*o4DNe*9~MMIpmqPN$1h|I(6(Wu4Bqg5_*VtSeYC2 zu!r~un|Ylk_Z0ss5^znIScvf&b?PO;BhDq7*h@@cF4yRDFL9$GOkLSq^oOV~)9F59 z6*lYgzP{oKG`1^hc0X~f$c~q$$f05vCYx#fP_YdYOYa*d;ymh?yF>}%Y1ZK+br~*p zX6OE<~Bij#@k^7tZI2& zF^J1%%r=@mUF^n2@1{@F#apb3BVA4r=dx`(sQV0Y1N*U=ilvIKEO#>nri#IAn?1Ej z6;E0J+@aUP$*mMP6NAU@9n^28xSKWDMBZs)Rf8+FNrPIGu@xIVnBSjmRF9;I3k|I5 zacZ58W_|h?Wv7chS?6O^b~fgByJIwdwwP!t3Kz7-$=v%C&tey3(Jz0UYBxtLZ%|6D z11-*GZ3Z=%E7mYL(A2qN$+8>PYB>>>W#9{MeQDn4q&)D7OdgA|%{l&3r1lEXg|%+n zd65I<%@u31QX8n$JgA&QtZBhK@gS>tn3~TQ{n<=~#>^Kl)w1sfP2%EEE8QsO#Gx!e zm_XYObwb1wgh@wv8?c!xW3s?KhPNQq8^-6ikotBsZ2`2&+A^J5AjY|TLMBr;Ctw@G z7?5r5cJLeDiZQvbrAiB->>OQ50~U%+Oy!Tc{aZKSt^C4Dy0TErt`2q2A|gA=ml^nu zMnqB?w*oOtp0_&lMm)s@QAeDbVu6np+KPGa5bd;d6;ZuRB5eMdR@8X0*o5`6QdcY% z;|6h>9>k3mtqDKR7zPY_GOFr(Wj+i4VGh2D=ri54c1LMYFc6m#hDr}hnmpc zLS4OF>|pR{-xd;a=~F15&K$A^gggzCum`$Ad{#4UDcqGkzlF&diV&Dn6cGh05FF06&3X}}u?>%?BH0$!6?Cw5{M z&Uk4~%q~7|J~HqQHye0T4gk!rx9hdKa2{o@7i*hrzQ73=JjbJ=Hn8EL;1f2@qoNsN zb^8|0AgqdAe-*$2?Y(`ZcJM@iGx}%?crpR z7l{?F_CO53`I#0nsSz?VE%`@*=IF{$6iDur4+4;)HeeGn~oB zHEy_xH}7iC7c{1MxX`>$Y-brZJA9F z256oEntAwPOWp(m0;%aXQDr}0ld>ICVrpCJza7i8;jd}VcCoT4w;pswm^8ILdEGW# z<~7~kE|zEZTd3#`v8LfqY6>ws@!dwG{_cyD#pm!cw!`7KFf8sX9oT^;ys$3W@5J=B z_9b=QDOO-ZUebb{;t#)bFW?OXTOoXT4}S$kj|0RkXUo_2xU0&o1x;VjzFp!r7O;YP z?#9ab2|d{@R`z+3hj-{3-~CZ=pim?wKl8C*SQ&GkR>8vAJgT`zY}P3~3epI|9wek; z`ZXC+h0$;~cUi_ODrKrxQ9}MSc(+Y6^#U`p-Ghf|wT_z$6ZpbBNoTi9+Jgg^Xc<08 zJUVr}0U(Nfd=LR%yH z`0jd^J|`DuX=Y)Th5&&yg_D!q(5&(JUs!X*X%1SeZ@Fjx=AT{2A5qA^;2-|-k>s^c zbawxQU?n>i4uZ9LB#wZP|Gm$6hB}l)b`bs3I-pdlBkGgMJq|7Cpz&4F_}a%z*BPgC z(w+$ITH-AJd&8e#OWWrm9p9jkEgEw1Oxd9o zGHk&cy7i~%r-X!QrK}xB(jkn}A8^t9kXW4M-PaPM5r;)%u~9V;eCSdxwy?-oH1DwJ z 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

f! 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

gsHx*yp705uE&M-=}KXB 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 diff --git a/src/DiffEngineViewer.Mac/runtimes/osx-arm64/native/libdiffengine_viewer.dylib b/src/DiffEngineViewer.Mac/runtimes/osx-arm64/native/libdiffengine_viewer.dylib index 36c26a94d6be525e83d35f206c625835101f0393..48d338336332b53d9252af6d9e6b58d6552186a7 100644 GIT binary patch literal 443928 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

YPMgTfUex+JKt%hN!f;^B^Ez7gb{v~Q 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�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

dwBBS(f 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 KQ`(e-%l-?$4B3hR delta 166147 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

YPMgTfUex+JKt%hN!f;^B^Ez7gb{v~Q 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�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

dwBBS(f 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 KQ`(e-%l-?$4B3hR delta 166147 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