diff --git a/.claude/agent-memory/feature-review/MEMORY.md b/.claude/agent-memory/feature-review/MEMORY.md index c4c09ccba..817e402c0 100644 --- a/.claude/agent-memory/feature-review/MEMORY.md +++ b/.claude/agent-memory/feature-review/MEMORY.md @@ -63,6 +63,7 @@ - [449-review-residuals](project_449-review-residuals.md) — PASS/0 blocking; untracked #584 promotion doc owed a non-child route; unused usings in base test file; AC-supersession-via-plan-provision pattern validated - [511-rescope-review-residuals](project_511-rescope-review-residuals.md) — 2026-08-24 re-audit PASS/0 blocking; residuals CR-1 stale RCA narrative + CR-2 AC-vs-deleted-TRX wording; PR must not close #511/#571 (#592/#594/#597 carry the real defects) +- [488-review-residuals](project_488-review-residuals.md) — PASS/0 blocking; TRX host tokens (runUser+storage) partial-sanitize precedent non-blocking; 21.4MB Cobertura + C6-stale promotions owed at fan-in; #670 filed - [614-review-residuals](project_614-review-residuals.md) — cycle-2 exit NO-GO/1 blocking: RC-1 widened filing guard admits archive-root-exact row that RequireArchiveRelativeStem throws on, post-Hide async-void crash; CR-1 closed - [493-review-residuals + msbuild-log gate adjudication](project_493-review-residuals-and-msbuild-log-gate-adjudication.md) — PASS/0 blocking; how a structurally unsatisfiable msbuild-log byte-equality gate was adjudicated without downgrading the AC diff --git a/.claude/agent-memory/feature-review/project_488-review-residuals.md b/.claude/agent-memory/feature-review/project_488-review-residuals.md new file mode 100644 index 000000000..27026136b --- /dev/null +++ b/.claude/agent-memory/feature-review/project_488-review-residuals.md @@ -0,0 +1,19 @@ +--- +name: 488-review-residuals +description: '#488/#475 review PASS/0 blocking at d9ed9eb2; fan-in owes: TRX host-token sanitization (partial-sanitize precedent adjudicated non-blocking), 21.4MB Cobertura pair maintainer decision, C6 stale-enumeration promotion; #670 filed for D5 unobserved fault' +metadata: + type: project +--- + +2026-08-28 review of `bug/itemviewer-breadcrumb-lifecycle-defects-488` (base = epic integration `12465043`): PASS, 0 Blocking, 6 Non-blocking, all 54 AC verified. Artifacts at `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/*.2026-08-28T06-44.md`. + +**Why:** residuals transfer to the quickfiler-bug-family fan-in and later reviews on this surface. + +**How to apply:** +- **Host-token adjudication precedent:** 488's 19 committed TRX embed `c:\users\\...` in `storage`/`codeBase` and `Megalodon4` in `runUser` while name/user/computerName were placeholder-sanitized. Adjudicated **Non-blocking** because identical tokens already exist in merged sibling evidence (501, 608, 439) on the integration branch — the branch neither introduces nor can cure the class. Sibling 489 achieved FULL sanitization, so full is the current standard; check `runUser` and lowercase `storage` paths specifically, sanitizers miss them. Fan-in owes one sed pass over `evidence/**/*.trx` + a repo-wide cleanup entry. +- **Cobertura pair:** two 10.7 MB raw XMLs committed plan-faithfully (P0-T14/P8-T6 named the paths); they are what enabled independent per-(filename,line) re-derivation. Maintainer decision owed at fan-in; replacement if removed = derived md + root element + per-file hit tables. +- **C6 stale:** the D4 construction-site enumeration is 19 executable sites, not 13; `EfcItemController.CleanupTests.cs:41` installs no sync context (file names no guarded member; suite green). `ItemViewer` ctor no longer calls `TaskScheduler.FromCurrentSynchronizationContext()` (489 removed `UiScheduler`), so null-`UiSyncContext` viewers are constructible without reflection. Promotion of a test-hygiene note owed. +- **#670** (OPEN): QFC `InitializeWebViewAsync` fault unobserved at 3 of 4 call sites; D5 guard delivered unweakened. Watch for it in 484-surface reviews. +- D1/D2 accepted residual: `SetTheme` landing between D1's synchronous dispose and the ConfigureHost post throws ObjectDisposedException — documented, intended, unreachable on the inline-post UI thread. +- `BreadcrumbItemViewerLifecycleCoordinator.cs` is at 497/500; next edit there needs a split. +- Hook note: absent `artifacts/pr_context.summary.txt` was hand-authored per the #269 fallback (`- path (+N/-N)` bullets); hook simulation via dot-source passed with the C# PASS row reading figures from committed feature-evidence Cobertura ([[project_feature-evidence-cobertura-counts-as-coverage-artifact]]). diff --git a/QuickFiler.Test/QuickFiler.Test.csproj b/QuickFiler.Test/QuickFiler.Test.csproj index 444041485..b71f146aa 100644 --- a/QuickFiler.Test/QuickFiler.Test.csproj +++ b/QuickFiler.Test/QuickFiler.Test.csproj @@ -85,6 +85,7 @@ + diff --git a/QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs b/QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs index ca301fcc3..7ae52df76 100644 --- a/QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs +++ b/QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs @@ -252,6 +252,38 @@ public void PresentSearchResults_NoBridgeCoordinator_IsDeterministicNoOp() } } + /// + /// Issue #488 defect D2: a theme set while the host-configuration post is still queued must + /// not be lost. The coordinator retains the last theme and replays it onto the host in + /// ConfigureHost's newly-adopted branch, so the theme reaches the host that is + /// ultimately adopted rather than the null host that was current when it was set. + /// + /// + /// Deterministic and single-threaded. ConfigureHost is queued and deliberately not + /// drained before SetTheme runs, which is the state that makes the defect observable: + /// at that moment DropDownHost is null, so the coordinator's direct forward reaches + /// nothing. The assertion is an exact-sequence equality rather than a containment check, so a + /// duplicated or additional replay would also fail it. No second thread, no sleep, no timer + /// delay, and no wall-clock wait is used. + /// + [TestMethod] + public void ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost() + { + // Arrange + using (var fixture = new LifecycleFixture()) + { + var host = new RecordingHost(); + fixture.Coordinator.ConfigureHost(host, FixtureAnchor, FixtureWorkingArea); + + // Act + fixture.Coordinator.SetTheme("dark"); + fixture.Queue.DrainOnCreatorThread(); + + // Assert + host.ThemesApplied.Should().Equal("dark"); + } + } + private static Rectangle FixtureAnchor() => new Rectangle(10, 20, 30, 40); private static Rectangle FixtureWorkingArea() => new Rectangle(0, 0, 1920, 1080); @@ -298,6 +330,11 @@ private sealed class RecordingHost : IBreadcrumbDropDownHost internal List EventOperations { get; } = new List(); internal IWebViewMessenger PopupMessengerValue { get; set; } + /// + /// Issue #488 defect D2: the themes this host received, in the order received. + /// + internal List ThemesApplied { get; } = new List(); + public bool IsOpen => false; public IWebViewMessenger PopupMessenger => PopupMessengerValue; @@ -341,7 +378,7 @@ bool takeFocus public bool Close(BreadcrumbDropDownCloseReason reason) => true; - public void SetTheme(string theme) { } + public void SetTheme(string theme) => ThemesApplied.Add(theme); public void Reset() { } diff --git a/QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs b/QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs index 6c1af1f03..02ea34c68 100644 --- a/QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs +++ b/QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs @@ -167,29 +167,32 @@ public void Readiness_DetachFailure_IsContainedAndCompletionSucceeds() readiness.Dispose(); } + /// + /// Issue #475: CaptureCurrent fails fast under a null ambient context instead of + /// silently substituting a test dispatcher, and still captures a controlled context normally. + /// Replaces the deleted ambient-probing selector's boundary test, retaining its + /// controlled-context half. + /// [TestMethod] - public void CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries() + public void CaptureCurrent_NullAndControlledContexts_FailFastAndCapture() { var context = new PumpSynchronizationContext(); - int testThread = 0; int capturedThread = 0; - BreadcrumbPopupUiOperations testOperations = WithContext( - null, - BreadcrumbPopupUiOperations.CaptureCurrentOrTests - ); - testOperations - .PostAsync(() => testThread = Environment.CurrentManagedThreadId) - .GetAwaiter() - .GetResult(); + Action underNullContext = () => + WithContext(null, BreadcrumbPopupUiOperations.CaptureCurrent); + underNullContext + .Should() + .Throw( + "capturing without an owning boundary must fail fast rather than degrade" + ); BreadcrumbPopupUiOperations captured = WithContext( context, - BreadcrumbPopupUiOperations.CaptureCurrentOrTests + BreadcrumbPopupUiOperations.CaptureCurrent ); Task post = Task.Run(() => captured.PostAsync(() => capturedThread = Environment.CurrentManagedThreadId) ); context.Drain(post); - testThread.Should().Be(context.OwnerThreadId); capturedThread.Should().Be(context.OwnerThreadId); context.PostCount.Should().Be(1); } diff --git a/QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs b/QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs new file mode 100644 index 000000000..4eef4bafc --- /dev/null +++ b/QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs @@ -0,0 +1,480 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Reflection; +using System.Runtime.Serialization; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using FluentAssertions; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.Web.WebView2.Core; +using Moq; +using QuickFiler.Viewers; +using UtilitiesCS.OutlookObjects.Folder; + +namespace QuickFiler.Test.Viewers +{ + /// + /// Deterministic regression contracts for the breadcrumb + /// pipeline defects filed as issue #488 (D1, D3, D4, D5) and issue #475. + /// + /// + /// Defines its own viewer scope and reflection accessors, because the equivalents in other test + /// files are private; no existing file's accessibility is widened. The one reusable harness + /// is . + /// + [TestClass] + public sealed class ItemViewerBreadcrumbLifecycleRegressionTests + { + /// + /// Issue #488 defect D1: a WebView2 environment change must dispose the outgoing + /// between the same-environment early return and the + /// construction of the replacement, so that the ordering is guaranteed by statement order + /// rather than by dispatcher behaviour. + /// + /// + /// Three observations are asserted in the order written. The first is the discriminating one: + /// SetTheme on the captured host reaches its disposal guard and throws once that host is + /// disposed. The second and third hold in the pre-fix state too and are therefore corroborating + /// rather than discriminating: Close also returns before the fix, + /// because with no pending open the cancel attempt returns ; and + /// DropDown.IsDisposed becomes true after the drain either way, since the pre-fix release + /// path disposes the outgoing host too and only the ordering differs. The queued context is + /// never installed as ambient, so posted work is drainable rather than inline; under an inline + /// context the test would pass before the fix. No second thread and no timing construct. + /// + [TestMethod] + public void ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement() + { + // Arrange + using (var scope = new ViewerScope()) + { + var queue = new DrainableSynchronizationContext(); + var operations = new BreadcrumbPopupUiOperations( + new BreadcrumbUiDispatcher(queue, _ => { }) + ); + var provider = new Mock(MockBehavior.Strict); + var initializer = new Mock(MockBehavior.Strict); + CoreWebView2Environment firstEnvironment = UninitializedEnvironment(); + CoreWebView2Environment secondEnvironment = UninitializedEnvironment(); + scope.Viewer.InitializeBreadcrumbPipeline(provider.Object, operations); + scope.Viewer.ConfigureBreadcrumbDropDown(firstEnvironment, initializer.Object); + queue.Drain(); + BreadcrumbDropDownHost outgoing = Host(scope.Viewer); + outgoing + .Should() + .NotBeNull("the first configure call must adopt a concrete drop-down host"); + + // Act + scope.Viewer.ConfigureBreadcrumbDropDown(secondEnvironment, initializer.Object); + + // Assert + Action theme = () => outgoing.SetTheme("dark"); + theme + .Should() + .Throw( + "the outgoing host must already be disposed when the replacement is constructed" + ); + outgoing.Close(BreadcrumbDropDownCloseReason.Uncommitted).Should().BeFalse(); + queue.Drain(); + outgoing.DropDown.IsDisposed.Should().BeTrue(); + } + } + + /// + /// Issue #488 defect D3: a second, different + /// must not be silently discarded. InitializeBreadcrumbPipeline fails fast on a + /// provider that is not reference-equal to the retained one, matching the comparison + /// BreadcrumbItemViewerLifecycleCoordinator.SetBridgeCoordinator already performs. + /// + /// + /// The thrown instance is asserted not to be an , + /// which derives from ; without the exclusion a D5 + /// disposal throw would satisfy this D3 assertion. + /// + [TestMethod] + public void InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException() + { + // Arrange + using (var scope = new ViewerScope()) + { + var operations = new BreadcrumbPopupUiOperations( + new BreadcrumbUiDispatcher(new DrainableSynchronizationContext(), _ => { }) + ); + var first = new Mock(MockBehavior.Strict); + var second = new Mock(MockBehavior.Strict); + scope.Viewer.InitializeBreadcrumbPipeline(first.Object, operations); + + // Act + Action act = () => + scope.Viewer.InitializeBreadcrumbPipeline(second.Object, operations); + + // Assert + act.Should() + .Throw( + "a second, different provider must be refused rather than silently discarded" + ) + .Which.Should() + .NotBeOfType(); + } + } + + /// + /// Issue #488 defect D3, positive case: repeating the call with the same provider + /// reference returns without effect and keeps the existing breadcrumb coordinator, so the + /// fail-fast guard does not break an idempotent re-initialization. + /// + [TestMethod] + public void InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator() + { + // Arrange + using (var scope = new ViewerScope()) + { + var operations = new BreadcrumbPopupUiOperations( + new BreadcrumbUiDispatcher(new DrainableSynchronizationContext(), _ => { }) + ); + var provider = new Mock(MockBehavior.Strict); + scope.Viewer.InitializeBreadcrumbPipeline(provider.Object, operations); + object before = scope.Viewer.BreadcrumbCoordinator; + before.Should().NotBeNull("the first call must build a breadcrumb coordinator"); + + // Act + Action act = () => + scope.Viewer.InitializeBreadcrumbPipeline(provider.Object, operations); + + // Assert + act.Should().NotThrow(); + scope.Viewer.BreadcrumbCoordinator.Should().BeSameAs(before); + } + } + + /// + /// Issue #488 defect D4: InitializeBreadcrumbPipeline declares and enforces UI-thread + /// affinity, rejecting a call where is not + /// reference-equal to the context the viewer captured. This case nulls the ambient context. + /// + /// + /// This proxy proves the guard fires and does not prove the race is absent. A + /// true two-thread data race cannot be reproduced deterministically under the repository ban + /// on sleeps and wall-clock waits: two threads with no barrier give no way to force the + /// interleaving. + /// The two-argument overload is used with injected operations: the one-argument + /// overload evaluates CaptureCurrent() eagerly and that already throws under a null + /// ambient context, so a test against it would pass before the guard existed. The message must + /// name the operation, which the dispatcher's own message does not. + /// + [TestMethod] + public void InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic() + { + // Arrange + using (var scope = new ViewerScope()) + { + var operations = new BreadcrumbPopupUiOperations( + new BreadcrumbUiDispatcher(new DrainableSynchronizationContext(), _ => { }) + ); + var provider = new Mock(MockBehavior.Strict); + + // Act + Action act = () => + BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull(() => + { + scope.Viewer.InitializeBreadcrumbPipeline(provider.Object, operations); + return true; + }); + + // Assert + act.Should() + .Throw( + "the guard must reject a call made off the viewer's owning boundary" + ) + .Where(error => error.Message.Contains("InitializeBreadcrumbPipeline")) + .Which.Should() + .NotBeOfType(); + } + } + + /// + /// Issue #488 defect D4, second case: a different non-null ambient context is also + /// rejected, which proves the comparison is reference equality against the viewer's captured + /// context rather than a bare null check. + /// + /// + /// This proxy proves the guard fires and does not prove the race is absent: a + /// true two-thread data race cannot be reproduced deterministically under the repository ban + /// on sleeps and wall-clock waits. The substituted context is installed and restored in a + /// try/finally on the same thread; no second thread and no timing construct. + /// + [TestMethod] + public void InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic() + { + // Arrange + using (var scope = new ViewerScope()) + { + var operations = new BreadcrumbPopupUiOperations( + new BreadcrumbUiDispatcher(new DrainableSynchronizationContext(), _ => { }) + ); + var provider = new Mock(MockBehavior.Strict); + var foreign = new SynchronizationContext(); + + // Act + Action act = () => + { + SynchronizationContext previous = SynchronizationContext.Current; + try + { + SynchronizationContext.SetSynchronizationContext(foreign); + scope.Viewer.InitializeBreadcrumbPipeline(provider.Object, operations); + } + finally + { + SynchronizationContext.SetSynchronizationContext(previous); + } + }; + + // Assert + act.Should() + .Throw( + "a different non-null context is off the viewer's owning boundary too" + ) + .Where(error => error.Message.Contains("InitializeBreadcrumbPipeline")) + .Which.Should() + .NotBeOfType(); + } + } + + /// + /// Issue #488 defect D5: once teardown has begun, EnsureBreadcrumbResourceOwnership + /// refuses to create a Container or add a resource owner, so no pipeline is built + /// against a dead viewer. The call is made on the ambient context the viewer was constructed + /// under, so the D4 guard passes and the throw is attributable to the disposal guard alone. + /// + [TestMethod] + public void InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException() + { + // Arrange + using (var scope = new ViewerScope()) + { + var operations = new BreadcrumbPopupUiOperations( + new BreadcrumbUiDispatcher(new DrainableSynchronizationContext(), _ => { }) + ); + var provider = new Mock(MockBehavior.Strict); + scope.Viewer.Dispose(); + + // Act + Action act = () => + scope.Viewer.InitializeBreadcrumbPipeline(provider.Object, operations); + + // Assert + act.Should() + .Throw( + "no breadcrumb resource may be created after teardown has begun" + ); + scope.Viewer.BreadcrumbCoordinator.Should().BeNull(); + } + } + + /// + /// Issue #475: the `public` seven-parameter constructor + /// fails fast with no ambient context rather than silently substituting a test dispatcher. A + /// non-null surface factory is supplied so the argument-null guard is not + /// reached and the operations argument is what throws. The host is disposed inside the + /// delegate so the pre-fix run leaks nothing. + /// + [TestMethod] + public void LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException() + { + // Arrange + Func>> surfaceFactory = + _ => Task.FromResult>(null); + + // Act + Action act = () => + BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull(() => + { + var host = new BreadcrumbDropDownHost( + null, + null, + surfaceFactory, + () => { }, + () => { }, + () => { }, + (popup, control, location) => { } + ); + host.Dispose(); + return true; + }); + + // Assert + act.Should() + .Throw( + "the public constructor must refuse to run without an owning boundary" + ); + } + + /// + /// Issue #475 part 3: a viewer whose lifecycle was already seeded with injected operations + /// must not throw when the 3-arg ConfigureBreadcrumbDropDown runs with no ambient + /// context. That call discards its operations argument, so evaluating it eagerly would make a + /// pure no-op throw and would remove the injected seam every such test relies on. + /// + /// + /// The private _context field is nulled reflectively, the only way to obtain a viewer + /// with a null owning context that has run its constructor. The qualifier is + /// required: unqualified the claim is false, since QfcThemeHelperTests.CreateItemViewer() + /// also yields a null _context via CreateUninitialized — unusable here, because + /// this test needs a seeded pipeline that an uninitialized object cannot supply. + /// + [TestMethod] + public void ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow() + { + // Arrange + using (var scope = new ViewerScope()) + { + var operations = new BreadcrumbPopupUiOperations( + new BreadcrumbUiDispatcher(new DrainableSynchronizationContext(), _ => { }) + ); + var provider = new Mock(MockBehavior.Strict); + scope.Viewer.InitializeBreadcrumbPipeline(provider.Object, operations); + SetViewerSyncContext(scope.Viewer, null); + var host = new SeamProbeDropDownHost(); + + // Act + Action act = () => + BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull(() => + { + scope.Viewer.ConfigureBreadcrumbDropDown( + host, + () => new Rectangle(0, 0, 10, 10), + () => new Rectangle(0, 0, 1920, 1040) + ); + return true; + }); + + // Assert + act.Should() + .NotThrow( + "the already-seeded lifecycle discards the operations argument, so it must " + + "never be evaluated on a thread without an ambient context" + ); + } + } + + /// A hand-written drop-down host that records nothing and does nothing. + private sealed class SeamProbeDropDownHost : IBreadcrumbDropDownHost + { + public bool IsOpen => false; + public IWebViewMessenger PopupMessenger => null; + + public event EventHandler PopupMessengerReady + { + add { } + remove { } + } + + public Task OpenAsync(Rectangle anchor, Rectangle area, Size desired) => + Task.FromResult(false); + + public Task OpenAsync( + Rectangle anchor, + Rectangle area, + Size desired, + bool takeFocus + ) => Task.FromResult(false); + + public bool Close(BreadcrumbDropDownCloseReason reason) => true; + + public void SetTheme(string theme) { } + + public void Reset() { } + + public void Dispose() { } + } + + /// + /// A identity token with no WebView2 SDK call. The + /// environment is only ever compared by reference, so an uninitialized instance suffices. + /// + private static CoreWebView2Environment UninitializedEnvironment() => + (CoreWebView2Environment) + FormatterServices.GetUninitializedObject(typeof(CoreWebView2Environment)); + + /// Reads the viewer's non-public breadcrumb drop-down host as its concrete type. + private static BreadcrumbDropDownHost Host(QuickFiler.ItemViewer viewer) => + viewer.BreadcrumbDropDownHost as BreadcrumbDropDownHost; + + /// + /// Assigns the viewer's private owning-context field. Used only by the #475 seam-preservation + /// test, to obtain a viewer that has run its constructor yet reports a null + /// UiSyncContext, so the D4 affinity guard is inert for that viewer. + /// + private static void SetViewerSyncContext( + QuickFiler.ItemViewer viewer, + SynchronizationContext context + ) + { + FieldInfo field = typeof(QuickFiler.ItemViewer).GetField( + "_context", + BindingFlags.Instance | BindingFlags.NonPublic + ); + field.Should().NotBeNull("ItemViewer must still declare the private _context field"); + field.SetValue(viewer, context); + } + + /// + /// Queues posted work and runs it only on an explicit call, on the + /// creating thread, making "posted but not yet run" a deterministic state with no second + /// thread and no timing construct. Never installed as the ambient context: it is handed to a + /// directly, so the viewer's captured context stays the + /// plain one installs. + /// + private sealed class DrainableSynchronizationContext : SynchronizationContext + { + private readonly Queue> _callbacks = + new Queue>(); + private readonly int _creatorThreadId = Environment.CurrentManagedThreadId; + + public override void Post(SendOrPostCallback callback, object state) => + _callbacks.Enqueue(Tuple.Create(callback, state)); + + /// Runs every queued callback, including work queued while draining. + internal void Drain() + { + Environment.CurrentManagedThreadId.Should().Be(_creatorThreadId); + while (_callbacks.Count > 0) + { + Tuple callback = _callbacks.Dequeue(); + callback.Item1(callback.Item2); + } + } + } + + /// + /// Installs a plain ambient context, constructs a real under + /// it, and restores the previous context on disposal. The install precedes the construction + /// because the viewer captures the ambient context and the D4 guard compares against it. + /// + private sealed class ViewerScope : IDisposable + { + private readonly SynchronizationContext _previous; + + internal ViewerScope() + { + _previous = SynchronizationContext.Current; + Context = new SynchronizationContext(); + SynchronizationContext.SetSynchronizationContext(Context); + Viewer = new QuickFiler.ItemViewer(); + } + + internal SynchronizationContext Context { get; } + + internal QuickFiler.ItemViewer Viewer { get; } + + public void Dispose() + { + Viewer.Dispose(); + SynchronizationContext.SetSynchronizationContext(_previous); + } + } + } +} diff --git a/QuickFiler/Viewers/BreadcrumbDropDownHost.cs b/QuickFiler/Viewers/BreadcrumbDropDownHost.cs index f7f63f8d4..e716cec5e 100644 --- a/QuickFiler/Viewers/BreadcrumbDropDownHost.cs +++ b/QuickFiler/Viewers/BreadcrumbDropDownHost.cs @@ -95,7 +95,7 @@ Action showPopup focusAnchor, cancelSelection, showPopup, - BreadcrumbPopupUiOperations.CaptureCurrentOrTests() + BreadcrumbPopupUiOperations.CaptureCurrent() ) { } internal BreadcrumbDropDownHost( @@ -115,7 +115,7 @@ Action showPopup focusAnchor, cancelSelection, showPopup, - BreadcrumbPopupUiOperations.CaptureCurrentOrTests() + BreadcrumbPopupUiOperations.CaptureCurrent() ) { } internal BreadcrumbDropDownHost( diff --git a/QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs b/QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs index b706cb631..a63654978 100644 --- a/QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs +++ b/QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs @@ -26,6 +26,10 @@ internal sealed partial class BreadcrumbItemViewerLifecycleCoordinator : IDispos private int _generation; private bool _disposed; + // Issue #488 defect D2: the last theme requested, retained so that a theme set while the + // ConfigureHost post is still queued is replayed onto the host that is ultimately adopted. + private string? _retainedTheme; + internal BreadcrumbItemViewerLifecycleCoordinator( BreadcrumbMessengerHub hub, BreadcrumbCollapsedAttachment collapsedAttachment, @@ -139,6 +143,17 @@ Func workingArea DetachPopupMessenger ); host.PopupMessengerReady += _popupMessengerReadyHandler; + + // Issue #488 defect D2: replay the retained theme onto the newly adopted host. + // Guarded because BreadcrumbDropDownHost.SetTheme rejects null or whitespace. + // The UpdateRequestProviders branch below deliberately performs no theme call: + // that host already holds the theme, and a redundant SetTheme there would be + // observable to the mock-host tests that pin the replacement contract. + string? retained = _retainedTheme; + if (retained != null && !string.IsNullOrWhiteSpace(retained)) + { + host.SetTheme(retained); + } } else { @@ -155,6 +170,7 @@ Func workingArea internal void SetTheme(string theme) { ThrowIfDisposed(); + _retainedTheme = theme; _bridgeCoordinator?.SetTheme(theme); DropDownHost?.SetTheme(theme); } diff --git a/QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs b/QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs index a0389f503..2608d1693 100644 --- a/QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs +++ b/QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs @@ -83,11 +83,6 @@ internal static BreadcrumbPopupUiOperations CaptureCurrent() => internal static BreadcrumbPopupUiOperations CreateForCurrentThreadTests() => new BreadcrumbPopupUiOperations(BreadcrumbUiDispatcher.CreateForCurrentThreadTests()); - internal static BreadcrumbPopupUiOperations CaptureCurrentOrTests() => - SynchronizationContext.Current == null - ? CreateForCurrentThreadTests() - : CaptureCurrent(); - internal static Func> NormalizeFactory( Func> factory ) diff --git a/QuickFiler/Viewers/ItemViewer.Breadcrumb.cs b/QuickFiler/Viewers/ItemViewer.Breadcrumb.cs index bb8569561..679716707 100644 --- a/QuickFiler/Viewers/ItemViewer.Breadcrumb.cs +++ b/QuickFiler/Viewers/ItemViewer.Breadcrumb.cs @@ -1,6 +1,7 @@ using System; using System.ComponentModel; using System.Drawing; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Web.WebView2.Core; @@ -15,6 +16,11 @@ public partial class ItemViewer private BreadcrumbItemViewerLifecycleCoordinator _breadcrumbLifecycleCoordinator; private BreadcrumbResourceOwner _breadcrumbResourceOwner; + // Issue #488 defect D3: the provider the pipeline was initialized with. Retained because + // BreadcrumbBridgeCoordinator does not expose its provider — the constructor passes it + // straight into the router and there is no Provider member to read it back from. + private IFolderHierarchyProvider _breadcrumbProvider; + /// The Designer-declared breadcrumb WebView2 occupying the old CboFolders cell. public Microsoft.Web.WebView2.WinForms.WebView2 L0vhBreadcrumb_WebView2 { @@ -42,12 +48,30 @@ internal void InitializeBreadcrumbPipeline( BreadcrumbPopupUiOperations operations ) { + ThrowIfOffUiBoundary(nameof(InitializeBreadcrumbPipeline)); + + // Issue #488 defect D3: fail fast on a second, different provider rather than discarding + // it silently. The comparison is reference equality, matching what the collaborator this + // wrapper wraps already does in + // BreadcrumbItemViewerLifecycleCoordinator.SetBridgeCoordinator. No re-initialization + // branch is built: keeping this fail-fast is what holds the out-of-scope + // SetBridgeCoordinator replace-without-dispose defect dormant, because + // InitializeBreadcrumbPipeline then never constructs a second bridge coordinator. if (BreadcrumbCoordinator != null) { + if (!ReferenceEquals(_breadcrumbProvider, provider)) + { + throw new InvalidOperationException( + "The breadcrumb pipeline is already initialized with a different folder " + + "hierarchy provider. Dispose the viewer's breadcrumb resources before " + + "initializing it with another provider." + ); + } + return; } - BreadcrumbItemViewerLifecycleCoordinator lifecycle = EnsureBreadcrumbLifecycle( + BreadcrumbItemViewerLifecycleCoordinator lifecycle = EnsureBreadcrumbLifecycle(() => operations ); var bridgeCoordinator = new BreadcrumbBridgeCoordinator( @@ -57,6 +81,7 @@ BreadcrumbPopupUiOperations operations ); lifecycle.SetBridgeCoordinator(bridgeCoordinator); BreadcrumbCoordinator = bridgeCoordinator; + _breadcrumbProvider = provider; } internal Task AttachBreadcrumbWebViewAsync() => @@ -144,6 +169,8 @@ internal void ConfigureBreadcrumbDropDown( IWebViewCoreInitializer initializer ) { + ThrowIfOffUiBoundary(nameof(ConfigureBreadcrumbDropDown)); + if ( BreadcrumbDropDownHost is BreadcrumbDropDownHost existing && ReferenceEquals(existing.Environment, environment) @@ -152,8 +179,20 @@ BreadcrumbDropDownHost is BreadcrumbDropDownHost existing return; } + // Issue #488 defect D1: dispose the outgoing host here, between the same-environment + // early return and the construction of its replacement, so the ordering is guaranteed by + // statement order rather than by dispatcher behaviour. The type test names the concrete + // BreadcrumbDropDownHost rather than IBreadcrumbDropDownHost, so a mock host installed by + // the injected 3-arg overload is not disposed here and that overload's Times.Once() + // disposal assertion is unaffected. A fresh pattern variable is required: the one bound in + // the same-environment guard above is definitely assigned only on the branch that returns. + if (BreadcrumbDropDownHost is BreadcrumbDropDownHost outgoing) + { + outgoing.Dispose(); + } + BreadcrumbItemViewerLifecycleCoordinator lifecycle = EnsureBreadcrumbLifecycle( - BreadcrumbPopupUiOperations.CaptureCurrentOrTests() + BreadcrumbPopupUiOperations.CaptureCurrent ); BreadcrumbDropDownHost host = null; host = new BreadcrumbDropDownHost( @@ -182,6 +221,8 @@ internal void ConfigureBreadcrumbDropDown( Func workingArea ) { + ThrowIfOffUiBoundary(nameof(ConfigureBreadcrumbDropDown)); + if (host == null) { throw new ArgumentNullException(nameof(host)); @@ -189,7 +230,7 @@ Func workingArea _ = anchorBounds ?? throw new ArgumentNullException(nameof(anchorBounds)); _ = workingArea ?? throw new ArgumentNullException(nameof(workingArea)); BreadcrumbItemViewerLifecycleCoordinator lifecycle = EnsureBreadcrumbLifecycle( - BreadcrumbPopupUiOperations.CaptureCurrentOrTests() + BreadcrumbPopupUiOperations.CaptureCurrent ); lifecycle.ConfigureHost(host, anchorBounds, workingArea); } @@ -271,8 +312,20 @@ private void OnBreadcrumbFolderArrowKeyDown(BreadcrumbArrowDirection direction) private void OnBreadcrumbUnhandledArrow(BreadcrumbArrowDirection direction) => BreadcrumbUnhandledArrow?.Invoke(this, direction); + /// + /// Issue #475 part 3: the operations argument is a factory rather than a value, and is + /// invoked exactly once and only after the already-initialized early return. + /// + /// + /// Laziness is required, not opportunistic. This member discards its operations argument + /// whenever the coordinator already exists, so with an eagerly evaluated argument the swap + /// from the deleted ambient-probing selector to the fail-fast + /// would make a pure no-op call throw + /// on any thread without a synchronization context, removing the injected seam that existing + /// tests rely on. + /// private BreadcrumbItemViewerLifecycleCoordinator EnsureBreadcrumbLifecycle( - BreadcrumbPopupUiOperations operations + Func operationsFactory ) { if (_breadcrumbLifecycleCoordinator != null) @@ -280,6 +333,7 @@ BreadcrumbPopupUiOperations operations return _breadcrumbLifecycleCoordinator; } + BreadcrumbPopupUiOperations operations = operationsFactory(); EnsureBreadcrumbResourceOwnership(); var hub = new BreadcrumbMessengerHub(); var attachment = new BreadcrumbCollapsedAttachment( @@ -299,6 +353,22 @@ BreadcrumbPopupUiOperations operations private void EnsureBreadcrumbResourceOwnership() { + // Statement order here is fixed by decision D-15 and must not be reversed. The affinity + // guard is the FIRST STATEMENT, but it is a precondition check that returns without + // effect on the UI boundary and when UiSyncContext is null, so on every path that reaches + // this member's own logic it has performed no action. Issue #488 defect D5's + // ObjectDisposedException throw immediately follows and is therefore the FIRST ACTION: it + // is the first statement that inspects this member's own subject, the viewer's teardown + // state, and it precedes the already-owned early return, every container creation, and + // every BreadcrumbResourceOwner addition. Reversing the two would place a + // SynchronizationContext comparison after a throw that is supposed to run first. + ThrowIfOffUiBoundary(nameof(EnsureBreadcrumbResourceOwnership)); + + if (IsDisposed || Disposing) + { + throw new ObjectDisposedException(nameof(ItemViewer)); + } + if (_breadcrumbResourceOwner != null) { return; @@ -309,11 +379,47 @@ private void EnsureBreadcrumbResourceOwnership() components.Add(_breadcrumbResourceOwner); } + /// + /// Issue #488 defect D4: declares and enforces this viewer's UI-thread affinity for the + /// breadcrumb pipeline members, throwing when is attempted from + /// off the boundary the viewer captured in its constructor. + /// + /// + /// The comparison is reference equality against , not a + /// managed thread-identity comparison: a continuation resumed without the captured context can + /// land on a recycled pool thread whose id matches, so a thread id is not a boundary proof. + /// The null-context escape keeps a viewer constructed without an ambient context — a test + /// shape — from throwing. + /// This declares and enforces the contract; it does not make the read-then-write atomic. A + /// caller that violates the contract now receives a diagnostic instead of a silent leak. + /// + private void ThrowIfOffUiBoundary(string operation) + { + SynchronizationContext owning = UiSyncContext; + if (owning == null) + { + return; + } + + if (!ReferenceEquals(SynchronizationContext.Current, owning)) + { + throw new InvalidOperationException( + $"{operation} must be called on the thread that owns this ItemViewer. The " + + "current synchronization context is not the one captured when the viewer " + + "was constructed." + ); + } + } + private void DisposeBreadcrumbResources() { _breadcrumbLifecycleCoordinator?.Dispose(); _breadcrumbLifecycleCoordinator = null; BreadcrumbCoordinator = null; + + // Issue #488 defect D3: clear the retained provider so a pipeline re-created after + // disposal is not blocked by a stale reference. + _breadcrumbProvider = null; } } } diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/code-review.2026-08-28T06-44.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/code-review.2026-08-28T06-44.md new file mode 100644 index 000000000..fe50dcfac --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/code-review.2026-08-28T06-44.md @@ -0,0 +1,39 @@ +# Code Review — itemviewer-breadcrumb-lifecycle-defects (Issue #488; also closes #475) + +- Timestamp: 2026-08-28T06-44 (UTC) +- Branch: `bug/itemviewer-breadcrumb-lifecycle-defects-488` at `d9ed9eb2`; full production and test diff against merge base `12465043` reviewed line by line (8 code/project paths, +662/−24). + +## Findings Summary + +| ID | Severity | Blocking | File / location | Finding | +|---|---|---|---|---| +| CR-1 | Minor | No | `evidence/**/*.trx` (19 files) | Committed TRX evidence embeds the absolute worktree assembly path in `storage`/`codeBase` and the machine token in `runUser`, while name/user/computer fields were sanitized. Pre-existing pattern across merged siblings on the integration branch; recommend one sanitization pass before fan-in. Same finding as PA-1 in the policy audit. | +| CR-2 | Info | No | `evidence/baseline/coverage-baseline.cobertura.xml`, `evidence/qa-gates/coverage-final.cobertura.xml` | Two 10.7 MB raw Cobertura documents committed, plan-faithfully (P0-T14/P8-T6). They enabled this review's independent figure re-derivation; permanent history cost owed a maintainer decision at fan-in (policy audit § 7 ruling 1). | +| CR-3 | Info | No | `QuickFiler.Test/Controllers/EfcItemController.CleanupTests.cs:41` | The one `ItemViewer` construction site that installs no synchronization context (C6 site 18). Correctly left unedited per C6's escalation rule; file names no guarded member; full suite green. Promotion of a test-hygiene note to the owning surface recommended. | +| CR-4 | Info | No | `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` (`CaptureCurrent_NullAndControlledContexts_FailFastAndCapture`) | One `Task.Run` retained in the controlled-context half, carried over verbatim per plan P6-T3. Deterministic: completion is signal-based via `context.Drain(post)`, no timeout, no banned construct (`Thread.Sleep`/`Task.Delay`/wall-clock wait/temp file all absent). Acceptable under the unit-test rules. | +| CR-5 | Info | No | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | File at 497/500 after absorbing D2 (+16 against 19 headroom, within R1's budget). Three lines of headroom remain for all future work; the next edit to this file likely requires a split. | +| CR-6 | Info | No | same file, `ConfigureHost` replay guard | `retained != null && !string.IsNullOrWhiteSpace(retained)` — the null conjunct looks redundant but is load-bearing: the file carries `#nullable enable` and net481 reference assemblies lack the `NotNullWhen(false)` annotation on `IsNullOrWhiteSpace`, so the explicit check is what discharges the nullable-flow warning (the CS8604 found and fixed at P2-T5 per the toolchain evidence). Correct as delivered; no change requested. | + +Blocking findings: **0**. + +## Production diff, reviewed line by line + +**`ItemViewer.Breadcrumb.cs` (+110/−4, 425/500).** All five units land exactly as the spec designs them. D1's dispose sits between the same-environment early return and the replacement construction, type-tests the concrete `BreadcrumbDropDownHost` with a fresh pattern variable (`outgoing`), so mock hosts from the 3-arg overload are untouched and the integration test's `Times.Once()` survives — both verified green unmodified. D3's fail-fast throws only when the retained provider is reference-unequal, returns silently when equal, and `DisposeBreadcrumbResources` nulls the retained field so a post-disposal rebuild is not blocked. D4's `ThrowIfOffUiBoundary` compares `SynchronizationContext.Current` by reference against `UiSyncContext`, names the operation in the message, escapes on a null captured context, and is the first statement of all four guarded members. D5's `ObjectDisposedException` tests both `IsDisposed` and `Disposing` and precedes the already-owned early return and any `Container` creation; the D-15 ordering (guard first statement, throw first action) is stated in-source with the decision cited, resolving the two criteria's apparent conflict exactly as the plan adjudicated. #475 part 3's laziness (`Func`, evaluated once after the early return) is what keeps the injected seam alive for the seventeen seam-consuming test files enumerated in the seam audit. Comment density is high but every comment is a why-comment carrying a decision or issue reference; the file has 75 lines of headroom. + +**`BreadcrumbItemViewerLifecycleCoordinator.cs` (+16, 497/500).** The only edit is D2: the `_retainedTheme` field, its assignment in `SetTheme` before the two forwards, and the guarded replay in `ConfigureHost`'s newly-adopted branch only. The `UpdateRequestProviders` branch performs no theme call, preserving the mock-observable contract the spec pins. Replay placement after the messenger attach mirrors the adopted-host sequence. CR-5/CR-6 above. + +**`BreadcrumbPopupUiOperations.cs` (−5, 489/500).** Pure deletion of the ambient-probing `CaptureCurrentOrTests` selector plus its separator line; nothing added, exactly as the R2 constraint demands. `CreateForCurrentThreadTests` survives unmodified in both this file and `BreadcrumbUiDispatcher.cs`; a repository-wide search for the deleted identifier returns zero `.cs` hits. + +**`BreadcrumbDropDownHost.cs` (+2/−2, 463/500).** Two identifier swaps to `CaptureCurrent()` in the 7-param constructor chains, argument order untouched — which is why `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` still passes without an ambient context (the `surfaceFactory ?? throw` evaluates first), verified in the committed pass TRX. + +## Test diff + +The new regression file (480/500) is self-contained as the spec requires: its own `ViewerScope` (context installed before construction — itself C6-order-correct), its own reflection accessors, its own `DrainableSynchronizationContext` with a creator-thread assertion in `Drain()`, and a `SeamProbeDropDownHost` stub. The only cross-file reuse is the genuinely `internal` `InvokeAmbientNull`; no other file's accessibility was widened. The D1 test's documentation is candid that the two AC-named observations (`DropDown.IsDisposed`, `Close` returning false) also hold pre-fix and that the discriminating assertion is the `SetTheme` `ObjectDisposedException` — and the committed fail-before TRX confirms the test was genuinely red on exactly that assertion. The D3 negative test excludes `ObjectDisposedException` so a D5 throw cannot satisfy a D3 assertion. The D2 test extends `RecordingHost` with an ordered `ThemesApplied` recorder and asserts exact sequence equality, so a duplicated replay would fail it. The replaced #475 boundary test converts the deleted selector's null-context half into a fail-fast assertion and keeps the controlled-context half against `CaptureCurrent` (CR-4). + +## New defects introduced by this change-set + +None found. Specifically checked: the D1/D2 `ObjectDisposedException` window (a `SetTheme` landing between D1's synchronous dispose and the `ConfigureHost` post) is the spec's accepted, documented residual — a diagnostic on a contract violation D4 now rejects at entry, unreachable on the production inline-post UI thread; the D5 guard ordering cannot mask the D4 guard or vice versa (disjoint conditions, and the D5 test runs on the owning context so its throw is attributable); the #475 constructor swap changes no production behavior (no in-repo production caller reaches either 7-param chain); no formatting, analyzer, nullable, or test-count regression (all gates re-verified in the policy audit); no sync primitive, banned timing API, or temporary file anywhere in the diff. + +## Verdict + +**Approve.** Six-unit bugfix delivered RED-first with minimal, spec-exact production changes, honest documentation of every limitation (D4 proxy, D1 non-discriminating observations, D3 no-production-behavior-change), and disciplined scope. No finding above Minor, none blocking. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/analyzer-backfill.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/analyzer-backfill.md new file mode 100644 index 000000000..483e99b8c --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/analyzer-backfill.md @@ -0,0 +1,95 @@ +# Phase 0 — Analyzer Package Back-fill ([P0-T7]) + +Timestamp: 2026-08-28T05-11 + +Command: +`nuget install Meziantou.Analyzer -Version 3.0.156 -OutputDirectory packages -DependencyVersion Ignore` +and +`nuget install Roslynator.Analyzers -Version 4.16.0 -OutputDirectory packages -DependencyVersion Ignore`, +run from the worktree root during worktree bootstrap, immediately before plan execution began. +EXIT_CODE: 0 + +## Acceptance checks + +| Required path | Exists | Size | +| --- | --- | --- | +| `packages\Meziantou.Analyzer.3.0.156\analyzers\dotnet\roslyn5.0\cs\Meziantou.Analyzer.dll` | yes | 2,749,952 bytes | +| `packages\Roslynator.Analyzers.4.16.0\analyzers\dotnet\roslyn4.7\cs\Roslynator.CSharp.Analyzers.dll` | yes | 382,464 bytes | + +Both required analyzer assemblies are present. A missing `Analyzer Include` path is compile error +**CS0006**, not a warning, so this back-fill is a precondition of every build gate in this plan rather +than a quality improvement. + +## DOCUMENTED DEVIATION — corrected file and line citation + +This task's text cites the skewed `Analyzer Include` items at +`QuickFiler.Test/QuickFiler.Test.csproj:467-471`. **That line range is stale.** It was resolved +independently against the current tree with +`grep -rn "Meziantou.Analyzer.3.0.156\|Roslynator.Analyzers.4.16.0" --include=*.csproj .`, per the +plan's own standing instruction to resolve every citation by the entry it accompanies rather than by +line number. + +The corrected finding has two parts. + +**Part 1 — the file named by the task is correct; only the line range drifted.** +`QuickFiler.Test/QuickFiler.Test.csproj` does carry the five skewed items, at lines **493-497**, not +467-471. Lines 463-466 hold a *different* analyzer `ItemGroup` containing the MSTest.Analyzers 4.3.3 +and SonarAnalyzer.CSharp 10.32.0.713 items, which are not skewed. The project has two analyzer item +groups, and the stale citation lands on the wrong one. + +**Part 2 — the skew is repository-wide, not confined to one project.** Fifteen project files carry +the same five pinned items: + +`QuickFiler/QuickFiler.csproj:586-590`, `QuickFiler.Test/QuickFiler.Test.csproj:493-497`, +`Tags/Tags.csproj:97-101`, `Tags.Test/Tags.Test.csproj:314-318`, +`TaskMaster/TaskMaster.csproj:571-575`, `TaskMaster.Test/TaskMaster.Test.csproj:379-383`, +`TaskTree/TaskTree.csproj:100-104`, `TaskTree.Test/TaskTree.Test.csproj:315-319`, +`TaskVisualization/TaskVisualization.csproj:150-154`, +`TaskVisualization.Test/TaskVisualization.Test.csproj:339-343`, +`ToDoModel/ToDoModel.csproj:189-193`, `ToDoModel.Test/ToDoModel.Test.csproj:357-361`, +`UtilitiesCS/UtilitiesCS.csproj:1303-1307`, `UtilitiesCS.Test/UtilitiesCS.Test.csproj:962-966`, +`VBFunctions/VBFunctions.csproj:58-62`, `VBFunctions.Test/VBFunctions.Test.csproj:294-298`. + +Because the gate commands in this plan build `TaskMaster.sln` rather than a single project, the +back-fill has to satisfy every one of those projects, not only `QuickFiler.Test`. It does: the two +package directories are shared and are referenced by the same relative `..\packages\...` path from +every project. + +## Root cause of the skew, and the justification for back-filling rather than editing + +`packages.config` pins the **newer** versions: + +``` +QuickFiler.Test/packages.config: +QuickFiler.Test/packages.config: +``` + +`[P0-T6]`'s restore therefore materialises `packages\Meziantou.Analyzer.3.0.174` and +`packages\Roslynator.Analyzers.4.16.1`, while the `` items in all fifteen `.csproj` +files continue to name `3.0.156` and `4.16.0`. The two sets do not intersect, so every referenced +analyzer path is missing after a plain restore, and each affected project emits **five `CS0006` +errors** — one per `Analyzer Include` item. + +The remedy applied is to install the two pinned versions **alongside** the restored ones, leaving all +four package directories present: + +``` +packages/Meziantou.Analyzer.3.0.156/ +packages/Meziantou.Analyzer.3.0.174/ +packages/Roslynator.Analyzers.4.16.0/ +packages/Roslynator.Analyzers.4.16.1/ +``` + +**No `.csproj` was edited.** Editing the fifteen project files to point at the restored versions would +have been a repository-wide change to files this feature does not own, in direct conflict with +constraint C1, and would have produced a diff that the changed-file-set criterion `[P7-T2]` checks and +`[P7-T10]` flips must reject. Editing `packages.config` instead would have the same ownership problem +and would additionally change what the solution restores for every other agent worktree. Back-filling +the packages is inert with respect to tracked files: `packages/` is not tracked, so this remedy +produces no entry in `git status --porcelain`, which `[P0-T3]` independently confirmed. + +Output Summary: Both back-filled analyzer assemblies exist at the exact paths the fifteen `.csproj` +files name, so the CS0006 condition is cleared and the build gates can run. The task's citation +`QuickFiler.Test/QuickFiler.Test.csproj:467-471` is recorded here as a documented deviation: the file +is correct but the items sit at lines 493-497, and the same five items appear in fourteen further +project files. No `.csproj` and no `packages.config` was modified. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/capacity-budget.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/capacity-budget.md new file mode 100644 index 000000000..e206c8f84 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/capacity-budget.md @@ -0,0 +1,78 @@ +# Phase 0 — Capacity Budget ([P0-T18]) + +Timestamp: 2026-08-28T05-21 + +Command: derived from the measured headroom recorded in `[P0-T16]` and the planned per-file delta +stated in constraint C2 of the plan of record. No command was run for this task beyond reading those +two inputs. +EXIT_CODE: 0 + +## Budget table + +| File | Lines now (`[P0-T16]`) | Headroom to 500 | Planned delta (C2) | Projected | +| --- | --- | --- | --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | 181 | +33 (D1 +4, D3 +8, D4 +14, D5 +4, #475 +3) | ~352 | +| `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 481 | **19** | +6 (D2 only) | **~487** | +| `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 494 | **6** | −4 or more (#475 deletion only) | **~490** | +| `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 463 | 37 | 0 (two identifier swaps) | 463 | +| `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 382 | 118 | +30 (D2 test, `ThemesApplied` recorder) | ~412 | +| `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | 480 | 20 | −26 then +22 (replacement test) | ~476 | +| `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | 500 | +8 test methods and its own helpers | at most 480 | + +## Aggregate planned addition + +Summing the planned deltas across all seven owned files: `+33 +6 −4 +0 +30 −4 (net of −26 then +22)` +for the six existing files gives **+61 lines**, and the new test file adds **at most 480 lines**. The +aggregate planned addition is therefore **at most 541 lines** across the seven owned files, of which +at most 480 land in a file that starts empty. + +## The two constrained files, stated explicitly + +Constraint C2 names two files as constrained, and both are called out here with their projections: + +- **`QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`** — 481 lines now, **19 lines of + headroom**, planned delta +6 for D2 only, **projected ~487**. This is the highest-likelihood scope + risk in the whole change-set. +- **`QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs`** — 494 lines now, **6 lines of headroom**, + planned delta −4 or more from the #475 deletion only, **projected ~490**. It receives no addition at + all, so its projection can only fall. + +## The four capacity rules of constraint C2, stated in substance + +1. **The two constrained files admit only their one named edit.** + `BreadcrumbItemViewerLifecycleCoordinator.cs` and `BreadcrumbPopupUiOperations.cs` are the two + constrained files, and no edit other than the one named for each in the budget table above may + target either. If D2's delivered diff exceeds its nineteen lines of headroom after formatting, the + excess is removed rather than the 500-line ceiling waived. Because CSharpier reflows argument + lists, a hand count taken before the format stage is not authoritative: the measurement that + governs is taken **after** formatting. +2. **`BreadcrumbPopupUiOperations.cs` receives no addition of any kind.** Its only change is the + deletion of the `CaptureCurrentOrTests` declaration and the blank line separating it from the + preceding member. If a #475 test helper needs a home, it belongs in a test file, never here. +3. **The new test file is projected at or under 480 lines**, not 500, so that CSharpier reflow cannot + push it over the ceiling. If the eight new methods plus their helpers would exceed 480, the + remedy is to compact by folding a second assertion into an existing new test rather than adding a + near-duplicate method. **No new test file beyond the single one named in constraint C1 may be + created**, because a second file would require a second `Compile Include` line and would break the + one-added-line `.csproj` diff criterion that `[P7-T7]` measures and `[P7-T13]` flips. +4. **If no allocation fits, execution stops rather than degrading.** The executor writes a blocker + artifact to + `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/capacity-blocker.md` + and reports. It must not edit a forbidden file, must not create an extra file, and must not leave + any file over 500 lines. + +## Related ceiling that is not part of this budget + +`QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` sits at exactly **500** lines, at the +ceiling, with zero headroom. It is a **forbidden** file under constraint C1: it must be byte-identical +at delivery, so it carries no planned delta and no budget line. `[P8-T8]` verifies both that it is +still exactly 500 lines and, separately, that +`git diff --name-only -- ` produces no output, since a line count alone does not +establish byte-identity. + +Output Summary: Aggregate planned addition is at most **+61 lines** across the six existing owned +files plus at most **480** lines in the new test file. The two constrained files are +`BreadcrumbItemViewerLifecycleCoordinator.cs`, projected **~487** against a 481-line baseline and 19 +lines of headroom, and `BreadcrumbPopupUiOperations.cs`, projected **~490** against a 494-line +baseline and 6 lines of headroom with no addition permitted. All four capacity rules are recorded +above. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/constraining-tests.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/constraining-tests.md new file mode 100644 index 000000000..1ee2cbd8d --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/constraining-tests.md @@ -0,0 +1,38 @@ +# Phase 0 — Baseline Outcomes of the Nine Constraining Tests ([P0-T13]) + +Timestamp: 2026-08-28T05-17 + +Command: read from the `[P0-T12]` TRX at +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/trx-p0-t12/baseline-quickfiler-test.trx`, +by matching each `UnitTestResult` element's `testName` attribute and reading its `outcome` attribute. +No new test run was started for this task. +EXIT_CODE: 0 + +## Result rows + +| # | Test | Baseline outcome | Constraint it imposes on this feature | +| --- | --- | --- | --- | +| 1 | `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` | **Passed** | `host.Dispose()` `Times.Once()` on viewer disposal. This assertion is what rules out both rejected D1 alternatives, and it is why D1's disposal must type-test the concrete `BreadcrumbDropDownHost` rather than `IBreadcrumbDropDownHost`. | +| 2 | `ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession` | **Passed** | "No stale pooled theme is replayed." The highest-risk interaction with D2's retained-theme replay. | +| 3 | `ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost` | **Passed** | Same-environment configure must reuse the host and dispose nothing. Pins the same-environment early return that D1's new statement must follow. | +| 4 | `ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily` | **Passed** | `Theme == "dark"` and `ControlHost == null` immediately after configure-then-theme. D2's replay must remain additive. | +| 5 | `ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam` | **Passed** | The light-theme counterpart of row 4. | +| 6 | `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder` | **Passed** | Subscription order `add`/`remove` across a host swap. Stays green because `RecordingHost.Dispose` is empty, which is why `[P2-T1]` must leave that body empty. | +| 7 | `ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks` | **Passed** | Reset-then-reconfigure with the same host must take the `UpdateRequestProviders` branch, which is why D2's replay is confined to the newly-adopted branch. | +| 8 | `SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions` | **Passed** | The reference-comparison precedent D3 mirrors. | +| 9 | `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` | **Passed** | Passes today without an ambient context because the `surfaceFactory ?? throw` is evaluated before the operations argument. #475 part 2 must not reorder those arguments. | + +## Re-run set for [P7-T1] + +**This set of nine names is the re-run set for `[P7-T1]`.** `[P7-T1]` re-runs exactly these nine under +a pipe-joined `/TestCaseFilter:` and compares each observed outcome against the baseline outcome +recorded above, requiring that no name's outcome is worse than its baseline. + +All nine baseline outcomes are `Passed`. `[P7-T1]`'s acceptance therefore reduces to its stated +expected case: `EXIT_CODE: 0` with failed count 0 and all nine observed as `Passed`. The +"a constraining test that was already red cannot constrain this fix" branch, which would leave +`[P7-T1]` unchecked, is **not** triggered. + +Output Summary: All **nine** constraining tests recorded outcome `Passed` at the baseline. This is the +re-run set for `[P7-T1]`, whose comparison consequently reduces to requiring nine `Passed` outcomes and +zero failures. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-baseline.cobertura.xml b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-baseline.cobertura.xml new file mode 100644 index 000000000..613ea5401 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-baseline.cobertura.xml @@ -0,0 +1,193202 @@ + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-owned-files.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-owned-files.md new file mode 100644 index 000000000..8f90bb9fb --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-owned-files.md @@ -0,0 +1,71 @@ +# Phase 0 — Baseline Coverage of the Owned Production Files ([P0-T15]) + +Timestamp: 2026-08-28T05-20 + +Command: read from the `[P0-T14]` Cobertura file +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-baseline.cobertura.xml`, +aggregating by `filename` across every `class` element whose `filename` attribute matches the target, +and counting hit and total `line` elements rather than reading any single element's `line-rate` +attribute. No new coverage run was started for this task. +EXIT_CODE: 0 + +## Why aggregation by `filename` rather than a single element's attribute + +Per decision D-13, async state machines and lambdas are emitted as separate `class` elements, so a +single `class` element's `line-rate` attribute describes only part of a file. The figures below are +computed as `covered / valid` over every `line` element belonging to every `class` element whose +`filename` names the target file. For these three files the Cobertura emitted by `dotnet-coverage` +happens to carry exactly one `class` element each, so the aggregation and the single-element reading +coincide here; the aggregation is used regardless, because the post-change run in `[P8-T7]` must be +computed the same way for the comparison to be valid. + +## BASELINE AGGREGATED LINE RATES — the three measured owned production files + +| Owned production file | Lines covered | Lines valid | **Baseline line-rate** | +| --- | --- | --- | --- | +| `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 288 | 318 | **0.905660** | +| `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 232 | 234 | **0.991453** | +| `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 279 | 281 | **0.992883** | + +All three are already above the `>= 90%` new-or-changed-member floor. These three values are the +comparison basis for `[P8-T7]`. + +## The fourth owned production file is ABSENT from the measured set + +`QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` matches **zero** `class` elements in the Cobertura +document. It contributes no `line` element, no covered line, and no valid line, so it has no +line-rate at all rather than a line-rate of zero. + +The reason is a coverage exclusion this feature must neither rely on removing nor extend. +`QuickFiler/Viewers/ItemViewer.cs:20` carries `[ExcludeFromCodeCoverage]` on the `ItemViewer` partial +**type** declaration: + +``` +QuickFiler/Viewers/ItemViewer.cs:20: [ExcludeFromCodeCoverage] +QuickFiler/Viewers/ItemViewer.cs:21: public partial class ItemViewer : UserControl, IItemViewer, IContainerControlLocal +``` + +A type-level attribute on one part of a partial type applies to the whole type, so **every member of +`ItemViewer.Breadcrumb.cs` is already excluded from coverage measurement**. The citation +`ItemViewer.cs:20` used by `spec.md` and by constraint C5 resolves exactly at this branch's base +commit; no line drift occurred for this particular citation. + +## Consequences carried forward + +- D1, D3, D4, D5, and #475 part 3 all land in `ItemViewer.Breadcrumb.cs` and therefore **move no + coverage number**. Their regression tests are required by the CLAUDE.md Bugfix Workflow and by the + acceptance criteria, not by a coverage delta. A reviewer must not read flat coverage on this feature + as a testing gap. +- Only D2 (`BreadcrumbItemViewerLifecycleCoordinator.cs`), #475 part 1 + (`BreadcrumbPopupUiOperations.cs`), and #475 part 2 (`BreadcrumbDropDownHost.cs`) are measured. +- `ItemViewer.cs` is a forbidden file under constraint C1 and its attribute is assumption D489-2, so + the exclusion must not be removed to "fix" the flat coverage. Constraint C5 additionally forbids + introducing any new `[ExcludeFromCodeCoverage]` attribute anywhere in this feature and forbids + removing any existing one; `[P0-T17]` records the baseline attribute counts that `[P8-T10]` compares + against. + +Output Summary: Baseline aggregated line-rates are **0.905660** for +`BreadcrumbItemViewerLifecycleCoordinator.cs`, **0.991453** for `BreadcrumbPopupUiOperations.cs`, and +**0.992883** for `BreadcrumbDropDownHost.cs`. `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` is absent +from the measured set because `QuickFiler/Viewers/ItemViewer.cs:20` carries a type-level +`[ExcludeFromCodeCoverage]` on the `ItemViewer` partial type. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage.md new file mode 100644 index 000000000..6f8e5cf3e --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage.md @@ -0,0 +1,88 @@ +# Phase 0 — Baseline Repository-Wide Coverage ([P0-T14]) + +Timestamp: 2026-08-28T05-19 + +Command (run under `pwsh -NoProfile` from this worktree root): + +``` +.\scripts\vscode\Invoke-MSTestWithCoverage.ps1 -SearchRoot . -Configuration Debug -CoverageOutput docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\baseline\coverage-baseline.cobertura.xml +``` + +EXIT_CODE: 0 + +## Cobertura file + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-baseline.cobertura.xml` +exists, 10,749,342 bytes. It is retained rather than summarised away because `[P8-T7]` recomputes the +baseline **testable-denominator** figure from it without starting a second long run. + +## Root `coverage` element attributes + +``` + +``` + +| Measure | Value | +| --- | --- | +| **Baseline raw line-rate** | **0.852607** (85.2607%) | +| **Baseline raw branch-rate** | **0.791925** (79.1925%) | +| Lines covered / valid | 54670 / 64121 | +| Branches covered / valid | 13005 / 16422 | + +Both figures clear the uniform repository floors of `>= 85%` line and `>= 75%` branch stated in +`.claude/rules/general-unit-test.md` and `.claude/rules/quality-tiers.md`, and the line figure also +clears the `>= 80%` floor stated in `CLAUDE.md` § UT2 and `.claude/rules/csharp.md`. These are the +**raw uninstrumented** figures over the whole repository; the CLAUDE.md § UT2 testable-denominator +figure is a different, higher number and is computed in `[P8-T7]` for both the baseline and the +post-change state. + +## Test run inside the coverage collection + +| Measure | Value | +| --- | --- | +| Total tests | **6812** | +| Passed | **6812** | +| Failed | **0** | +| Run result | `Test Run Successful.` | + +The runner applies `/InIsolation` and `/TestCaseFilter:TestCategory!=LiveOutlook` to every assembly, +matching CI and preventing a real Outlook process from being launched. + +## Discovered test assemblies + +**Total discovered: 9.** The runner's own output line reads `Discovered 9 test assemblies.` The +verbatim list, re-derived by applying the runner's own discovery predicate (`*.Test.dll` under a +`bin\Debug` path, excluding `obj` and `ref`) from this worktree root: + +``` +./QuickFiler.Test/bin/Debug/QuickFiler.Test.dll +./SVGControl.Test/bin/Debug/SVGControl.Test.dll +./Tags.Test/bin/Debug/Tags.Test.dll +./TaskMaster.Test/bin/Debug/TaskMaster.Test.dll +./TaskTree.Test/bin/Debug/TaskTree.Test.dll +./TaskVisualization.Test/bin/Debug/TaskVisualization.Test.dll +./ToDoModel.Test/bin/Debug/ToDoModel.Test.dll +./UtilitiesCS.Test/bin/Debug/UtilitiesCS.Test.dll +./VBFunctions.Test/bin/Debug/VBFunctions.Test.dll +``` + +The re-derived list has nine entries, agreeing with the runner's count. + +### Every entry is under this worktree root, and none carries a nested `worktrees` segment + +Each of the nine paths is rendered relative to this worktree root, which is what establishes that +every discovered assembly lies beneath it. None contains a `worktrees` path segment **below** this +worktree root. That property was additionally established structurally: `.claude/` in this worktree +contains `agent-memory`, `agents`, `hooks`, `lib`, `rules`, `settings.json`, `settings.local.json`, +and `skills`, and **no `worktrees` directory exists** under it, so recursive discovery from this root +cannot reach a sibling agent worktree. The worktree root's own absolute path does contain a +`worktrees` segment, since this worktree lives under the primary checkout's `.claude/worktrees/`; that +segment is above the root, not below it, and is outside the scope of the acceptance condition. + +Output Summary: EXIT_CODE 0. Baseline repository-wide **line-rate 0.852607** and **branch-rate +0.791925** (54670/64121 lines, 13005/16422 branches). **9** test assemblies discovered, all under this +worktree root with no nested `worktrees` segment. 6812 tests ran, 6812 passed, 0 failed. The Cobertura +file is retained for `[P8-T7]`'s baseline testable-denominator recomputation. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/csharpier-check.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/csharpier-check.md new file mode 100644 index 000000000..568417d51 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/csharpier-check.md @@ -0,0 +1,41 @@ +# Phase 0 — Baseline Formatting State ([P0-T9]) + +Timestamp: 2026-08-28T05-12 + +Command: `dotnet tool run csharpier check .`, run from the worktree root. Read-only; this command +verifies and reports and does not rewrite any file. +EXIT_CODE: 0 + +## Complete output + +``` +Checked 1553 files in 4547ms. +``` + +## BASELINE UNFORMATTED SET + +``` +(empty) +``` + +**The baseline unformatted-file set is empty.** CSharpier checked 1553 files and reported no file as +unformatted. An empty list is an explicitly valid result for this task, and it is the strongest form +of the baseline: it means `[P8-T2]`'s acceptance reduces to the plain `EXIT_CODE: 0` branch, and the +`[P9-T6]` / `[P9-T15]` authorized-exception branch for a pre-existing unformatted file is **not** +triggered. All 54 criteria therefore remain reachable, including the one beginning +"`dotnet tool run csharpier check .` reports no formatting differences". + +## How this artifact is used later + +`[P8-T2]` re-runs the identical read-only command from the worktree root and compares its reported +unformatted-file set against the set recorded above. Because the set recorded here is empty, the +comparison in `[P8-T2]` succeeds only when the post-change run also reports an empty set — that is, +only when none of the seven files this feature writes was left unformatted and no other file was +disturbed. That is a strictly stronger condition than a non-empty baseline would have imposed. + +A count of files processed is deliberately not treated as the result signal here. `Checked 1553 files` +is the tool's throughput line and is printed on a clean run and on a dirty run alike; the result +signal is the exit code together with the absence of any per-file unformatted report in the output. + +Output Summary: EXIT_CODE 0. 1553 files checked, **zero** unformatted. The baseline unformatted set is +empty and is the comparison basis for `[P8-T2]`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-sdk.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-sdk.md new file mode 100644 index 000000000..abf2303d4 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-sdk.md @@ -0,0 +1,46 @@ +# Phase 0 — .NET SDK Resolution ([P0-T5]) + +Timestamp: 2026-08-28T05-10 + +Command: `dotnet --version` and `dotnet --list-sdks`, run from the worktree root. +EXIT_CODE: 0 + +## `dotnet --version` + +``` +8.0.205 +``` + +The command exited 0 and printed a version rather than the `global.json` error message. The +`Install-RepoDotNetSdk.ps1` remediation branch stated by this task was therefore not required at the +time of this probe: the repo-local SDK was already installed into `.dotnet-sdk` during worktree +bootstrap before plan execution began, and the probe confirms it resolves. + +## Version-component check + +`global.json` pins `"version": "8.0.205"` under `"rollForward": "latestFeature"`, so the acceptance is +a component comparison rather than a string equality: + +| Component | Required | Observed | Result | +| --- | --- | --- | --- | +| major | `8` | `8` | pass | +| minor | `0` | `0` | pass | +| remaining (feature/patch) | at or above `205` | `205` | pass | + +## `dotnet --list-sdks` + +``` +8.0.205 [\.dotnet-sdk\sdk] +10.0.400 [C:\Program Files\dotnet\sdk] +``` + +The repo-local `8.0.205` under this worktree's `.dotnet-sdk` is what `global.json` selects, through +the `"paths": [".dotnet-sdk", "$host$"]` entry which searches the repo-local location first. The +machine-wide `10.0.400` is present but is not selected: it fails the `8.0` major/minor pin, and +`rollForward: latestFeature` does not cross a major version. Absolute paths are elided above to keep +the artifact free of a host account name; the first path is the `.dotnet-sdk\sdk` directory of this +worktree. + +Output Summary: `dotnet --version` exits 0 and prints `8.0.205`, satisfying the major `8`, minor `0`, +remaining-at-or-above-`205` condition. The repo-local SDK under this worktree's `.dotnet-sdk` is the +one selected by `global.json`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-tool-restore.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-tool-restore.md new file mode 100644 index 000000000..19621fb78 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-tool-restore.md @@ -0,0 +1,46 @@ +# Phase 0 — dotnet tool restore ([P0-T8]) + +Timestamp: 2026-08-28T05-12 + +Command: `dotnet tool restore`, run from the worktree root. +EXIT_CODE: 0 + +## Output + +``` +Tool 'csharpier' (version '1.2.6') was restored. Available commands: csharpier + +Restore was successful. +``` + +## Version verification + +Command: `dotnet tool run csharpier --version` +EXIT_CODE: 0 + +``` +1.2.6 +``` + +## Acceptance checks + +| Check | Required | Observed | Result | +| --- | --- | --- | --- | +| `dotnet tool restore` exit code | 0 | 0 | pass | +| `dotnet tool run csharpier --version` | `1.2.6` | `1.2.6` | pass | + +## Notes carried forward + +- `1.2.6` is the version pinned by `.config/dotnet-tools.json` and is the version + `.github/workflows/ci.yml` runs after its own `dotnet tool restore`. Invoking through + `dotnet tool run` is what selects it; a globally installed CSharpier would be a different version + and would produce diffs that disagree with CI. +- CSharpier 1.x requires a subcommand, per decision D-5. The two forms used by this plan are + `dotnet tool run csharpier format ` (mutating, scope-locked to the seven owned files in + `[P8-T1]`) and `dotnet tool run csharpier check .` (read-only, repository-wide, the gate in + `[P0-T9]` and `[P8-T2]`). The bare-path form does not run and `pipe-files` writes to stdout and + enforces nothing. + +Output Summary: `dotnet tool restore` exited 0 and reported `Restore was successful`. The +manifest-pinned CSharpier resolves through `dotnet tool run` and reports version `1.2.6`, matching the +required pin. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/exemption-and-identifier-counts.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/exemption-and-identifier-counts.md new file mode 100644 index 000000000..85a508a33 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/exemption-and-identifier-counts.md @@ -0,0 +1,97 @@ +# Phase 0 — Baseline Exemption and Identifier Counts ([P0-T17]) + +Timestamp: 2026-08-28T05-21 + +Command: +`grep -c -F 'ExcludeFromCodeCoverage' ` and +`git grep -n -F 'CaptureCurrentOrTests' -- '*.cs'`, both run from the worktree root. +EXIT_CODE: 0 + +--- + +## Breakdown 1 — `ExcludeFromCodeCoverage` occurrences in the SEVEN owned files + +Seven files rather than four. The criterion `[P9-T13]` flips states that no new attribute is +introduced **anywhere** by this feature, and the three owned test files are part of this feature, so +restricting the baseline to the four production files would leave the test half of that criterion +unevidenced. + +| # | Owned file | Baseline count | +| --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | **0** | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | **0** | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | **7** | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | **0** | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | **0** | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | **0** | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | **0** — the file does not yet exist | + +Total across the seven owned files: **7**. + +The seven occurrences in `BreadcrumbPopupUiOperations.cs` sit at lines 105, 380, 383, 390, 394, 412, +and 457. `[P8-T10]` compares the post-change per-file counts against this table and requires equality +on every row, which detects both an added attribute and a removed one. + +Note that `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` carries **zero** occurrences of its own. Its +coverage exemption is inherited from the type-level `[ExcludeFromCodeCoverage]` at +`QuickFiler/Viewers/ItemViewer.cs:20`, which is on a **forbidden** file this feature must not touch. +That is why the exemption cannot be evidenced from this file's own count and is evidenced separately +in `[P0-T15]` and `[P8-T10]`. + +--- + +## Breakdown 2 — `CaptureCurrentOrTests` occurrences in tracked `.cs` files + +`git grep` was used so that only tracked files are searched, excluding build output under `bin/` and +`obj/`. + +### The five production occurrences + +| File | Line | Role | +| --- | --- | --- | +| `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 86 | the declaration: `internal static BreadcrumbPopupUiOperations CaptureCurrentOrTests() =>` | +| `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 98 | constructor-chain argument in the `public` seven-parameter `LegacySurfaceFactory` overload | +| `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 118 | constructor-chain argument in the `internal` seven-parameter `ReadySurfaceFactory` overload | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 156 | `EnsureBreadcrumbLifecycle` argument in the two-argument `ConfigureBreadcrumbDropDown(environment, initializer)` overload | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 192 | `EnsureBreadcrumbLifecycle` argument in the three-argument `ConfigureBreadcrumbDropDown(host, anchorBounds, workingArea)` overload | + +This is exactly the five-occurrence set this task's acceptance names, at exactly the five cited lines. +The citations resolve without drift at this base commit. + +### The three test occurrences + +All in `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`: + +| Line | Role | +| --- | --- | +| 171 | the method-name line: `public void CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries()` | +| 178 | a call line — the method group passed to `WithContext(null, ...)` | +| 186 | a call line — the method group passed to `WithContext(context, ...)` | + +That is one method-name line and two call lines, as the acceptance states. + +### Totals + +| Scope | Occurrence lines | +| --- | --- | +| Production `.cs` | 5 | +| Test `.cs` | 3 | +| **All tracked `.cs`** | **8** | + +Per-file line counts from `git grep -c`: `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` 3, +`BreadcrumbDropDownHost.cs` 2, `BreadcrumbPopupUiOperations.cs` 1, `ItemViewer.Breadcrumb.cs` 2. No +other tracked `.cs` file names the identifier. + +`[P6-T3]` must retire **all five** production references in one edit set. Retiring only the two +`BreadcrumbDropDownHost` references would leave `ItemViewer.Breadcrumb.cs` naming a deleted member, +which is compile error CS0117, and would make `[P6-T3]`'s own zero-match acceptance unreachable and +`[P6-T4]`'s and `[P6-T5]`'s builds fail for a reason unrelated to the defect under test. The three +test occurrences are retired by deleting and replacing the one test method. + +Output Summary: Baseline `ExcludeFromCodeCoverage` counts across the seven owned files are 0, 0, **7**, +0, 0, 0, 0 — total 7, all seven in `BreadcrumbPopupUiOperations.cs` at lines 105, 380, 383, 390, 394, +412, 457. `CaptureCurrentOrTests` occurs on **8** lines in tracked `.cs` files: the five production +sites named in the acceptance (declaration at `BreadcrumbPopupUiOperations.cs:86`; calls at +`BreadcrumbDropDownHost.cs:98` and `:118` and `ItemViewer.Breadcrumb.cs:156` and `:192`), plus one +method-name line and two call lines in `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` at 171, 178, +and 186. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/file-sizes.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/file-sizes.md new file mode 100644 index 000000000..0830395e5 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/file-sizes.md @@ -0,0 +1,53 @@ +# Phase 0 — Baseline File Sizes ([P0-T16]) + +Timestamp: 2026-08-28T05-20 + +Command: `wc -l` over the seven owned files plus +`QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`, run from the worktree root, together +with an existence probe for the new test file. +EXIT_CODE: 0 + +## The eight rows + +| # | File | Expected | Observed | Result | +| --- | --- | --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | **319** | match | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 481 | **481** | match | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 494 | **494** | match | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 463 | **463** | match | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 382 | **382** | match | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | 480 | **480** | match | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (does not yet exist) | **0** — `ls` reports `No such file or directory` | match | +| 8 | `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` | 500 | **500** | match | + +## Discrepancies + +**None.** All eight recorded values equal the values constraint C2 states. No deviation was observed +and nothing needs reporting before Phase 1 begins. + +This agreement is worth stating explicitly rather than assuming, because the C2 table was measured at +commit `0a6aaa31` while this worktree's base is `12465043`. Every `file:line` citation in the spec, +plan, and research is anchored to the earlier commit and must be resolved by member name rather than +by line number, but the eight **file-level line counts** did not drift between the two commits: none +of the eight files was modified between them. That is what the table above establishes empirically. + +## Headroom to the 500-line ceiling + +| File | Lines now | Headroom | +| --- | --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | 181 | +| `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 481 | **19** | +| `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 494 | **6** | +| `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 463 | 37 | +| `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 382 | 118 | +| `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | 480 | 20 | +| `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | 500, capped at 480 by capacity rule 3 | +| `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` | 500 | **0** — at the ceiling, and a forbidden file | + +The two constrained files are `BreadcrumbItemViewerLifecycleCoordinator.cs` (19 lines of headroom) and +`BreadcrumbPopupUiOperations.cs` (6 lines, and it receives no addition of any kind). The capacity +budget derived from these figures is recorded by `[P0-T18]`. + +Output Summary: All eight baseline line counts match constraint C2 exactly — 319, 481, 494, 463, 382, +480, 0 (file absent), and 500. **Zero discrepancies.** The two constrained files have 19 and 6 lines +of headroom respectively. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-analyzers.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-analyzers.md new file mode 100644 index 000000000..a1dd7d210 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-analyzers.md @@ -0,0 +1,93 @@ +# Phase 0 — Baseline Analyzer Build ([P0-T10]) + +Timestamp: 2026-08-28T05-14 + +Command (run under `pwsh -NoProfile` from the worktree root, with the MSBuild path resolved in +`[P0-T4]`): + +``` +MSBuild.exe TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true /nologo +``` + +GATE: analyzer gate (`/t:Rebuild` against `TaskMaster.sln`) +EXIT_CODE: 0 + +## Headline counts + +| Measure | Value | +| --- | --- | +| Total errors | **0** | +| Total warnings | **5** | +| `Skipping target "CoreCompile"` occurrences | **0** | +| `CoreCompile:` target executions | 67 | +| Build result | `Build succeeded.` | +| Elapsed | 00:00:11.31 | + +## Non-vacuity proof + +MSBuild's up-to-date check does not invalidate on a command-line `/p:` change, so a warm `/t:Build` +returns exit 0 having skipped `CoreCompile` on every project and the analyzer gate cannot fail. Three +independent facts establish that this run was a real compile: + +1. The target is `Rebuild`, which runs `Clean` before `Build`. +2. A fixed-string search of the build log for `Skipping target "CoreCompile"` returns **0** + occurrences, while `CoreCompile:` target-execution headers appear **67** times. +3. Build output assemblies were rewritten by this run. `QuickFiler/bin/Debug/QuickFiler.dll`, + `QuickFiler.Test/bin/Debug/QuickFiler.Test.dll`, and `UtilitiesCS/bin/Debug/UtilitiesCS.dll` all + carry modification timestamps within the minute preceding this artifact's write. + +A count of `csc.exe` occurrences is deliberately not used as the non-vacuity signal: `CoreCompile` +runs the Roslyn `Csc` MSBuild task rather than spawning `csc.exe`, so that count is zero even on a +genuine compile. + +## The 5 warnings, with attribution + +All five are the same diagnostic, emitted by a NuGet-supplied targets file rather than by any C# +source file: + +``` +packages\System.Reactive.7.0.0\build\System.Reactive.PackagesConfigCheck.targets(31,5): warning : +The project contains a packages.config file, which is not supported by System.Reactive v7.0 or later. +Please migrate to PackageReference. +``` + +It is raised once per project that references System.Reactive 7.0.0 through `packages.config`, in the +`_RxCheckPackagesConfig` target, for these five projects: + +| # | Project | +| --- | --- | +| 1 | `UtilitiesCS/UtilitiesCS.csproj` | +| 2 | `ToDoModel/ToDoModel.csproj` | +| 3 | `QuickFiler/QuickFiler.csproj` | +| 4 | `TaskMaster/TaskMaster.csproj` | +| 5 | `UtilitiesCS.Test/UtilitiesCS.Test.csproj` | + +None is attributable to a C# source file, and none is an analyzer diagnostic. All five are +pre-existing repository conditions this feature neither caused nor is permitted to fix. + +## BASELINE PER-FILE ANALYZER WARNING COUNTS (comparison basis for [P8-T3]) + +| Owned production file | Baseline analyzer warnings | +| --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | **0** | +| `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | **0** | +| `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | **0** | +| `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | **0** | + +Derived by searching the full build log for a warning line naming each of the four file names; the +combined search returns **0** matching lines. Every one of the five warnings is attributed above to a +`.targets` file and a `.csproj`, and none names a `.cs` file at all. + +## Consequence for [P8-T3] + +The baseline error count is **0**, which is the expected case this task's downstream gate `[P8-T3]` +describes. `[P8-T3]`'s acceptance therefore reduces to its absolute branch: the post-change analyzer +run must report `EXIT_CODE: 0` with zero errors, and the per-file analyzer warning count for each of +the four owned production files must remain at or below **0** — that is, must remain exactly zero. The +scope-escalation branch for a non-zero baseline is not triggered. + +Output Summary: EXIT_CODE 0. `Build succeeded` with **0 errors** and **5 warnings**, all five being +the System.Reactive `packages.config` advisory raised from a NuGet targets file in five projects and +none attributable to a `.cs` file. Zero `Skipping target "CoreCompile"` occurrences against 67 +`CoreCompile:` executions, so the gate was non-vacuous. Baseline analyzer warning count for each of +the four owned production files is 0. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-nullable.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-nullable.md new file mode 100644 index 000000000..ec4eb3832 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-nullable.md @@ -0,0 +1,70 @@ +# Phase 0 — Baseline Nullable Build ([P0-T11]) + +Timestamp: 2026-08-28T05-15 + +Command (run under `pwsh -NoProfile` from the worktree root, with the MSBuild path resolved in +`[P0-T4]`): + +``` +MSBuild.exe TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true /nologo +``` + +GATE: nullable / type-check gate (`/t:Rebuild` against `TaskMaster.sln`) +EXIT_CODE: 0 + +## Headline counts + +| Measure | Value | +| --- | --- | +| **Errors** | **0** | +| Warnings | 5 | +| `Skipping target "CoreCompile"` occurrences | **0** | +| `CoreCompile:` target executions | 52 | +| Build result | `Build succeeded.` | +| Elapsed | 00:00:11.80 | + +## `/p:Nullable=enable` was NOT supplied + +The command above is character-for-character the CI gate in +`.github/workflows/ci.yml` (step "Build with nullable warnings treated as errors"), except that +`/t:Rebuild` replaces CI's `/t:Build` and `/nologo` is added for log hygiene. Two properties are +load-bearing and were preserved: + +- **`/p:Nullable=enable` is absent.** Nullable enforcement in this repository is per-file opt-in + through the `#nullable enable` pragma, and `/p:TreatWarningsAsErrors=true` then promotes a + participating file's `CS86xx` diagnostics to build errors. The solution-wide property would + conscript every file that has never adopted the pragma; it is deliberately absent from CI and is + forbidden by decision D-3 of this plan and by `.claude/rules/csharp.md`. +- **`/t:Rebuild`, not `/t:Build`.** CI can use `/t:Build` because a runner checkout is always cold. A + local working tree is warm, and MSBuild's up-to-date check does not invalidate on a command-line + `/p:` change, so a warm `/t:Build` would return exit 0 with `CoreCompile` skipped on every project + and the gate could not fail. + +## Non-vacuity proof + +A fixed-string search of the build log for `Skipping target "CoreCompile"` returns **0** occurrences, +while `CoreCompile:` target-execution headers appear **52** times. Combined with the `Rebuild` target, +which runs `Clean` first, this establishes that every project was genuinely recompiled and that the +nullable-flow and compiler diagnostics actually ran. + +## The 5 warnings + +Identical to the five recorded in `[P0-T10]`: the System.Reactive `packages.config` advisory emitted +by `packages\System.Reactive.7.0.0\build\System.Reactive.PackagesConfigCheck.targets(31,5)` in the +`_RxCheckPackagesConfig` target, once each for `UtilitiesCS.csproj`, `ToDoModel.csproj`, +`QuickFiler.csproj`, `TaskMaster.csproj`, and `UtilitiesCS.Test.csproj`. They are warnings rather than +errors under `/p:TreatWarningsAsErrors=true` because they are raised by an MSBuild `Warning` task in a +targets file rather than by the compiler, and `TreatWarningsAsErrors` promotes compiler warnings only. +None is attributable to a `.cs` file, and none to any file this feature owns. + +## Consequence for [P8-T4] + +The baseline error count is **0**, which is the expected case `[P8-T4]` describes and is consistent +with `main` being green on this command. `[P8-T4]`'s acceptance therefore reduces to its absolute +branch: the post-change nullable run must report `EXIT_CODE: 0` with zero errors. The +scope-escalation branch for a non-zero baseline is not triggered. + +Output Summary: EXIT_CODE 0. `Build succeeded` with **0 errors** and 5 warnings, all five being the +pre-existing System.Reactive `packages.config` advisory. Zero `Skipping target "CoreCompile"` +occurrences against 52 `CoreCompile:` executions, so the gate was non-vacuous. +`/p:Nullable=enable` was not supplied and the target was `Rebuild`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/nuget-restore.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/nuget-restore.md new file mode 100644 index 000000000..8f885adb2 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/nuget-restore.md @@ -0,0 +1,48 @@ +# Phase 0 — NuGet Restore ([P0-T6]) + +Timestamp: 2026-08-28T05-11 + +Command: `pwsh -NoProfile -File ./scripts/vscode/Invoke-Restore.ps1`, run from the worktree root. +EXIT_CODE: 0 + +## Why this script rather than a bare `nuget restore` + +`Invoke-Restore.ps1` is the `packages.config`-aware equivalent of `nuget restore TaskMaster.sln` for +this repository. The projects are legacy non-SDK VSTO / .NET Framework projects that import +`..\packages\.\build\*.props` conditionally. Without a completed restore those imports +silently do not fire, the analyzer, MSTest adapter, and coverage props never load, and the build +produces a weaker diagnostic set while still exiting 0. The restore is therefore a precondition of +every gate in this plan, not a convenience. + +## Acceptance checks + +| Check | Required | Observed | Result | +| --- | --- | --- | --- | +| Exit code | 0 | 0 | pass | +| `packages\MSTest.Analyzers.4.3.3` exists | yes | yes | pass | + +## Restore output tail + +``` +1>Done Building Project "\TaskMaster.sln" (Restore target(s)). + +Build succeeded. + 0 Warning(s) + 0 Error(s) + +Time Elapsed 00:00:00.53 +``` + +The restore reported `Build succeeded` with zero warnings and zero errors. The sub-second elapsed time +reflects that the package graph was already materialised in `packages/` during worktree bootstrap +before plan execution began; this run re-verified it rather than downloading it. The absolute solution +path is elided above to keep the artifact free of a host account name. + +## Resulting package state + +`packages/` holds **174** package directories after this run. + +Output Summary: Restore exited 0 with `Build succeeded`, zero warnings and zero errors. +`packages\MSTest.Analyzers.4.3.3` is present, satisfying this task's stated acceptance. 174 package +directories are materialised under `packages/`. The two analyzer packages whose versions are skewed +from the `Analyzer Include` items are handled separately by `[P0-T7]`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-feature-documents-read.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-feature-documents-read.md new file mode 100644 index 000000000..941bf7d0a --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-feature-documents-read.md @@ -0,0 +1,80 @@ +# Phase 0 — Feature Documents Read ([P0-T2]) + +Timestamp: 2026-08-28T05-09 + +Command: `grep -c '^- \[[ x]\] ' spec.md` and `grep -n 'Work Mode' issue.md` +EXIT_CODE: 0 + +## Resolved work mode + +`full-bug`, taken from the persisted marker `- Work Mode: full-bug` at `issue.md:6`. + +## Sole acceptance-criteria source + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md` is the sole +acceptance-criteria source for this feature. Under `full-bug`, `spec.md` is required and +`user-story.md` is intentionally absent; its presence would be an integrity failure. +`issue.md`'s `## Acceptance Criteria` section is a pointer only and carries no criteria of its own. + +## Total acceptance-criterion count + +**54** checkbox criteria, all currently unchecked. Measured by counting lines matching +`^- \[[ x]\] ` in `spec.md`, which is the file's only checkbox form. The count agrees with the +distribution the spec states in its own `## Acceptance Criteria` preamble: Process 2, D1 6, D2 5, +D3 6, D4 6, D5 4, #475 7, scope and ownership 6, file-size/toolchain/coverage/document-integrity 12 +(2+6+5+6+6+4+7+6+12 = 54). + +## Six defect units + +| Label | Title | Owned surface | +| --- | --- | --- | +| D1 | Host replacement on WebView2 environment change disposes the outgoing host too late | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | +| D2 | `SetBreadcrumbTheme` lost when the host post is deferred | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | +| D3 | A second, different `IFolderHierarchyProvider` is silently discarded | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | +| D4 | Non-atomic read-then-write on pipeline initialization; UI-thread affinity undeclared | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | +| D5 | A `Container` created during teardown is never disposed | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | +| #475 | `CaptureCurrentOrTests()` inverts the fail-fast guard | `BreadcrumbPopupUiOperations.cs`, `BreadcrumbDropDownHost.cs`, `ItemViewer.Breadcrumb.cs` | + +## Documents read + +- `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/issue.md` (3056 bytes) — READ. + Records the work mode, the two issues closed (#488 primary, #475 also-closes), the epic context + (`quickfiler-bug-family`, integration branch `epic/quickfiler-bug-family-integration`, wave 3), the + upstream dependency on feature `itemviewer-surface-defects-489`, and the provenance note that both + issues and their potential entries pre-date this feature folder. +- `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md` (83111 bytes) — READ. + Authoritative inputs and precedence, line-citation anchor, context, repro and evidence per defect, + scope and non-goals with the explicitly excluded file list, root-cause analysis, the proposed fix + per unit with rationale and rejected alternatives, boundaries and invariants, the cross-fix + interaction section, files and members to change, the test strategy including the reusable-harness + table and the constraining-test table, the coverage-exemption section, the toolchain commands, the + 54 acceptance criteria, the four recorded divergences from the research, and the risk register. +- `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/research/2026-08-25T10-00-itemviewer-breadcrumb-lifecycle-defects-research.md` + (70347 bytes) — READ. Method and the one unmet input, the current-state map with line-citation + corrections and the `ItemViewer` coverage-exemption finding, the confirmed root cause per defect, + the minimal-fix design per defect (sections 3.1 through 3.7 including the D5 faulted-task open item + and the D1c follow-up recommendation), regression-test feasibility, the existing-test inventory and + blast radius, file-size headroom, file ownership across concurrently prepared siblings, the 484 + upstream-contract citation, the `## Dependencies on 489` section, and the summary of + recommendations. +- `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/research/2026-08-25T10-20-orchestrator-comment-crosscheck.md` + (7506 bytes) — READ. Verifies the three claims of the #488 correction comment against source, records + that no research conclusion is overturned, and records the two out-of-scope decisions (the + `SetBridgeCoordinator` replace-without-dispose coupling, contingent on D3 staying fail-fast; and the + `Reset()` synchrony mismatch, out of scope on ownership grounds because half of it lives in + 501-owned `BreadcrumbDropDownOpenCoordinator.cs`). It names the three follow-up candidates this + plan's [P7-T5] must record as potential entries. + +## Precedence recorded + +`spec.md` governs over the research. The spec's `## Divergences from the research` section names four +divergences the executor must honour: the `QuickFiler.Test.csproj` item group is not alphabetically +ordered; five of the six research-named harnesses are `private` and unreachable from a new file; D1 +requires a fresh pattern variable because the one bound in the same-environment guard is not +definitely assigned on the fall-through path; and the D1/D2 `ObjectDisposedException` interaction is +an accepted documented residual. + +Output Summary: All four feature documents exist and were read. Work mode resolves to `full-bug`; +`spec.md` is the sole acceptance-criteria source and carries exactly 54 checkbox criteria, all +unchecked at this point. The six defect units are D1, D2, D3, D4, D5, and #475. `user-story.md` is +absent, which is correct for `full-bug` and is separately verified by [P7-T8]. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-instructions-read.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-instructions-read.md new file mode 100644 index 000000000..806e0b7be --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-instructions-read.md @@ -0,0 +1,28 @@ +# Phase 0 — Policy Instructions Read ([P0-T1]) + +Timestamp: 2026-08-28T05-07 + +Policy Order: + +1. `CLAUDE.md` +2. `.claude/rules/general-code-change.md` +3. `.claude/rules/general-unit-test.md` +4. `.claude/rules/csharp.md` +5. `.claude/rules/plan-acceptance-gates.md` +6. `.claude/rules/quality-tiers.md` +7. `.claude/rules/tonality.md` + +Command: `wc -l CLAUDE.md .claude/rules/general-code-change.md .claude/rules/general-unit-test.md .claude/rules/csharp.md .claude/rules/plan-acceptance-gates.md .claude/rules/quality-tiers.md .claude/rules/tonality.md` +EXIT_CODE: 0 + +## Files read, in order + +- `CLAUDE.md` (447 lines) — READ. Establishes the policy compliance order, the General Code Change Policy, the General Unit Test Policy, the C# Code Change Policy, the C# Unit Test Policy, the Tone Policy, and the four-step C# toolchain (format, analyze, type-check, test) with `/t:Rebuild` and without `/p:Nullable=enable`. +- `.claude/rules/general-code-change.md` (80 lines) — READ. Design principles, module rigor tiers by reference, the mandatory toolchain loop with restart-on-change, the 500-line file-size limit, error handling and logging, naming, public API compatibility, dependencies, and I/O boundaries. +- `.claude/rules/general-unit-test.md` (105 lines) — READ. Independence, isolation, fast execution, determinism, readability; coverage thresholds; the coverage exclusion policy; scenario completeness; Arrange-Act-Assert; the ban on external dependencies and temporary files; test file location; determinism infrastructure and the banned-API list (`Thread.Sleep`, `Task.Delay`, real wall-clock waits). +- `.claude/rules/csharp.md` (96 lines) — READ. CSharpier formatting through `dotnet tool run`; the analyzer and nullable msbuild commands with `/t:Rebuild` and the explicit instruction not to pass `/p:Nullable=enable`; MSTest + Moq + FluentAssertions; coverage floors; deterministic test rules; DI seams; the five-package analyzer stack and the SecurityCodeScan deferral; prohibited behaviors including weakening assertions and adding sleeps or timing hacks. +- `.claude/rules/plan-acceptance-gates.md` (128 lines) — READ. Acceptance-gate rules G1 through G6, the attribution window, graceful degradation, the G5 and G6 severity decisions, the checkable-literal definition and placeholder guard, message-formatting prohibitions, and authoring guidance (prefer a named test over a phrase search; assert short single-line non-interpolated tokens). +- `.claude/rules/quality-tiers.md` (51 lines) — READ. The T1 through T4 module rigor tiers, `quality-tiers.yml` as the source of truth, and the uniform-versus-tier-dependent gate matrix. +- `.claude/rules/tonality.md` (80 lines) — READ. Required professional tone; prohibitions on humor, hyperbole, and decorative metaphor; evidence-first wording; handling of difficult messages. + +Output Summary: All seven policy files exist and were read in the stated order. No conflicting instruction was found between them and the plan of record. The binding operational consequences carried into execution are: the four-stage C# toolchain in order with restart-on-change; `/t:Rebuild` for both msbuild gates; no `/p:Nullable=enable`; MSTest + Moq + FluentAssertions only; no `Thread.Sleep`, `Task.Delay`, wall-clock wait, or temporary file in any test; and the 500-line file ceiling. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/quickfiler-test.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/quickfiler-test.md new file mode 100644 index 000000000..12618a63c --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/quickfiler-test.md @@ -0,0 +1,65 @@ +# Phase 0 — Baseline `QuickFiler.Test` Result ([P0-T12]) + +Timestamp: 2026-08-28T05-16 + +Command (run under `pwsh -NoProfile` from the worktree root, with the vstest path resolved in +`[P0-T4]`): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/Logger:trx;LogFileName=baseline-quickfiler-test.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\baseline\trx-p0-t12 +``` + +EXIT_CODE: 0 + +## Counts + +| Measure | Value | +| --- | --- | +| Total | **1192** | +| **BASELINE_PASSED** | **1192** | +| Failed | **0** | +| Skipped / not executed | **0** | +| Total time | 9.3518 seconds | +| Run result | `Test Run Successful.` | + +The counts above are corroborated by the TRX `ResultSummary/Counters` element, which records +`total="1192" executed="1192" passed="1192" failed="0" notExecuted="0"`. The console summary and the +TRX agree. + +## BASELINE_FAILURE_SET + +``` +(empty) +``` + +**No test in `QuickFiler.Test` fails at the baseline.** The verbatim failing-test-name set is empty. + +## Consequences of the empty failure set + +- `[P4-T8]`'s subset condition ("the observed failing set is a subset of `BASELINE_FAILURE_SET`") + reduces to: the observed failing set must be empty. Any test failing after D4's affinity guard lands + is by definition outside the baseline set and triggers the constraint C6 escalation. +- `[P8-T5]`'s subset condition likewise reduces to failed count 0 with `EXIT_CODE: 0`, and its passed + count must be at least `BASELINE_PASSED + 9` = **1201**, the nine being ten added test methods minus + one deleted test method. +- `[P9-T9]`'s criterion asserts an absolute zero failures. Because the baseline set is empty, that + criterion is reachable and its "leave unchecked and report" branch is not triggered. + +## TRX artifact + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/trx-p0-t12/baseline-quickfiler-test.trx` +is present, 1,705,281 bytes. `LogFileName=` was supplied explicitly so that vstest did not name the +TRX after the host account and machine, which its default naming would have done. + +## Note on the absence of a category filter + +This command carries no `/TestCaseFilter:`. That is correct for this assembly: a repository search of +`QuickFiler.Test` for the fixed string `LiveOutlook` returns **zero** files, so the assembly contains +no test that would launch a real Outlook process. The `TestCategory!=LiveOutlook` filter that the +repository-wide runner applies is required for the aggregate run in `[P0-T14]` and `[P8-T6]`, which +covers assemblies that do carry that category, and is applied there by +`scripts/vscode/Invoke-MSTestWithCoverage.ps1`. + +Output Summary: EXIT_CODE 0. 1192 total, **1192 passed**, **0 failed**, 0 skipped, in 9.35 seconds. +`BASELINE_FAILURE_SET` is empty; `BASELINE_PASSED` is 1192. The named TRX is present in the task's own +results directory. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/repo-state.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/repo-state.md new file mode 100644 index 000000000..7777585d3 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/repo-state.md @@ -0,0 +1,57 @@ +# Phase 0 — Repository Baseline ([P0-T3]) + +Timestamp: 2026-08-28T05-09 + +Command: `git rev-parse HEAD`; `git rev-parse --abbrev-ref HEAD`; `git status --porcelain` +EXIT_CODE: 0 + +## BASE_SHA + +``` +BASE_SHA 12465043e052fce66a1861bf1ddd037a1aa81afc +``` + +Forty characters. This is the tip of the epic integration branch +`epic/quickfiler-bug-family-integration` at the time this worktree branch was cut. It is **not** the +tip of `main`, and it is **not** the commit `0a6aaa31` that the plan's and spec's line citations are +anchored to. Every `file:line` citation in `spec.md`, the plan, and the research must therefore be +resolved by the member or entry name it accompanies, never by the line number. + +## Branch + +``` +bug/itemviewer-breadcrumb-lifecycle-defects-488 +``` + +## `git status --porcelain` + +``` + M docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/plan.2026-08-25T09-53.md +?? docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/ +``` + +### Reading of that output + +The two entries are outputs of this same plan's already-completed Phase 0 tasks, not pre-existing +working-tree dirt: + +- The modified `plan.2026-08-25T09-53.md` is the check-off of `[P0-T1]`, whose `- [ ]` became `- [x]`. + `git diff --stat` reports exactly `1 insertion(+), 1 deletion(-)` on that file, which is one + checkbox character change. +- The untracked `evidence/` directory holds `phase0-instructions-read.md` written by `[P0-T1]` and + `phase0-feature-documents-read.md` written by `[P0-T2]`. Both tasks precede `[P0-T3]` in plan order, + so their outputs necessarily exist when this task runs. + +No path under `.claude/agent-memory/` appears in this run's output; that tolerance was available but +was not needed. + +**Corroborating check that the tree carries no other modification.** Running +`git status --porcelain -- . ":(exclude)docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488"` +produces **no output lines**. No source file, no project file, and no file outside this feature folder +is modified or untracked at the baseline. This is the substantive property the acceptance clause +protects, and it holds. + +Output Summary: HEAD is `12465043e052fce66a1861bf1ddd037a1aa81afc` on branch +`bug/itemviewer-breadcrumb-lifecycle-defects-488`. The working tree carries no modification outside +this feature's own folder; the two porcelain entries that do appear are the Phase 0 artifacts written +by `[P0-T1]` and `[P0-T2]` of this plan. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/toolchain-paths.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/toolchain-paths.md new file mode 100644 index 000000000..8e94acabb --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/toolchain-paths.md @@ -0,0 +1,44 @@ +# Phase 0 — Resolved Toolchain Paths ([P0-T4]) + +Timestamp: 2026-08-28T05-10 + +Command: `vswhere.exe -latest -requires Microsoft.Component.MSBuild -find "MSBuild\**\Bin\MSBuild.exe"` +and `vswhere.exe -latest -products * -find "Common7\IDE\Extensions\TestPlatform\vstest.console.exe"`, +both invoked under `pwsh -NoProfile` with `vswhere.exe` located under the Visual Studio Installer +directory beneath the 32-bit Program Files root. +EXIT_CODE: 0 + +## Resolved paths + +| Tool | Resolved path | Exists | Version | +| --- | --- | --- | --- | +| MSBuild | `C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe` | True | 18.9.1.35102 | +| vstest.console | `C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\Extensions\TestPlatform\vstest.console.exe` | True | VSTest version 18.9.0 (x64) | + +Both resolved files were confirmed present with `Test-Path`, which returned `True` for each, and both +responded to a version probe, which establishes that they are executable rather than merely present. + +## Notes carried into the remaining tasks + +- These are the Visual Studio **18** full-framework tools. The repository's projects are legacy + non-SDK `packages.config` VSTO / .NET Framework projects, so the full-framework `MSBuild.exe` + resolved here is the correct driver; a .NET SDK `dotnet build` is not a substitute for it. +- A second `vstest.console.exe` also exists on this machine at + `Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe` and was confirmed present. + The plan's stated `vswhere` `-find` argument selects the `Extensions\TestPlatform` path, and that is + the path recorded above and used by every test task in this plan. Recording the second path here is + a disambiguation note, not a second resolution. +- Neither `msbuild`, nor `vstest.console.exe`, nor `vswhere.exe` is on `PATH` in this environment, and + every invocation in this plan supplies the absolute path resolved above, under `pwsh -NoProfile`, + per decision D-4. + +## Host-path hygiene + +Neither resolved path contains a user account name, a home directory, or a machine name. Both sit +under the machine-independent `C:\Program Files\Microsoft Visual Studio\18\Community\` installation +root. No other absolute path is recorded in this artifact. + +Output Summary: Both tools resolved and both exist. MSBuild 18.9.1.35102 at +`C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe`; +vstest.console 18.9.0 at +`C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\Extensions\TestPlatform\vstest.console.exe`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/trx-p0-t12/baseline-quickfiler-test.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/trx-p0-t12/baseline-quickfiler-test.trx new file mode 100644 index 000000000..1c3ed8302 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/trx-p0-t12/baseline-quickfiler-test.trx @@ -0,0 +1,8227 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-reconciliation.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-reconciliation.md new file mode 100644 index 000000000..b97c423ac --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-reconciliation.md @@ -0,0 +1,159 @@ +# Acceptance-Criteria Reconciliation ([P9-T15]) + +Timestamp: 2026-08-28T06-35 + +Command: checkbox counts over +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`, plus a +`git diff ` of that file with the checkbox prefix stripped from both sides and the results +compared. +EXIT_CODE: 0 + +> **Superseded at 2026-08-28T06-40.** The remediation this artifact requested was performed by the +> orchestrator; the outcome is now **54 of 54 checked — PASS**. See "Remediation performed" at the end +> of this artifact. Everything between here and that section is the executor's record as written at +> 2026-08-28T06-35 and is retained unaltered. + +## Outcome as recorded by the executor: 53 of 54 checked — REMEDIATION-REQUIRED, not a pass + +| Measure | Value | +| --- | --- | +| Total acceptance-criterion checkboxes | **54** | +| Checked `- [x]` | **53** | +| Remaining `- [ ]` | **1** | + +The file contains exactly **54** acceptance-criterion checkboxes, matching the count `[P0-T2]` recorded +and the distribution the spec's own preamble states. + +**This task's outcome is recorded as remediation-required and must not be reported as a pass.** The one +unchecked criterion is **not** the single authorized exception, so the plan's default applies: any other +unchecked criterion is remediation-required. + +## No criterion text was modified + +`git diff --numstat` for `spec.md` reports `53 53` — fifty-three lines changed, matching the +fifty-three check-offs exactly. Every changed line begins with a checkbox marker; a filter for changed +lines that are *not* checkbox lines returns **0**. + +Stronger still, the criterion text itself was compared directly: stripping `- [ ] ` from every removed +line and `- [x] ` from every added line and diffing the two sorted sets produces **no differences**. +Only the single character inside the brackets changed on each line. No criterion was reworded, +reordered, added, or removed. + +## The one remaining criterion, verbatim + +At `spec.md:881-884`: + +``` +- [ ] The research §3.5 open item is discharged with recorded evidence: it is confirmed whether a faulted + `QfcItemController.InitializeWebViewAsync` task is observed by its caller. If it is not observed, a + new issue is opened against `QfcItemController.ViewerSetup.cs` (484-owned) and referenced here — + **the guard is not weakened in response.** +``` + +### Why it is left unchecked + +The criterion is a conjunction, and **two of its three clauses are delivered while the third is not**: + +| Clause | Status | +| --- | --- | +| The open item is discharged with recorded evidence; it is confirmed whether the task is observed | **DELIVERED** — `[P5-T6]` enumerated every in-repo caller and concluded the task is **not** observed: three of four production call sites discard it (`Initialization.cs:192`, `:288`, `:324`); only `:256` awaits it | +| The guard is not weakened in response | **DELIVERED** — D5's `ObjectDisposedException` guard is unchanged and unweakened, and `QfcItemController.ViewerSetup.cs` was read but not edited, confirmed by `[P7-T3]`'s empty forbidden-file diff | +| A new issue is opened against `QfcItemController.ViewerSetup.cs` and referenced here | **NOT DELIVERED** | + +Because the task **is** not observed, the issue clause is live, and it names an **issue** specifically — +unlike the three-follow-up criterion `[P7-T14]` flips, which accepts "a potential entry or GitHub +issue". A potential entry alone does not satisfy it. + +### Why the issue could not be opened + +The repository enforces an MCP-only promotion path. +`.claude/hooks/enforce-promotion-mcp-only.ps1` blocks `gh issue create`, `gh issue new`, and a POST to +the repository issues API, with the reason: + +``` +PROMOTION_MCP_ONLY_BLOCKED: Direct GitHub issue creation via `gh` bypasses the approved drm-copilot MCP +promotion path (`mcp__drm-copilot__new_potential_entry` -> `mcp__drm-copilot__potential_to_issue` -> +`mcp__drm-copilot__new_active_feature_folder`). Use those MCP tools instead. +``` + +**None of those three MCP tools is available in this executor's tool set** — the only `drm-copilot` MCP +tools exposed to this session are the four PoshQC ones. `gh` is installed and authenticated with `repo` +scope, so the blocker is the approved-path policy, not credentials. The approved path was unavailable +and **the forbidden path was not used**; no wording was altered to evade the hook. + +### What was delivered instead, and what remains + +The follow-up is fully prepared and needs only promotion. `[P5-T6]` created +`docs/features/potential/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md`, filed against +`QuickFiler/Controllers/QfcItemController.ViewerSetup.cs`, carrying the standard potential-entry front +matter and section headings the promotion tooling maps into the GitHub bug issue template, and naming +the mechanism, the four call sites with their observation status, and the trigger. + +**Remediation required:** the caller, who holds the MCP promotion tools, runs +`mcp__drm-copilot__potential_to_issue` against that entry, then records the resulting issue number and +URL in `evidence/qa-gates/d5-faulted-task-observation.md` and checks this criterion off. Two plan tasks +are correspondingly left unchecked and reported: `[P5-T6]`, whose acceptance requires the issue number +and URL, and `[P5-T11]`, which flips this criterion. + +### The authorized exception was NOT used + +The single exception this task authorizes is the pre-existing-unformatted-file branch of `[P9-T6]`: if +the `[P0-T9]` baseline unformatted set were non-empty and `[P8-T2]` reported exactly that same set, the +formatting criterion would be left unchecked and the outcome would still be a pass. + +That branch is not in play. `[P0-T9]` recorded an **empty** baseline unformatted set and `[P8-T2]` +reported an **empty** set over 1554 files, so the formatting criterion was checked off normally in +`[P9-T6]`. The one unchecked criterion is a different one, and the exception does not extend to it. + +Output Summary: `spec.md` contains exactly **54** acceptance-criterion checkboxes, **53 checked** and +**1 remaining**, with **no criterion text modified** — the diff is `53 53`, all on checkbox lines, and +the stripped text sets are identical. The outcome is **remediation-required**, not a pass. The one +unchecked criterion is the research §3.5 item: its discharge and its guard-not-weakened clauses are +delivered, but the GitHub issue it requires could not be opened because the MCP-only promotion tools are +unavailable to this executor and the `gh` path is hook-forbidden. The authorized +pre-existing-unformatted-file exception was not used and does not apply. + +--- + +## Remediation performed — outcome revised to 54 of 54, PASS + +Timestamp: 2026-08-28T06-40 + +Command: `mcp__drm-copilot__potential_to_issue` with `promotion_type=bug`, `work_mode=full-bug`, and an +absolute `potential_path` to the executor's prepared entry. +EXIT_CODE: 0 + +The orchestrator holds the MCP promotion tool set the executor lacked, so it ran exactly the approved +path the executor identified. `gh issue create` was not used and no wording was altered to evade +`enforce-promotion-mcp-only.ps1`. + +| Measure | Executor | After remediation | +| --- | --- | --- | +| Total acceptance-criterion checkboxes | 54 | **54** | +| Checked `- [x]` | 53 | **54** | +| Remaining `- [ ]` | 1 | **0** | +| Plan tasks checked | 143 of 145 | **145 of 145** | +| Outcome | remediation-required | **PASS** | + +The third clause of the research §3.5 criterion is now delivered: GitHub issue +**[#670](https://github.com/drmoisan/TaskMaster/issues/670)** — "Bug: +qfc-initializewebviewasync-fault-is-unobserved" — is OPEN against +`QuickFiler/Controllers/QfcItemController.ViewerSetup.cs`, verified with +`gh issue view 670 --json number,title,state,url`. It is referenced by number and URL in the D5 section +of `spec.md` and in `evidence/qa-gates/d5-faulted-task-observation.md`. The promoted record is at +`docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md`. + +The other two clauses were already delivered and were not revisited: the D5 guard remains unweakened and +`QfcItemController.ViewerSetup.cs` remains unedited. + +The check-off changed only the single character inside the brackets on `spec.md`'s research §3.5 +criterion. No criterion text was modified, added, removed, or reordered, and the total remains exactly +54. Separately, a non-criterion paragraph was added to the spec's D5 design section recording the +discharge and the #670 reference, because the criterion requires the issue to be "referenced here"; that +paragraph is prose, not a checkbox, and does not alter the criterion count. + +Output Summary (revised): `spec.md` contains exactly **54** acceptance-criterion checkboxes, **54 +checked** and **0 remaining**, with **no criterion text modified**. The plan is **145 of 145** tasks +complete. The single blocking gap — the GitHub issue for the research §3.5 follow-up — was closed by +promoting the executor's prepared entry through the approved MCP path to issue **#670**. The outcome of +`[P9-T15]` is **PASS**. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-status-summary.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-status-summary.md new file mode 100644 index 000000000..306cfb290 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-status-summary.md @@ -0,0 +1,85 @@ +# Acceptance-Criteria Status Summary ([P9-T16]) + +Timestamp: 2026-08-28T06-42 + +Command: checkbox counts over the acceptance-criteria source file. +EXIT_CODE: 0 + +> Revision note. This artifact was first written at 2026-08-28T06-36 recording **53 of 54**, with the +> research §3.5 criterion outstanding because the executor's tool set did not include the MCP promotion +> tools. The orchestrator subsequently ran the approved promotion path and opened issue **#670**, so the +> counts below are revised to **54 of 54**. The superseded record and the reason for the original gap +> are preserved in `evidence/other/ac-reconciliation.md` and +> `evidence/qa-gates/d5-faulted-task-observation.md`. + +### Acceptance Criteria Status + +- **Source:** `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md` +- **Total AC items:** 54 +- **Checked off (delivered):** 54 +- **Remaining (unchecked):** 0 +- **Items remaining:** none + +## Work mode and source resolution + +`issue.md` carries `- Work Mode: full-bug`, so `spec.md` is the **sole** acceptance-criteria source and +`user-story.md` is intentionally absent. `[P7-T8]` confirmed that absence with a recorded negative- +evidence search, and confirmed that `issue.md` carries **0** checkboxes of its own, so no second +document competes as a source. + +## Distribution of the 54 criteria + +| Section | Count | Checked | +| --- | --- | --- | +| Process | 2 | 2 | +| D1 — host replacement on environment change | 6 | 6 | +| D2 — `SetBreadcrumbTheme` lost when the post is deferred | 5 | 5 | +| D3 — a second, different `IFolderHierarchyProvider` | 6 | 6 | +| D4 — UI-thread affinity | 6 | 6 | +| D5 — `Container` created during teardown | 4 | 4 | +| #475 — `CaptureCurrentOrTests()` | 7 | 7 | +| Scope, ownership, and the 489 dependency | 6 | 6 | +| File size, toolchain, coverage, document integrity | 12 | 12 | +| **Total** | **54** | **54** | + +There is no remaining gap. + +## How the last criterion was closed + +The research §3.5 criterion is a conjunction of three clauses. All three are delivered: + +- **The open item is discharged with recorded evidence.** `[P5-T6]` enumerated every in-repo caller of + `QfcItemController.InitializeWebViewAsync` and concluded the faulted task is **not** observed: three + of its four production call sites discard it (`Initialization.cs:192`, `:288`, `:324`) and only + `:256` awaits it. The two `EfcItemController` sites discard theirs as well. +- **A new issue is opened against `QfcItemController.ViewerSetup.cs` and referenced here.** GitHub issue + **[#670](https://github.com/drmoisan/TaskMaster/issues/670)** — "Bug: + qfc-initializewebviewasync-fault-is-unobserved" — is OPEN, verified with + `gh issue view 670 --json number,title,state,url`. It is referenced by number and URL in the D5 + section of `spec.md` and in `evidence/qa-gates/d5-faulted-task-observation.md`. The promoted record is + `docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md`. +- **The guard is not weakened in response.** D5's `ObjectDisposedException` throw is unchanged, and + `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` was read but not edited, confirmed by + `[P7-T3]`'s empty forbidden-file diff. + +The issue was opened through the approved path — `mcp__drm-copilot__potential_to_issue` — by the +orchestrator, which holds the promotion tool set the executor lacked. `gh issue create` was not used and +nothing was reworded to evade `enforce-promotion-mcp-only.ps1`. + +## Integrity of the check-offs + +No criterion text was modified. Every check-off changed only the single character inside the brackets on +its own line: the executor's fifty-three (`git diff --numstat` on `spec.md` reported `53 53`, every +changed line a checkbox line, and stripping the checkbox prefix from both sides of the diff yielded +identical text sets), plus the orchestrator's one. The total remains exactly **54**. No criterion was +added, removed, reworded, or reordered. + +One non-criterion paragraph was added to the spec's D5 design section recording the discharge and the +#670 reference, because the criterion requires the issue to be "referenced here". That paragraph is +prose, not a checkbox, and does not change the criterion count. + +Output Summary: **54 of 54** acceptance criteria are checked off in +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`, with **0 remaining**. The +final gap — the GitHub issue required by the research §3.5 criterion — was closed by promoting the +executor's prepared potential entry through the approved MCP path to issue **#670**, which is OPEN and +referenced from both `spec.md` and the D5 evidence artifact. No criterion text was modified. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md new file mode 100644 index 000000000..e3597d013 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md @@ -0,0 +1,164 @@ +# Change Description — issue #488 (D1–D5) and issue #475 ([P7-T9]) + +Timestamp: 2026-08-28T06-18 + +Command: composed from the delivered source, the delivered `spec.md`, and the phase evidence artifacts. +EXIT_CODE: 0 + +## What this change-set delivers + +Six defect units across four owned production files, each with a deterministic regression test observed +red before its fix landed. + +| Unit | Change | File | +| --- | --- | --- | +| D1 | Dispose the outgoing host between the same-environment early return and the construction of its replacement | `ItemViewer.Breadcrumb.cs` | +| D2 | Retain the last theme and replay it onto the newly adopted host | `BreadcrumbItemViewerLifecycleCoordinator.cs` | +| D3 | Fail fast on a second, different `IFolderHierarchyProvider` | `ItemViewer.Breadcrumb.cs` | +| D4 | Declare and enforce UI-thread affinity via `ThrowIfOffUiBoundary` | `ItemViewer.Breadcrumb.cs` | +| D5 | Refuse breadcrumb resource creation once teardown has begun | `ItemViewer.Breadcrumb.cs` | +| #475 | Delete the ambient-probing selector; repoint both host constructor chains; make the lifecycle operations argument lazy | `BreadcrumbPopupUiOperations.cs`, `BreadcrumbDropDownHost.cs`, `ItemViewer.Breadcrumb.cs` | + +--- + +## D3 changes no production behaviour + +**D3 changes no production behaviour.** No reviewer should expect or claim a user-visible repair. + +The reason is that the guard is unreachable from production code. `InitializeBreadcrumbPipeline` has +exactly one production call site, `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs:150`, inside +`QfcItemController.EnsureBreadcrumbPipeline`, and it is guarded upstream: + +```csharp + if (viewer.BreadcrumbCoordinator == null) + { + ... + viewer.InitializeBreadcrumbPipeline(provider); + } +``` + +The call is made only when `viewer.BreadcrumbCoordinator` is null, which is exactly the condition under +which the new guard's enclosing `if (BreadcrumbCoordinator != null)` block is never entered. That file +is owned by sibling feature `qfc-item-controller-defects-484` and was read but not edited. + +D3's value is that a discard which was previously **silent** is now **loud** for any future caller, and +that the wrapper is exactly as strict as the collaborator it wraps. + +--- + +## D4's regression proxy proves the guard fires; it does not prove the race is absent + +The criterion this addresses requires the spec, the change description, and the test's own +documentation to each carry this statement. All three are quoted here so that this one artifact records +all three rather than only its own. + +### The delivered `spec.md` states it + +> The spec, the change description, and the test's own documentation each state that this proxy +> **proves the guard fires and does not prove the race is absent**, and that a true two-thread data +> race cannot be reproduced deterministically under the repository's ban on sleeps and wall-clock +> waits. **No criterion in this document asserts that the race is eliminated.** + +### The first `[P4-T1]` test's XML doc comment states it, verbatim + +From `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic`: + +> This proxy **proves the guard fires and does not prove the race is absent.** A +> true two-thread data race cannot be reproduced deterministically under the repository ban +> on sleeps and wall-clock waits: two threads with no barrier give no way to force the +> interleaving. + +### The second `[P4-T1]` test's XML doc comment states it, verbatim + +From `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic`: + +> This proxy **proves the guard fires and does not prove the race is absent**: a +> true two-thread data race cannot be reproduced deterministically under the repository ban +> on sleeps and wall-clock waits. The substituted context is installed and restored in a +> `try`/`finally` on the same thread; no second thread and no timing construct. + +### This change description states it + +D4's regression proxy **proves the guard fires and does not prove the race is absent.** A true +two-thread data race cannot be reproduced deterministically under the repository's ban on sleeps and +wall-clock waits: two threads with no barrier offer no way to force the interleaving. What the two +tests assert is the **declared contract**, on a single thread, with no timing construct — that an +off-boundary call is refused with a diagnostic naming the operation. D4 declares and enforces UI-thread +affinity; it does not make the read-then-write atomic. Atomic initialization was rejected because it +would legitimise off-thread access to WinForms control state that is not thread-safe at all. + +--- + +## The accepted `ObjectDisposedException` residual introduced by D1 + +D1's fix disposes the outgoing host **synchronously**, while the lifecycle coordinator's open +coordinator still points at that host until `ConfigureHost`'s posted lambda runs `ReleaseHostCore()`. A +`SetTheme` landing inside that window reaches the host's disposal guard and throws +`ObjectDisposedException` instead of silently theming a host that is about to be discarded. + +**This residual is accepted, not fixed**, for three reasons: D4 rejects an off-boundary configure +outright, so the window is no longer reachable through `ItemViewer`'s own surface; D2's retained theme +still reaches the newly adopted host, so no theme is lost; and the window does not exist on the +production UI thread, where every post runs inline. It is recorded here rather than left to be +discovered at review. The full dossier is `evidence/other/d1-residual-dossier.md`. + +**D1b** — the unobservable dispose failure inside the sibling-owned `BreadcrumbDropDownOpenCoordinator` +— is a recorded residual this feature does not fix, on ownership grounds. + +--- + +## #475's three parts landed as one change-set + +All three parts are required and were delivered together: + +1. `BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` is deleted; a repository-wide search of tracked + `.cs` files returns zero hits. `CreateForCurrentThreadTests` survives on both + `BreadcrumbPopupUiOperations` and `BreadcrumbUiDispatcher`, so every injected test seam is preserved. +2. Both `BreadcrumbDropDownHost` seven-parameter constructor chains supply `CaptureCurrent()`, with no + constructor argument reordered. +3. `EnsureBreadcrumbLifecycle` takes a `Func` evaluated exactly once and + only after the already-initialized early return, with all three call sites updated. + +Part 3 is **required, not opportunistic**. `EnsureBreadcrumbLifecycle` discards its operations argument +whenever the coordinator already exists, so parts 1 and 2 without part 3 would make a pure no-op call +throw on any thread without a context. `[P6-T4]` recorded exactly that failure before part 3 landed. + +--- + +## The one publicly observable behaviour change + +**The `public` seven-parameter `BreadcrumbDropDownHost` constructor now throws +`InvalidOperationException` when constructed without an ambient synchronization context**, where it +previously substituted a test dispatcher silently. No signature changed; the behaviour did. This is the +intended effect of #475 and is the only externally visible behaviour change in the change-set. + +No `public` member was added, removed, or re-signed. The three added members are all private, the one +re-signed member is the private `EnsureBreadcrumbLifecycle`, and the one removed member is the +`internal static` `CaptureCurrentOrTests`. + +--- + +## All fixes in `ItemViewer.Breadcrumb.cs` are coverage-exempt + +`QuickFiler/Viewers/ItemViewer.cs:20` carries `[ExcludeFromCodeCoverage]` on the `ItemViewer` partial +**type**. A type-level attribute on one part applies to the whole partial type, so **every member of +`ItemViewer.Breadcrumb.cs` is excluded from coverage measurement**. D1, D3, D4, D5, and #475 part 3 all +land in that file and therefore **move no coverage number**. + +`[P0-T15]` confirmed this empirically: the file matches zero `class` elements in the baseline Cobertura +document. A reviewer must not read flat coverage on this feature as a testing gap, and must not remove +the exemption to "fix" it — `ItemViewer.cs` is a forbidden file and its attribute is assumption D489-2. +The regression tests for those units are required by the CLAUDE.md Bugfix Workflow and by the +acceptance criteria, not by a coverage delta. + +Only D2 (`BreadcrumbItemViewerLifecycleCoordinator.cs`), #475 part 1 (`BreadcrumbPopupUiOperations.cs`), +and #475 part 2 (`BreadcrumbDropDownHost.cs`) are measured. + +Output Summary: Records that **D3 changes no production behaviour** with its upstream-guard reason; that +**D4's proxy proves the guard fires and does not prove the race is absent** and that a true two-thread +race cannot be reproduced deterministically under the repository ban on sleeps and wall-clock waits, +quoting the delivered `spec.md` and both `[P4-T1]` test doc comments verbatim alongside this +description's own statement; the accepted `ObjectDisposedException` residual introduced by D1; that +#475's three parts landed as one change-set; the one publicly observable behaviour change, namely the +`public` seven-parameter `BreadcrumbDropDownHost` constructor now throwing without an ambient context; +and that all fixes in `ItemViewer.Breadcrumb.cs` are coverage-exempt. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/d1-residual-dossier.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/d1-residual-dossier.md new file mode 100644 index 000000000..d7f8e493e --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/d1-residual-dossier.md @@ -0,0 +1,83 @@ +# D1 — Residual Dossier ([P1-T7]) + +Timestamp: 2026-08-28T05-29 + +Command: source reading of the delivered `[P1-T5]` change in +`QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` together with +`QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` and +`QuickFiler/Viewers/BreadcrumbDropDownHost.cs`. No command was executed. +EXIT_CODE: 0 + +## The residual, stated precisely + +After `[P1-T5]`'s fix, `ConfigureBreadcrumbDropDown(environment, initializer)` disposes the outgoing +`BreadcrumbDropDownHost` **synchronously**, by statement order, before the replacement host is +constructed. The lifecycle coordinator's open coordinator, however, still points at that outgoing host +until `ConfigureHost`'s **posted** lambda runs `ReleaseHostCore()` and installs the replacement. + +Between those two moments a window exists in which `_openCoordinator.Host` is a host that has already +been disposed. A `SetTheme` landing inside that window reaches +`BreadcrumbItemViewerLifecycleCoordinator.SetTheme`, which forwards to `DropDownHost?.SetTheme(theme)`, +which reaches `BreadcrumbDropDownHost.SetTheme`'s `ThrowIfDisposed()` guard and throws +`ObjectDisposedException` — instead of silently theming a host that is about to be discarded. + +## This residual is ACCEPTED, not fixed + +It is a deliberate, recorded outcome of the D1 design, not an oversight. Three reasons support +accepting it: + +1. **D4 rejects an off-boundary configure outright.** Once `ThrowIfOffUiBoundary` guards both + `ConfigureBreadcrumbDropDown` overloads, an off-boundary configure is rejected at the entry point, + so the deferred-post window that opens the residual is no longer reachable through `ItemViewer`'s + own surface. It remains reachable only by driving `BreadcrumbItemViewerLifecycleCoordinator` + directly, which is what the regression tests do deliberately, and by a viewer whose + `UiSyncContext` is null. +2. **D2's retained theme still reaches the newly adopted host.** The coordinator retains the last + theme and replays it in `ConfigureHost`'s newly-adopted branch, so a theme issued during the window + is not lost: it is applied to the replacement host when that host is adopted. The observable + outcome of the window is therefore a diagnostic exception on a contract violation, not a + silently wrong or missing theme. +3. **The window does not exist on the production UI thread.** Every post issued by + `BreadcrumbUiDispatcher` from the owning boundary runs inline, so `ConfigureHost`'s lambda executes + before `ConfigureBreadcrumbDropDown` returns and the outgoing host is released in the same + synchronous sequence that disposed it. The window is an artifact of a drainable, non-inline + context, which is a test arrangement. + +Trading a silent wrong-host theming for a loud `ObjectDisposedException` on a path that only a +contract violation can reach is the repository's fail-fast default. It is recorded here rather than +left to be discovered at review. + +## D1b is a recorded residual this feature does not fix + +**D1b — the unobservable dispose failure.** `BreadcrumbDropDownOpenCoordinator.Release()` calls +`_host.Dispose()` inside a `_operations.PostAsync(...)` whose returned task is **discarded** +(`_ = _operations.PostAsync(...)`), and `BreadcrumbUiDispatcher.Dispatch` routes any exception raised +inside that post to its error sink. A host that fails to dispose therefore leaves a WebView2-backed +`ToolStripDropDown` alive with nothing but a log line to show for it. + +**This feature does not fix D1b.** The code lives in +`QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`, which constraint C1 lists as a forbidden +file: it is owned by sibling feature `breadcrumb-coordinator-hub-defects-501` for issue #462, whose +own spec cedes this feature's four production files to 488 and correspondingly retains the open +coordinator. Two concurrent branches editing that file is exactly the conflict the epic's file +assignment exists to prevent. D1b is recorded as a known residual and carried forward. + +`[P1-T8]` records the corroborating evidence that +`QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` is in fact unmodified by this feature. + +## Relationship to the observed test behaviour + +This is the same residual that the `[P1-T4]` and `[P1-T6]` observations exercise deliberately rather +than encounter accidentally. The D1 regression test's discriminating assertion **is** the residual, +observed on purpose: it calls `SetTheme` on the captured outgoing host inside the window and asserts +that the `ObjectDisposedException` is thrown, because that throw is the only observation that +distinguishes the fixed ordering from the unfixed one. Decision D-10a records why the two other +observations cannot discriminate. + +Output Summary: D1's fix introduces one narrow residual — an `ObjectDisposedException` from a +`SetTheme` landing between the synchronous disposal of the outgoing host and the posted +`ReleaseHostCore()`. It is **accepted rather than fixed**, for three reasons: D4 rejects an +off-boundary configure outright, D2's retained theme still reaches the newly adopted host, and the +window does not exist on the production UI thread where every post runs inline. **D1b**, the +unobservable dispose failure inside the sibling-owned open coordinator, is a recorded residual that +this feature does not fix. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/final-commit.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/final-commit.md new file mode 100644 index 000000000..9a4f91843 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/final-commit.md @@ -0,0 +1,79 @@ +# Final Commit and Clean-Tree Verification ([P9-T17]) + +Timestamp: 2026-08-28T06-37 + +Command: `git status --porcelain` and +`git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- . ":(exclude).claude/agent-memory"` +from the worktree root. +EXIT_CODE: 0 + +## `git status --porcelain` + +**Output: no lines.** The working tree is clean. + +Every source, documentation, and evidence change produced by this plan is committed on the working +branch `bug/itemviewer-breadcrumb-lifecycle-defects-488`. **No path under `.claude/agent-memory/` +appears either** — that tolerance was available under the plan's rules but was not needed, because this +executor wrote nothing to agent memory. + +This artifact itself is committed by a final amend-free follow-up commit, since it necessarily describes +a state that exists only once the preceding commit has been made. + +## Changed-file set against `BASE_SHA` + +`git diff --name-only -- . ":(exclude).claude/agent-memory"` reports **107** paths. + +Filtering those paths through a pattern admitting only the permitted categories leaves **0** remaining: + +| Category | Paths | +| --- | --- | +| The four owned production files | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs`, `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | +| The three owned test files | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | +| The project file | `QuickFiler.Test/QuickFiler.Test.csproj` | +| Under the feature folder | `spec.md`, the plan, and the evidence artifacts and TRX files | +| Under `docs/features/potential/` | the four follow-up potential entries | + +**No other path appears.** The count rose from the 78 recorded by `[P7-T2]` to 107 because Phases 8 and +9 added their own evidence artifacts, the final Cobertura document, and the three `[P7-T5]` potential +entries. + +## Commit history + +**10 commits** on `12465043e052fce66a1861bf1ddd037a1aa81afc..HEAD`, one per phase plus this final one: + +| Phase | Commit subject | +| --- | --- | +| 0 | `chore(488): Phase 0 baseline capture and worktree bootstrap evidence` | +| 1 | `fix(quickfiler): dispose the outgoing breadcrumb host before its replacement (#488 D1)` | +| 2 | `fix(quickfiler): replay the retained breadcrumb theme onto the adopted host (#488 D2)` | +| 3 | `fix(quickfiler): fail fast on a second, different breadcrumb provider (#488 D3)` | +| 4 | `fix(quickfiler): declare and enforce breadcrumb UI-thread affinity (#488 D4)` | +| 5 | `fix(quickfiler): refuse breadcrumb resource creation during teardown (#488 D5)` | +| 6 | `fix(quickfiler): remove the ambient-probing breadcrumb selector (#475, all three parts)` | +| 7 | `docs(488): scope, ownership, contract, and follow-up verification` | +| 8 | `test(488): final QC toolchain loop, one consecutive clean pass` | +| 9 | `docs(488): acceptance-criteria completion and handoff` | + +Nothing was pushed. + +## Outstanding work at handoff + +The branch is complete and clean, with **one criterion and two plan tasks outstanding**, all on the same +blocker: + +- `[P5-T6]` and `[P5-T11]` are left unchecked, and the research §3.5 criterion in `spec.md` is left + `- [ ]`. +- The cause is that the GitHub issue that criterion requires could not be opened: + `.claude/hooks/enforce-promotion-mcp-only.ps1` forbids `gh issue create` and requires MCP promotion + tools absent from this executor's tool set. The forbidden path was not used. +- The follow-up is prepared as + `docs/features/potential/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md` and needs only + promotion, after which the issue number and URL go into + `evidence/qa-gates/d5-faulted-task-observation.md` and the three items can be checked off. + +Output Summary: `git status --porcelain` produces **no output lines** — the tree is clean and nothing +under `.claude/agent-memory/` is dirty. `git diff --name-only -- . ":(exclude).claude/agent-memory"` +lists **107** paths, **all** of which are the four owned production files, the three owned test files, +`QuickFiler.Test/QuickFiler.Test.csproj`, paths under the feature folder, or paths under +`docs/features/potential/`; a filter for anything else returns **0**. Ten commits, one per phase, none +pushed. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/followup-promotions.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/followup-promotions.md new file mode 100644 index 000000000..1bd138a53 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/followup-promotions.md @@ -0,0 +1,110 @@ +# Out-of-Scope Follow-Up Promotions ([P7-T5]) + +Timestamp: 2026-08-28T06-15 + +Command: created three potential entries under `docs/features/potential/`, then +`git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs` +and a filtered diff of `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` for the members +the three candidates name. +EXIT_CODE: 0 + +## The three entries created by this task + +Each names its mechanism, its trigger, and its owning file or files, and carries the standard +potential-entry front matter and section headings the promotion tooling maps into the GitHub bug issue +template. + +### 1. D1c — the generation guard drops the incoming host without disposing it + +`docs/features/potential/2026-08-28-configurehost-generation-guard-drops-incoming-host.md` + +- **Mechanism.** `BreadcrumbItemViewerLifecycleCoordinator.ConfigureHost`'s posted lambda opens with a + generation guard. When `_generation` advanced between the schedule and the run, the lambda returns + early and the **incoming** host — already constructed by the caller on the assumption the coordinator + would take ownership — is dropped undisposed, leaking a `ToolStripDropDown` and potentially a + WebView2-backed surface. +- **Triggers.** Two paths advance the generation: `Reset()`, reached from `QfcItemController.Cleanup()` + through the viewer-setup teardown path, and `Dispose()`. +- **Owning file.** `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`. +- **Why out of scope for #488.** It leaks the **incoming** host, a different defect from the outgoing-host + disposal ordering that defect D1 filed; and adding a `Dispose()` to a branch no current test exercises + would be an unpinned behaviour change inside a bugfix change-set. + +### 2. `SetBridgeCoordinator` replaces without disposing while `Dispose()` disposes + +`docs/features/potential/2026-08-28-setbridgecoordinator-replaces-without-disposing.md` + +- **Mechanism.** On replacement, `SetBridgeCoordinator` calls `UnsubscribeBridge()` — which detaches + four event handlers and disposes nothing — then overwrites the field. `Dispose()` by contrast calls + `_bridgeCoordinator?.Dispose()`. The type owns the bridge coordinator at teardown but not at + replacement, so a replacement leaks the outgoing instance's `BreadcrumbMessengerHub` and its four + subscriptions. +- **Trigger.** Any call installing a genuinely different bridge coordinator, which the method's + reference-equality guard currently prevents. +- **Owning file.** `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`. +- **Why out of scope for #488, and the contingency carried forward.** The path is dormant **because** + D3 was implemented as fail-fast: `InitializeBreadcrumbPipeline` never constructs a second + `BreadcrumbBridgeCoordinator`, so nothing new reaches the replacement branch. The entry records + explicitly that if D3 were ever amended to adopt explicit re-initialization, this defect becomes live + and must be pulled into scope in the same change-set. + +### 3. `Reset()` detaches the two surfaces with different synchrony + +`docs/features/potential/2026-08-28-reset-detaches-collapsed-and-popup-surfaces-with-different-synchrony.md` + +- **Mechanism.** `Reset()` detaches the collapsed surface synchronously via `DetachCollapsedMessenger()`, + but the popup surface only through the posted lambda opened by + `BreadcrumbDropDownOpenCoordinator.Reset()`. On any non-inline context the two detaches land at + different times, and a caller treating `Reset()` as complete on return is right about one surface and + wrong about the other. +- **Trigger.** Any `Reset()` issued from off the UI boundary, where posts do not run inline. +- **Owning files — the entry names BOTH**, as this task requires: + `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` (the synchronous half) and + `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` (the asynchronous half). +- **Why out of scope for #488.** The asynchronous half lives in a file owned by sibling feature + `breadcrumb-coordinator-hub-defects-501` for issue #462. Changing only the collapsed half does not fix + a synchrony mismatch. + +## No fix for any of the three appears in this feature's diff + +| Check | Result | +| --- | --- | +| `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs` | **no output lines** — both untouched | +| Added or removed lines in `BreadcrumbItemViewerLifecycleCoordinator.cs` matching `SetBridgeCoordinator`, `UnsubscribeBridge`, `Reset()`, `IsCurrent`, or `_generation` | **0** | + +The only change this feature makes to `BreadcrumbItemViewerLifecycleCoordinator.cs` is D2's +retained-theme replay, whose sixteen added lines `[P3-T5]` quotes in full. None of them touches the +generation guard's early-return branch, `SetBridgeCoordinator`, `UnsubscribeBridge`, or `Reset()`. + +## The fourth candidate — carried forward from [P5-T6], NOT duplicated + +`[P5-T6]` concluded that a faulted `QfcItemController.InitializeWebViewAsync` task **is not observed**: +three of its four production call sites discard it. That triggered the fourth follow-up, which +`[P5-T6]` created rather than this task: + +- **Path:** `docs/features/potential/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md` +- **GitHub issue number:** **none — not created** +- **GitHub issue URL:** **none — not created** + +**No duplicate entry and no second issue were created by this task.** The path above is carried forward +verbatim from `[P5-T6]`'s artifact, as instructed. + +The issue number and URL cannot be recorded because promotion is blocked. `[P5-T6]`'s artifact records +the blocker in full: `.claude/hooks/enforce-promotion-mcp-only.ps1` forbids `gh issue create`, `gh issue +new`, and a POST to the issues API, and requires the `mcp__drm-copilot__new_potential_entry` → +`potential_to_issue` → `new_active_feature_folder` MCP path, none of which is available in this +executor's tool set. The forbidden path was not used and no wording was altered to evade the hook. + +**This does not block the criterion `[P7-T14]` flips.** That criterion accepts "a potential entry **or** +GitHub issue" for the three candidates this task creates, and all three exist as potential entries. It +does block the criterion `[P5-T11]` flips, which names an issue specifically for the fourth; that +criterion is left unchecked and reported. + +Output Summary: The **three** out-of-scope follow-up candidates — D1c, `SetBridgeCoordinator` +replace-without-dispose, and the `Reset()` synchrony mismatch — are each recorded as a potential entry +under `docs/features/potential/`, each naming its mechanism, trigger, and owning file, with the third +naming both of its files. **No fix for any of the three appears in this feature's diff**: the two +501-owned files are untouched, and the coordinator diff contains zero lines matching the members the +candidates name. The fourth entry, created by `[P5-T6]`, is carried forward by path; its issue number +and URL are **not** recorded because MCP-only promotion is unavailable, and no duplicate entry or second +issue was created. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/475-seam-audit.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/475-seam-audit.md new file mode 100644 index 000000000..66ff0b7af --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/475-seam-audit.md @@ -0,0 +1,87 @@ +# #475 — Seam-Preservation Audit ([P6-T9]) + +Timestamp: 2026-08-28T06-09 + +Command: +`git grep -c -E 'new BreadcrumbPopupUiOperations\(|CreateForCurrentThreadTests' -- 'QuickFiler.Test/*.cs'` +and `git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test`, the latter +after `git add -N` on the new test file so it appears in the diff. +EXIT_CODE: 0 + +## Test files that inject a `BreadcrumbPopupUiOperations` seam + +Seventeen files construct operations through the injectable constructor or through +`CreateForCurrentThreadTests`, with the injection-site counts below. + +| # | File | Injection sites | Modified by this feature? | +| --- | --- | --- | --- | +| 1 | `Viewers/BreadcrumbBridgeCoordinatorProbabilityTests.cs` | 1 | no | +| 2 | `Viewers/BreadcrumbDropDownCoverageThresholdTests.cs` | 1 | no | +| 3 | `Viewers/BreadcrumbDropDownOpenCoordinatorTests.Part2.cs` | 1 | no | +| 4 | `Viewers/BreadcrumbDropDownOpenCoordinatorTests.cs` | 1 | no | +| 5 | `Viewers/BreadcrumbDropDownReadinessTests.cs` | 3 | no | +| 6 | `Viewers/BreadcrumbDuplicateIdentityIntegrationTests.cs` | 1 | no | +| 7 | `Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 1 | **yes** — owned; D2 only | +| 8 | `Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | 1 | **yes** — owned; the one mandatory test edit | +| 9 | `Viewers/BreadcrumbPopupBoundaryCoverageTests.cs` | 1 | no | +| 10 | `Viewers/BreadcrumbPopupControlDispatchTests.cs` | 3 | no | +| 11 | `Viewers/BreadcrumbPopupUiOperationsDirectAdapterTests.cs` | 1 | no | +| 12 | `Viewers/BreadcrumbSelectorCoordinatorTests.cs` | 1 | no | +| 13 | `Viewers/BreadcrumbSelectorOpenRetryTests.cs` | 4 | no | +| 14 | `Viewers/BreadcrumbSelectorToggleUiBoundaryTests.cs` | 3 | no | +| 15 | `Viewers/BreadcrumbUiThreadDispatchTests.cs` | 1 | no | +| 16 | `Viewers/FolderBreadcrumbAssetContractTests.cs` | 1 | no | +| 17 | `Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 7 | **yes** — this feature's new file | + +Fifteen of the seventeen are untouched. **No existing test's injected +`BreadcrumbPopupUiOperations` seam was removed or replaced.** The seam itself — the injectable +constructor at `BreadcrumbPopupUiOperations` and the `CreateForCurrentThreadTests` factories on both +`BreadcrumbPopupUiOperations` and `BreadcrumbUiDispatcher` — is intact: `[P6-T3]` deleted only the +*ambient-probing selector* `CaptureCurrentOrTests`, and `[P3-T5]`'s and `[P6-T3]`'s diff evidence +confirms both `CreateForCurrentThreadTests` declarations are unchanged from `BASE_SHA`. + +## Changed-file set under `QuickFiler.Test` + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test +``` + +Output: + +``` +QuickFiler.Test/QuickFiler.Test.csproj +QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs +QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs +QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs +``` + +**Exactly the four paths this task's acceptance names, and no others.** Three are the owned test files +of constraint C1 and the fourth is the project file, which receives exactly one added `Compile Include` +line. + +`git add -N` was run on the new test file first; without it that untracked file would not appear in the +diff and the enumeration would have been silently short by one. + +## Attribution of the two modified existing test files + +Neither was modified "in service of #475" beyond the single mandatory edit: + +- `BreadcrumbItemViewerLifecycleCoordinatorTests.cs` was modified by **D2 only** — the `ThemesApplied` + recorder on `RecordingHost` and the one new D2 regression test. It has one injection site, inside + `LifecycleFixture`, which is untouched. +- `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` carries the **one mandatory test edit in the whole + change-set**: `CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` is deleted + and `CaptureCurrent_NullAndControlledContexts_FailFastAndCapture` replaces it. That file was the only + place in the repository referencing the deleted selector from a test, so the edit was unavoidable. + Its own injection site and its `WithContext` helper are unchanged; the replacement test reuses that + helper rather than introducing a new arrangement. + +Output Summary: **Seventeen** test files inject a `BreadcrumbPopupUiOperations` seam, with per-file +site counts listed above; **fifteen are untouched** and no existing test's injected seam was removed or +replaced. `git diff --name-only -- QuickFiler.Test` reports exactly +`QuickFiler.Test/QuickFiler.Test.csproj`, +`QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, +`QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, and +`QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/changed-file-set.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/changed-file-set.md new file mode 100644 index 000000000..60945cbcb --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/changed-file-set.md @@ -0,0 +1,72 @@ +# Changed-File Set ([P7-T2]) + +Timestamp: 2026-08-28T06-12 + +Command: + +``` +git add -N +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- . ":(exclude).claude/agent-memory" +git status --porcelain +``` + +`git add -N` had already been run on +`QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` so that the new file appears +in the diff; without it an untracked file contributes no path and the check would be silently +incomplete. +EXIT_CODE: 0 + +## Result + +The diff reports **78** paths. **Zero** of them fall outside the permitted set. + +That was established mechanically rather than by eye: filtering the 78 paths through a pattern that +admits only the four owned production files, the three owned test files, `QuickFiler.Test.csproj`, +paths under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/`, and paths under +`docs/features/potential/` leaves **0** remaining lines. + +## The 78 paths by category + +| Category | Count | Paths | +| --- | --- | --- | +| Owned production files | 4 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs`, `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | +| Owned test files | 3 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | +| Project file | 1 | `QuickFiler.Test/QuickFiler.Test.csproj` | +| Under the feature folder | 69 | `spec.md`, `plan.2026-08-25T09-53.md`, and 67 evidence artifacts and TRX files under `evidence/` | +| Under `docs/features/potential/` | 1 | `docs/features/potential/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md` | + +The last category is admitted by decision D-14: the scope criterion enumerates the **source** files +this feature may change, while the follow-up criterion compels creating potential entries, so the two +are reconciled by reading the scope criterion as constraining source files and admitting the +feature-folder and potential-entry documentation paths alongside them. + +## `git status --porcelain` + +``` +?? docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/constraining-tests-final.md +?? docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p7-t1/ +``` + +Both entries are under +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/` and are this task's immediate +predecessor `[P7-T1]`'s outputs, written moments before this check ran. They are permitted paths. + +**No path under `.claude/agent-memory/` appears.** That tolerance was available under the plan's rules +but was not needed: this executor wrote nothing to agent memory. + +## What is NOT in the set + +No file outside the eight owned source paths was changed. In particular none of the forbidden files +appears — `BreadcrumbDropDownOpenCoordinator.cs`, `BreadcrumbMessengerHub.cs`, +`BreadcrumbBridgeCoordinator.cs`, `BreadcrumbCoordinatorUpgradeLifetime.cs`, `ItemViewer.cs`, +`ItemViewer.Designer.cs`, `ItemViewer.WebViewThread.cs`, `ItemViewer.FolderSearch.cs`, +`ItemViewer.DisplayState.cs`, `ItemViewer.Commands.cs`, every `QfcItemController` partial, +`IBreadcrumbDropDownHost.cs`, `IItemViewer.cs`, `IQfcItemController.cs`, `QuickFiler/QuickFiler.csproj`, +or `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. `[P7-T3]` verifies that +independently with a targeted diff. + +Output Summary: `git diff --name-only -- . ":(exclude).claude/agent-memory"` reports **78** +paths, every one of which is an owned production file, an owned test file, +`QuickFiler.Test/QuickFiler.Test.csproj`, a path under the feature folder, or the single new potential +entry. A mechanical filter for anything outside that set returns **0** paths. `git status --porcelain` +reports only two untracked paths, both `[P7-T1]` outputs under the feature folder. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/constraining-tests-final.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/constraining-tests-final.md new file mode 100644 index 000000000..3fa87d501 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/constraining-tests-final.md @@ -0,0 +1,72 @@ +# Constraining Tests — Final Re-Run ([P7-T1]) + +Timestamp: 2026-08-28T06-11 + +Command (under `pwsh -NoProfile`, worktree root), with the nine fully qualified name fragments joined +by the literal `|` character: + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces|FullyQualifiedName~ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession|FullyQualifiedName~ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost|FullyQualifiedName~ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily|FullyQualifiedName~ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam|FullyQualifiedName~HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder|FullyQualifiedName~ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks|FullyQualifiedName~SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions|FullyQualifiedName~Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory" "/Logger:trx;LogFileName=constraining-tests-final.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\trx-p7-t1 +``` + +The fragments are joined with the literal `|` character. `vstest.console.exe` rejects the word `OR` in +a `/TestCaseFilter:` expression. + +EXIT_CODE: 0 + +## Baseline comparison, one row per name + +| # | Test | Baseline ([P0-T13]) | Observed | Worse than baseline? | +| --- | --- | --- | --- | --- | +| 1 | `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` | Passed | **Passed** | no | +| 2 | `ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession` | Passed | **Passed** | no | +| 3 | `ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost` | Passed | **Passed** | no | +| 4 | `ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily` | Passed | **Passed** | no | +| 5 | `ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam` | Passed | **Passed** | no | +| 6 | `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder` | Passed | **Passed** | no | +| 7 | `ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks` | Passed | **Passed** | no | +| 8 | `SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions` | Passed | **Passed** | no | +| 9 | `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` | Passed | **Passed** | no | + +**No name's outcome is worse than its baseline outcome.** + +## Counts + +| Measure | Value | +| --- | --- | +| Total | **9** | +| Passed | **9** | +| Failed | **0** | +| Run result | `Test Run Successful.` | + +All nine baselines were `Passed`, which is the expected case this task describes, so the gate is +`EXIT_CODE: 0` with failed count 0 and is recorded as such. The branch that would leave this task +unchecked — a constraining test already red at baseline, which could not have constrained the fix — is +**not** triggered. + +## What each test constrains, and why it survived + +- **1** pins `host.Dispose()` `Times.Once()` on viewer disposal. D1's disposal type-tests the concrete + `BreadcrumbDropDownHost`, so the `Mock` this test installs through the + three-argument overload is not disposed by the new statement. +- **2** asserts no stale pooled theme is replayed. D2's retained value is overwritten by the subsequent + light-theme call before the re-attach, so the replay carries the current theme; `[P2-T6]` records the + reasoning in full. +- **3** pins the same-environment early return, which still fires before D1's new statement. +- **4** and **5** pin theme and `ControlHost` state immediately after configure-then-theme; D2's replay + is confined to the newly-adopted branch and is therefore additive. +- **6** pins subscription order across a host swap; it stays green because `RecordingHost.Dispose` + remains an empty body, which `[P2-T1]` preserved deliberately. +- **7** reconfigures with the same host and so takes the `UpdateRequestProviders` branch, which performs + no theme call at all. +- **8** is the reference-comparison precedent D3 mirrors; `SetBridgeCoordinator` is unchanged. +- **9** passes without an ambient context because the surface-factory argument-null guard is evaluated + before the operations argument; #475 part 2 reordered no constructor argument. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p7-t1/constraining-tests-final.trx` + +Output Summary: EXIT_CODE 0. All **nine** constraining tests observed `Passed`, each matching its +`[P0-T13]` baseline of `Passed`; no name's outcome is worse than its baseline. Total 9, passed 9, +failed 0. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md new file mode 100644 index 000000000..c856eff7c --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md @@ -0,0 +1,120 @@ +# Coverage Delta Against the Phase 0 Baseline ([P8-T7]) + +Timestamp: 2026-08-28T06-28 + +Command: computed from the two retained Cobertura documents — +`evidence/baseline/coverage-baseline.cobertura.xml` (`[P0-T14]`) and +`evidence/qa-gates/coverage-final.cobertura.xml` (`[P8-T6]`) — using one counting method applied +identically to both. **No new coverage run was started for this task.** +EXIT_CODE: 0 + +## Counting method + +Rates are computed per `` element, deduplicated by `(filename, line number)` so a line emitted +under several `class` elements — async state machines and lambdas are separate `class` elements — is +counted once. The method reproduces each document's own root `line-rate` and `branch-rate` attributes +exactly, which is what validates it. + +Two denominators are reported: + +- **RAW** — every measured line. Test assemblies are already outside it (`coverage.config` excludes + them, and the nine Cobertura packages are all production assemblies), and `[ExcludeFromCodeCoverage]` + members never appear at all. +- **TESTABLE DENOMINATOR** — RAW minus Designer-generated files, the exemption `CLAUDE.md` § UT2 names + explicitly under category (b) and the one that is mechanically identifiable by filename. Categories + (a) VSTO add-in lifecycle and (c) Outlook-Interop event handlers are already removed from RAW by their + in-source `[ExcludeFromCodeCoverage]` attributes, so they are not double-subtracted. **30** Designer + files holding **3574** lines are excluded, identically on both sides. + +## The four required repository-wide figures + +| # | Figure | Value | +| --- | --- | --- | +| 1 | **Baseline RAW line rate** | **0.852607** (54670 / 64121) | +| 2 | **Baseline TESTABLE-DENOMINATOR line rate** | **0.850562** (51499 / 60547) | +| 3 | **Post-change RAW line rate** | **0.852830** (54692 / 64130) | +| 4 | **Post-change TESTABLE-DENOMINATOR line rate** | **0.850799** (51521 / 60556) | + +### The change does not lower either denominator + +| Denominator | Baseline | Post-change | Delta | Not lowered? | +| --- | --- | --- | --- | --- | +| RAW | 0.852607 | **0.852830** | **+0.000223** | **yes — increased** | +| Testable | 0.850562 | **0.850799** | **+0.000237** | **yes — increased** | + +Both figures **rose**. The no-regression condition holds for each of the two denominators separately, +which is why both baseline figures had to be recorded: with only a baseline raw figure the +testable-denominator claim could not have been evaluated at all. + +### The `>= 80%` floor against the CLAUDE.md testable denominator + +**0.850799 = 85.08%**, which is at or above the `>= 80%` floor stated in `CLAUDE.md` § UT2. It also +clears the `>= 85%` uniform line floor in `.claude/rules/quality-tiers.md`. + +Branch rates, for completeness: baseline raw 0.791925 and testable 0.794114; post-change raw 0.792255 +and testable 0.794446. Both rose, and both clear the `>= 75%` branch floor. + +## Per-file rates for the three MEASURED owned production files + +| File | Baseline (`[P0-T15]`) | Post-change | Delta | `>= 90%`? | +| --- | --- | --- | --- | --- | +| `BreadcrumbItemViewerLifecycleCoordinator.cs` | 0.905660 (288/318) | **0.909091** (300/330) | **+0.003431** | yes | +| `BreadcrumbPopupUiOperations.cs` | 0.991453 (232/234) | **0.991342** (229/231) | −0.000111 | yes | +| `BreadcrumbDropDownHost.cs` | 0.992883 (279/281) | **0.992883** (279/281) | 0 | yes | + +**All three exceed 90%.** + +### The `BreadcrumbPopupUiOperations.cs` figure fell by 0.000111, and no line lost coverage + +This is an arithmetic artifact of a deletion, not a coverage regression. #475 part 1 deleted +`CaptureCurrentOrTests`, whose body was **fully covered**: covered lines fell 232 → 229 and valid lines +fell 234 → 231, both by exactly 3. Removing three fully-covered lines from a file whose rate is below +1.0 necessarily lowers that ratio slightly. + +**The file's uncovered-line count is unchanged at 2** — 234 − 232 = 2 before, 231 − 229 = 2 after. Not +one line that was covered became uncovered. The only edit to this file is the deletion, and the file +received no addition of any kind. + +## Coverage for the changed lines is not reduced + +Every line this feature **added** to a measured production file was checked individually against the +post-change Cobertura: + +| File | Added lines | Measured added lines | Covered | Uncovered | +| --- | --- | --- | --- | --- | +| `BreadcrumbItemViewerLifecycleCoordinator.cs` | 16 | 12 | **12** | **0** | +| `BreadcrumbPopupUiOperations.cs` | 0 (deletion only) | 0 | 0 | **0** | +| `BreadcrumbDropDownHost.cs` | 2 | 2 | **2** | **0** | +| **Total** | 18 | **14** | **14** | **0** | + +**All 14 measured added lines are covered — 100%, zero uncovered.** They include D2's retained-theme +guard (`string? retained = _retainedTheme;`, the two-conjunct `if`, and `host.SetTheme(retained);`), the +`_retainedTheme = theme;` assignment in `SetTheme`, and both `CaptureCurrent()` constructor-chain +arguments. The four unmeasured added lines in the coordinator are blank or brace-only lines the +collector does not emit. + +Each new or changed **measured** production member therefore reaches at least 90% line coverage, and +coverage for the changed lines is not reduced relative to the Phase 0 baseline. + +## `ItemViewer.Breadcrumb.cs` contributes no coverage movement + +`QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` matches **zero** `class` elements in the post-change +Cobertura, exactly as at baseline. `QuickFiler/Viewers/ItemViewer.cs:20` carries +`[ExcludeFromCodeCoverage]` on the `ItemViewer` partial **type**, and a type-level attribute on one part +applies to the whole partial type, so every member of that file is excluded from measurement. + +**D1, D3, D4, D5, and #475 part 3 are therefore coverage-exempt by construction and move no coverage +number.** Their regression tests are required by the CLAUDE.md Bugfix Workflow and by the acceptance +criteria, not by a coverage delta. A reviewer must not read flat coverage on those five units as a +testing gap, and must not remove the exemption to "fix" it: `ItemViewer.cs` is a forbidden file and its +attribute is assumption D489-2. + +Output Summary: **Four repository-wide figures.** Baseline raw **0.852607** and testable-denominator +**0.850562**; post-change raw **0.852830** and testable-denominator **0.850799**. **Both denominators +rose**, so the change lowers neither, and the post-change testable figure of **85.08%** is at or above +the `>= 80%` CLAUDE.md floor. Per-file: the coordinator rose to **0.909091**, +`BreadcrumbPopupUiOperations.cs` moved −0.000111 purely as a deletion artifact with its uncovered-line +count unchanged at 2, and `BreadcrumbDropDownHost.cs` is unchanged at **0.992883**; all three exceed +90%. **All 14 measured added lines are covered, zero uncovered.** +`QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` contributes no coverage movement because +`ItemViewer.cs:20` carries a type-level exclusion. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.cobertura.xml b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.cobertura.xml new file mode 100644 index 000000000..b5c0e684e --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.cobertura.xml @@ -0,0 +1,193208 @@ + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.md new file mode 100644 index 000000000..6010a547b --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.md @@ -0,0 +1,85 @@ +# Final Repository-Wide Coverage ([P8-T6]) + +Timestamp: 2026-08-28T06-27 + +Command (under `pwsh -NoProfile` from this worktree root): + +``` +.\scripts\vscode\Invoke-MSTestWithCoverage.ps1 -SearchRoot . -Configuration Debug -CoverageOutput docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\coverage-final.cobertura.xml +``` + +EXIT_CODE: 0 + +## Cobertura file + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.cobertura.xml` +exists. + +## Root `coverage` element attributes + +``` + +``` + +| Measure | Value | +| --- | --- | +| **Post-change raw line-rate** | **0.85283** (85.283%) | +| **Post-change raw branch-rate** | **0.792255** (79.2255%) | +| Lines covered / valid | 54692 / 64130 | +| Branches covered / valid | 13012 / 16424 | + +Both clear the uniform repository floors of `>= 85%` line and `>= 75%` branch, and the line figure also +clears the `>= 80%` floor in `CLAUDE.md` § UT2. `[P8-T7]` performs the baseline comparison and computes +the testable-denominator figures. + +## Test run inside the coverage collection + +| Measure | Value | +| --- | --- | +| Total tests | **6821** | +| Passed | **6821** | +| Failed | **0** | +| Run result | `Test Run Successful.` | + +The baseline run in `[P0-T14]` recorded 6812 total and 6812 passed. The delta is **+9**, exactly the net +new-test delta of ten added methods minus one deleted method, and it matches the `[P8-T5]` figure of +1201 versus a 1192 baseline in `QuickFiler.Test`. Every added test is in the aggregate run and passes. + +The runner applies `/InIsolation` and `/TestCaseFilter:TestCategory!=LiveOutlook` to every assembly, +matching CI and preventing a real Outlook process from being launched. + +## Discovered test assemblies + +**Total discovered: 9.** The runner's own output line reads `Discovered 9 test assemblies.` The verbatim +list, re-derived by applying the runner's discovery predicate from this worktree root: + +``` +./QuickFiler.Test/bin/Debug/QuickFiler.Test.dll +./SVGControl.Test/bin/Debug/SVGControl.Test.dll +./Tags.Test/bin/Debug/Tags.Test.dll +./TaskMaster.Test/bin/Debug/TaskMaster.Test.dll +./TaskTree.Test/bin/Debug/TaskTree.Test.dll +./TaskVisualization.Test/bin/Debug/TaskVisualization.Test.dll +./ToDoModel.Test/bin/Debug/ToDoModel.Test.dll +./UtilitiesCS.Test/bin/Debug/UtilitiesCS.Test.dll +./VBFunctions.Test/bin/Debug/VBFunctions.Test.dll +``` + +Nine entries, agreeing with the runner's count and identical to the `[P0-T14]` baseline list. + +### Every entry is under this worktree root, and none carries a nested `worktrees` segment + +Each path is rendered relative to this worktree root, which is what establishes that every discovered +assembly lies beneath it. **None contains a `worktrees` path segment below this worktree root.** That +also holds structurally: this worktree's `.claude/` directory contains no `worktrees` subdirectory, so +recursive discovery from this root cannot reach a sibling agent worktree. The worktree root's own +absolute path contains a `worktrees` segment because this worktree lives under the primary checkout's +`.claude/worktrees/`; that segment is above the root, not below it. + +Output Summary: EXIT_CODE 0. Post-change repository-wide **line-rate 0.85283** and **branch-rate +0.792255** (54692/64130 lines, 13012/16424 branches). **9** test assemblies discovered, all under this +worktree root with no nested `worktrees` segment. 6821 tests ran, 6821 passed, 0 failed — a **+9** delta +against the 6812-test baseline, matching the net new-test count exactly. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-check.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-check.md new file mode 100644 index 000000000..27a2dc9ab --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-check.md @@ -0,0 +1,54 @@ +# Final QC Stage 1 Verification — CSharpier Check ([P8-T2]) + +Timestamp: 2026-08-28T06-20 + +Command: `dotnet tool run csharpier check .`, run from the worktree root. Read-only; verifies and +reports and rewrites nothing. +EXIT_CODE: 0 + +## Complete output + +``` +Checked 1554 files in 4461ms. +``` + +## Result + +**`EXIT_CODE: 0`.** The first branch of this task's acceptance is satisfied directly: the command +reports **no formatting differences** anywhere in the repository, so the fallback branch — comparing a +non-empty reported set against the `[P0-T9]` baseline set — is not needed. + +## Comparison against the [P0-T9] baseline + +| | Baseline `[P0-T9]` | Now `[P8-T2]` | +| --- | --- | --- | +| Exit code | 0 | **0** | +| Files checked | 1553 | **1554** | +| Unformatted-file set | **(empty)** | **(empty)** | + +The reported unformatted set is **exactly the baseline set**, both being empty, and it therefore +**contains none of the seven owned files**. + +The checked-file count rose by exactly **one**, from 1553 to 1554. That is +`QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`, the single new file this +feature adds. No file was removed from CSharpier's scope. + +## Why the empty baseline made this the strongest available form of the gate + +`[P0-T9]` recorded an empty baseline unformatted set. A non-empty baseline would have let this gate pass +while some file remained unformatted, provided the set matched. Because the baseline was empty, the +comparison reduces to requiring that the post-change run **also** report an empty set — that is, that +none of the seven files this feature writes was left unformatted and no other file was disturbed. That +is what happened. + +This also keeps the criterion `[P9-T6]` flips reachable in its plain form. The authorized exception in +`[P9-T15]` — leaving the formatting criterion unchecked when a pre-existing unformatted set exists — is +**not** triggered, because no such set exists at either end. + +A count of files processed is deliberately not treated as the result signal. `Checked 1554 files` is the +tool's throughput line and prints on a clean and a dirty run alike; the signal is the exit code together +with the absence of any per-file unformatted report in the output. + +Output Summary: EXIT_CODE 0. **1554 files checked, zero unformatted.** The reported set is empty, +identical to the `[P0-T9]` baseline empty set, and contains none of the seven owned files. The +1 file +count against the baseline is the one new test file. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-format.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-format.md new file mode 100644 index 000000000..7ace6f0ae --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-format.md @@ -0,0 +1,71 @@ +# Final QC Stage 1 — CSharpier Format ([P8-T1]) + +Timestamp: 2026-08-28T06-20 + +Command (from the worktree root, with the **seven owned file paths supplied explicitly** as arguments, +not a repository-wide dot argument): + +``` +dotnet tool run csharpier format QuickFiler/Viewers/ItemViewer.Breadcrumb.cs QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs QuickFiler/Viewers/BreadcrumbDropDownHost.cs QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs +``` + +EXIT_CODE: 0 + +Tool output: `Formatted 7 files in 3104ms.` + +## Why the scope is locked to seven paths + +Decision D-6: a repository-wide mutating `csharpier format .` would rewrite files that were already +unformatted at the baseline and break the changed-file-set criterion `[P7-T10]` flips. The +repository-wide read-only `csharpier check .` remains the gate, and is run by `[P8-T2]`. + +## Per-file SHA-256 comparison + +The tool's own `Formatted 7 files` line is a count of files **processed**, not of files **changed**, so +it is not a substitute for this comparison. Each file's content hash was taken immediately before and +immediately after the command. + +| # | File | SHA-256 before | SHA-256 after | Content changed? | +| --- | --- | --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | `6de6f17f…eceab75` | `04c2ae3d…98cf28` | **YES** | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | `e50842ce…049a8d` | `e50842ce…049a8d` | no | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | `676bcb3a…4c45db` | `676bcb3a…4c45db` | no | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | `990f4f6a…01889e` | `990f4f6a…01889e` | no | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | `c0ae85c1…0f9366` | `c0ae85c1…0f9366` | no | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | `ac78b80b…967799` | `ac78b80b…967799` | no | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | `fc5098d7…7e09ec` | `fc5098d7…7e09ec` | no | + +**One of the seven changed: `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`.** The remaining six were +already in CSharpier's canonical form and are byte-identical across the command. + +## What changed in the one file + +A single reflow, in `InitializeBreadcrumbPipeline`, of the lambda argument `[P6-T7]` introduced: + +```csharp + BreadcrumbItemViewerLifecycleCoordinator lifecycle = EnsureBreadcrumbLifecycle(() => + operations + ); +``` + +CSharpier moved the `() =>` onto the invocation line. The change is purely cosmetic — no statement, +identifier, or argument order changed — and the file's line count is **425**, unchanged by the format +pass. + +Three of the other six were already verified CSharpier-clean earlier in execution: the two coordinator +files by an interim read-only check recorded in `[P2-T7]`, and the new test file by a scoped format run +during the capacity-rule-3 compaction recorded in `[P6-T10]`, which is why its 480-line figure was +already a post-format figure. + +## Loop position + +This is **stage 1** of the four-stage final QC loop. Because this stage changed a file, the stages that +follow it run against the post-format content: `[P8-T2]` re-verifies formatting repository-wide, +`[P8-T3]` and `[P8-T4]` are the analyzer and nullable gates, and `[P8-T5]` is the test gate. No stage +after this one may change a file; `[P8-T11]` confirms that by re-taking these seven hashes after the +test run and comparing. + +Output Summary: EXIT_CODE 0, `Formatted 7 files in 3104ms`. Per-file SHA-256 comparison shows **exactly +one** of the seven owned files changed — `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, by a single +cosmetic lambda reflow with no line-count change — and the other **six** are byte-identical before and +after. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csproj-diff-shape.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csproj-diff-shape.md new file mode 100644 index 000000000..414650404 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csproj-diff-shape.md @@ -0,0 +1,76 @@ +# `QuickFiler.Test.csproj` Diff Shape ([P7-T7]) + +Timestamp: 2026-08-28T06-17 + +Command: + +``` +git diff --numstat 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test/QuickFiler.Test.csproj +``` + +EXIT_CODE: 0 + +## Result + +``` +1 0 QuickFiler.Test/QuickFiler.Test.csproj +``` + +**Exactly 1 added line and 0 deleted lines.** A zero deletion count is what establishes that no existing +entry was reordered, reworded, or removed: any reordering would appear as matched additions and +deletions, and any rewording as a deletion paired with an addition. + +## The delivered line number and its neighbours + +The added entry sits at line **88**: + +``` + 85: + 86: + 87: + 88: <-- added + 89: + 90: +``` + +| Position | Line | Entry | +| --- | --- | --- | +| immediately above | 87 | `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` | +| **the added entry** | **88** | `Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs` | +| immediately below | 89 | `Viewers\BreadcrumbDropDownOpenCoordinatorTests.cs` | + +**Adjacency to the existing `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` entry is confirmed:** +the new entry is the line immediately after it. + +## Note on the anchor's line number + +Constraint C4 cites the anchor entry at line **82**, between +`Viewers\BreadcrumbDropDownLifecycleTests.cs` at 81 and `Viewers\BreadcrumbDropDownOpenCoordinatorTests.cs` +at 83. In the current tree the anchor resolves at line **87**, between the same two entries at 86 and 89. +The five-line offset is expected drift against the pre-change citation anchor `0a6aaa31`; this branch's +base `12465043` carries merged sibling features that added entries above this region. The anchor was +resolved **by entry name**, as the plan's standing citation rule requires, and the surrounding structure +C4 describes — the sole `Viewers\ItemViewer*` entry sitting between two `Breadcrumb*` entries — holds +exactly. + +## Item-group ordering was not "fixed" + +The `Compile Include` item group is **not** alphabetically ordered; it is ordered by area and insertion +history. `Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs` at line 88 sits between two +`Breadcrumb*` entries, which is not its alphabetical position. That is deliberate, and is the delivered +instruction of the spec's Divergence 1 against the research, which had proposed inserting at an +"alphabetical position among the existing `Viewers\ItemViewer*` entries". No entry was reordered to +impose alphabetical order. + +## Encoding preserved + +The file remains UTF-8 **with BOM** and CRLF line terminators, matching its pre-change state. The insert +was made byte-precisely rather than through a line-oriented tool, because a `sed`-style rewrite strips +CRLF across the whole file and a BOM-unaware writer drops the byte-order mark; either would have turned +a one-line change into a whole-file diff and broken this task's acceptance. + +Output Summary: `git diff --numstat -- QuickFiler.Test/QuickFiler.Test.csproj` reports +**exactly 1 added line and 0 deleted lines**. The added entry is at line **88**, immediately below +`Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` at 87 and immediately above +`Viewers\BreadcrumbDropDownOpenCoordinatorTests.cs` at 89, confirming adjacency to the existing entry +with no entry reordered. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d1-limitations.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d1-limitations.md new file mode 100644 index 000000000..452877f29 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d1-limitations.md @@ -0,0 +1,81 @@ +# D1 — Recorded Limitations Honoured in the Delivered Source ([P1-T8]) + +Timestamp: 2026-08-28T05-30 + +Command: source reading of the delivered +`QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, plus +`git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` +EXIT_CODE: 0 + +--- + +## Fact 1 — the three-argument overload contains no host disposal + +The spec records that the fix covers the concrete environment-change path only: the three-argument +injected overload can also replace a host, but the outgoing host is not knowable there until inside +the post, and that overload has no production caller. Recording the limitation was preferred to +widening the fix. The delivered source honours that. + +Delivered body of the three-argument overload, quoted verbatim: + +```csharp + internal void ConfigureBreadcrumbDropDown( + IBreadcrumbDropDownHost host, + Func anchorBounds, + Func workingArea + ) + { + if (host == null) + { + throw new ArgumentNullException(nameof(host)); + } + _ = anchorBounds ?? throw new ArgumentNullException(nameof(anchorBounds)); + _ = workingArea ?? throw new ArgumentNullException(nameof(workingArea)); + BreadcrumbItemViewerLifecycleCoordinator lifecycle = EnsureBreadcrumbLifecycle( + BreadcrumbPopupUiOperations.CaptureCurrentOrTests() + ); + lifecycle.ConfigureHost(host, anchorBounds, workingArea); + } +``` + +The body contains **no `Dispose()` call**, **no type test for `BreadcrumbDropDownHost`**, and no +statement equivalent to the disposal `[P1-T5]` added to the two-argument overload. Its four +statements are the three argument guards, the `EnsureBreadcrumbLifecycle` call, and the +`ConfigureHost` forward — exactly as at `BASE_SHA`. + +This is also what keeps +`BreadcrumbDropDownIntegrationTests.ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` green: that +test's `host.Dispose()` `Times.Once()` assertion is on a `Mock`, which is not +idempotent, and the mock host reaches the viewer through this overload. Adding an equivalent disposal +here would produce a second `Dispose()` call on that mock and break the assertion for a reason +unrelated to the defect. + +This body is quoted as delivered after `[P1-T5]`. It still shows +`BreadcrumbPopupUiOperations.CaptureCurrentOrTests()`, which is correct at this point in plan order: +that identifier is retired by `[P6-T3]` and the argument is made lazy by `[P6-T7]`, both later. The +limitation recorded here — no host disposal in this overload — is unaffected by either of those +changes. + +--- + +## Fact 2 — `BreadcrumbDropDownOpenCoordinator.cs` is unmodified + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs +``` + +**Output: no lines.** + +The file is byte-identical to its state at `BASE_SHA`. This is the corroborating evidence for the +D1b residual recorded in `[P1-T7]`'s dossier and for the rejected D1 alternative: making +`BreadcrumbDropDownOpenCoordinator.Release()` synchronous would have been the cleaner fix on the +merits, and it was rejected purely on ownership, because that file belongs to sibling feature +`breadcrumb-coordinator-hub-defects-501` for issue #462. + +Output Summary: Both recorded D1 limitations are honoured in the delivered source. The three-argument +`ConfigureBreadcrumbDropDown` overload contains no host disposal — its verbatim body is quoted above +and holds only the three argument guards, the lifecycle call, and the `ConfigureHost` forward — and +`git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` produces +**no output lines**. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-coupling-recorded.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-coupling-recorded.md new file mode 100644 index 000000000..9b5c989f9 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-coupling-recorded.md @@ -0,0 +1,57 @@ +# D3 — Fail-Fast / `SetBridgeCoordinator` Coupling Is Recorded in the Delivered Spec ([P3-T6]) + +Timestamp: 2026-08-28T05-41 + +Command: read `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`, section +`### D3 — fail fast on a different provider`, and its `### Out of scope / non-goals` item 2. +EXIT_CODE: 0 + +## The delivered spec sentences, quoted verbatim + +From the D3 design section, under the heading **"Load-bearing coupling — do not lose this."**: + +> The choice of **fail-fast** is what keeps the `SetBridgeCoordinator` replace-without-dispose defect +> (Out of Scope item 2) dormant and therefore out of scope. Under fail-fast, +> `InitializeBreadcrumbPipeline` never constructs a second `BreadcrumbBridgeCoordinator`, so nothing new +> ever reaches `SetBridgeCoordinator`'s replacement branch. **If this spec were amended to adopt +> explicit re-initialization instead, that defect becomes live and MUST be pulled into scope in the same +> change-set.** The scope decision in +> `research/2026-08-25T10-20-orchestrator-comment-crosscheck.md` § "Claim 2" is explicitly contingent on +> this. + +The corresponding out-of-scope entry, item 2, states the same coupling from the other side: + +> 2. **`SetBridgeCoordinator` replaces without disposing while `Dispose():216` disposes** +> (`BreadcrumbItemViewerLifecycleCoordinator.cs:62-77`; `UnsubscribeBridge()` at `:306-317` detaches +> four handlers and disposes nothing). Out of scope because it stays **dormant under the fail-fast D3 +> design** — see the explicit coupling recorded under D3 below. Promote to a new issue. + +Together these carry both halves the criterion requires: the replace-without-dispose defect is out of +scope **because** D3 fails fast, and adopting explicit re-initialization instead would require pulling +that defect into scope in the same change-set. + +## No task in this plan substituted a re-initialization branch + +The delivered guard in `InitializeBreadcrumbPipeline(provider, operations)` has exactly two outcomes +when `BreadcrumbCoordinator` is non-null: it throws `InvalidOperationException` when the supplied +provider is not reference-equal to the retained one, and it returns without effect when it is. There is +no branch that disposes the existing pipeline and rebuilds it, and no branch that constructs a second +`BreadcrumbBridgeCoordinator`. + +`[P3-T3]` is the only task in this plan that edits that member, and it delivered the throw. Constraint +C7 forbids substituting an explicit re-initialization branch for the throw, and the substitution was +not made. `[P3-T5]`'s dossier records the corroborating evidence: the complete changed-line set of +`BreadcrumbItemViewerLifecycleCoordinator.cs` contains no line of `SetBridgeCoordinator`, so the +replacement branch that would become live under re-initialization is untouched and stays unreachable +from `InitializeBreadcrumbPipeline`. + +The defect itself is carried forward rather than dropped: `[P7-T5]` records it as one of the three +out-of-scope follow-up candidates, with its mechanism and trigger, so the follow-up does not have to +re-derive them. + +Output Summary: The delivered `spec.md` records the coupling in two places — the D3 design section's +"Load-bearing coupling — do not lose this" paragraph and out-of-scope item 2 — both quoted verbatim +above. They state that the `SetBridgeCoordinator` replace-without-dispose defect is out of scope +**because** D3 fails fast, and that adopting explicit re-initialization would make it live and require +pulling it into scope in the same change-set. **No task in this plan substituted a re-initialization +branch for the throw.** diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-no-behaviour-change.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-no-behaviour-change.md new file mode 100644 index 000000000..473651e97 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-no-behaviour-change.md @@ -0,0 +1,121 @@ +# D3 — No Production Behaviour Change, and Collaborator Stability ([P3-T5]) + +Timestamp: 2026-08-28T05-40 + +Command: +`git grep -n 'InitializeBreadcrumbPipeline' -- 'QuickFiler/*.cs' 'TaskMaster/*.cs' 'TaskVisualization/*.cs'`; +`git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs QuickFiler/Viewers/BreadcrumbMessengerHub.cs`; +and `git diff 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` +EXIT_CODE: 0 + +--- + +## D3 changes no production behaviour + +**Statement.** D3's fail-fast guard is unreachable from production code. It changes no user-visible +behaviour, repairs no user-visible symptom, and no reviewer should expect one. + +**Reason — the callers are guarded upstream on a null breadcrumb coordinator, in a file this feature +does not own.** A repository-wide search finds exactly **one** production call site: + +``` +QuickFiler/Controllers/QfcItemController.ViewerSetup.cs:150: viewer.InitializeBreadcrumbPipeline(provider); +``` + +It sits inside `QfcItemController.EnsureBreadcrumbPipeline`, guarded as follows: + +```csharp + if (viewer.BreadcrumbCoordinator == null) + { + var provider = new UtilitiesCS.OutlookObjects.Folder.OutlookFolderHierarchyProvider( + _globals.Ol.FolderTreeService + ); + viewer.InitializeBreadcrumbPipeline(provider); + } +``` + +The call is made **only when `viewer.BreadcrumbCoordinator` is null**, which is exactly the condition +under which the new guard's enclosing `if (BreadcrumbCoordinator != null)` block is not entered at all. +The throw therefore cannot fire on this path. + +This one call site reaches both overloads: it calls the one-argument +`InitializeBreadcrumbPipeline(provider)`, which forwards to the two-argument +`InitializeBreadcrumbPipeline(provider, operations)` where the guard lives. Both are covered by the +same upstream null check. The remaining hits in the search are the two overload declarations +themselves and one comment line, all inside the owned `ItemViewer.Breadcrumb.cs`. + +The spec cites this guard at `QfcItemController.ViewerSetup.cs:143`; it resolves at line **145** in the +current tree, with the call at **150**. That is expected pre-change line drift against the citation +anchor, and the guard was resolved by its enclosing member name `EnsureBreadcrumbPipeline` as the +plan's standing rule requires. `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` is a +**forbidden** file under constraint C1 — it is owned by sibling feature `qfc-item-controller-defects-484` +— and it was read only, never edited. + +## No re-initialization branch was added + +The delivered guard has exactly two outcomes when `BreadcrumbCoordinator` is non-null: **throw** +`InvalidOperationException` when the supplied provider is not reference-equal to the retained one, or +**return without effect** when it is. There is no third branch that tears down and rebuilds the +pipeline. + +That omission is load-bearing, not an economy. Under fail-fast, +`InitializeBreadcrumbPipeline` never constructs a second `BreadcrumbBridgeCoordinator`, so nothing new +ever reaches `BreadcrumbItemViewerLifecycleCoordinator.SetBridgeCoordinator`'s replacement branch and +the out-of-scope replace-without-dispose defect stays dormant exactly as it is today. Substituting an +explicit re-initialization branch would make that path live and would require pulling that defect into +scope in the same change-set. Constraint C7 forbids the substitution, and no task in this plan made it. + +--- + +## Collaborator stability + +### `BreadcrumbBridgeCoordinator.cs` and `BreadcrumbMessengerHub.cs` are unmodified + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs QuickFiler/Viewers/BreadcrumbMessengerHub.cs +``` + +**Output: no lines.** Both files are byte-identical to their state at `BASE_SHA`. Both are forbidden +files under constraint C1. + +### `SetBridgeCoordinator` and the bridge-unsubscribe helper are unchanged + +`QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` **is** modified by this feature, by +D2's retained-theme replay, so a whole-file diff check would be uninformative. The complete set of +changed lines in that file, from `git diff `, is: + +``` ++ // Issue #488 defect D2: the last theme requested, retained so that a theme set while the ++ // ConfigureHost post is still queued is replayed onto the host that is ultimately adopted. ++ private string? _retainedTheme; ++ ++ ++ // Issue #488 defect D2: replay the retained theme onto the newly adopted host. ++ // Guarded because BreadcrumbDropDownHost.SetTheme rejects null or whitespace. ++ // The UpdateRequestProviders branch below deliberately performs no theme call: ++ // that host already holds the theme, and a redundant SetTheme there would be ++ // observable to the mock-host tests that pin the replacement contract. ++ string? retained = _retainedTheme; ++ if (retained != null && !string.IsNullOrWhiteSpace(retained)) ++ { ++ host.SetTheme(retained); ++ } ++ _retainedTheme = theme; +``` + +Every changed line is an **addition** — there is not one deleted line in the file — and all sixteen +belong to the field declaration, the `ConfigureHost` newly-adopted branch, and the `SetTheme` +assignment. **No line of `SetBridgeCoordinator` and no line of the bridge-unsubscribe helper +`UnsubscribeBridge` appears in the diff**, so both members are unchanged from `BASE_SHA`, including +`SetBridgeCoordinator`'s reference-equality guard that D3 mirrors. + +Output Summary: D3 **changes no production behaviour**: its only production call site, +`QfcItemController.ViewerSetup.cs:150` inside `EnsureBreadcrumbPipeline`, is guarded upstream on +`viewer.BreadcrumbCoordinator == null` in a 484-owned file this feature does not edit, so the new throw +is unreachable there. **No re-initialization branch was added**, per constraint C7. +`git diff --name-only ` over `BreadcrumbBridgeCoordinator.cs` and `BreadcrumbMessengerHub.cs` +produces **no output lines**, and the complete changed-line set of +`BreadcrumbItemViewerLifecycleCoordinator.cs` contains no line of `SetBridgeCoordinator` or +`UnsubscribeBridge`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-harness-order.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-harness-order.md new file mode 100644 index 000000000..0266f750d --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-harness-order.md @@ -0,0 +1,177 @@ +# D4 — Harness Construction-Order Confirmation ([P4-T2]) + +Timestamp: 2026-08-28T05-44 + +Command: `git grep -n -F 'ItemViewer()' -- 'QuickFiler.Test/*'` to re-derive the site set +independently, then `grep -n 'SetSynchronizationContext'` over each file holding a site, plus targeted +source reads at each construction point. +EXIT_CODE: 0 + +The enumeration below was re-derived from the tree first and compared against constraint C6 +afterwards, rather than read out of C6 and confirmed. + +--- + +## Part 1 — the thirteen sites constraint C6 enumerates + +### Ten direct-constructor sites across nine files + +Every one installs its synchronization context **before** constructing the viewer. + +| # | File | Context installed at | Viewer constructed at | Install precedes construct | +| --- | --- | --- | --- | --- | +| 1 | `Viewers/BreadcrumbCoordinatorLifecycleTests.cs` | 476 | 477 | **yes** | +| 2 | `Viewers/BreadcrumbCollapsedSurfaceReadinessTests.cs` | 410 | 413 | **yes** | +| 3 | `Viewers/BreadcrumbPendingOpenCloseTests.cs` | 360 | 363 | **yes** | +| 4 | `Viewers/BreadcrumbDropDownIntegrationTests.cs` | 337 | 338 | **yes** | +| 5 | `Viewers/BreadcrumbSubfolderActivationTests.cs` | 274 | 305 | **yes** | +| 6 | `Viewers/BreadcrumbSelectorOpenRetryTests.cs` | 254 | 255 | **yes** | +| 7 | `Controllers/QfcItemControllerBreadcrumbDropDownTests.cs` | 372 | 373 | **yes** | +| 8 | `Controllers/QfcItemController.EventWiringTests.cs` | 234 | 237 | **yes** | +| 9 | `Controllers/QfcItemController.EventWiringTests.cs` | 325 | 328 | **yes** | +| 10 | `Controllers/QfcItemController.ViewerSetupTests.cs` | 392 | 395 | **yes** | + +Rows 8, 9, and 10 sit one line below C6's cited construct lines (C6 gives 236, 327, and 395); rows 1 +through 7 match C6 exactly. The drift is expected against the pre-change citation anchor and was +resolved by locating each `SetSynchronizationContext` call and each `new QuickFiler.ItemViewer()` in +the current tree. + +Rows 1, 2, and 3 are the **three harnesses the spec leaves unconfirmed** — +`BreadcrumbCoordinatorLifecycleTests.cs`, `BreadcrumbCollapsedSurfaceReadinessTests.cs`, and +`BreadcrumbPendingOpenCloseTests.cs`. All three are confirmed correct-order here, which is the +evidence the criterion `[P4-T14]` flips requires. + +### Two pump-thread sites + +| # | File | Line | Note | +| --- | --- | --- | --- | +| 11 | `Controllers/QfcItemController.ViewerSetupTests.cs` | 433 | `await host.InvokeAsync(() => new QuickFiler.ItemViewer())` on a `WinFormsPumpHost`. **The captured context is the pump's own.** The test's own comment says so: "the viewer must be constructed on the pump so `UiSyncContext` binds there." | +| 12 | `Controllers/QfcItemController.InitializationTests.Part2.cs` | 74 | `await host.InvokeAsync(() => new QuickFiler.ItemViewer())` inside `BuildPumpHarnessCoreAsync`. **The captured context is the pump's own.** | + +C6 cites row 12 at line 84; it resolves at **74**. Same expected drift. + +### One constructor-bypassing site + +| # | File | Lines | Note | +| --- | --- | --- | --- | +| 13 | `Helper Classes/QfcThemeHelperTests.cs` | 247-249 | `CreateItemViewer()` produces its viewer through `CreateUninitialized()`. | + +The constructor never runs there, so `_context` stays null and `UiSyncContext` is null. **The guard's +null escape makes the guard inert for that viewer**, which is why the site is harmless. It is recorded +because it is a real counterexample to the "every successfully constructed `ItemViewer` has a non-null +`UiSyncContext`" statement and must not be rediscovered as a surprise. **The file calls none of the +four guarded members**: a search of `QfcThemeHelperTests.cs` for `InitializeBreadcrumbPipeline`, +`ConfigureBreadcrumbDropDown`, and `EnsureBreadcrumbPipeline` returns zero hits, so the guard cannot +be reached from it at all. + +--- + +## Part 2 — the six expected non-site hits, discarded + +The fixed string over-matches. These six hits are not construction sites, are expected, and are +**not** discrepancies. All six are present in the tree exactly as C6 describes: + +| File | Line | Why it is not a site | +| --- | --- | --- | +| `QfcViewer_Test.cs` | 29 | commented out (`//iv = new ItemViewer();`) | +| `QfcViewer_Test.cs` | 37 | commented out, and names `QfcItemViewer()` | +| `TestSupport/WinFormsPumpHost.cs` | 109 | inside an XML doc comment | +| `Controllers/QfcItemController.InitializationTests.Part3.cs` | 345 | inside an XML doc comment | +| `Helper Classes/QfcThemeHelperTests.cs` | 111 | a call to the local `CreateItemViewer()` helper | +| `Helper Classes/QfcThemeHelperTests.cs` | 141 | a call to the local `CreateItemViewer()` helper | + +--- + +## Part 3 — DISCREPANCY: the re-derived site set does NOT equal the C6 enumeration + +**The independently re-derived set is larger than C6's.** The search returns **25** hits, not the +**19** C6 states. Discarding the six non-site hits leaves **19 executable sites**, not the thirteen C6 +enumerates. Six sites are present in the tree and absent from C6. + +Constraint C6's own text says a site present in the tree but absent from C6 "is recorded as a +discrepancy and reported before `[P4-T4]` proceeds." That is done here and in the executor's report. + +| # | File | Line | Context installed at | Install precedes construct | In C6? | +| --- | --- | --- | --- | --- | --- | +| 14 | `Controllers/BreadcrumbBridgeRouterTests.cs` | 422 | 419 | **yes** | no | +| 15 | `Controllers/EfcItemControllerTests.cs` | 201 | 196 | **yes** | no | +| 16 | `Controllers/EfcItemControllerTests.cs` | 316 | 311 | **yes** | no | +| 17 | `Controllers/QfcItemController.EventWiringTests.cs` | 433 | 430 | **yes** | no | +| 18 | `Controllers/EfcItemController.CleanupTests.cs` | 41 | **none** | n/a — see below | no | +| 19 | `Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 349 | 348 | **yes** | not applicable | + +### Assessment of each + +- **Sites 14 through 17 satisfy the install-before-construct order.** They are ordinary omissions from + C6's enumeration rather than violations of the property C6 exists to protect. Four of the five + genuine additions are therefore harmless on C6's own criterion. +- **Site 18, `EfcItemController.CleanupTests.cs:41`, installs no synchronization context at all.** It + constructs the viewer inside `CreateFiveArgumentController()` with whatever + `SynchronizationContext.Current` happens to be on the MSTest worker thread. This is the one site + that does not satisfy C6's install-before-construct property, and it is recorded and reported rather + than edited, per C6's escalation rule. Two facts bound its risk: if the ambient context is null the + viewer's `UiSyncContext` is null and the guard's null escape makes the guard inert; and a search of + the file for `InitializeBreadcrumbPipeline`, `ConfigureBreadcrumbDropDown`, and + `EnsureBreadcrumbPipeline` returns **zero** hits, so no guarded member is named from it. The same + zero-hit result holds for `EfcItemControllerTests.cs`, `BreadcrumbBridgeRouterTests.cs`, and + `QfcItemController.EventWiringTests.cs`. +- **Site 19 is this feature's own new file** and did not exist when C6 was measured, so it is not a + discrepancy in C6. Its `ViewerScope` installs the context at 348 and constructs at 349. + +**No site was edited in response.** Constraint C6 requires that a site failing the order be recorded +and reported under the escalation rule rather than corrected, and that the guard not be weakened to a +null check. Neither was done. + +The static analysis above bounds the risk but does not settle it, because a guarded member could be +reached indirectly through controller code rather than named in the test file. `[P4-T8]` settles it +empirically by running the entire `QuickFiler.Test` assembly against the delivered guard and comparing +the failing-test-name set to the Phase 0 `BASELINE_FAILURE_SET`, which is empty. + +--- + +## Part 4 — a correction to constraint C6's reachability argument + +C6 argues that "every successfully constructed `ItemViewer` has a non-null `UiSyncContext`" because +the constructor "assigns `_context = SynchronizationContext.Current` and then calls +`TaskScheduler.FromCurrentSynchronizationContext()`, which throws when the ambient context is null." + +**The second half of that premise does not hold against this branch's base.** The delivered +`ItemViewer` constructor reads: + +```csharp + public ItemViewer() + { + InitializeComponent(); + _context = SynchronizationContext.Current; + _uiDispatcher = Dispatcher.CurrentDispatcher; + InitControlGroups(); + } +``` + +There is no `TaskScheduler.FromCurrentSynchronizationContext()` call. Sibling feature +`itemviewer-surface-defects-489`, which is merged into this base, removed the `UiScheduler` property +that call backed; `UiSyncContext` and `UiDispatcher` are the survivors. +`Dispatcher.CurrentDispatcher` creates a dispatcher for the calling thread and does **not** throw on a +null ambient `SynchronizationContext`. + +The consequence is that a viewer constructed with no ambient context installed — site 18 above — is +now constructible and has a null `UiSyncContext`. That widens the class of viewers for which the +guard's null escape is the operative branch, and it removes C6's argument that the escape is +unreachable except by reflection. + +**This does not change any delivered design.** The D4 guard already returns without effect when +`UiSyncContext` is null, which is exactly the behaviour these viewers need. `[P6-T2]`'s reflective +null assignment is still required and still correct: that test needs a viewer whose breadcrumb +pipeline has been **seeded** through `InitializeBreadcrumbPipeline`, and seeding requires a viewer +that has run its constructor. The correction is recorded so that a reviewer does not rely on C6's +stated reachability argument, which is stale. + +Output Summary: All **thirteen** sites constraint C6 enumerates are present and confirmed — the ten +direct-constructor sites all install the context before constructing, the two pump-thread sites bind +the pump's own context, and the constructor-bypassing `QfcThemeHelperTests.CreateItemViewer()` site +yields a null `UiSyncContext` that the guard's null escape renders inert, in a file that calls none of +the four guarded members. The six expected non-site hits are present and discarded. **DISCREPANCY: the +re-derived set contains six sites absent from C6** (25 hits, 19 executable sites, not 13). Four satisfy +the install-before-construct order; one, `EfcItemController.CleanupTests.cs:41`, installs no context at +all and is reported rather than edited; one is this feature's own new file. None of the four affected +files names any guarded member. `[P4-T8]` proves the enumeration empirically. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-no-synchronization-primitives.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-no-synchronization-primitives.md new file mode 100644 index 000000000..f67c1bca8 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-no-synchronization-primitives.md @@ -0,0 +1,77 @@ +# D4 — No Synchronization Primitive Was Introduced ([P4-T7]) + +Timestamp: 2026-08-28T05-48 + +Command: + +``` +git add -N QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs +git diff 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/ItemViewer.Breadcrumb.cs QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs QuickFiler/Viewers/BreadcrumbDropDownHost.cs QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs +``` + +then a whole-word search of the diff's **added** lines for each of the five banned tokens. +EXIT_CODE: 0 + +## Scope — all SEVEN owned files were inspected + +| # | File | Category | +| --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | owned production | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | owned production | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | owned production | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | owned production | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | owned test | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | owned test | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | owned test (new) | + +Seven files rather than the four production files, because the criterion `[P4-T13]` flips bans those +constructs "by this feature" without restricting the ban to production code, and the three owned test +files are part of this feature. + +`git add -N` was run on the new test file first. Without it that file is untracked and contributes no +added lines to the diff, so all of its content would have escaped the search — the file most likely to +reach for a threading construct would have been the one file not examined. + +## Result + +The diff carries **496 added lines** across the seven files. Matching is **whole-word**. + +| Token | Count on added lines | +| --- | --- | +| `Interlocked` | **0** | +| `lock` | **0** | +| `Monitor` | **0** | +| `Volatile` | **0** | +| `Mutex` | **0** | +| **Total** | **0** | + +No added line in the diff contains any of the five tokens as a whole word. + +## Why whole-word matching is the correct predicate here + +Two near-misses in the added text would produce false positives under a substring search and are +correctly excluded: + +- **`wall-clock`** appears on **4** added lines, in doc comments recording that no wall-clock wait is + used. A substring search for `lock` matches inside `clock`; a whole-word search does not, because + `clock` is bounded by word characters on the left. +- **`Interlocked`** likewise contains `lock` as a substring. It is searched for as its own token and + found zero times, and it cannot inflate the `lock` count under whole-word matching. + +The distinction matters because a false positive here would be indistinguishable from a real violation +without re-reading the diff by hand. + +## Consistency with the delivered design + +This is the expected result rather than a lucky one. D4's design deliberately rejects atomic +initialization: making the three pipeline fields atomic would require `Interlocked.CompareExchange` or +a lock plus a disposal path for the loser of each race, **and it would not solve the underlying +problem**, because `ItemViewer` is a `UserControl`, `components` is WinForms state, and the breadcrumb +anchor is a `Control`. Making those fields atomic would legitimise off-thread access to control state +that is not thread-safe at all. The delivered guard instead **declares and enforces** the affinity +contract with a reference comparison and a throw, which needs no synchronization primitive. + +Output Summary: All **seven** owned files were inspected, with the new test file intent-added first so +its content appears in the diff. Across **496 added lines**, the whole-word counts for `Interlocked`, +`lock`, `Monitor`, `Volatile`, and `Mutex` are **0, 0, 0, 0, and 0** respectively. `wall-clock` appears +on 4 added lines and is correctly not counted as `lock` under whole-word matching. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-designer-untouched.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-designer-untouched.md new file mode 100644 index 000000000..8d7badf19 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-designer-untouched.md @@ -0,0 +1,61 @@ +# D5 — `ItemViewer.Designer.cs` Is Untouched ([P5-T5]) + +Timestamp: 2026-08-28T05-52 + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/ItemViewer.Designer.cs +``` + +EXIT_CODE: 0 + +## Result + +**Output: no lines.** + +`QuickFiler/Viewers/ItemViewer.Designer.cs` is **byte-identical** to its pre-change state at `BASE_SHA` +`12465043e052fce66a1861bf1ddd037a1aa81afc`. This is what establishes the criterion `[P5-T10]` flips; +a line count alone would not, since a file can be edited without changing its line count. + +The file is also a **forbidden** file under constraint C1, owned by sibling feature +`itemviewer-surface-defects-489`, so the empty diff additionally confirms no ownership violation. + +## Line count — measured 6223, with a recorded discrepancy + +| Measurement | Value | +| --- | --- | +| `wc -l` | **6223** | +| `grep -c ''` | **6223** | +| Final byte of the file | `0a` (the file ends with a newline) | +| Value cited by the plan and `spec.md` | 6224 | + +The two independent counters agree at **6223**, and the file terminates with a newline, so there is no +trailing partial line for the two methods to disagree about. The measured value is recorded here rather +than the cited one, because recording 6224 would be an unverified claim. + +**The one-line difference is a counting-convention or citation drift, not a file difference.** The +`git diff` above proves the file is byte-identical to `BASE_SHA`, so this feature did not remove a line +from it. The cited figure was taken at the pre-change citation anchor `0a6aaa31`, and the plan's +standing rule is that every citation is resolved by name rather than by number. The substantive +property the criterion depends on — that the file is unmodified — is established by the empty diff and +is unaffected by which of 6223 or 6224 is the right convention. + +## Why D5's design avoids this file + +The alternative to refusing creation during teardown was to **dispose a `Container` created during +teardown**. That would have required either editing this designer-generated file — 6223 lines, already +more than twelve times the repository's 500-line ceiling, and inside sibling feature 489's surface — or +adding a second disposal path with its own re-entrancy problem. + +D5 instead places the guard in `EnsureBreadcrumbResourceOwnership`, a member of the owned +`ItemViewer.Breadcrumb.cs`, where it costs four lines and touches no designer-generated code. +`Control.IsDisposed` and `Control.Disposing` are both public WinForms properties, so no new state was +needed either; `Disposing` covers the window *during* `Dispose(bool)`, which `IsDisposed` alone does +not. + +Output Summary: `git diff --name-only -- QuickFiler/Viewers/ItemViewer.Designer.cs` produces +**no output lines**, establishing byte-identity. The file measures **6223** lines by both `wc -l` and +`grep -c ''` and ends with a newline; the plan's cited 6224 is recorded as a one-line citation +discrepancy that the empty diff shows is not a content difference. D5's design avoids this file +deliberately, using the public `IsDisposed`/`Disposing` properties in an owned file instead. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md new file mode 100644 index 000000000..501f85c2c --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md @@ -0,0 +1,184 @@ +# D5 — Research §3.5 Open Item: Is a Faulted `InitializeWebViewAsync` Task Observed? ([P5-T6]) + +Timestamp: 2026-08-28T05-55 + +Command: `git grep -n 'InitializeWebViewAsync' -- '*.cs'` and +`git grep -n 'EnsureBreadcrumbPipeline' -- 'QuickFiler/*.cs'`, followed by source reads of each call +site. `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` was **read only and not edited**; it is +a forbidden file under constraint C1, owned by sibling feature `qfc-item-controller-defects-484`. +EXIT_CODE: 0 + +## The throw path being evaluated + +`EnsureBreadcrumbPipeline()` is called from `QfcItemController.ViewerSetup.cs:112`, which sits inside +`internal async Task InitializeWebViewAsync()` declared at `ViewerSetup.cs:48`. D5's +`ObjectDisposedException` therefore propagates out of `EnsureBreadcrumbResourceOwnership` → +`EnsureBreadcrumbLifecycle` → `InitializeBreadcrumbPipeline` → `EnsureBreadcrumbPipeline` → +`InitializeWebViewAsync`, faulting that method's returned `Task`. + +The question research §3.5 left open is whether that faulted task is observed by its caller. + +## Every in-repo caller, with its observation status + +### `QfcItemController.InitializeWebViewAsync` — four call sites, all in `QfcItemController.Initialization.cs` + +| Call site | Enclosing member | Form | Observed? | +| --- | --- | --- | --- | +| `Initialization.cs:192` | the fire-and-forget initialization tail, commented "Fire and forget WebView initialization" at `:191` | `_ = _itemViewer.UiDispatcher.InvokeAsync(InitializeWebViewAsync);` | **NO** — the `DispatcherOperation` is discarded by `_ =`, and the inner task is wrapped inside it | +| `Initialization.cs:256` | the sequential async initialization path | `await InitializeWebViewAsync();` | **yes** — awaited into the enclosing async method's own task | +| `Initialization.cs:288` | an async initialization overload | `_ = InitializeWebViewAsync();` | **NO** — discarded | +| `Initialization.cs:324` | a second async initialization overload | `_ = InitializeWebViewAsync();` | **NO** — discarded | + +One further reference at `Initialization.cs:345` is commented out and is not a call site. + +### `EfcItemController.InitializeWebViewAsync` — a distinct same-named method + +| Call site | Form | Observed? | +| --- | --- | --- | +| `EfcItemController.cs:97` | `Task.Run(() => InitializeWebViewAsync());` | **NO** — the `Task` returned by `Task.Run` is not assigned or awaited | +| `EfcItemController.cs:153` | `Task.Run(() => InitializeWebViewAsync());` | **NO** — same | + +These target `EfcItemController.InitializeWebViewAsync` declared at `EfcItemController.cs:174`, not the +`QfcItemController` method D5's throw travels through. They are recorded for completeness because they +exhibit the same discard pattern. + +## OVERALL CONCLUSION — the task is NOT observed + +**Three of the four `QfcItemController.InitializeWebViewAsync` call sites discard the returned task.** +Only `Initialization.cs:256` awaits it. A fault raised on any of the three discarding paths therefore +becomes an unobserved task exception. On .NET Framework 4.5 and later an unobserved task exception no +longer terminates the process by default, so it is finalized away with no log entry, no diagnostic, and +no observable effect. + +The condition research §3.5 set — "confirm that fault is observed by the caller and does not become an +unobserved `TaskException`" — is **not** satisfied. + +## The D5 guard is NOT weakened in response + +Research §3.5 is explicit that if the task proves unobserved, "the correct response is a new issue +against `ViewerSetup.cs` (484-owned), **not** a weakening of this guard." The delivered D5 guard is +unchanged and unweakened: `EnsureBreadcrumbResourceOwnership` throws `ObjectDisposedException` when the +viewer reports `IsDisposed` or `Disposing`, before any container is created and before any +`BreadcrumbResourceOwner` is added. No silent early return was substituted, no severity was reduced, +and `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` was not edited. + +## Follow-up potential entry — CREATED, THEN PROMOTED + +Created by the executor at +`docs/features/potential/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md`, and moved by the +promotion tooling to its promoted location +`docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md`. + +It is filed against `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs`, names the mechanism (the +returned `Task` is discarded at three of four call sites), names the trigger (a fault inside +`InitializeWebViewAsync`, which #488's D5 fix newly makes reachable via `ObjectDisposedException`), and +carries the standard potential-entry front matter and section headings the promotion tooling maps into +the GitHub bug issue template. + +## Promotion to a GitHub issue — BLOCKED IN THE EXECUTOR, THEN COMPLETED BY THE ORCHESTRATOR + +**Outcome: GitHub issue [#670](https://github.com/drmoisan/TaskMaster/issues/670) is OPEN.** The record +of the executor's blocker is retained below rather than deleted, because it documents a real tool-set +boundary that a future executor on this repository will hit again. + +The repository enforces an MCP-only promotion path. `.claude/hooks/enforce-promotion-mcp-only.ps1` is a +`PreToolUse` hook that blocks, by its own documentation: + +``` + Forbidden command tokens (legacy promotion-script bypass): + - new-potential-entry.ps1 + - new_potential_bug_entry + - potential_to_issue + - new_active_feature_folder + + Forbidden gh-CLI patterns (raw GitHub issue creation bypass): + - gh issue create (with any flag suffix) + - gh issue new + - gh api against repos///issues with explicit POST method + (-X POST or --method POST) +``` + +with the reason string: + +``` +PROMOTION_MCP_ONLY_BLOCKED: Direct GitHub issue creation via `gh` bypasses the approved drm-copilot MCP +promotion path (`mcp__drm-copilot__new_potential_entry` -> `mcp__drm-copilot__potential_to_issue` -> +`mcp__drm-copilot__new_active_feature_folder`). Use those MCP tools instead. +``` + +**The three named MCP promotion tools are not available in this executor's tool set.** The only +`drm-copilot` MCP tools exposed to this session are `run_poshqc_format`, `run_poshqc_analyze`, +`run_poshqc_test`, and `run_poshqc_analyze_autofix`. `gh` is installed (version 2.87.3) and +authenticated as `drmoisan` with `repo` scope, so the blocker is the approved-path policy, not +credentials. + +The approved path was therefore not available and the forbidden path was **not** used. No attempt was +made to reword a `gh` invocation to evade the hook. This is reported to the caller, who holds the MCP +promotion tools. + +### Resolution by the orchestrator + +Timestamp: 2026-08-28T06-40 + +The orchestrator holds the promotion tool set and completed the approved path. It did not use `gh issue +create` and did not reword anything to evade the hook. + +Command: `mcp__drm-copilot__potential_to_issue` with +`potential_path=/docs/features/potential/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md`, +`promotion_type=bug`, `work_mode=full-bug` + +EXIT_CODE: 0 + +Receipt: + +| Field | Value | +| --- | --- | +| Issue | **#670** | +| URL | https://github.com/drmoisan/TaskMaster/issues/670 | +| Title | Bug: qfc-initializewebviewasync-fault-is-unobserved | +| State | OPEN (verified with `gh issue view 670 --json number,title,state,url`) | +| Target repository | `drmoisan/TaskMaster` | +| Promoted record | `docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md` (verified present on disk) | + +Two details worth recording for a future run. First, `potential_to_issue` rejected the +workspace-relative `potential_path` and required an absolute path. Second, it **moved** the source out +of `docs/features/potential/` rather than copying it, which is the documented behaviour for a source +resolved directly from `docs/features/potential/`; the promoted record was confirmed present +afterwards. + +No active feature folder was created for #670. The acceptance criterion requires an issue to be opened +and referenced, not a delivery workflow, and #670 is filed against a `qfc-item-controller-defects-484` +owned file that this feature must not edit. Creating an active folder would have left a dangling +delivery scaffold for work nobody is executing. + +### Consequence for the acceptance criterion + +The criterion `[P5-T11]` flips reads, in part: "If it is not observed, a new issue is opened against +`QfcItemController.ViewerSetup.cs` (484-owned) and referenced here". The task **is** not observed, so +that clause is live, and it names an **issue** specifically — unlike the three-follow-up criterion +`[P7-T14]` flips, which accepts "a potential entry or GitHub issue". A potential entry alone does not +satisfy it. + +All three clauses are now delivered: + +1. **The open item is discharged with recorded evidence.** The task is not observed; the per-call-site + table above is the evidence. +2. **A new issue is opened against `QfcItemController.ViewerSetup.cs` and referenced here.** Issue + **#670**, OPEN, referenced by number and URL in this artifact and in the D5 section of `spec.md`. +3. **The guard is not weakened in response.** `EnsureBreadcrumbResourceOwnership` throws + `ObjectDisposedException` as its first action, unchanged from the delivered D5 design. + +The criterion is therefore checked `- [x]`. `[P9-T15]`'s reconciliation moves from +remediation-required to pass, with 54 of 54 criteria delivered. + +Output Summary: A faulted `QfcItemController.InitializeWebViewAsync` task is **NOT observed** — three +of its four production call sites discard it (`Initialization.cs:192`, `:288`, `:324`), only `:256` +awaits it, and the two `EfcItemController` sites discard theirs as well. The D5 guard is **not** +weakened in response. The follow-up potential entry was created by the executor and promoted through the +approved MCP path by the orchestrator to GitHub issue **#670** +(https://github.com/drmoisan/TaskMaster/issues/670, OPEN), whose promoted record now lives at +`docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md`. +Promotion was initially blocked inside the executor because `enforce-promotion-mcp-only.ps1` forbids +`gh issue create` and the three required MCP promotion tools are absent from the executor's tool set; +the forbidden path was not used and nothing was reworded to evade the hook. All three clauses of +`[P5-T11]`'s criterion are delivered and the criterion is checked. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/dependencies-489-recheck.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/dependencies-489-recheck.md new file mode 100644 index 000000000..8032f1ef7 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/dependencies-489-recheck.md @@ -0,0 +1,113 @@ +# `## Dependencies on 489` — Re-Check Against the Current Tree ([P7-T6]) + +Timestamp: 2026-08-28T06-16 + +Command: targeted `grep`/`sed` reads of `QuickFiler/Viewers/ItemViewer.cs` and +`ItemViewer.Designer.cs`; fixed-string searches of every `ItemViewer` partial other than +`ItemViewer.Breadcrumb.cs`; a search of `QuickFiler.Test/QuickFiler.Test.csproj`; and +`git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/IItemViewer.cs`. +EXIT_CODE: 0 + +## Is 489's spec present on this branch? + +**Yes.** `docs/features/active/itemviewer-surface-defects-489/spec.md` exists on this branch, alongside +that feature's `issue.md`, plan, research, two code reviews, two feature audits, two policy audits, and +its remediation inputs and plan. Feature 489 is already merged into this branch's base +`12465043e052fce66a1861bf1ddd037a1aa81afc`, which is the tip of +`epic/quickfiler-bug-family-integration`. + +The checks below were nevertheless made against **current source**, not against 489's spec text. That is +the stronger check: 489 is merged, so the tree is the delivered state of its contract rather than a +prediction of it, and a claim verified against source cannot drift from what the compiler sees. + +## Row per dependency + +| ID | Claim | Status | +| --- | --- | --- | +| D489-1 | `UiSyncContext` still exists on `ItemViewer.cs` and returns the constructor-captured context | **CONFIRMED** | +| D489-2 | The type-level coverage exclusion is still present at `ItemViewer.cs:20` | **CONFIRMED** | +| D489-3 | The designer disposal shape is unchanged | **CONFIRMED** | +| D489-4 | No member-name collision across `ItemViewer` partials | **CONFIRMED — zero matches for both names** | +| D489-5 | No other `.csproj` entry names the same file name as the new test file | **CONFIRMED** | +| D489-6 | `IItemViewer.cs` is unchanged | **CONFIRMED** | + +No dependency requires a named adjustment. + +### D489-1 — `UiSyncContext` + +`QuickFiler/Viewers/ItemViewer.cs:59` declares `public SynchronizationContext UiSyncContext`, backed by +the private `_context` field assigned in the constructor as `_context = SynchronizationContext.Current;`. +It is the survivor of 489's surface work — `UiScheduler` was removed by that feature — and it is exactly +what D4's affinity guard compares against, so the guard needs no re-pointing. + +**One correction is recorded here rather than passed over.** Constraint C6 argues that every +successfully constructed `ItemViewer` has a non-null `UiSyncContext` because the constructor calls +`TaskScheduler.FromCurrentSynchronizationContext()`, which throws under a null ambient context. The +delivered constructor contains no such call; it calls `Dispatcher.CurrentDispatcher`, which does not +throw on a null ambient context. A viewer constructed with no ambient context is therefore constructible +and has a null `UiSyncContext`. This changes no delivered design — the guard's null escape already +handles exactly that case — but a reviewer must not rely on C6's stated reachability argument. +`[P4-T2]` records the correction in full. + +### D489-2 — the coverage exclusion + +`QuickFiler/Viewers/ItemViewer.cs:20` reads `[ExcludeFromCodeCoverage]`, immediately above the +`public partial class ItemViewer` declaration. The citation resolves at the exact line the spec gives, +with no drift. Because a type-level attribute on one part applies to the whole partial type, every +member of `ItemViewer.Breadcrumb.cs` remains excluded from coverage measurement, which `[P0-T15]` +confirmed empirically: that file matches zero `class` elements in the baseline Cobertura document. + +### D489-3 — the designer disposal shape + +```csharp + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } +``` + +Unchanged: `components` is disposed only when `disposing` is true and `components` is non-null. D5's +premise holds — a `Container` created after teardown has begun would never be disposed by this method, +which is why D5 refuses the creation instead of trying to dispose it late. `[P5-T5]` separately confirms +the file is byte-identical to `BASE_SHA`. + +### D489-4 — the member-name collision check, made explicitly + +This is the check the spec singles out, because a member-name collision across `ItemViewer` partials is +a **compile error at integration** rather than a merge conflict, and will not surface at fan-in. + +Every `ItemViewer` partial other than `ItemViewer.Breadcrumb.cs` was searched: `ItemViewer.cs`, +`ItemViewer.Designer.cs`, `ItemViewer.WebViewThread.cs`, `ItemViewer.FolderSearch.cs`, +`ItemViewer.DisplayState.cs`, and `ItemViewer.Commands.cs`. + +| Fixed string | Files matching | +| --- | --- | +| `ThrowIfOffUiBoundary` | **0** | +| `_breadcrumbProvider` | **0** | + +**Both searches return zero matches.** Neither name this feature introduces collides with a member +declared by any other partial. + +### D489-5 — the new `.csproj` entry's file name + +`QuickFiler.Test/QuickFiler.Test.csproj` contains exactly **1** line naming +`ItemViewerBreadcrumbLifecycleRegressionTests.cs` — the entry `[P1-T2]` added. No pre-existing entry +names that file name, so there is no duplicate `Compile Include` and no CS2002. + +### D489-6 — `IItemViewer.cs` + +`git diff --name-only -- QuickFiler/Viewers/IItemViewer.cs` produces **no output lines**; the +file is byte-identical. The dependency is additionally no-impact by construction: this feature calls +`SetFolderItems` nowhere, and a search of the whole `QuickFiler`/`QuickFiler.Test` diff for that +identifier returns **0** matches. + +Output Summary: All six dependencies **D489-1 through D489-6 are CONFIRMED** against current source; +none requires a named adjustment. **D489-4 was checked explicitly and both fixed-string searches — +`ThrowIfOffUiBoundary` and `_breadcrumbProvider` — return zero matches across every other `ItemViewer` +partial.** `docs/features/active/itemviewer-surface-defects-489/spec.md` **is present** on this branch, +and the checks were nevertheless made against current source because 489 is already merged into this +base. One correction to constraint C6's reachability argument is recorded under D489-1. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/exemption-audit.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/exemption-audit.md new file mode 100644 index 000000000..bc413183b --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/exemption-audit.md @@ -0,0 +1,67 @@ +# Coverage-Exemption Audit ([P8-T10]) + +Timestamp: 2026-08-28T06-31 + +Command: `grep -c -F 'ExcludeFromCodeCoverage'` over the **seven** owned files — the four owned +production files and the three owned test files — compared against the seven-file `[P0-T17]` baseline. +EXIT_CODE: 0 + +## Per-file comparison + +Seven files rather than four, because the criterion `[P9-T13]` flips says no new attribute is introduced +**anywhere** by this feature, and the three owned test files are part of this feature. + +| # | Owned file | Baseline `[P0-T17]` | Final | Equal? | +| --- | --- | --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 0 | **0** | yes | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 0 | **0** | yes | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 7 | **7** | yes | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 0 | **0** | yes | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 0 | **0** | yes | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | 0 | **0** | yes | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (file did not exist) | **0** | yes | + +**Every per-file count equals its baseline exactly. Total 7 before, 7 after.** + +Equality in both directions is what the acceptance requires, and it is stronger than a one-sided check: +a count that only failed on an increase would miss a removal. **No attribute was added and none was +removed.** In particular the seven attributes in `BreadcrumbPopupUiOperations.cs` — at lines 105, 380, +383, 390, 394, 412, and 457 in the baseline — all survive the #475 deletion, which removed +`CaptureCurrentOrTests` and nothing else. The new test file was created carrying zero attributes and +still carries zero. + +## All fixes in `ItemViewer.Breadcrumb.cs` are coverage-exempt + +This statement is recorded here, in this artifact's own text, because `[P9-T13]` cites this artifact +alone and the criterion it flips opens on exactly this exemption claim. An artifact holding only +attribute counts could not carry it. + +**All fixes in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` — D1, D3, D4, D5, and #475 part 3 — are +coverage-exempt, because `QuickFiler/Viewers/ItemViewer.cs:20` carries `[ExcludeFromCodeCoverage]` on +the `ItemViewer` partial type, so their regression tests move no coverage number.** + +The mechanism is that a type-level attribute on one part of a partial type applies to the whole type. +`ItemViewer.Breadcrumb.cs` declares `public partial class ItemViewer` and carries **zero** +`ExcludeFromCodeCoverage` occurrences of its own — row 1 above — so its exemption is inherited entirely +from `ItemViewer.cs`, which is a **forbidden** file this feature must not touch and whose attribute is +assumption D489-2. `[P7-T6]` re-confirmed that attribute is still present at line 20, and `[P7-T3]` +confirmed the file is byte-identical to `BASE_SHA`. + +This is confirmed empirically rather than argued: `[P0-T15]` and `[P8-T7]` both record that +`ItemViewer.Breadcrumb.cs` matches **zero** `class` elements in the Cobertura document, before and +after the change. It contributes no covered line, no valid line, and no line-rate at all. + +The consequence for review is that the five units landing in that file are required to carry regression +tests by the CLAUDE.md Bugfix Workflow and by the acceptance criteria, **not** by a coverage delta. Flat +coverage on those units is the expected and correct outcome and must not be read as a testing gap, nor +"fixed" by removing the exemption. + +Only D2 (`BreadcrumbItemViewerLifecycleCoordinator.cs`), #475 part 1 +(`BreadcrumbPopupUiOperations.cs`), and #475 part 2 (`BreadcrumbDropDownHost.cs`) are measured, and +`[P8-T7]` records their delivered rates as 0.909091, 0.991342, and 0.992883 respectively. + +Output Summary: The `ExcludeFromCodeCoverage` count for each of the **seven** owned files equals its +`[P0-T17]` baseline exactly — 0, 0, **7**, 0, 0, 0, 0 — so **no attribute was added and none was +removed**. All fixes in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` (D1, D3, D4, D5, and #475 part 3) +are **coverage-exempt** because `QuickFiler/Viewers/ItemViewer.cs:20` carries `[ExcludeFromCodeCoverage]` +on the partial type, so their regression tests move no coverage number. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-475.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-475.md new file mode 100644 index 000000000..2c962558e --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-475.md @@ -0,0 +1,62 @@ +# File Sizes After #475 ([P6-T10]) + +Timestamp: 2026-08-28T06-10 + +Command: `wc -l` over all four owned production files and all three owned test files. +EXIT_CODE: 0 + +## All seven owned files + +| # | File | Baseline | Now | Delta | Limit | Result | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | **425** | +106 | at most 500 | pass | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 481 | **497** | +16 | at most 500 | pass | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 494 | **489** | **−5** | at most 500, strictly below 494 | pass | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 463 | **463** | 0 | at most 500 | pass | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 382 | **419** | +37 | at most 500 | pass | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | 480 | **483** | +3 | at most 500 | pass | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | **480** | +480 | at most 480 | pass | + +**Every production value is at most 500.** + +## The three acceptance conditions + +1. **Every production value is at most 500.** 425, 497, 489, and 463 — the largest is 497, three lines + below the ceiling. +2. **`QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` is strictly below 494.** It is **489**, five + lines below its 494-line baseline. The change is a pure deletion: `git diff --numstat` reports + `0 5` for this file, zero added and five deleted, which is the `CaptureCurrentOrTests` declaration + plus the blank line separating it from the following member. Capacity rule 2 — that this file + receives **no addition of any kind** — is satisfied exactly. +3. **The new test file is at most 480.** It is **480**, at the cap. + +## The new test file required compaction + +The eight test methods plus their helpers first measured **521** lines, over both the 480-line working +cap and the 500-line ceiling. Capacity rule 3 was applied: the doc comments were compacted rather than +a method being dropped, and **no second test file was created**, which is what keeps the one-added-line +`.csproj` diff criterion reachable. The fallback of folding a second assertion into an existing test +was not needed. + +Every clause the acceptance criteria require of those comments survived the compaction and was +re-verified afterwards: both `[P4-T1]` methods still carry the sentence "proves the guard fires and does +not prove the race is absent" and the statement that a true two-thread data race cannot be reproduced +deterministically under the repository ban on sleeps and wall-clock waits; the D1 method still records +that its second and third assertions are corroborating rather than discriminating; and the #475 part 3 +method still carries decision D-10's mandatory "that has run its constructor" qualifier. + +The file was formatted with `dotnet tool run csharpier format` against that single path during +compaction, so **480 is a post-format figure**, not a provisional hand count. `[P8-T1]` re-runs the +format pass over all seven owned paths and records a SHA-256 comparison for each. + +## The two constrained files + +Both are delivered and neither is edited again by any later phase: + +- `BreadcrumbItemViewerLifecycleCoordinator.cs` — **497**, a +16 delta within its 19 lines of headroom. +- `BreadcrumbPopupUiOperations.cs` — **489**, five lines *below* its baseline, with zero additions. + +Output Summary: All seven owned files are within their limits. Production values are **425, 497, 489, +463**, all at most 500. `BreadcrumbPopupUiOperations.cs` is **489**, strictly below its 494-line +baseline, by a pure five-line deletion with zero additions. The new test file is **480**, at the cap, +after a capacity-rule-3 comment compaction from 521 that preserved every acceptance-required clause. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d1.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d1.md new file mode 100644 index 000000000..cd2028ca2 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d1.md @@ -0,0 +1,46 @@ +# File Sizes After D1 ([P1-T9]) + +Timestamp: 2026-08-28T05-30 + +Command: `wc -l` over the three named files, plus +`git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` +EXIT_CODE: 0 + +## Line counts + +| File | Baseline | Now | Delta | Limit | Result | +| --- | --- | --- | --- | --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | **331** | +12 | at most 500 | pass | +| `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | **188** | +188 | at most 480 | pass | +| `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` | 500 | **500** | 0 | exactly 500 | pass | + +`ItemViewer.Breadcrumb.cs` grew by 12 lines against a planned D1 delta of +4. The difference is the +eight-line explanatory comment block `[P1-T5]` placed above the new statement, recording why the type +test names the concrete `BreadcrumbDropDownHost` rather than the interface and why a fresh pattern +variable is required. The file has 169 lines of headroom remaining against the 500-line ceiling, which +comfortably absorbs the +8 (D3), +14 (D4), +4 (D5), and +3 (#475 part 3) still budgeted for it in +constraint C2. + +## Byte-identity of `BreadcrumbDropDownIntegrationTests.cs` + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs +``` + +**Output: no lines.** + +This — and not the line count — is what establishes the **byte-identity** the criterion `[P1-T13]` +flips demands. A file can be edited without changing its line count, so the "exactly 500" figure in +the table above establishes only that the file is still at the ceiling; it does not establish that the +file is unmodified. The empty diff output establishes that it is byte-identical to its state at +`BASE_SHA` `12465043e052fce66a1861bf1ddd037a1aa81afc`. + +The separate criterion that `[P9-T4]` flips does assert the exact line count of 500 alongside the +unmodified claim, and `[P8-T8]` records both conjuncts for it after the final formatting pass. + +Output Summary: `ItemViewer.Breadcrumb.cs` is **331** lines (at most 500, pass), +`ItemViewerBreadcrumbLifecycleRegressionTests.cs` is **188** lines (at most 480, pass), and +`BreadcrumbDropDownIntegrationTests.cs` is **exactly 500** lines and produces **no output lines** from +`git diff --name-only `, establishing byte-identity. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d2.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d2.md new file mode 100644 index 000000000..446d1ec17 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d2.md @@ -0,0 +1,51 @@ +# File Sizes After D2 ([P2-T7]) + +Timestamp: 2026-08-28T05-36 + +Command: `wc -l` over the two named files, plus a read-only +`dotnet tool run csharpier check` over the same two files. +EXIT_CODE: 0 + +## Line counts + +| File | Baseline | Now | Delta | Limit | Result | +| --- | --- | --- | --- | --- | --- | +| `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 481 | **497** | **+16** | at most 500 | pass | +| `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 382 | **419** | +37 | at most 500 | pass | + +## The constrained production file, against its headroom + +`QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` is one of the two files constraint C2 +names as constrained. Its baseline was **481** lines, giving it **19 lines of headroom** to the +500-line ceiling. + +**The delivered delta is +16 lines, which is within that nineteen-line headroom.** The file now stands +at 497, three lines below the ceiling. Capacity rule 1 is satisfied and no excess needs removing. + +The delivered +16 against constraint C2's planned +6 breaks down as: three lines for the retained-theme +field and its two-line comment; one line for the `_retainedTheme = theme;` assignment in `SetTheme`; +one blank separator line; a five-line comment block in `ConfigureHost` recording why the replay is +confined to the newly-adopted branch; and six lines for the guard itself, which is one line longer than +first written because the `retained != null` conjunct and its local were required to clear the CS8604 +nullable warning documented in `488-d2-pass.md`. + +This is the **only** edit this feature makes to this file. Constraint C2 admits no other edit to it, so +no further growth is planned and the three remaining lines of headroom are not at risk from any later +phase. + +## The counts above are post-format counts + +The read-only `dotnet tool run csharpier check` over both files returned **EXIT_CODE 0** with +`Checked 2 files in 769ms` and reported neither file as unformatted. Both are therefore already in +CSharpier's canonical form, and the mutating format pass in `[P8-T1]` will not rewrite either of them +or change either line count. + +This matters because capacity rule 1 states that a hand count taken before the format stage is not +authoritative, since CSharpier reflows argument lists. Here the format stage has effectively already +been verified for these two files, so **497** and **419** are the delivered figures and not provisional +ones. `[P8-T8]` re-records them after the formal format pass. + +Output Summary: `BreadcrumbItemViewerLifecycleCoordinator.cs` is **497** lines, a **+16** delta against +its 481-line baseline and within its **19 lines of headroom**; +`BreadcrumbItemViewerLifecycleCoordinatorTests.cs` is **419** lines. Both are at most 500. Both are +already CSharpier-clean, so these are post-format figures. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d3.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d3.md new file mode 100644 index 000000000..e66d5048c --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d3.md @@ -0,0 +1,36 @@ +# File Sizes After D3 ([P3-T7]) + +Timestamp: 2026-08-28T05-41 + +Command: `wc -l QuickFiler/Viewers/ItemViewer.Breadcrumb.cs QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` +EXIT_CODE: 0 + +## Line counts + +| File | Baseline | After D1 | Now (after D3) | Limit | Result | +| --- | --- | --- | --- | --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | 331 | **357** | at most 500 | pass | +| `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | 188 | **257** | at most 480 | pass | + +The production file is **357** lines, which is at most 500. The test file is **257** lines, which is at +most 480. + +## Remaining headroom against the constraint C2 budget + +`ItemViewer.Breadcrumb.cs` has **143 lines** of headroom to the 500-line ceiling. Constraint C2 still +budgets +14 for D4, +4 for D5, and +3 for #475 part 3 in this file — 21 lines of planned growth against +143 available. The delivered totals run ahead of the C2 per-unit figures because each fix carries an +explanatory comment block, but the aggregate remains far inside the ceiling. + +The new test file has **223 lines** of headroom to its 480-line working cap, which is itself twenty +lines below the 500-line ceiling so that CSharpier reflow cannot push it over. Five of the eight +planned test methods remain to be added: two for D4, one for D5, and two for #475. + +Neither of the two files constraint C2 names as constrained is touched by D3. +`BreadcrumbItemViewerLifecycleCoordinator.cs` stands at 497 and `BreadcrumbPopupUiOperations.cs` at its +untouched 494; `[P2-T7]` recorded the former and `[P6-T10]` records the latter after the only edit it +receives. + +Output Summary: `ItemViewer.Breadcrumb.cs` is **357** lines (at most 500, pass) with 143 lines of +headroom; `ItemViewerBreadcrumbLifecycleRegressionTests.cs` is **257** lines (at most 480, pass) with +223 lines of headroom. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d4.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d4.md new file mode 100644 index 000000000..6555faf48 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d4.md @@ -0,0 +1,42 @@ +# File Sizes After D4 ([P4-T9]) + +Timestamp: 2026-08-28T05-49 + +Command: `wc -l QuickFiler/Viewers/ItemViewer.Breadcrumb.cs QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` +EXIT_CODE: 0 + +## Line counts + +| File | Baseline | After D1 | After D3 | Now (after D4) | Limit | Result | +| --- | --- | --- | --- | --- | --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | 331 | 357 | **398** | at most 500 | pass | +| `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | 188 | 257 | **363** | at most 480 | pass | + +The production value is **398**, which is at most 500. The test value is **363**, which is at most 480. + +## Remaining headroom + +`ItemViewer.Breadcrumb.cs` has **102 lines** of headroom to the 500-line ceiling. D4 added 41 lines +against constraint C2's planned +14: the helper carries a twelve-line XML doc comment recording why the +comparison is reference equality rather than thread identity and why the null escape exists, plus four +guard call sites with their separating blank lines. Two units remain budgeted for this file, +4 for D5 +and +3 for #475 part 3, against 102 lines available. + +The new test file has **117 lines** of headroom to its 480-line working cap. Three of the eight planned +test methods remain: one for D5 and two for #475. The four already present average roughly 45 lines +each including their doc comments, so three more at that rate would land near 498 — over the cap. + +**The remaining three methods will therefore carry shorter doc comments than the first four.** Capacity +rule 3 permits exactly this kind of compaction and requires that no second test file be created, +because a second file would need a second `Compile Include` line and would break the one-added-line +`.csproj` diff criterion. If the three cannot be fitted under 480 by trimming commentary, the fallback +rule 3 prescribes is to fold a second assertion into an existing new test rather than add a +near-duplicate method. + +Neither of the two files constraint C2 names as constrained is touched by D4. +`BreadcrumbItemViewerLifecycleCoordinator.cs` stands at 497 and `BreadcrumbPopupUiOperations.cs` at its +still-untouched 494. + +Output Summary: `ItemViewer.Breadcrumb.cs` is **398** lines (at most 500, pass) with 102 lines of +headroom; `ItemViewerBreadcrumbLifecycleRegressionTests.cs` is **363** lines (at most 480, pass) with +117 lines of headroom for the three remaining test methods. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d5.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d5.md new file mode 100644 index 000000000..e009198a0 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d5.md @@ -0,0 +1,41 @@ +# File Sizes After D5 ([P5-T7]) + +Timestamp: 2026-08-28T05-55 + +Command: `wc -l QuickFiler/Viewers/ItemViewer.Breadcrumb.cs QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` +EXIT_CODE: 0 + +## Line counts + +| File | Baseline | After D1 | After D3 | After D4 | Now (after D5) | Limit | Result | +| --- | --- | --- | --- | --- | --- | --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | 331 | 357 | 398 | **412** | at most 500 | pass | +| `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | 188 | 257 | 363 | **395** | at most 480 | pass | + +The production value is **412**, which is at most 500. The test value is **395**, which is at most 480. + +## Remaining headroom + +`ItemViewer.Breadcrumb.cs` has **88 lines** of headroom. D5 added 14 lines against constraint C2's +planned +4: four lines for the guard itself and a nine-line comment block stating decision D-15's +statement order explicitly, which `[P5-T3]`'s acceptance requires be present in the delivered source +rather than left for a reviewer to infer. One unit remains budgeted for this file, #475 part 3 at +3, +against 88 lines available. + +The new test file has **85 lines** of headroom for the two remaining #475 test methods. The D5 method +was written with a compacted six-line doc comment rather than the fifteen- to twenty-line comments the +D1 and D4 methods carry, following the compaction plan `[P4-T9]` recorded; it cost 32 lines against the +roughly 45 the earlier methods averaged. The two #475 methods will be written the same way, which +leaves adequate margin under the 480-line cap. + +Capacity rule 3's fallback — folding a second assertion into an existing new test rather than adding a +near-duplicate method — has not been needed and is not expected to be. **No second test file has been +created**, which is what keeps the one-added-line `.csproj` diff criterion reachable. + +Neither of the two files constraint C2 names as constrained is touched by D5. +`BreadcrumbItemViewerLifecycleCoordinator.cs` stands at 497 and `BreadcrumbPopupUiOperations.cs` at its +still-untouched 494; the latter receives its only edit, a deletion, in `[P6-T3]`. + +Output Summary: `ItemViewer.Breadcrumb.cs` is **412** lines (at most 500, pass) with 88 lines of +headroom; `ItemViewerBreadcrumbLifecycleRegressionTests.cs` is **395** lines (at most 480, pass) with +85 lines of headroom for the two remaining #475 test methods. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md new file mode 100644 index 000000000..5131ffdc7 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md @@ -0,0 +1,76 @@ +# Final File-Size Audit, After the Formatting Pass ([P8-T8]) + +Timestamp: 2026-08-28T06-29 + +Command: `grep -c ''` over the seven owned files and +`QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`, plus +`git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` +EXIT_CODE: 0 + +## Counting method + +Line counts were taken with **`grep -c ''`**, which counts the file's lines including a final line that +is not newline-terminated. A word-count line switch reports a different — one lower — number for a file +without a trailing newline, which is why this task requires counting the file's lines rather than using +that switch. These are post-format figures: `[P8-T1]` ran the mutating format pass before this audit, +and `[P8-T2]` confirmed the repository reports zero unformatted files. + +## The eight rows + +| # | File | Baseline | Final | Limit | Result | +| --- | --- | --- | --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 319 | **425** | at most 500 | pass | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 481 | **497** | at most 500 | pass | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 494 | **489** | at most 500 | pass | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 463 | **463** | at most 500 | pass | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | 382 | **419** | at most 500 | pass | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | 480 | **483** | at most 500 | pass | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | 0 (new) | **480** | at most 500 (and at most 480 by capacity rule 3) | pass | +| 8 | `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` | 500 | **500** | exactly 500 | pass | + +**Every recorded value is at most 500.** The largest is 497. + +## The two constrained files, named explicitly with their delivered values + +Constraint C2 names two files as constrained, and this task requires each to be named explicitly with +its delivered value: + +- **`QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` — delivered value 497.** Against a + 481-line baseline that is a **+16** delta, within its **19 lines of headroom**, and three lines below + the ceiling. This was the highest-likelihood scope risk in the change-set; no excess had to be removed + and the ceiling was not waived. +- **`QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` — delivered value 489.** Against a 494-line + baseline that is a **−5** delta. The file received **no addition of any kind**, per capacity rule 2; + its only change is the deletion of the `CaptureCurrentOrTests` declaration and the blank line + separating it from the following member, and `git diff --numstat` reports `0 5` for it. + +## `BreadcrumbDropDownIntegrationTests.cs` — both conjuncts + +The criterion `[P9-T4]` flips says this file "remains at exactly 500 lines **and is unmodified**". A line +count establishes only the first conjunct, since a file can be edited without changing its line count. +Both are recorded here: + +1. **Exactly 500 lines.** `grep -c ''` reports **500**. +2. **Unmodified.** `git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` + produces **no output lines**, establishing byte-identity with its state at `BASE_SHA`. + +The file sits at the ceiling with zero headroom and is a forbidden file under constraint C1, which is +why the disposal `[P1-T5]` added type-tests the concrete `BreadcrumbDropDownHost` rather than the +interface: the alternative would have broken this file's `Times.Once()` assertion and forced an edit +here. + +## Note on the new test file + +`ItemViewerBreadcrumbLifecycleRegressionTests.cs` sits at **480**, at the working cap capacity rule 3 +sets twenty lines below the 500-line ceiling so CSharpier reflow cannot push it over. It first measured +521 lines and was compacted by shortening doc comments, not by dropping a method and not by creating a +second test file — a second file would have required a second `Compile Include` line and broken the +one-added-line `.csproj` diff criterion. `[P8-T1]`'s SHA comparison confirms the format pass left this +file byte-identical, so 480 is a settled post-format figure. + +Output Summary: All eight values are at most 500 — **425, 497, 489, 463, 419, 483, 480**, and +**exactly 500** for `BreadcrumbDropDownIntegrationTests.cs`. The two constrained files are named with +their delivered values: `BreadcrumbItemViewerLifecycleCoordinator.cs` at **497** and +`BreadcrumbPopupUiOperations.cs` at **489**. `BreadcrumbDropDownIntegrationTests.cs` is exactly 500 +lines **and** produces no output from `git diff --name-only `, establishing byte-identity. +Counts were taken with `grep -c ''` rather than a word-count line switch. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/forbidden-files-untouched.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/forbidden-files-untouched.md new file mode 100644 index 000000000..33511d2ce --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/forbidden-files-untouched.md @@ -0,0 +1,49 @@ +# Forbidden Files Untouched ([P7-T3]) + +Timestamp: 2026-08-28T06-13 + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs QuickFiler/Viewers/BreadcrumbMessengerHub.cs QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs QuickFiler/Viewers/BreadcrumbCoordinatorUpgradeLifetime.cs QuickFiler/Viewers/ItemViewer.cs QuickFiler/Viewers/ItemViewer.Designer.cs QuickFiler/Viewers/IBreadcrumbDropDownHost.cs QuickFiler/Viewers/IItemViewer.cs QuickFiler/Controllers/QfcItemController.ViewerSetup.cs QuickFiler/QuickFiler.csproj QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs +``` + +EXIT_CODE: 0 + +## Result + +**Output: no lines.** + +All eleven files are byte-identical to their state at `BASE_SHA` +`12465043e052fce66a1861bf1ddd037a1aa81afc`. + +| # | File | Owner / reason it is forbidden | +| --- | --- | --- | +| 1 | `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` | sibling feature `breadcrumb-coordinator-hub-defects-501` (#462). Holds the D1b residual and the rejected synchronous-`Release()` alternative. | +| 2 | `QuickFiler/Viewers/BreadcrumbMessengerHub.cs` | sibling feature 501 | +| 3 | `QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs` | sibling feature 501 | +| 4 | `QuickFiler/Viewers/BreadcrumbCoordinatorUpgradeLifetime.cs` | sibling feature 501 | +| 5 | `QuickFiler/Viewers/ItemViewer.cs` | sibling feature `itemviewer-surface-defects-489`. Carries the type-level `[ExcludeFromCodeCoverage]` at line 20 that assumption D489-2 depends on, and the `UiSyncContext` property D4's guard compares against. | +| 6 | `QuickFiler/Viewers/ItemViewer.Designer.cs` | sibling feature 489. Designer-generated; D5's design was chosen specifically to avoid editing it. | +| 7 | `QuickFiler/Viewers/IBreadcrumbDropDownHost.cs` | public contract; no public API change is permitted | +| 8 | `QuickFiler/Viewers/IItemViewer.cs` | public contract | +| 9 | `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` | sibling feature `qfc-item-controller-defects-484`. Read during `[P5-T6]` to discharge the research §3.5 open item, and deliberately not edited — the correct response to the unobserved-task finding is a new issue, not a change here. | +| 10 | `QuickFiler/QuickFiler.csproj` | this feature adds no production file, so the production project file must not change | +| 11 | `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` | exactly 500 lines, at the ceiling, and required byte-identical at delivery. Holds `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` and `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory`, two of the nine constraining tests. | + +## Why the empty diff is the right proof for each + +Several of these files were **read** during execution — `ItemViewer.cs` to confirm the coverage +exclusion and the `UiSyncContext` shape, `ItemViewer.Designer.cs` for its line count, +`QfcItemController.ViewerSetup.cs` to trace the `InitializeWebViewAsync` call sites, and +`BreadcrumbDropDownIntegrationTests.cs` for the constructor arrangement `[P6-T1]` mirrors. Reading is +permitted; writing is not. An empty `git diff --name-only` distinguishes the two, which a test outcome +or a line count could not: a passing test proves nothing about whether its file was edited, and a file +can be edited without changing its line count. + +Two of these files are additionally covered by their own dedicated checks, because separate criteria +depend on them: `[P5-T5]` for `ItemViewer.Designer.cs` and `[P1-T6]` and `[P8-T8]` for +`BreadcrumbDropDownIntegrationTests.cs`. Those checks agree with this one. + +Output Summary: `git diff --name-only ` over all **eleven** forbidden files produces **no +output lines**. Every one is byte-identical to its pre-change state. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-analyzers.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-analyzers.md new file mode 100644 index 000000000..26c99fbbe --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-analyzers.md @@ -0,0 +1,77 @@ +# Final QC Stage 2 — Analyzer Gate ([P8-T3]) + +Timestamp: 2026-08-28T06-21 + +Command (under `pwsh -NoProfile` from the worktree root, MSBuild path resolved in `[P0-T4]`): + +``` +MSBuild.exe TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true /nologo +``` + +GATE: analyzer gate (`/t:Rebuild` against `TaskMaster.sln`) +EXIT_CODE: 0 + +## Headline counts + +| Measure | Baseline `[P0-T10]` | Now `[P8-T3]` | Comparison | +| --- | --- | --- | --- | +| **Errors** | 0 | **0** | not greater than baseline | +| Warnings | 5 | **5** | unchanged | +| `Skipping target "CoreCompile"` | 0 | **0** | non-vacuous | +| `CoreCompile:` executions | 67 | **83** | non-vacuous | +| Build result | `Build succeeded.` | **`Build succeeded.`** | | +| Elapsed | 00:00:11.31 | 00:00:14.13 | | + +`[P0-T10]` recorded **zero** errors, which is the expected case this task describes, so the acceptance +reduces to its absolute branch: **`EXIT_CODE: 0` with zero errors**. That is what was observed. The +scope-escalation branch for a non-zero baseline is not triggered, and no error is attributable to any +file this feature changed because there are no errors at all. + +## Per-file analyzer warning comparison + +| Owned production file | Baseline `[P0-T10]` | Now | Result | +| --- | --- | --- | --- | +| `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | 0 | **0** | not greater | +| `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | 0 | **0** | not greater | +| `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | 0 | **0** | not greater | +| `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | 0 | **0** | not greater | + +**The analyzer warning count attributable to each of the four owned production files is 0, equal to and +therefore no greater than its Phase 0 baseline of 0.** + +Two independent searches establish this. A combined search of the build log for a warning line naming +any of the four file names returns **0** matching lines. A broader search for any warning line carrying +the compiler's `.cs(line,col): warning` shape returns **0** matching lines across the whole +solution, so no warning in this build is attributable to **any** C# source file. + +## The 5 warnings + +Identical to the baseline five: the System.Reactive `packages.config` advisory emitted by +`packages\System.Reactive.7.0.0\build\System.Reactive.PackagesConfigCheck.targets(31,5)` in the +`_RxCheckPackagesConfig` target, once each for `UtilitiesCS.csproj`, `ToDoModel.csproj`, +`QuickFiler.csproj`, `TaskMaster.csproj`, and `UtilitiesCS.Test.csproj`. All five are raised by a NuGet +targets file, none names a `.cs` file, and all are pre-existing repository conditions this feature +neither caused nor is permitted to fix. + +## Non-vacuity proof + +A warm `/t:Build` would return exit 0 having skipped `CoreCompile` on every project, because MSBuild's +up-to-date check does not invalidate on a command-line `/p:` change, and the analyzer gate could not +then fail. Three facts establish that this run was a real compile: + +1. The target is `Rebuild`, which runs `Clean` before `Build`. +2. `Skipping target "CoreCompile"` appears **0** times in the log. +3. `CoreCompile:` target-execution headers appear **83** times. + +The `CoreCompile:` count is higher than the baseline's 67 because this build compiles the added test +file and the changed sources across more project configurations in one pass; the load-bearing figure is +the **zero** skips. + +A `csc.exe` occurrence count is deliberately not used as the signal: `CoreCompile` runs the Roslyn `Csc` +MSBuild task rather than spawning `csc.exe`, so that count is zero even on a genuine compile. + +Output Summary: EXIT_CODE 0. `Build succeeded` with **0 errors** and **5 warnings**, all five the +pre-existing System.Reactive advisory and none attributable to a `.cs` file. The analyzer warning count +for each of the four owned production files is **0**, no greater than its baseline of 0. Zero +`Skipping target "CoreCompile"` occurrences against **83** `CoreCompile:` executions, so the gate was +non-vacuous. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-nullable.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-nullable.md new file mode 100644 index 000000000..97339315c --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-nullable.md @@ -0,0 +1,77 @@ +# Final QC Stage 3 — Nullable / Type-Check Gate ([P8-T4]) + +Timestamp: 2026-08-28T06-22 + +Command (under `pwsh -NoProfile` from the worktree root, MSBuild path resolved in `[P0-T4]`): + +``` +MSBuild.exe TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true /nologo +``` + +GATE: nullable / type-check gate (`/t:Rebuild` against `TaskMaster.sln`) +EXIT_CODE: 0 + +## Target and property, as the acceptance requires them recorded + +- **The target is `Rebuild`.** `/t:Build` was not substituted. MSBuild's up-to-date check does not + invalidate on a command-line `/p:` change, so a warm `/t:Build` would return exit 0 with `CoreCompile` + skipped on every project and this gate could not fail. +- **`/p:Nullable=enable` was NOT supplied.** Nullable enforcement in this repository is per-file opt-in + through the `#nullable enable` pragma, and `/p:TreatWarningsAsErrors=true` then promotes a + participating file's `CS86xx` diagnostics to build errors. The solution-wide property is deliberately + absent from `.github/workflows/ci.yml`; supplying it would conscript every file that has never adopted + the pragma. Decision D-3 and `.claude/rules/csharp.md` both forbid it. + +Apart from `/t:Rebuild` replacing CI's `/t:Build` and the added `/nologo`, this is character-for-character +the CI gate command. + +## Headline counts + +| Measure | Baseline `[P0-T11]` | Now `[P8-T4]` | Comparison | +| --- | --- | --- | --- | +| **Errors** | 0 | **0** | not greater than baseline | +| Warnings | 5 | **5** | unchanged | +| `CS86xx` diagnostics | 0 | **0** | none | +| `Skipping target "CoreCompile"` | 0 | **0** | non-vacuous | +| `CoreCompile:` executions | 52 | **76** | non-vacuous | +| Build result | `Build succeeded.` | **`Build succeeded.`** | | +| Elapsed | 00:00:11.80 | 00:00:12.48 | | + +`[P0-T11]` recorded **zero** errors, which is the expected case and is consistent with `main` being +green on this command. The acceptance therefore reduces to its absolute branch: **`EXIT_CODE: 0` with +zero errors**, which is what was observed. No error is attributable to any file this feature changed +because there are no errors. The scope-escalation branch is not triggered. + +## Nullable diagnostics specifically + +A search of the build log for the `CS86` prefix returns **0** occurrences. This matters because one of +the four owned production files, `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, +carries `#nullable enable` on its first line and therefore does participate in nullable analysis under +this gate. + +That file's D2 edit initially raised **CS8604** — "Possible null reference argument for parameter +'theme'" — because the .NET Framework 4.8.1 reference assemblies carry no `NotNullWhen` post-condition +on `string.IsNullOrWhiteSpace`, so a bare `if (!string.IsNullOrWhiteSpace(_retainedTheme))` established +no non-null flow state. That was found and fixed during `[P2-T5]`, before this gate ran, by capturing +the field into a local and testing `retained != null` alongside the whitespace check. No null-forgiving +`!` operator and no warning suppression was used, and the guard still checks both null and whitespace. +The zero `CS86` count here confirms the fix holds under the real gate command. + +## The 5 warnings + +Identical to the baseline five: the System.Reactive `packages.config` advisory from +`System.Reactive.PackagesConfigCheck.targets(31,5)`, once each for `UtilitiesCS.csproj`, +`ToDoModel.csproj`, `QuickFiler.csproj`, `TaskMaster.csproj`, and `UtilitiesCS.Test.csproj`. They remain +warnings rather than errors under `/p:TreatWarningsAsErrors=true` because they are raised by an MSBuild +`Warning` task in a targets file; `TreatWarningsAsErrors` promotes compiler warnings only. + +## Non-vacuity proof + +`Skipping target "CoreCompile"` appears **0** times; `CoreCompile:` target-execution headers appear +**76** times; and the target is `Rebuild`, which cleans first. Every project was genuinely recompiled, +so the compiler and nullable-flow diagnostics actually ran. + +Output Summary: EXIT_CODE 0. `Build succeeded` with **0 errors** and 5 warnings, all five the +pre-existing System.Reactive advisory. **Zero `CS86xx` nullable diagnostics.** The target was `Rebuild` +and `/p:Nullable=enable` was **not** supplied. Zero `Skipping target "CoreCompile"` occurrences against +**76** `CoreCompile:` executions, so the gate was non-vacuous. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/public-surface.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/public-surface.md new file mode 100644 index 000000000..dd21a1954 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/public-surface.md @@ -0,0 +1,122 @@ +# Public-Surface Stability ([P7-T4]) + +Timestamp: 2026-08-28T06-13 + +Command: `git diff 12465043e052fce66a1861bf1ddd037a1aa81afc` over the four owned production files, +filtered to added and removed lines carrying an accessibility modifier, plus a targeted read of both +`public` seven-parameter `BreadcrumbDropDownHost` constructor signatures. +EXIT_CODE: 0 + +## Every member added, removed, or re-signed + +The complete set, with declared accessibility. Nothing else in the four files changed a member +declaration. + +### Added members — three, all private + +| Member | Accessibility | File | Unit | +| --- | --- | --- | --- | +| `ThrowIfOffUiBoundary(string operation)` | **private** | `ItemViewer.Breadcrumb.cs` | D4 — the UI-affinity helper | +| `_breadcrumbProvider` | **private** | `ItemViewer.Breadcrumb.cs` | D3 — the retained-provider field | +| `_retainedTheme` | **private** | `BreadcrumbItemViewerLifecycleCoordinator.cs` | D2 — the retained-theme field | + +Verbatim from the diff: + +``` ++ private void ThrowIfOffUiBoundary(string operation) ++ private IFolderHierarchyProvider _breadcrumbProvider; ++ private string? _retainedTheme; +``` + +### Re-signed member — one, private + +| Member | Accessibility | Change | +| --- | --- | --- | +| `EnsureBreadcrumbLifecycle` | **private**, before and after | parameter changed from `BreadcrumbPopupUiOperations operations` to `Func operationsFactory` | + +Verbatim from the diff: + +``` +- BreadcrumbPopupUiOperations operations ++ Func operationsFactory ++ BreadcrumbPopupUiOperations operations = operationsFactory(); +``` + +The member was `private` before the change and is `private` after, so #475 part 3 re-signs no +externally visible member. This is what the criterion `[P6-T14]` flips requires when it says +`EnsureBreadcrumbLifecycle` "remains private so no public member is re-signed". + +### Removed member — one, internal static + +| Member | Accessibility | File | +| --- | --- | --- | +| `CaptureCurrentOrTests()` | **internal static** | `BreadcrumbPopupUiOperations.cs` | + +Verbatim from the diff: + +``` +- internal static BreadcrumbPopupUiOperations CaptureCurrentOrTests() => +``` + +`internal`, not `public`. Its removal is visible only inside the `QuickFiler` assembly and to +`QuickFiler.Test` through `InternalsVisibleTo`, and every reference to it was retired in the same +change-set. + +## No `public` member was added, removed, or re-signed + +Filtering the diff over all four owned production files for added or removed lines beginning with a +`public` modifier returns a count of **0**. + +## Both seven-parameter `BreadcrumbDropDownHost` constructors keep their signatures + +Read from the delivered source: + +```csharp + public BreadcrumbDropDownHost( + Control anchor, + CoreWebView2Environment environment, + IWebViewCoreInitializer initializer, + string html, + Action focusPending, + Action focusAnchor, + Action cancelSelection + ) +``` + +```csharp + public BreadcrumbDropDownHost( + Control anchor, + CoreWebView2Environment environment, + LegacySurfaceFactory surfaceFactory, + Action focusPending, + Action focusAnchor, + Action cancelSelection, + Action showPopup + ) +``` + +Both parameter lists are unchanged in arity, type, order, and name. #475 part 2 changed only the +**argument** each chain forwards to the private constructor — `CaptureCurrentOrTests()` became +`CaptureCurrent()` — which is not part of either signature. The `git diff --numstat` for that file is +`2 2`, one changed line per chain. + +Preserving the order is load-bearing rather than incidental: in the second constructor the +`surfaceFactory ?? throw new ArgumentNullException(nameof(surfaceFactory))` is evaluated before the +operations argument, which is why +`Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` still passes without an ambient context. + +## Note on observable behaviour + +No signature changed, but the second `public` constructor's **behaviour** did: it now throws +`InvalidOperationException` when constructed without an ambient synchronization context, where it +previously substituted a test dispatcher silently. That is the one publicly observable behaviour change +in the change-set, it is the intended effect of #475, and it is recorded in the change description +`[P7-T9]` writes. It is a behaviour change, not a surface change, so it does not bear on this task's +acceptance. + +Output Summary: Exactly **three** members were added, all **private**: `ThrowIfOffUiBoundary`, +`_breadcrumbProvider`, and the lifecycle coordinator's retained-theme field. Exactly **one** member was +re-signed, the **private** `EnsureBreadcrumbLifecycle`. Exactly **one** member was removed, the +**internal static** `CaptureCurrentOrTests`. **No `public` member was added, removed, or re-signed** +(filter count 0), and both seven-parameter `BreadcrumbDropDownHost` constructors keep their signatures +unchanged. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/quickfiler-test-final.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/quickfiler-test-final.md new file mode 100644 index 000000000..c039efaf8 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/quickfiler-test-final.md @@ -0,0 +1,104 @@ +# Final QC Stage 4 — `QuickFiler.Test` Gate ([P8-T5]) + +Timestamp: 2026-08-28T06-25 + +Command (under `pwsh -NoProfile` from the worktree root, vstest path resolved in `[P0-T4]`): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /EnableCodeCoverage /InIsolation /Settings:scripts\vscode\TaskMaster.cli.runsettings "/Logger:trx;LogFileName=final-quickfiler-test.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\trx-p8-t5 +``` + +EXIT_CODE: 0 + +## Counts + +| Measure | Value | +| --- | --- | +| Total | **1201** | +| Passed | **1201** | +| Failed | **0** | +| Skipped / not executed | **0** | +| Total time | 11.9796 seconds | +| Run result | `Test Run Successful.` | + +Corroborated by the TRX `ResultSummary/Counters` element: `total="1201" passed="1201" failed="0" +notExecuted="0"`. + +## Gate 1 — failing-test-name set is a subset of `BASELINE_FAILURE_SET` + +| | Value | +| --- | --- | +| `BASELINE_FAILURE_SET` (`[P0-T12]`) | **(empty)** | +| Observed failing set | **(empty)** | + +Because the baseline set is empty, the subset condition reduces to failed count 0 with `EXIT_CODE: 0`, +and both hold. **No failing name appears at all**, so no name outside the baseline set appears and no +name added by this feature appears. + +## Gate 2 — passed count against `BASELINE_PASSED` + 9 + +| Quantity | Value | +| --- | --- | +| `BASELINE_PASSED` (`[P0-T12]`) | 1192 | +| Required minimum (`BASELINE_PASSED` + 9) | **1201** | +| Observed passed | **1201** | + +The requirement is met exactly. The **+9** is ten added test methods minus the one deleted test method. + +### The ten added test result names, all `Passed` + +| # | Test | Unit | +| --- | --- | --- | +| 1 | `ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` | D1 | +| 2 | `ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` | D2 | +| 3 | `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` | D3 | +| 4 | `InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` | D3 | +| 5 | `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic` | D4 | +| 6 | `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` | D4 | +| 7 | `InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException` | D5 | +| 8 | `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` | #475 | +| 9 | `ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` | #475 | +| 10 | `CaptureCurrent_NullAndControlledContexts_FailFastAndCapture` | #475 | + +Every one was located in the final TRX with `outcome="Passed"`. Each is a plain `[TestMethod]` with no +`[DataRow]`, so each contributes exactly one test result. + +### The one deleted test + +`CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` — searched for in the final +TRX and **not found**, confirming it no longer runs. Test 10 above replaces it. + +## Host-identity scrub of the TRX evidence + +`/EnableCodeCoverage` deposited a binary coverage attachment into the results directory whose **filename +embedded the account name and machine name** (`__.coverage`). That filename is +produced by the collector and is not controllable through `LogFileName=`. + +The plan's fail-closed rule states that **no artifact may embed a user account name, a home directory, +or a machine name**. Two corrections were therefore applied: + +1. **The `.coverage` attachments were deleted** from the results directory, together with their + now-empty attachment folder. They are not required by this task, whose acceptance concerns test + counts and names; the coverage figures this plan needs come from the Cobertura runs in `[P0-T14]` and + `[P8-T6]`. +2. **All 19 TRX files under the feature evidence tree were scrubbed.** The TRX format records + `computerName=""` on every `UnitTestResult` element and embeds the absolute worktree path, so + the leak was systemic across every phase's TRX rather than specific to this one. The substitutions + were: the machine name to `REDACTED-HOST`, the absolute worktree root to ``, and any + residual account name to `REDACTED-USER`. + +Verification after the scrub: a recursive search of the entire feature evidence tree returns **0** files +containing the machine name and **0** containing the account name. The TRX counters are untouched — +`total="1201" passed="1201" failed="0"` — as are all test names, outcomes, and error messages, so no +evidence content was lost. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p8-t5/final-quickfiler-test.trx` + +Output Summary: EXIT_CODE 0. **1201 total, 1201 passed, 0 failed.** The observed failing-test-name set is +**empty** and therefore a subset of the empty `BASELINE_FAILURE_SET`. The passed count **1201** equals +`BASELINE_PASSED` 1192 plus **9**, meeting the minimum exactly; all ten added tests are enumerated above +with outcome `Passed`, and the one deleted test is absent from the TRX. Host-identity leakage introduced +by `/EnableCodeCoverage` was removed and all 19 evidence TRX files were scrubbed, with zero residual +account-name or machine-name references and all counters preserved. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/test-policy-audit.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/test-policy-audit.md new file mode 100644 index 000000000..48c06534d --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/test-policy-audit.md @@ -0,0 +1,94 @@ +# Test Policy Audit ([P8-T9]) + +Timestamp: 2026-08-28T06-30 + +Command: `grep -c -F 'Thread.Sleep'` and `grep -c -F 'Task.Delay'` over the three owned test files, +plus searches for temporary-file APIs, threading APIs, and the assertion and mocking libraries. +EXIT_CODE: 0 + +## The two mandated fixed-string searches — both return ZERO across all three files + +| File | `Thread.Sleep` | `Task.Delay` | +| --- | --- | --- | +| `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | **0** | **0** | +| `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | **0** | **0** | +| `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | **0** | **0** | + +**Both searches return zero matching lines across all three files**, satisfying constraint C3's +requirement of zero occurrences at delivery. This includes doc comments: an early draft of the D1 test's +`` named both APIs while describing what it does *not* use, which would have failed the +fixed-string gate; the wording was changed to "no sleep, no timer delay" before delivery. + +## Frameworks and libraries + +| Concern | Library | Evidence | +| --- | --- | --- | +| Test framework | **MSTest** | every added test carries `[TestMethod]`; the new file's class carries `[TestClass]`; `using Microsoft.VisualStudio.TestTools.UnitTesting;` is present | +| Assertions | **FluentAssertions** | `using FluentAssertions;` present; every added test asserts through `.Should()` | +| Mocking | **Moq** | `using Moq;` present; `Mock` and `Mock` are used, both with `MockBehavior.Strict` | + +No other test framework, assertion library, or mocking library is introduced. Three of the ten added +tests use **hand-written fakes** rather than Moq mocks — `RecordingHost` for D2 and +`SeamProbeDropDownHost` for the #475 seam test, plus the boundary test which needs no double at all. +That is consistent with the C# Unit Test Policy: Moq is the mocking library used wherever a mock is +used, and a hand-written recording fake is not a competing library. + +## No temporary files + +A search of all three files for `GetTempPath`, `GetTempFileName`, `File.Create`, `File.WriteAll`, and +`Directory.CreateDirectory` returns **0** matches in each. No added test creates or uses a temporary +file, as the General Unit Test Policy strictly prohibits. + +## No wall-clock wait + +No added test waits on wall-clock time. The deterministic rendezvous points used are: + +- the drainable queue in the new file, whose `Drain()` runs queued callbacks synchronously on the + creating thread and has no timeout; and +- `PumpSynchronizationContext.Drain(Task)`, pre-existing helper code, which loops on + `Task.WhenAny(operation, _available.WaitAsync())` — a signal-based wait with **no timeout argument**, + so it blocks until work is available or the operation completes, never for a fixed duration. + +## Second threads — nine of ten added tests start none; ONE does, and it is recorded here + +Searching the new regression file for `new Thread`, `Task.Run`, `ThreadPool`, and `Parallel.` returns +**0** matches. All eight tests in that file, and the D2 test added to +`BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, are strictly single-threaded. + +**The one exception is the replacement boundary test** +`CaptureCurrent_NullAndControlledContexts_FailFastAndCapture` in +`BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, which contains: + +```csharp + Task post = Task.Run(() => + captured.PostAsync(() => capturedThread = Environment.CurrentManagedThreadId) + ); + context.Drain(post); +``` + +This is stated plainly rather than glossed. Three facts bound it: + +1. **It is retained, not introduced.** `[P6-T3]` and the spec's test strategy both instruct that the + replacement test retain "the controlled-context half" of the deleted + `CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries`. These two lines are that + half, carried over verbatim. `git diff` classifies them as **context**, not additions: a search of + the added lines of both edited test files for the four threading tokens returns **0**. +2. **The half cannot be written single-threaded.** Its purpose is to prove that operations captured + under a controlled context marshal work back to that context's owning thread. Posting from the owner + thread itself would make `capturedThread.Should().Be(context.OwnerThreadId)` vacuous. +3. **It is deterministic, not timing-dependent.** `context.Drain(post)` is a rendezvous that pumps until + the posted task completes, with no timeout and no sleep, so the test has a single possible outcome + rather than a race. + +Constraint C3's "no second thread" clause and this task's acceptance wording are therefore satisfied for +every test in the new file and for the D2 test, and **not** for this one retained half. The relevant +acceptance criterion `[P9-T5]` flips is unaffected: its text bans `Thread.Sleep`, `Task.Delay`, a +wall-clock wait, and a temporary file, all four of which are absent, and it does not mention threads. + +Output Summary: **Both fixed-string searches return zero matching lines across all three owned test +files.** Every added test uses MSTest attributes and FluentAssertions assertions; Moq with +`MockBehavior.Strict` is the only mocking library, used where a mock is needed, with three tests using +hand-written fakes instead. No added test creates a temporary file and none waits on wall-clock time. +Nine of the ten added tests start no second thread; the tenth, the replacement boundary test, retains a +`Task.Run` from the deleted test's controlled-context half exactly as `[P6-T3]` instructs — recorded +here as an explicit, deterministic exception rather than passed over. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/toolchain-consecutive-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/toolchain-consecutive-pass.md new file mode 100644 index 000000000..ffc4a1ecc --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/toolchain-consecutive-pass.md @@ -0,0 +1,71 @@ +# Four Toolchain Stages — One Consecutive Clean Pass ([P8-T11]) + +Timestamp: 2026-08-28T06-32 + +Command: comparison of the ordered stage timestamps recorded by `[P8-T1]` through `[P8-T5]`, plus a +re-take of the SHA-256 of all seven owned files after the `[P8-T5]` test run, compared against the +post-format hashes `[P8-T1]` recorded. +EXIT_CODE: 0 + +## Ordered stage timestamps of the final pass + +| Stage | Task | Command | Timestamp (UTC) | Result | +| --- | --- | --- | --- | --- | +| 1. Format | `[P8-T1]` | `csharpier format` over the seven owned paths | **2026-08-28T06-20** | EXIT 0 | +| 1v. Format verify | `[P8-T2]` | `csharpier check .` | **2026-08-28T06-20** | EXIT 0, zero unformatted of 1554 | +| 2. Lint | `[P8-T3]` | msbuild `/t:Rebuild` with analyzers | **2026-08-28T06-21** | EXIT 0, 0 errors | +| 3. Type-check | `[P8-T4]` | msbuild `/t:Rebuild` with `TreatWarningsAsErrors` | **2026-08-28T06-22** | EXIT 0, 0 errors | +| 4. Test | `[P8-T5]` | vstest with `/EnableCodeCoverage /InIsolation` | **2026-08-28T06-25** | EXIT 0, 1201/1201 passed | + +The timestamps are monotonically non-decreasing and span five minutes, so the four stages ran **in +order** and **consecutively**, with no other work interleaved. + +## No owned file's SHA-256 changed between the format pass and the test run + +| # | File | SHA-256 after `[P8-T1]` format | SHA-256 after `[P8-T5]` test | Changed? | +| --- | --- | --- | --- | --- | +| 1 | `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | `04c2ae3d…98cf28` | `04c2ae3d…98cf28` | **no** | +| 2 | `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` | `e50842ce…049a8d` | `e50842ce…049a8d` | **no** | +| 3 | `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` | `676bcb3a…4c45db` | `676bcb3a…4c45db` | **no** | +| 4 | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | `990f4f6a…01889e` | `990f4f6a…01889e` | **no** | +| 5 | `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` | `c0ae85c1…0f9366` | `c0ae85c1…0f9366` | **no** | +| 6 | `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` | `ac78b80b…967799` | `ac78b80b…967799` | **no** | +| 7 | `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` | `fc5098d7…7e09ec` | `fc5098d7…7e09ec` | **no** | + +**All seven are byte-identical across the pass.** No stage after the format stage modified any owned +file, so stages 2, 3, and 4 all ran against the same content that stage 1 produced and that stage 1v +verified as canonically formatted. + +## Number of loop restarts before the final pass: 0 + +The four stages ran **once each**, in order, and every one passed on its first execution: + +- Stage 1 exited 0. +- Stage 1's verification, stage 2, stage 3, and stage 4 all exited 0. +- No stage failed, and no stage after stage 1 changed a file. + +**Zero restarts were required.** The recorded pass is therefore the first and only execution of the +Phase 8 loop. + +### Note on the one file the format stage rewrote + +Stage 1 changed `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, by a single cosmetic lambda reflow. That +is not a restart trigger: rewriting files is the format stage's function, and the restart rule targets a +**later** stage failing or changing files. The loop's own verification of that rewrite is stage 1v, +`csharpier check .`, which ran immediately afterward and reported zero unformatted files across all +1554 files checked. The six other owned files were already canonical and stage 1 left them untouched. + +### Note on defects found before the final pass + +Two defects were found and fixed during earlier phases, both well before Phase 8 began, so neither +caused a restart of this loop: + +- A **CS8604** nullable warning introduced by D2's first guard form, found by an intermediate build in + `[P2-T5]` and fixed there. `[P8-T4]` confirms zero `CS86xx` diagnostics remain. +- The new test file exceeding its 480-line cap at 521 lines, found in `[P6-T2]` and compacted there. + `[P8-T8]` confirms it is delivered at 480. + +Output Summary: The four stages ran **in order and consecutively** at 06-20, 06-20, 06-21, 06-22, and +06-25 UTC, each exiting 0 on its first execution. **All seven owned files' SHA-256 values are identical +between the `[P8-T1]` format pass and the `[P8-T5]` test run**, so no file changed during the pass. +**Zero loop restarts** occurred before the recorded final pass. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p7-t1/constraining-tests-final.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p7-t1/constraining-tests-final.trx new file mode 100644 index 000000000..50e015acf --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p7-t1/constraining-tests-final.trx @@ -0,0 +1,167 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p8-t5/final-quickfiler-test.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p8-t5/final-quickfiler-test.trx new file mode 100644 index 000000000..c15f7ca1c --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/trx-p8-t5/final-quickfiler-test.trx @@ -0,0 +1,8346 @@ + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/user-story-absent.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/user-story-absent.md new file mode 100644 index 000000000..624bf2b00 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/user-story-absent.md @@ -0,0 +1,50 @@ +# `user-story.md` Does Not Exist ([P7-T8]) + +Timestamp: 2026-08-28T06-17 + +Command: `ls -la /user-story.md` and +`find -maxdepth 1 -name 'user-story*'`, plus a checkbox count over every Markdown file +at the feature-folder root. +EXIT_CODE: 0 + +## Negative-evidence record + +Per the negative-evidence rule, an absence claim must be auditable: + +- **SearchScope:** `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/` + + This feature is **not** versioned — there is no `v1/`, `v2/`, or equivalent subfolder — so the feature + root is the only scope that applies. The current-version-scope-plus-feature-root fallback the + discovery rules describe collapses to a single directory here. + +- **SearchPatterns:** `user-story.md` (exact name), and `user-story*` (prefix glob, to catch a + differently suffixed variant such as `user-story.2026-08-25.md`) + +- **SearchResult:** `none` + + `ls` reports `No such file or directory`. The `find` prefix glob returns no paths. + +## Why this matters under `full-bug` + +`issue.md` carries the marker `- Work Mode: full-bug`. Under that mode `spec.md` is the **sole** +acceptance-criteria source and `user-story.md` is intentionally absent. Its absence is therefore not a +gap to be filled: **a second checkbox-bearing document in this folder would be an integrity failure**, +because acceptance criteria would then live in two places and the two could disagree without either +being detectably wrong. + +Corroborating check on the checkbox-bearing documents actually present at the feature-folder root: + +| File | Checkbox lines | Role | +| --- | --- | --- | +| `issue.md` | **0** | pointer only — its `## Acceptance Criteria` section explicitly carries no criteria of its own | +| `spec.md` | **54** | the sole acceptance-criteria source | +| `plan.2026-08-25T09-53.md` | 145 | the plan's own task checklist, not acceptance criteria | + +Exactly one document carries acceptance criteria, and its count is **54**, matching the total `[P0-T2]` +recorded and `[P9-T15]` reconciles. `issue.md` carries zero, so it cannot compete as a second source. + +Output Summary: `SearchResult: none`. `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/user-story.md` +does not exist, under either the exact name or a `user-story*` prefix glob, searched at the feature root +— the only applicable scope, as this feature is not versioned. Under `full-bug`, `spec.md` is the sole +acceptance-criteria source with **54** criteria, `issue.md` carries **0** checkboxes, and a second +checkbox-bearing document in this folder would be an integrity failure. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-ctor-fail.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-ctor-fail.md new file mode 100644 index 000000000..8123aea2e --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-ctor-fail.md @@ -0,0 +1,112 @@ +# #475 Part 2 — Fail-Before Evidence for the Constructor Test ([P6-T6]) `[expect-fail]` + +Timestamp: 2026-08-28T06-07 + +## Why a temporary revert was required + +`[P6-T3]` delivers #475 parts 1 and 2 as **one compile-valid edit set**: the `CaptureCurrentOrTests` +declaration is deleted and all five production references are repointed in the same change. There is no +intermediate state in which the constructor still degrades silently and the tree still compiles, so the +fail-before observation for `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` +cannot be taken by simply running the test at an earlier point in plan order. + +The observation was therefore taken by temporarily reverting **only the two `BreadcrumbDropDownHost` +identifier swaps**. The deletion itself was not reverted, because the replacement boundary test in +`BreadcrumbPopupBoundaryCoverageTests.Part2.cs` would then not compile. + +The reverted state was spelled as a **restored local selector private to `BreadcrumbDropDownHost.cs`**, +which is the first of the two forms this task permits: + +```csharp + // TEMPORARY ([P6-T6] fail-before observation only). Reproduces the deleted ambient-probing + // selector locally so the two seven-parameter constructor chains stop failing fast. Removed + // immediately after the observation is taken. + private static BreadcrumbPopupUiOperations TemporaryRevertCaptureCurrentOrTests() => + System.Threading.SynchronizationContext.Current == null + ? BreadcrumbPopupUiOperations.CreateForCurrentThreadTests() + : BreadcrumbPopupUiOperations.CaptureCurrent(); +``` + +The two seven-parameter constructor chains at lines 98 and 118 were pointed at it. **A third site at +line 54 was deliberately left alone**: it already read `BreadcrumbPopupUiOperations.CaptureCurrent()` +at `BASE_SHA` and is not one of the two swaps `[P6-T3]` made, so reverting it would have gone beyond +the two identifier swaps this task authorizes. That was verified against +`git show :QuickFiler/Viewers/BreadcrumbDropDownHost.cs`. + +## Step 1 — reverted-state rebuild (load-bearing) + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +**Reverted-state rebuild EXIT_CODE: 0** — `0 Error(s)`, 3 warnings, elapsed 00:00:03.04. + +The rebuild is load-bearing. `vstest.console.exe` runs the compiled assembly, not the source, so +reverting the source without rebuilding would have left the fail-fast swaps in the binary, the test +would have passed, and this task's `[expect-fail]` acceptance could never have been met. The exit code +0 is what makes the `Failed` outcome below attributable to the reverted behaviour rather than to a +stale or broken assembly. + +## Step 2 — the failing test run, in the reverted state + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException" "/Logger:trx;LogFileName=475-ctor-fail.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t6-475-ctor-fail +``` + +EXIT_CODE: 1 +ExpectedExitCode: 1 + +| Test | Outcome (reverted state) | +| --- | --- | +| `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` | **Failed** | + +Total tests 1, Failed 1. `Test Run Failed.` + +``` +Expected a to be thrown because the public constructor must refuse +to run without an owning boundary, but found : +System.ArgumentNullException: Value cannot be null. +``` + +With the ambient-probing selector restored, the constructor does **not** fail fast: under a null +ambient context the selector silently substitutes a test dispatcher, construction proceeds, and the +only exception raised is an unrelated `ArgumentNullException` from a null argument further along. That +silent substitution is precisely the degradation #475 exists to remove. + +## Step 3 — restore, and restore-state rebuild + +The two identifier swaps were **restored immediately** after the observation, by overwriting the file +with a byte-exact snapshot taken before the revert. The restored file's SHA-256 is +`990f4f6a5d55094a9266020396bc9368025ab30062154b8c3de0a9e46001889e`, identical to the snapshot taken +before the revert, and a search for `TemporaryRevertCaptureCurrentOrTests` in the file returns **0** +occurrences, so the temporary helper is gone. + +**Restore-state rebuild EXIT_CODE: 0** — `0 Error(s)`, 3 warnings, elapsed 00:00:02.79. + +## Step 4 — post-restore diff state + +| Command | Output | +| --- | --- | +| `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` — reported as **changed**, with the swaps in place | +| `git diff --numstat -- QuickFiler/Viewers/BreadcrumbDropDownHost.cs` | `2 2` — exactly two added and two deleted lines, one pair per constructor chain | +| `git diff --name-only -- QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` | both files reported as changed, in their `[P6-T3]` state, restored unchanged by the revert cycle | + +The `2 2` numstat confirms the restore left exactly the two identifier swaps and nothing else: the +temporary helper added no residual line, and no constructor argument was reordered. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t6-475-ctor-fail/475-ctor-fail.trx` + +Output Summary: EXIT_CODE 1 with `ExpectedExitCode: 1`. In the reverted state +`LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` records outcome +**Failed**, finding `ArgumentNullException` instead of the expected `InvalidOperationException` because +the restored ambient-probing selector silently substituted a test dispatcher. The reverted-state +rebuild exited **0** and the restore rebuild exited **0**, so the failure is attributable to the +reverted behaviour and not to a stale assembly. The two identifier swaps were restored immediately, the +file's SHA-256 matches its pre-revert snapshot, and the post-restore diff is exactly `2 2`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md new file mode 100644 index 000000000..95dd9cc7f --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md @@ -0,0 +1,66 @@ +# #475 Parts 1 and 2 — Fail-Fast Pass Evidence ([P6-T5]) + +Timestamp: 2026-08-28T06-05 + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException|FullyQualifiedName~CaptureCurrent_NullAndControlledContexts_FailFastAndCapture|FullyQualifiedName~Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory" "/Logger:trx;LogFileName=475-failfast-pass.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t5-475-failfast-pass +``` + +EXIT_CODE: 0 + +| Test | Outcome | +| --- | --- | +| `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` | **Passed** | +| `CaptureCurrent_NullAndControlledContexts_FailFastAndCapture` | **Passed** | +| `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` | **Passed** | + +Total tests 3, Passed 3, **Failed 0**. `Test Run Successful.` + +## What each test establishes + +- **`LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException`** — the + `public` seven-parameter `BreadcrumbDropDownHost` constructor now fails fast without an ambient + synchronization context. It supplies a **non-null** surface factory so the argument-null guard is not + reached and the operations argument is what throws. This is the one publicly observable behaviour + change in the whole change-set. +- **`CaptureCurrent_NullAndControlledContexts_FailFastAndCapture`** — the replacement boundary test in + `BreadcrumbPopupBoundaryCoverageTests.Part2.cs`. It asserts that `CaptureCurrent` under a null ambient + context throws `InvalidOperationException`, and retains the deleted test's controlled-context half: + under a `PumpSynchronizationContext` the captured operations still post to the owning thread, with + `PostCount` exactly 1. +- **`Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory`** — the constraining test that pins + the constructor argument order. + +## Why the third test passes without an ambient context + +This is the load-bearing note for `[P6-T3]`'s "do not reorder any constructor argument" instruction. + +`Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` passes a **null** surface factory and no +ambient context, and asserts `ArgumentNullException` with `ParamName` `"surfaceFactory"`. In the +`public` seven-parameter constructor's chain, the `surfaceFactory ?? throw new +ArgumentNullException(nameof(surfaceFactory))` inside `BreadcrumbPopupUiOperations.NormalizeFactory` is +evaluated **before** the operations argument that now calls `CaptureCurrent()`. C# evaluates arguments +left to right, so the argument-null guard fires first and the fail-fast capture is never reached. + +Had `[P6-T3]` reordered those arguments — placing the operations argument before the surface factory — +this test would now throw `InvalidOperationException` from `CaptureCurrent()` instead of +`ArgumentNullException`, and it would fail. It was not reordered: `[P6-T3]` changed only the +identifier `CaptureCurrentOrTests` to `CaptureCurrent` in place, a pure identifier-for-identifier swap +that left the argument list positions untouched. The `git diff` for +`QuickFiler/Viewers/BreadcrumbDropDownHost.cs` is exactly 2 added and 2 deleted lines, one pair per +constructor chain. + +`Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` lives in +`QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`, a forbidden file that +`[P1-T6]` and `[P8-T8]` independently confirm is byte-identical to `BASE_SHA`, so its pass is not the +result of an edit. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t5-475-failfast-pass/475-failfast-pass.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, all three named tests `Passed`. The third passes +without an ambient context because the surface-factory argument-null guard is evaluated before the +operations argument, which is why `[P6-T3]` must not — and did not — reorder the constructor arguments. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-lazy-fail.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-lazy-fail.md new file mode 100644 index 000000000..32a4a0c19 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-lazy-fail.md @@ -0,0 +1,80 @@ +# #475 Part 3 — Fail-Before Evidence for the Seam-Preservation Test ([P6-T4]) `[expect-fail]` + +Timestamp: 2026-08-28T06-05 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:04.29. This build carries `[P6-T3]`'s edit set: +the `CaptureCurrentOrTests` declaration is deleted and all five production references now name +`CaptureCurrent`, but `EnsureBreadcrumbLifecycle`'s argument is still **eagerly** evaluated. The +`/p:Platform=AnyCPU` substitution is the documented deviation recorded in `488-d1-fail.md`. + +## Step 2 — the failing test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow" "/Logger:trx;LogFileName=475-lazy-fail.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t4-475-lazy-fail +``` + +EXIT_CODE: 1 +ExpectedExitCode: 1 + +| Test | Outcome | +| --- | --- | +| `ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` | **Failed** | + +Total tests 1, Failed 1. `Test Run Failed.` + +## The eagerly evaluated operations argument threw before the early return could discard it + +``` +Did not expect any exception because the already-seeded lifecycle discards the operations argument, so +it must never be evaluated on a thread without an ambient context, but found +System.InvalidOperationException: Breadcrumb UI components must be constructed on an owning UI +synchronization context. + at QuickFiler.Viewers.BreadcrumbUiDispatcher.CaptureCurrent() in ...\BreadcrumbUiDispatcher.cs:line 46 + at QuickFiler.Viewers.BreadcrumbPopupUiOperations.CaptureCurrent() in ...\BreadcrumbPopupUiOperations.cs:line 81 +``` + +The stack trace is the whole point of this observation. The throw originates in +`BreadcrumbUiDispatcher.CaptureCurrent()` — reached through +`BreadcrumbPopupUiOperations.CaptureCurrent()`, which is the **argument** to +`EnsureBreadcrumbLifecycle`. C# evaluates arguments before the call, so the operations object is +constructed before `EnsureBreadcrumbLifecycle` runs a single statement, and therefore long before its +already-initialized early return can discard it. + +The viewer in this test has a **seeded** lifecycle: `InitializeBreadcrumbPipeline(provider, operations)` +was called with injected operations, so `_breadcrumbLifecycleCoordinator` is already non-null and the +three-argument `ConfigureBreadcrumbDropDown` call is a pure no-op with respect to that argument. It is +constructed and thrown away on every such call. Under an ambient-null context it now throws instead. + +**This is exactly why laziness is required rather than opportunistic.** Parts 1 and 2 of #475 replaced +the silently-degrading `CaptureCurrentOrTests` with the fail-fast `CaptureCurrent`, which is the +intended behaviour change; but without part 3 that change converts a harmless no-op into a throw and +removes the injected seam every such test relies on. The failure recorded here is the cost of parts 1 +and 2 landing without part 3, observed deliberately. + +## Red-then-green pairing + +This artifact is the **red** half of the criterion `[P6-T16]` flips, which requires evidence that the +seam-preservation test is red before the laziness change and green after. `475-pass.md`, produced by +`[P6-T8]` after `[P6-T7]` delivers part 3, is the green half. Decision D-12 authorizes that criterion +to cite both artifacts. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t4-475-lazy-fail/475-lazy-fail.trx` + +Output Summary: EXIT_CODE 1 with `ExpectedExitCode: 1`. +`ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` records outcome **Failed**, +with `InvalidOperationException` thrown from `BreadcrumbUiDispatcher.CaptureCurrent()` inside the +eagerly evaluated `EnsureBreadcrumbLifecycle` argument — before the already-initialized early return +could discard it. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-pass.md new file mode 100644 index 000000000..a9529317f --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-pass.md @@ -0,0 +1,73 @@ +# #475 — Pass-After Evidence, All Three Parts Landed ([P6-T8]) + +Timestamp: 2026-08-28T06-09 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:03.30. Warning count unchanged from the Phase 0 +baseline. The `/p:Platform=AnyCPU` substitution is the documented deviation recorded in +`488-d1-fail.md`. + +## Step 2 — the test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow|FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException|FullyQualifiedName~CaptureCurrent_NullAndControlledContexts_FailFastAndCapture" "/Logger:trx;LogFileName=475-pass.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t8-475-pass +``` + +EXIT_CODE: 0 + +| Test | Outcome | Covers | +| --- | --- | --- | +| `ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` | **Passed** | part 3, the lazy operations factory | +| `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` | **Passed** | part 2, the constructor-chain swap | +| `CaptureCurrent_NullAndControlledContexts_FailFastAndCapture` | **Passed** | part 1, the deletion and its replacement boundary test | + +Total tests 3, Passed 3, **Failed 0**. `Test Run Successful.` + +## What changed against [P6-T4] + +`ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` moved from **Failed** to +**Passed**. `[P6-T4]` recorded it throwing `InvalidOperationException` from +`BreadcrumbUiDispatcher.CaptureCurrent()`, reached through the **eagerly evaluated** +`EnsureBreadcrumbLifecycle` argument, before the already-initialized early return could discard it. + +`[P6-T7]` changed that parameter to a `Func` and moved its single +invocation to **after** the early return. On a viewer whose lifecycle is already seeded the factory is +therefore never invoked at all, the no-op call stays a no-op, and the injected seam is preserved. + +The other two tests were already green from `[P6-T5]` and stay green, which confirms part 3 did not +regress parts 1 and 2: the constructor still fails fast without an ambient context, and `CaptureCurrent` +still throws under a null context while capturing a controlled one normally. + +## Red-then-green pairing + +This artifact is the **green** half of the criterion `[P6-T16]` flips. `475-lazy-fail.md`, produced by +`[P6-T4]`, is the red half. Decision D-12 authorizes that criterion to cite both, as one of exactly two +multi-artifact citations in this plan. + +## All three parts of #475 have now landed + +1. **Part 1** — `BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` is deleted; a repository-wide + search of tracked `.cs` files returns zero hits. `CreateForCurrentThreadTests` survives on both + `BreadcrumbPopupUiOperations` and `BreadcrumbUiDispatcher`, unchanged. +2. **Part 2** — both `BreadcrumbDropDownHost` seven-parameter constructor chains supply + `CaptureCurrent()`, with no argument reordered. +3. **Part 3** — `EnsureBreadcrumbLifecycle` takes a factory delegate, invoked exactly once after the + early return, with all three call sites updated. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t8-475-pass/475-pass.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, all three named tests `Passed`. The seam-preservation +test is green where `[P6-T4]` observed it red, because the operations argument is now evaluated only +after the already-initialized early return. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-fail.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-fail.md new file mode 100644 index 000000000..72038a1de --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-fail.md @@ -0,0 +1,91 @@ +# D1 — Fail-Before Evidence ([P1-T4]) `[expect-fail]` + +Timestamp: 2026-08-28T05-27 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:03.26. `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` +was rewritten by this build, so the test run below exercised the new source rather than a stale +assembly. + +### DOCUMENTED DEVIATION — project-level platform name + +This task's text specifies `"/p:Platform=Any CPU"`. That value was tried first and **failed**: + +``` +Microsoft.Common.CurrentVersion.targets(843,5): error : The BaseOutputPath/OutputPath property is +not set for project 'QuickFiler.Test.csproj'. ... Configuration='Debug' Platform='Any CPU'. You may +be seeing this message because you are trying to build a project without a solution file, and have +specified a non-default Configuration or Platform that doesn't exist for this project. +``` + +`Any CPU` (with a space) is the **solution-level** platform name. The project's own platform name is +`AnyCPU` (no space): `QuickFiler.Test.csproj:12` declares +`AnyCPU` and the output path is set by the +condition at `:32`, `'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'`. A direct project build must +therefore use `AnyCPU`, and the substitution above is the minimal change that lets the stated command +run at all. + +This is safe under decision D-2: this build is **not** an analyzer or nullable gate, and its only +purpose is to produce a fresh `QuickFiler.Test.dll`. The two msbuild gates in this plan +(`[P0-T10]`/`[P0-T11]` and `[P8-T3]`/`[P8-T4]`) build `TaskMaster.sln`, where `"Any CPU"` is the +correct name, and they are unaffected. The same substitution applies to every `/t:Build` invocation +in this plan. + +## Step 2 — the failing test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement" "/Logger:trx;LogFileName=488-d1-fail.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p1-t4-d1-fail +``` + +EXIT_CODE: 1 +ExpectedExitCode: 1 + +| Test | Outcome | +| --- | --- | +| `ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` | **Failed** | + +Total tests 1, Failed 1, elapsed 2.1370 seconds. `Test Run Failed.` + +## The failing assertion is the FIRST one — the discriminating observation + +``` +Expected a to be thrown because the outgoing host must already be +disposed when the replacement is constructed, but no exception was thrown. +``` + +The stack trace attributes the failure to +`ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 80`, which is the +`theme.Should().Throw(...)` statement — the **first** of the three +assertions and the `SetTheme` disposal-guard assertion named as the discriminating observation in +decision D-10a. + +This is the required attribution. `SetTheme` on the captured outgoing host reaches the host's +`ThrowIfDisposed()` guard and throws once the host is disposed, and returns silently while it is not. +Against the unfixed code the outgoing host has not been disposed at the moment the replacement is +constructed, so no exception is thrown and the assertion fails. That is the product defect. + +Neither of the other two assertions was reached, so neither could be the cause. Had the failure been +attributed to the `Close` assertion or to the post-drain `DropDown.IsDisposed` assertion, that would +have indicated a defect in the test rather than evidence of the product defect, because per decision +D-10a both of those observations hold in the pre-fix state as well and are corroborating rather than +discriminating. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t4-d1-fail/488-d1-fail.trx` + +Output Summary: EXIT_CODE 1 with `ExpectedExitCode: 1`. The D1 regression test +`ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` records outcome +**Failed** against the unfixed code, and the failure is attributed to the first assertion — the +discriminating `SetTheme` disposal-guard observation — with the message "no exception was thrown". +The intermediate build that produced the assembly exited 0 and is not a gate. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md new file mode 100644 index 000000000..4c3a678b7 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md @@ -0,0 +1,87 @@ +# D1 — Pass-After Evidence ([P1-T6]) + +Timestamp: 2026-08-28T05-29 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:03.21. + +The `/p:Platform=AnyCPU` substitution for the task's stated `"/p:Platform=Any CPU"` is the documented +deviation recorded in full in `488-d1-fail.md`: `Any CPU` is the solution-level platform name and a +direct project build requires the project's own name `AnyCPU`, declared at +`QuickFiler.Test.csproj:12`. This build is not an analyzer or nullable gate. + +## Step 2 — the test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement|FullyQualifiedName~ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces|FullyQualifiedName~ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost" "/Logger:trx;LogFileName=488-d1-pass.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p1-t6-d1-pass +``` + +EXIT_CODE: 0 + +| Test | Outcome | +| --- | --- | +| `ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` | **Passed** | +| `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` | **Passed** | +| `ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost` | **Passed** | + +Total tests 3, Passed 3, **Failed 0**. `Test Run Successful.` + +## The discriminating assertion now holds + +`[P1-T4]` observed the **first** assertion failing, with the message "Expected a +`` to be thrown ... but no exception was thrown", attributed to the +`theme.Should().Throw(...)` statement. That is the `SetTheme` disposal-guard +observation identified by decision D-10a as the discriminating one. + +After `[P1-T5]`'s fix the same assertion **passes**: `SetTheme("dark")` on the captured outgoing host +now reaches the host's `ThrowIfDisposed()` guard and throws `ObjectDisposedException`, because the +outgoing host is disposed by statement order before the replacement is constructed. The two +corroborating assertions — `Close` returning `false` and, after the drain, `DropDown.IsDisposed` being +`true` — also hold, as they did before the fix. + +The post-drain `DropDown` disposal assertion was **not** the sole failing assertion at any point, so +the `d1-drain-blocker.md` branch of this task was not triggered and no wait, sleep, or delay was +added. + +## Unmodified-file check (required by the plan's unmodified-file rule) + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs +``` + +**Output: no lines.** + +This is what establishes the second conjunct of the two criteria `[P1-T13]` and `[P1-T14]` flip. Both +say the named test passes **unmodified**, and a `Passed` outcome alone would also be produced by a +test that had been edited into passing. The empty diff establishes that neither +`QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` nor +`QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs` differs by a single byte +from its state at `BASE_SHA` `12465043e052fce66a1861bf1ddd037a1aa81afc`. + +In particular, `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` passes with its +`host.Dispose()` `Times.Once()` assertion intact. That assertion is on a +`Mock`, which is not idempotent, and it stays green because `[P1-T5]`'s type +test names the **concrete** `BreadcrumbDropDownHost`: a mock host installed by an earlier +three-argument `ConfigureBreadcrumbDropDown` call fails that type test and is not disposed by the new +statement. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t6-d1-pass/488-d1-pass.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, all three named tests `Passed`. The discriminating +`SetTheme` assertion now holds where `[P1-T4]` observed it failing. `git diff --name-only ` +over `BreadcrumbDropDownIntegrationTests.cs` and `QfcItemControllerBreadcrumbDropDownTests.cs` +produces **no output lines**, establishing byte-identity for both. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-fail.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-fail.md new file mode 100644 index 000000000..3137af1f5 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-fail.md @@ -0,0 +1,62 @@ +# D2 — Fail-Before Evidence ([P2-T3]) `[expect-fail]` + +Timestamp: 2026-08-28T05-33 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:02.14. The `/p:Platform=AnyCPU` substitution +for the task's stated `"/p:Platform=Any CPU"` is the documented deviation recorded in full in +`488-d1-fail.md`. + +## Step 2 — the failing test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost" "/Logger:trx;LogFileName=488-d2-fail.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t3-d2-fail +``` + +EXIT_CODE: 1 +ExpectedExitCode: 1 + +| Test | Outcome | +| --- | --- | +| `ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` | **Failed** | + +Total tests 1, Failed 1, elapsed 154 ms. `Test Run Failed.` + +## The observed applied-theme sequence was EMPTY — which is the defect + +``` +Expected host.ThemesApplied to be equal to {"dark"}, but found empty collection. +``` + +The `RecordingHost` recorded **no theme at all**. Its `ThemesApplied` list is empty, not merely +wrong-valued and not merely short. + +That is the mechanism of D2, observed directly. The test queues `ConfigureHost` and deliberately does +not drain, then calls `SetTheme("dark")`. At that moment the coordinator's `_openCoordinator` is still +null, because the lambda that constructs it is sitting in the queue, so +`BreadcrumbItemViewerLifecycleCoordinator.SetTheme`'s second forward, +`DropDownHost?.SetTheme(theme)`, null-propagates and reaches nothing. Draining afterwards adopts the +host, but nothing replays the theme onto it, so the theme is lost outright rather than delayed. + +The assertion is an exact-sequence equality, so it would equally have caught a duplicated replay or an +extra theme; what it observed is the empty collection. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t3-d2-fail/488-d2-fail.trx` + +Output Summary: EXIT_CODE 1 with `ExpectedExitCode: 1`. The D2 regression test +`ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` records outcome **Failed** +against the unfixed code, with the observed applied-theme sequence **empty** — the theme set while the +host-configuration post was still queued was lost entirely. The intermediate build that produced the +assembly exited 0 and is not a gate. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md new file mode 100644 index 000000000..152b605ce --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md @@ -0,0 +1,84 @@ +# D2 — Interaction With the Controller Theme Tests ([P2-T6]) + +Timestamp: 2026-08-28T05-36 + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession|FullyQualifiedName~ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily|FullyQualifiedName~ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam" "/Logger:trx;LogFileName=488-d2-interaction.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t6-d2-interaction +``` + +EXIT_CODE: 0 + +| Test | Outcome | +| --- | --- | +| `ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession` | **Passed** | +| `ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily` | **Passed** | +| `ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam` | **Passed** | + +Total tests 3, Passed 3, **Failed 0**. `Test Run Successful.` + +## Why the pooled-reuse "no stale pooled theme is replayed" assertion survives the retained-theme replay + +This is the highest-risk interaction in the change-set and the reasoning is recorded here explicitly +rather than inferred from the green result. + +`ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession` exercises a +pooled-reuse sequence and closes with the assertion labelled in its own source as +"Assert no stale pooled theme is replayed": + +```csharp + // Act pooled reuse with a changed theme and synchronous readiness + scope.Viewer.ResetBreadcrumb(); + darkMode = false; + ... + // Assert no stale pooled theme is replayed + reused.Should().BeTrue(); + ThemeMessages(reusedSurface).Should().Equal(Theme("light")); +``` + +The concern the assertion guards against is that a **stale** theme — the `"dark"` value from the first +session — reaches the surface after the pooled viewer is reused with `darkMode = false`. + +**The retained value is overwritten before the re-attach, so the replay carries the current theme +rather than a stale one.** The sequence is: the first session sets the theme to `"dark"`, so +`_retainedTheme` holds `"dark"`; the test then calls `ResetBreadcrumb()` and flips `darkMode` to +`false`; the controller's re-attach path issues a fresh `SetBreadcrumbTheme("light")`, and +`BreadcrumbItemViewerLifecycleCoordinator.SetTheme` assigns `_retainedTheme = theme` **before** its two +forwarding calls, so the retained value becomes `"light"` at that moment. Any subsequent replay in +`ConfigureHost`'s newly-adopted branch therefore carries `"light"`. + +The assertion is an exact-sequence equality against `Theme("light")`, so it would have failed on a +stale `"dark"` replay and would equally have failed on a duplicated `"light"` entry. It records +exactly one `"light"` message, which is what the delivered behaviour produces. + +Two structural properties reinforce this. First, the replay is confined to the **newly-adopted** +branch; the `UpdateRequestProviders` branch performs no theme call, so a reconfigure with the same +host adds nothing. Second, the assignment of `_retainedTheme` precedes the forwards inside `SetTheme`, +so the retained value can never lag the value the caller most recently requested. + +## Unmodified-file check (required by the plan's unmodified-file rule) + +Command: + +``` +git diff --name-only 12465043e052fce66a1861bf1ddd037a1aa81afc -- QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs +``` + +**Output: no lines.** + +The file is byte-identical to its state at `BASE_SHA` `12465043e052fce66a1861bf1ddd037a1aa81afc`. This +is what establishes the second conjunct of the two criteria `[P2-T11]` and `[P2-T12]` flip, each of +which says the named tests pass **unmodified**. A `Passed` outcome alone would also be produced by a +test that had been edited into passing; the empty diff rules that out. All three tests named in this +task live in that one file. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t6-d2-interaction/488-d2-interaction.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, all three named tests `Passed`. The pooled-reuse +"no stale pooled theme is replayed" assertion survives because `_retainedTheme` is overwritten by the +subsequent `SetBreadcrumbTheme("light")` before the re-attach, so the replay carries the current theme. +`git diff --name-only -- QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs` +produces **no output lines**. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-pass.md new file mode 100644 index 000000000..04855d188 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-pass.md @@ -0,0 +1,85 @@ +# D2 — Pass-After Evidence ([P2-T5]) + +Timestamp: 2026-08-28T05-35 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:02.94. The `/p:Platform=AnyCPU` substitution is +the documented deviation recorded in full in `488-d1-fail.md`. + +### A nullable warning was raised and fixed before this gate was recorded + +The first build of `[P2-T4]`'s edit reported **4** warnings rather than 3. The additional one was: + +``` +QuickFiler\Viewers\BreadcrumbItemViewerLifecycleCoordinator.cs(154,39): warning CS8604: Possible null +reference argument for parameter 'theme' in 'void IBreadcrumbDropDownHost.SetTheme(string theme)'. +``` + +`BreadcrumbItemViewerLifecycleCoordinator.cs` carries `#nullable enable` on its first line, so it +participates in nullable analysis, and `/p:TreatWarningsAsErrors=true` — the `[P8-T4]` gate command — +would have promoted that `CS86xx` warning to a **build error**. The cause is that the .NET Framework +4.8.1 reference assemblies carry no `NotNullWhen` post-condition attribute on +`string.IsNullOrWhiteSpace`, so a bare `if (!string.IsNullOrWhiteSpace(_retainedTheme))` does not +establish a non-null flow state for the argument. + +The guard was rewritten to capture the field into a local and test it explicitly: + +```csharp +string? retained = _retainedTheme; +if (retained != null && !string.IsNullOrWhiteSpace(retained)) +{ + host.SetTheme(retained); +} +``` + +The `retained != null` conjunct supplies the flow state the analyzer needs and the +`IsNullOrWhiteSpace` conjunct retains the whitespace half of the guard, so the delivered code is still +guarded against **both** null and whitespace as the criterion requires. No null-forgiving `!` operator +and no warning suppression was used. The rebuild after that change reported **0 occurrences of +CS8604** and returned to 3 warnings, all three pre-existing. + +## Step 2 — the test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost|FullyQualifiedName~HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder|FullyQualifiedName~ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks" "/Logger:trx;LogFileName=488-d2-pass.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t5-d2-pass +``` + +EXIT_CODE: 0 + +| Test | Outcome | +| --- | --- | +| `ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` | **Passed** | +| `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder` | **Passed** | +| `ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks` | **Passed** | + +Total tests 3, Passed 3, **Failed 0**. `Test Run Successful.` + +## Why the two constraining tests stayed green + +- `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder` pins the subscription order + `add`/`remove` across a host swap. It never calls `SetTheme`, so `_retainedTheme` stays null + throughout and the replay guard short-circuits on its `retained != null` conjunct. The replay adds + no `EventOperations` entry in any case, because it calls `SetTheme` rather than subscribing. +- `ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks` reconfigures with the **same** host, so + `ConfigureHost` takes the `UpdateRequestProviders` `else` branch. That branch performs no theme call + at all, by design, which is what keeps the replay from being observable as a duplicated callback. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t5-d2-pass/488-d2-pass.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, all three named tests `Passed`. The D2 regression test +now records `ThemesApplied` as exactly `{"dark"}` where `[P2-T3]` observed an empty collection. A +CS8604 nullable warning introduced by the first form of the replay guard was found and fixed before +this gate was recorded, so the delivered guard is analyzer-clean and still checks both null and +whitespace. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-fail.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-fail.md new file mode 100644 index 000000000..88533deca --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-fail.md @@ -0,0 +1,79 @@ +# D3 — Fail-Before Evidence ([P3-T2]) `[expect-fail]` + +Timestamp: 2026-08-28T05-38 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:02.14. The `/p:Platform=AnyCPU` substitution is +the documented deviation recorded in full in `488-d1-fail.md`. + +## Step 2 — the failing test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException|FullyQualifiedName~InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator" "/Logger:trx;LogFileName=488-d3-fail.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p3-t2-d3-fail +``` + +EXIT_CODE: 1 +ExpectedExitCode: 1 + +| Test | Outcome | +| --- | --- | +| `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` | **Failed** | +| `InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` | **Passed** | + +Total tests 2, Passed 1, Failed 1. `Test Run Failed.` + +## The negative case — the required failing observation + +``` +Expected a to be thrown because a second, different provider must +be refused rather than silently discarded, but no exception was thrown. +``` + +Against the unfixed code, `InitializeBreadcrumbPipeline(provider, operations)` opens with a plain +already-initialized early return: + +```csharp +if (BreadcrumbCoordinator != null) +{ + return; +} +``` + +That return does not inspect the supplied provider at all, so a second call carrying a genuinely +different `IFolderHierarchyProvider` returns silently and the new provider is **discarded without any +diagnostic**. No exception is thrown, the assertion fails, and that is the defect. + +## The positive case already passes, and its outcome is recorded as observed + +`InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` records **Passed** +against the unfixed code. This task's acceptance explicitly anticipates that: "the positive case may +already pass and its outcome is recorded as observed." + +It passes for a reason that will change under the fix. Today it passes because the blanket early +return refuses *every* second call, including one carrying the same provider, so nothing throws and +the coordinator is left in place. After `[P3-T3]` it will pass because the guard's reference +comparison finds the supplied provider reference-equal to the retained one and takes the +return-without-effect branch deliberately. The observable outcome is identical either way, which is +precisely why this case cannot discriminate and why the negative case is the one that carries the +fail-before evidence. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t2-d3-fail/488-d3-fail.trx` + +Output Summary: EXIT_CODE 1 with `ExpectedExitCode: 1`. +`InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` records outcome +**Failed** against the unfixed code, with "no exception was thrown" — the second, different provider is +silently discarded by the blanket already-initialized early return. The positive case +`InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` records **Passed**, +as observed. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-pass.md new file mode 100644 index 000000000..63f0a4f8f --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-pass.md @@ -0,0 +1,64 @@ +# D3 — Pass-After Evidence ([P3-T4]) + +Timestamp: 2026-08-28T05-39 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:03.16. The `/p:Platform=AnyCPU` substitution is +the documented deviation recorded in full in `488-d1-fail.md`. The warning count is unchanged from the +Phase 0 baseline, so `[P3-T3]`'s edit introduced no new diagnostic. + +## Step 2 — the test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException|FullyQualifiedName~InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator|FullyQualifiedName~SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions" "/Logger:trx;LogFileName=488-d3-pass.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p3-t4-d3-pass +``` + +EXIT_CODE: 0 + +| Test | Outcome | +| --- | --- | +| `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` | **Passed** | +| `InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` | **Passed** | +| `SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions` | **Passed** | + +Total tests 3, Passed 3, **Failed 0**. `Test Run Successful.` + +## What changed against [P3-T2] + +The negative case moved from **Failed** to **Passed**. `[P3-T2]` recorded "no exception was thrown" +when a second, distinct strict provider mock was supplied; after `[P3-T3]`'s fix the call throws +`InvalidOperationException`. The assertion additionally requires that the thrown instance is **not** an +`ObjectDisposedException`, which rules out a D5 disposal throw satisfying a D3 assertion by inheritance +— `ObjectDisposedException` derives from `InvalidOperationException`. The instance thrown is a plain +`InvalidOperationException`, so that exclusion holds. + +The positive case remained **Passed** across the change, but for a different reason on each side, as +`488-d3-fail.md` records: before the fix a blanket early return refused every second call; after the +fix the guard's reference comparison finds the supplied provider reference-equal to the retained one +and takes the return-without-effect branch deliberately. `viewer.BreadcrumbCoordinator` is asserted +`BeSameAs` its pre-repeat value, so the retained coordinator is confirmed unchanged rather than merely +non-null. + +`SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions` is the reference-comparison +precedent D3 mirrors. It stays green because `[P3-T3]` did not touch +`BreadcrumbItemViewerLifecycleCoordinator.SetBridgeCoordinator` at all; `[P3-T5]` records the +corroborating diff evidence for that. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t4-d3-pass/488-d3-pass.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, all three named tests `Passed`. The D3 negative case +now throws `InvalidOperationException` — and not an `ObjectDisposedException` — where `[P3-T2]` +observed no exception at all; the positive case still returns without effect and keeps the same +breadcrumb coordinator instance. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-fail.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-fail.md new file mode 100644 index 000000000..2189d4585 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-fail.md @@ -0,0 +1,76 @@ +# D4 — Fail-Before Evidence ([P4-T3]) `[expect-fail]` + +Timestamp: 2026-08-28T05-45 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:02.17. The `/p:Platform=AnyCPU` substitution is +the documented deviation recorded in full in `488-d1-fail.md`. + +## Step 2 — the failing test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic|FullyQualifiedName~InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic" "/Logger:trx;LogFileName=488-d4-fail.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t3-d4-fail +``` + +EXIT_CODE: 1 +ExpectedExitCode: 1 + +| Test | Outcome | +| --- | --- | +| `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic` | **Failed** | +| `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` | **Failed** | + +Total tests 2, **Failed 2**. `Test Run Failed.` + +## No exception was thrown — the guard does not yet exist + +Both failures report the same shape. For the different-context case: + +``` +Expected a to be thrown because a different non-null context is off +the viewer's owning boundary too, but no exception was thrown. +``` + +**"No exception was thrown" is the load-bearing observation.** Against the unfixed code +`InitializeBreadcrumbPipeline(provider, operations)` performs no boundary check at all: it opens with +the D3 provider guard and proceeds straight to building the lifecycle coordinator, regardless of which +synchronization context is current. Both calls therefore succeed silently from off the viewer's owning +boundary, which is exactly the undeclared, unenforced affinity that D4 exists to close. + +Both cases failing, rather than one, is itself informative: the ambient-null case and the +different-non-null-context case fail identically today because neither is distinguished from the +correct-boundary case by any code. + +## Why the two-argument overload is used + +Per decision D-8, both tests call the **two-argument** overload with injected operations. The +one-argument overload evaluates `BreadcrumbPopupUiOperations.CaptureCurrent()` as an **eager +argument**, and that method already throws `InvalidOperationException` under a null ambient context. A +D4 test written against the one-argument overload would therefore have thrown here — and passed — +**before the guard existed**, for a reason entirely unrelated to the guard. The observation +"no exception was thrown" is only available because the operations object is injected rather than +captured. + +For the same reason each assertion additionally requires the exception message to contain the token +`InitializeBreadcrumbPipeline`. The dispatcher's own ambient-context message does not name the +operation, so that clause keeps a future accidental capture from satisfying the assertion. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t3-d4-fail/488-d4-fail.trx` + +Output Summary: EXIT_CODE 1 with `ExpectedExitCode: 1`. Both D4 regression tests — +`InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic` and +`InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` — record outcome +**Failed** against the unfixed code, both with **no exception thrown**, which confirms the affinity +guard does not yet exist. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-full-suite.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-full-suite.md new file mode 100644 index 000000000..54991df85 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-full-suite.md @@ -0,0 +1,83 @@ +# D4 — Full `QuickFiler.Test` Assembly Under the Affinity Guard ([P4-T8]) + +Timestamp: 2026-08-28T05-49 + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/Logger:trx;LogFileName=488-d4-full-suite.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t8-d4-full-suite +``` + +EXIT_CODE: 0 + +## Counts + +| Measure | Value | +| --- | --- | +| Total | **1198** | +| Passed | **1198** | +| Failed | **0** | +| Skipped | **0** | +| Total time | 9.2960 seconds | +| Run result | `Test Run Successful.` | + +## Observed failing-test-name set + +``` +(empty) +``` + +## Subset comparison against `BASELINE_FAILURE_SET` + +`[P0-T12]` recorded `BASELINE_FAILURE_SET` as **empty**, so the subset condition reduces to requiring +that the observed failing set is also empty. It is. + +**No test name outside the baseline failure set appears in the observed set, because the observed set +is empty.** The constraint C6 escalation is therefore **not** triggered: no +`affinity-guard-blocker.md` was written, no test file outside the three owned ones was edited, and the +guard was not weakened to a null check. + +## Count reconciliation + +The total rose from the baseline's **1192** to **1198**, a delta of **+6**. That is exactly the number +of test methods this feature has added so far, and every one of them passes: + +| Defect unit | Added tests | Names | +| --- | --- | --- | +| D1 | 1 | `ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` | +| D2 | 1 | `ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` | +| D3 | 2 | `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException`, `InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` | +| D4 | 2 | `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic`, `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` | + +The remaining four planned methods — one for D5 and three for #475, one of which replaces a deleted +test — land in Phases 5 and 6, bringing the net new-test delta to the **+9** that `[P8-T5]` checks. + +## This settles the [P4-T2] discrepancy empirically + +`[P4-T2]` recorded a discrepancy: the independently re-derived construction-site set contains **six +sites absent from constraint C6**, of which five are genuine additions to the tree and one is this +feature's own new file. One of those five, `Controllers/EfcItemController.CleanupTests.cs:41`, +installs **no synchronization context at all** before constructing the viewer, and so does not satisfy +the install-before-construct property C6 exists to protect. + +`[P4-T2]`'s static analysis bounded that risk — none of the four affected files names any of the +guarded members, and a viewer with a null `UiSyncContext` meets the guard's null escape — but could +not settle it, because a guarded member could in principle be reached indirectly through controller +code rather than named in the test file. + +**This run settles it.** The entire assembly, including every one of the nineteen executable +construction sites and all tests reachable from them, runs green against the delivered guard. No test +in `EfcItemController.CleanupTests.cs`, `EfcItemControllerTests.cs`, `BreadcrumbBridgeRouterTests.cs`, +or `QfcItemController.EventWiringTests.cs` fails, so no indirect path from those sites reaches the +guard in a state that would throw. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t8-d4-full-suite/488-d4-full-suite.trx` + +Output Summary: EXIT_CODE 0. **1198 total, 1198 passed, 0 failed** across the whole `QuickFiler.Test` +assembly. The observed failing-test-name set is **empty** and is therefore a subset of the empty +`BASELINE_FAILURE_SET`; no constraint C6 escalation was triggered. The +6 delta against the 1192-test +baseline accounts for exactly the six regression tests added so far. This run is the empirical proof +that the affinity guard breaks no existing harness, including the five sites `[P4-T2]` recorded as +absent from constraint C6. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-pass.md new file mode 100644 index 000000000..80b117b61 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-pass.md @@ -0,0 +1,80 @@ +# D4 — Pass-After Evidence ([P4-T6]) + +Timestamp: 2026-08-28T05-47 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:03.05. The warning count is unchanged from the +Phase 0 baseline, so `[P4-T4]` and `[P4-T5]` introduced no new diagnostic. The `/p:Platform=AnyCPU` +substitution is the documented deviation recorded in full in `488-d1-fail.md`. + +## Step 2 — the test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic|FullyQualifiedName~InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic" "/Logger:trx;LogFileName=488-d4-pass.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t6-d4-pass +``` + +EXIT_CODE: 0 + +| Test | Outcome | +| --- | --- | +| `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic` | **Passed** | +| `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` | **Passed** | + +Total tests 2, Passed 2, **Failed 0**. `Test Run Successful.` + +## What changed against [P4-T3] + +Both tests moved from **Failed** to **Passed**. `[P4-T3]` recorded "no exception was thrown" for each; +after `[P4-T4]` added `ThrowIfOffUiBoundary` and `[P4-T5]` invoked it as the first statement of +`InitializeBreadcrumbPipeline(provider, operations)`, both calls now throw +`InvalidOperationException`. + +Each assertion carries two further clauses that the pass had to satisfy beyond the exception type: + +- **The message names the operation.** Each test requires the thrown message to contain the token + `InitializeBreadcrumbPipeline`. The delivered helper interpolates its `operation` parameter, and + `[P4-T5]` passes `nameof(InitializeBreadcrumbPipeline)`, so the requirement is met by the guard's + own diagnostic and not by an incidental exception from elsewhere. This clause is what rules out the + dispatcher's ambient-context message, which does not name the operation. +- **The instance is not an `ObjectDisposedException`.** Per decision D-9 that type derives from + `InvalidOperationException`, so without the exclusion a D5 disposal throw would satisfy a D4 + assertion. Both passes clear the exclusion. + +## The second case proves reference equality rather than a null check + +`InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` installs a +**different, non-null** `SynchronizationContext` and asserts the same throw. A guard implemented as a +bare `SynchronizationContext.Current == null` check would let that call through and the test would +fail. It passes, which establishes that the delivered comparison is reference equality against the +viewer's captured `UiSyncContext`. + +That distinction is the substance of the D4 design: a continuation resumed without the captured +context can land on a recycled pool thread whose managed thread id matches the owning one, so neither +a null check nor a thread-identity comparison is a boundary proof. + +## Scope of what this evidence establishes + +These two tests **prove the guard fires. They do not prove the race is absent.** A true two-thread +data race cannot be reproduced deterministically under the repository's ban on sleeps, timer delays, +and wall-clock waits: two threads with no barrier offer no way to force the interleaving. Both tests +are single-threaded and carry that statement in their own XML doc comments. No criterion in `spec.md` +asserts that the race is eliminated. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t6-d4-pass/488-d4-pass.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, both named tests `Passed`. The affinity guard now +throws `InvalidOperationException` naming `InitializeBreadcrumbPipeline` where `[P4-T3]` observed no +exception at all, for both a null ambient context and a different non-null one — the latter proving +the comparison is reference equality rather than a null check. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-fail.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-fail.md new file mode 100644 index 000000000..dba35928a --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-fail.md @@ -0,0 +1,74 @@ +# D5 — Fail-Before Evidence ([P5-T2]) `[expect-fail]` + +Timestamp: 2026-08-28T05-51 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:02.13. The `/p:Platform=AnyCPU` substitution is +the documented deviation recorded in full in `488-d1-fail.md`. + +## Step 2 — the failing test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException" "/Logger:trx;LogFileName=488-d5-fail.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p5-t2-d5-fail +``` + +EXIT_CODE: 1 +ExpectedExitCode: 1 + +| Test | Outcome | +| --- | --- | +| `InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException` | **Failed** | + +Total tests 1, Failed 1. `Test Run Failed.` + +## The call SUCCEEDED against a disposed viewer — which is the defect + +``` +Expected a to be thrown because no breadcrumb resource may be created +after teardown has begun, but no exception was thrown. +``` + +The test disposes a real `ItemViewer` and then calls `InitializeBreadcrumbPipeline(provider, +operations)` on it. Against the unfixed code that call **completes normally**. Nothing in +`EnsureBreadcrumbResourceOwnership` inspects the viewer's teardown state, so it proceeds to +`components ??= new Container()` and adds a `BreadcrumbResourceOwner` to a container belonging to a +viewer whose own `Dispose(bool)` has already run. That container is never disposed, and the resource +owner it holds is never invoked, so the breadcrumb pipeline is built against a dead viewer and leaks. + +"No exception was thrown" is therefore the load-bearing observation, not merely the absence of the +expected type. + +## The throw is attributable to the disposal guard, not to the D4 affinity guard + +`[P4-T5]` has already placed `ThrowIfOffUiBoundary` as the first statement of +`EnsureBreadcrumbResourceOwnership` and of `InitializeBreadcrumbPipeline`, so it was live during this +run. It did not fire and could not have masked the observation: the test disposes the viewer and makes +the call on the **same ambient context** the `ViewerScope` installed before constructing it, so +`SynchronizationContext.Current` is reference-equal to the viewer's captured `UiSyncContext` and the +affinity guard returns without effect. + +That is why the observed result is "no exception was thrown" rather than an +`InvalidOperationException` from the affinity guard, and it is what makes the `ObjectDisposedException` +this test will assert after `[P5-T3]` attributable to the disposal guard alone. + +The assertion names `ObjectDisposedException` rather than its base `InvalidOperationException`, so the +D4 guard's own throw could not satisfy it even if the boundary were violated. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t2-d5-fail/488-d5-fail.trx` + +Output Summary: EXIT_CODE 1 with `ExpectedExitCode: 1`. The D5 regression test +`InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException` records outcome +**Failed** against the unfixed code, with **no exception thrown** — the call succeeded against a +disposed viewer, creating a container and a resource owner after teardown had begun. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-pass.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-pass.md new file mode 100644 index 000000000..59fed7ac9 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-pass.md @@ -0,0 +1,73 @@ +# D5 — Pass-After Evidence ([P5-T4]) + +Timestamp: 2026-08-28T05-52 + +## Step 1 — intermediate build + +Command (under `pwsh -NoProfile`, worktree root): + +``` +MSBuild.exe QuickFiler.Test\QuickFiler.Test.csproj /t:Build /m /p:Configuration=Debug /p:Platform=AnyCPU /nologo +``` + +GATE: none (intermediate build) +EXIT_CODE: 0 — `0 Error(s)`, 3 warnings, elapsed 00:00:03.05. Warning count unchanged from the Phase 0 +baseline. The `/p:Platform=AnyCPU` substitution is the documented deviation recorded in full in +`488-d1-fail.md`. + +## Step 2 — the test run + +Command (under `pwsh -NoProfile`, worktree root): + +``` +vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation "/TestCaseFilter:FullyQualifiedName~InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException|FullyQualifiedName~DisposedCoordinator_SetBridgeCoordinatorThrows" "/Logger:trx;LogFileName=488-d5-pass.trx" /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p5-t4-d5-pass +``` + +EXIT_CODE: 0 + +| Test | Outcome | +| --- | --- | +| `InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException` | **Passed** | +| `DisposedCoordinator_SetBridgeCoordinatorThrows` | **Passed** | + +Total tests 2, Passed 2, **Failed 0**. `Test Run Successful.` + +## What changed against [P5-T2] + +The D5 test moved from **Failed** to **Passed**. `[P5-T2]` recorded "no exception was thrown" — the +call completed normally against a disposed viewer, creating a container and adding a resource owner +after teardown had begun. After `[P5-T3]`'s fix, `EnsureBreadcrumbResourceOwnership` throws +`ObjectDisposedException` when the viewer reports `IsDisposed` or `Disposing`, before any container is +created and before any `BreadcrumbResourceOwner` is added. + +Both of the test's assertions hold: + +- The thrown type is `ObjectDisposedException`, asserted by name rather than by its base + `InvalidOperationException`, so the D4 affinity guard's own throw could not have satisfied it. +- `scope.Viewer.BreadcrumbCoordinator` is **null** afterwards, which pins that no pipeline was built + against the dead viewer. The throw happens inside `EnsureBreadcrumbResourceOwnership`, which + `EnsureBreadcrumbLifecycle` calls before constructing the lifecycle coordinator, so the exception + propagates out of `InitializeBreadcrumbPipeline` before `BreadcrumbCoordinator` is ever assigned. + +## The throw is attributable to the disposal guard alone + +`ThrowIfOffUiBoundary` was already live in this member from `[P4-T5]` and did not fire: the test +disposes the viewer and makes the call on the same ambient context the `ViewerScope` installed before +constructing it, so `SynchronizationContext.Current` is reference-equal to the captured +`UiSyncContext` and the affinity guard returns without effect. `[P5-T2]` confirmed this empirically by +observing no exception at all rather than an `InvalidOperationException` from the affinity guard. + +## `DisposedCoordinator_SetBridgeCoordinatorThrows` is the precedent D5 mirrors + +That existing test pins the `ObjectDisposedException` contract on +`BreadcrumbItemViewerLifecycleCoordinator` after its own disposal. It stays green, which confirms D5 +introduces a matching contract at the `ItemViewer` layer rather than a conflicting one, and that the +coordinator's own disposal behaviour is unchanged by this feature. + +## TRX + +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t4-d5-pass/488-d5-pass.trx` + +Output Summary: EXIT_CODE 0, failed count **0**, both named tests `Passed`. +`InitializeBreadcrumbPipeline` now throws `ObjectDisposedException` against a disposed viewer where +`[P5-T2]` observed the call succeeding, and `BreadcrumbCoordinator` remains null. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/fail-before-index.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/fail-before-index.md new file mode 100644 index 000000000..658e3652e --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/fail-before-index.md @@ -0,0 +1,71 @@ +# Fail-Before Index — the Six Defect Units ([P9-T2]) + +Timestamp: 2026-08-28T06-33 + +Command: `grep -H 'EXIT_CODE:|ExpectedExitCode:'` over the seven fail-before artifacts under +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/`. +EXIT_CODE: 0 + +This index is produced **before** the criterion that cites it is flipped, because a check-off task may +not cite an artifact a later task has not yet written. `[P9-T14]` flips that criterion and cites this +file. + +## One row per defect unit + +The CLAUDE.md Bugfix Workflow requires a failing regression test **first**, for each defect unit, with +evidence recording it failing against the unfixed code before the corresponding production change lands. + +| # | Unit | Regression test | Fail-before artifact | `EXIT_CODE:` | `ExpectedExitCode:` | +| --- | --- | --- | --- | --- | --- | +| 1 | **D1** | `ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` | `488-d1-fail.md` | **1** | 1 | +| 2 | **D2** | `ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` | `488-d2-fail.md` | **1** | 1 | +| 3 | **D3** | `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` | `488-d3-fail.md` | **1** | 1 | +| 4 | **D4** | `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic` and `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` | `488-d4-fail.md` | **1** | 1 | +| 5 | **D5** | `InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException` | `488-d5-fail.md` | **1** | 1 | +| 6a | **#475** | `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` | `475-ctor-fail.md` | **1** | 1 | +| 6b | **#475** | `ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` | `475-lazy-fail.md` | **1** | 1 | + +All artifacts live under +`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/`. + +**Every cited artifact records a non-zero `EXIT_CODE:` of 1 together with `ExpectedExitCode: 1`**, which +was verified by a direct search rather than asserted. + +## Why #475 carries two fail-before artifacts + +#475 is one defect unit delivered in three parts, and two of those parts required separate red +observations because they fail for different reasons and at different points: + +- **`475-lazy-fail.md`** is the ordinary case. After `[P6-T3]` delivered parts 1 and 2, the + seam-preservation test failed because the eagerly evaluated `EnsureBreadcrumbLifecycle` argument threw + from `BreadcrumbUiDispatcher.CaptureCurrent()` before the already-initialized early return could + discard it. Part 3 in `[P6-T7]` made that argument lazy and turned the test green, recorded in + `475-pass.md`. +- **`475-ctor-fail.md`** required a **temporary revert**. `[P6-T3]` delivers the deletion and the + constructor swaps as one compile-valid edit set — deleting the selector while a caller still names it + would not compile — so there is no intermediate state in which the constructor still degrades silently + and the tree still builds. The observation was taken by temporarily restoring a local ambient-probing + selector private to `BreadcrumbDropDownHost.cs`, **rebuilding** (exit 0), running the filter, then + restoring the two swaps and **rebuilding again** (exit 0). Both rebuilds are recorded in that + artifact, because `vstest.console.exe` runs the compiled assembly rather than the source: reverting + without rebuilding would have left the fail-fast swaps in the binary and the test would have passed. + The restored file's SHA-256 matches its pre-revert snapshot exactly. + +## Observed failure mode per unit + +Each red observation is discriminating, not incidental: + +| Unit | What the red run observed | +| --- | --- | +| D1 | The **first** assertion failed — `SetTheme` on the captured host raised no `ObjectDisposedException`, the discriminating observation named by decision D-10a. The two corroborating assertions were never reached. | +| D2 | `ThemesApplied` was an **empty collection**: the theme set while the post was queued was lost outright. | +| D3 | "No exception was thrown" — the second, different provider was silently discarded by the blanket early return. The positive case already passed and is recorded as observed. | +| D4 | Both tests: "no exception was thrown", confirming no boundary check existed. | +| D5 | "No exception was thrown" — the call succeeded against a disposed viewer. | +| #475 lazy | `InvalidOperationException` from `BreadcrumbUiDispatcher.CaptureCurrent()` inside the eager argument. | +| #475 ctor | `ArgumentNullException` instead of `InvalidOperationException` — the restored selector substituted a test dispatcher silently. | + +Output Summary: **All six defect units — D1, D2, D3, D4, D5, and #475 — have recorded fail-before +evidence.** Seven artifacts cover them (`488-d1-fail.md`, `488-d2-fail.md`, `488-d3-fail.md`, +`488-d4-fail.md`, `488-d5-fail.md`, and both `475-ctor-fail.md` and `475-lazy-fail.md` for #475), and +**every one records a non-zero `EXIT_CODE: 1` with `ExpectedExitCode: 1`**, verified by direct search. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t4-d1-fail/488-d1-fail.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t4-d1-fail/488-d1-fail.trx new file mode 100644 index 000000000..b608ecd9a --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t4-d1-fail/488-d1-fail.trx @@ -0,0 +1,81 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + Expected a <System.ObjectDisposedException> to be thrown because the outgoing host must already be disposed when the replacement is constructed, but no exception was thrown. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.<>c__DisplayClass8_0`1.<ThrowInternal>b__0(AssertionChain chain) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 47 + at FluentAssertions.Execution.AssertionChain.WithExpectation(String message, Action`1 chain, Object[] args) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 192 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.ThrowInternal[TException](Exception exception, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 56 + at FluentAssertions.Specialized.DelegateAssertions`2.Throw[TException](String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 74 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 80 + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t6-d1-pass/488-d1-pass.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t6-d1-pass/488-d1-pass.trx new file mode 100644 index 000000000..5b6c9af94 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p1-t6-d1-pass/488-d1-pass.trx @@ -0,0 +1,105 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t3-d2-fail/488-d2-fail.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t3-d2-fail/488-d2-fail.trx new file mode 100644 index 000000000..ecf7ea8e1 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t3-d2-fail/488-d2-fail.trx @@ -0,0 +1,73 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + Expected host.ThemesApplied to be equal to {"dark"}, but found empty collection. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Execution.GivenSelector`1.FailWith(String message, Object[] args) in /_/Src/FluentAssertions/Execution/GivenSelector.cs:line 75 + at FluentAssertions.Execution.GivenSelectorExtensions.AssertEitherCollectionIsNotEmpty[T](GivenSelector`1 givenSelector, Int32 length) in /_/Src/FluentAssertions/Execution/GivenSelectorExtensions.cs:line 23 + at FluentAssertions.Execution.GivenSelectorExtensions.AssertCollectionsHaveSameCount[T](GivenSelector`1 givenSelector, Int32 length) in /_/Src/FluentAssertions/Execution/GivenSelectorExtensions.cs:line 58 + at FluentAssertions.Collections.GenericCollectionAssertions`3.<>c__DisplayClass106_0`1.<AssertSubjectEquality>b__0(AssertionChain chain) in /_/Src/FluentAssertions/Collections/GenericCollectionAssertions.cs:line 3521 + at FluentAssertions.Execution.AssertionChain.WithExpectation(String message, Action`1 chain, Object[] args) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 192 + at FluentAssertions.Collections.GenericCollectionAssertions`3.Equal(IEnumerable`1 expected, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Collections/GenericCollectionAssertions.cs:line 1419 + at QuickFiler.Test.Viewers.BreadcrumbItemViewerLifecycleCoordinatorTests.ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\BreadcrumbItemViewerLifecycleCoordinatorTests.cs:line 283 + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t5-d2-pass/488-d2-pass.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t5-d2-pass/488-d2-pass.trx new file mode 100644 index 000000000..783ad7dc2 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t5-d2-pass/488-d2-pass.trx @@ -0,0 +1,87 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t6-d2-interaction/488-d2-interaction.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t6-d2-interaction/488-d2-interaction.trx new file mode 100644 index 000000000..fcc5379b0 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p2-t6-d2-interaction/488-d2-interaction.trx @@ -0,0 +1,99 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t2-d3-fail/488-d3-fail.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t2-d3-fail/488-d3-fail.trx new file mode 100644 index 000000000..ed75a6be4 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t2-d3-fail/488-d3-fail.trx @@ -0,0 +1,95 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + Expected a <System.InvalidOperationException> to be thrown because a second, different provider must be refused rather than silently discarded, but no exception was thrown. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.<>c__DisplayClass8_0`1.<ThrowInternal>b__0(AssertionChain chain) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 47 + at FluentAssertions.Execution.AssertionChain.WithExpectation(String message, Action`1 chain, Object[] args) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 192 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.ThrowInternal[TException](Exception exception, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 56 + at FluentAssertions.Specialized.DelegateAssertions`2.Throw[TException](String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 74 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 121 + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t4-d3-pass/488-d3-pass.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t4-d3-pass/488-d3-pass.trx new file mode 100644 index 000000000..d6521a9a2 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p3-t4-d3-pass/488-d3-pass.trx @@ -0,0 +1,95 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t3-d4-fail/488-d4-fail.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t3-d4-fail/488-d4-fail.trx new file mode 100644 index 000000000..9f8a5d624 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t3-d4-fail/488-d4-fail.trx @@ -0,0 +1,110 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + Expected exception where error.Message.Contains("InitializeBreadcrumbPipeline") because the diagnostic must name the operation that was refused, but the condition was not met by: + +{System.InvalidOperationException: Breadcrumb UI components must be constructed on an owning UI synchronization context. + at QuickFiler.Viewers.BreadcrumbUiDispatcher.CaptureCurrent() in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\BreadcrumbUiDispatcher.cs:line 46 + at QuickFiler.ItemViewer.InitializeBreadcrumbPipeline(IFolderHierarchyProvider provider, BreadcrumbPopupUiOperations operations) in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\ItemViewer.Breadcrumb.cs:line 74 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.<>c__DisplayClass3_1.<InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic>b__3() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 194 + at QuickFiler.Test.Viewers.BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull[T](Func`1 operation) in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\BreadcrumbSelectorToggleUiBoundaryTests.cs:line 331 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.<>c__DisplayClass3_1.<InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic>b__1() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 192 + at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception() in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 173}. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Specialized.ExceptionAssertions`1.Where(Expression`1 exceptionExpression, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/ExceptionAssertions.cs:line 280 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 199 + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + Expected a <System.InvalidOperationException> to be thrown because a different non-null context is off the viewer's owning boundary too, but no exception was thrown. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.<>c__DisplayClass8_0`1.<ThrowInternal>b__0(AssertionChain chain) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 47 + at FluentAssertions.Execution.AssertionChain.WithExpectation(String message, Action`1 chain, Object[] args) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 192 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.ThrowInternal[TException](Exception exception, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 56 + at FluentAssertions.Specialized.DelegateAssertions`2.Throw[TException](String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 74 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 252 + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t6-d4-pass/488-d4-pass.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t6-d4-pass/488-d4-pass.trx new file mode 100644 index 000000000..d31960e54 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t6-d4-pass/488-d4-pass.trx @@ -0,0 +1,85 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t8-d4-full-suite/488-d4-full-suite.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t8-d4-full-suite/488-d4-full-suite.trx new file mode 100644 index 000000000..0376fdf95 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p4-t8-d4-full-suite/488-d4-full-suite.trx @@ -0,0 +1,8313 @@ + + + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'UtilitiesCS.resources': System.IO.FileNotFoundException: Could not load file or assembly 'UtilitiesCS.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Debug Trace: + + + + + + + Debug Trace: + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + Debug Trace: + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + Debug Trace: + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: + + + + + + + + + Debug Trace: + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: + + + + + + Debug Trace: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug Trace: + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t2-d5-fail/488-d5-fail.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t2-d5-fail/488-d5-fail.trx new file mode 100644 index 000000000..3cd7ae4f7 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t2-d5-fail/488-d5-fail.trx @@ -0,0 +1,81 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + Expected a <System.ObjectDisposedException> to be thrown because no breadcrumb resource may be created after teardown has begun, but no exception was thrown. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.<>c__DisplayClass8_0`1.<ThrowInternal>b__0(AssertionChain chain) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 47 + at FluentAssertions.Execution.AssertionChain.WithExpectation(String message, Action`1 chain, Object[] args) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 192 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.ThrowInternal[TException](Exception exception, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 56 + at FluentAssertions.Specialized.DelegateAssertions`2.Throw[TException](String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 74 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 289 + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t4-d5-pass/488-d5-pass.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t4-d5-pass/488-d5-pass.trx new file mode 100644 index 000000000..e1fe6a4e8 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p5-t4-d5-pass/488-d5-pass.trx @@ -0,0 +1,81 @@ + + + + + + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t4-475-lazy-fail/475-lazy-fail.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t4-475-lazy-fail/475-lazy-fail.trx new file mode 100644 index 000000000..e3f8175c4 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t4-475-lazy-fail/475-lazy-fail.trx @@ -0,0 +1,85 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + Did not expect any exception because the already-seeded lifecycle discards the operations argument, so it must never be evaluated on a thread without an ambient context, but found System.InvalidOperationException: Breadcrumb UI components must be constructed on an owning UI synchronization context. + at QuickFiler.Viewers.BreadcrumbUiDispatcher.CaptureCurrent() in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\BreadcrumbUiDispatcher.cs:line 46 + at QuickFiler.Viewers.BreadcrumbPopupUiOperations.CaptureCurrent() in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\BreadcrumbPopupUiOperations.cs:line 81 + at QuickFiler.ItemViewer.ConfigureBreadcrumbDropDown(IBreadcrumbDropDownHost host, Func`1 anchorBounds, Func`1 workingArea) in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\ItemViewer.Breadcrumb.cs:line 232 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.<>c__DisplayClass7_1.<ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow>b__2() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 346 + at QuickFiler.Test.Viewers.BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull[T](Func`1 operation) in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\BreadcrumbSelectorToggleUiBoundaryTests.cs:line 331 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.<>c__DisplayClass7_1.<ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow>b__1() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 344 + at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception() in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 173. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.NotThrowInternal(Exception exception, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 72 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 355 + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t5-475-failfast-pass/475-failfast-pass.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t5-475-failfast-pass/475-failfast-pass.trx new file mode 100644 index 000000000..838d11762 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t5-475-failfast-pass/475-failfast-pass.trx @@ -0,0 +1,73 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t6-475-ctor-fail/475-ctor-fail.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t6-475-ctor-fail/475-ctor-fail.trx new file mode 100644 index 000000000..8a86f11a4 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t6-475-ctor-fail/475-ctor-fail.trx @@ -0,0 +1,79 @@ + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + Expected a <System.InvalidOperationException> to be thrown because the public constructor must refuse to run without an owning boundary, but found <System.ArgumentNullException>: +System.ArgumentNullException: Value cannot be null. +Parameter name: anchor + at QuickFiler.Viewers.BreadcrumbDropDownHost..ctor(Control anchor, CoreWebView2Environment environment, Func`2 surfaceFactory, Action focusPending, Action focusAnchor, Action cancelSelection, Action`3 showPopup, BreadcrumbPopupUiOperations operations, Action`2 closePopup) in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\BreadcrumbDropDownHost.cs:line 155 + at QuickFiler.Viewers.BreadcrumbDropDownHost..ctor(Control anchor, CoreWebView2Environment environment, Func`2 surfaceFactory, Action focusPending, Action focusAnchor, Action cancelSelection, Action`3 showPopup, BreadcrumbPopupUiOperations operations) in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\BreadcrumbDropDownHost.cs:line 131 + at QuickFiler.Viewers.BreadcrumbDropDownHost..ctor(Control anchor, CoreWebView2Environment environment, Func`2 surfaceFactory, Action focusPending, Action focusAnchor, Action cancelSelection, Action`3 showPopup) in REDACTED-WORKTREE-ROOT\QuickFiler\Viewers\BreadcrumbDropDownHost.cs:line 88 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.<>c__DisplayClass6_0.<LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException>b__2() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 295 + at QuickFiler.Test.Viewers.BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull[T](Func`1 operation) in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\BreadcrumbSelectorToggleUiBoundaryTests.cs:line 331 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.<>c__DisplayClass6_0.<LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException>b__1() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 293 + at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception() in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 173. + at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in /_/Src/FluentAssertions/Execution/LateBoundTestFramework.cs:line 22 + at FluentAssertions.Execution.AssertionChain.FailWith(Func`1 getFailureReason) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 277 + at FluentAssertions.Execution.AssertionChain.WithExpectation(String message, Action`1 chain, Object[] args) in /_/Src/FluentAssertions/Execution/AssertionChain.cs:line 192 + at FluentAssertions.Specialized.DelegateAssertionsBase`2.ThrowInternal[TException](Exception exception, String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertionsBase.cs:line 56 + at FluentAssertions.Specialized.DelegateAssertions`2.Throw[TException](String because, Object[] becauseArgs) in /_/Src/FluentAssertions/Specialized/DelegateAssertions.cs:line 74 + at QuickFiler.Test.Viewers.ItemViewerBreadcrumbLifecycleRegressionTests.LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException() in REDACTED-WORKTREE-ROOT\QuickFiler.Test\Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs:line 309 + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t8-475-pass/475-pass.trx b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t8-475-pass/475-pass.trx new file mode 100644 index 000000000..747e98f2d --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/p6-t8-475-pass/475-pass.trx @@ -0,0 +1,87 @@ + + + + + + + + + + + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + +Debug Trace: + Warning: + The component "Fluent Assertions" is governed by the rules defined in the Xceed License Agreement and + the Xceed Fluent Assertions Community License. You may use Fluent Assertions free of charge for + non-commercial use only. An active subscription is required to use Fluent Assertions for commercial use. + + Please contact Xceed Sales mailto:sales@xceed.com to acquire a subscription at a very low cost. + + A paid commercial license supports the development and continued increasing support of + Fluent Assertions users under both commercial and community licenses. Help us + keep Fluent Assertions at the forefront of unit testing. + + For more information, visit https://xceed.com/products/unit-testing/fluent-assertions/ + + + + + Debug Trace: +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. +testhost.exe Warning: 0 : SvgRenderer load 'QuickFiler.resources': System.IO.FileNotFoundException: Could not load file or assembly 'QuickFiler.resources' or one of its dependencies. The system cannot find the file specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test Parallelization enabled for REDACTED-WORKTREE-ROOT\QuickFiler.Test\bin\Debug\QuickFiler.Test.dll (Workers: 24, Scope: ClassLevel) + + + + \ No newline at end of file diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/feature-audit.2026-08-28T06-44.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/feature-audit.2026-08-28T06-44.md new file mode 100644 index 000000000..b391d8444 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/feature-audit.2026-08-28T06-44.md @@ -0,0 +1,67 @@ +# Feature Audit — itemviewer-breadcrumb-lifecycle-defects (Issue #488; also closes #475) + +- Timestamp: 2026-08-28T06-44 (UTC) +- Branch: `bug/itemviewer-breadcrumb-lifecycle-defects-488` at `d9ed9eb2`; base `epic/quickfiler-bug-family-integration` (merge base `12465043`, independently re-verified) +- Work mode: `full-bug` (from `issue.md`) — the acceptance-criteria source is `spec.md` only. `user-story.md` does not exist (verified on disk; its presence would be an integrity failure, and its absence is itself a checked criterion). +- Criterion count at HEAD: **54** `- [x]`, **0** `- [ ]` — matching the spec preamble's stated distribution (Process 2, D1 6, D2 5, D3 6, D4 6, D5 4, #475 7, scope 6, file-size/toolchain/coverage/integrity 12). + +## Verification method + +Every criterion was evaluated against primary evidence: direct diff and source reads at HEAD, this reviewer's own re-execution of the cheap checks (byte-identity diffs, line counts, identifier searches, Cobertura re-aggregation, TRX counter re-parsing), and the committed evidence artifacts for the expensive gates (coverage runs, full rebuilds, full-suite vstest). Line citations in `spec.md` are anchored to the pre-489 tree `988e819b`; per the spec's own instruction, every citation was resolved by member name, and ordinary line drift was not treated as a defect. No criterion was checked off or altered by this reviewer. + +## Evaluation + +### Process (2/2 PASS) + +| Criterion | Verdict | Evidence | +|---|---|---| +| Phase 0 baseline before any production edit | PASS | Commit `b61faddc` (baseline evidence only) precedes every production commit; `evidence/baseline/` records 1192/1192 tests and the baseline Cobertura whose root element this reviewer re-read (`line-rate="0.852607"`). | +| Fail-before evidence for all six units | PASS | Seven committed fail TRX re-parsed: D1 0/1, D2 0/1, D3 1/2 (negative red, positive green — the correct pre-fix shape), D4 0/2, D5 0/1, #475 lazy 0/1, #475 ctor 0/1; failing names are the delivered test names; failure messages match the pre-fix mechanisms. | + +### D1 (6/6 PASS) + +Dispose lands between the early return and the replacement construction with a fresh `outgoing` pattern variable type-testing the concrete host (source read). The regression test uses two `FormatterServices` environments, a drainable non-inline context, and observes `DropDown.IsDisposed` plus `Close(...) == false` as the criterion specifies (with an additional discriminating `SetTheme`-throws assertion, candidly documented — the fail-before TRX shows the test red on it). `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` and `..._RepeatedSameEnvironmentReusesPopupHost` pass unmodified (committed constraining-tests TRX 9/9; `BreadcrumbDropDownIntegrationTests.cs` byte-identical at exactly 500 lines — both re-verified by this reviewer). The 3-arg overload has no equivalent disposal and `BreadcrumbDropDownOpenCoordinator.cs` is byte-identical (empty diff). + +### D2 (5/5 PASS) + +`_retainedTheme` field assigned in `SetTheme` before both forwards; replay in the newly-adopted branch only, null/whitespace-guarded; `UpdateRequestProviders` branch performs no theme call (diff read). The coordinator-level test queues, sets, drains, asserts exact sequence `"dark"`, with no second thread or timing construct. The high-risk pooled-theme test and both lazy-theme tests pass unmodified — `488-d2-interaction.trx` 3/3 with the survival reasoning recorded in `488-d2-interaction.md`. + +### D3 (6/6 PASS) + +Reference-equality fail-fast with silent same-reference return (source read); private field assigned on success and nulled in `DisposeBreadcrumbResources`; both regression tests present (negative excludes `ObjectDisposedException`); no re-initialization branch; `BreadcrumbBridgeCoordinator`/`SetBridgeCoordinator`/`UnsubscribeBridge` all byte-identical. The no-production-behavior-change statement and the fail-fast/`SetBridgeCoordinator` coupling both appear in the spec and in `evidence/other/change-description.md` and `evidence/qa-gates/d3-coupling-recorded.md` (direct read), and the coupling contingency is carried into the promoted potential entry. + +### D4 (6/6 PASS) + +Guard compares by reference, names the operation, escapes on null `UiSyncContext`, and is the first statement of all four entry points (source read). Both proxy tests (ambient-null via `InvokeAmbientNull`; different non-null context) assert the diagnostic and its message. The proxy limitation — proves the guard fires, does not prove the race is absent — is stated in the spec, the change description, and both tests' own remarks (all read); no criterion claims race elimination. Zero sync primitives in the diff (scanned). The three unconfirmed harnesses are confirmed install-before-construct in `evidence/qa-gates/d4-harness-order.md`, which additionally re-derived the whole site set, disclosed the 19-vs-13 discrepancy per C6's escalation rule, and corrected C6's stale reachability premise — adjudicated in the policy audit (ruling 2) as correct conduct. + +### D5 (4/4 PASS) + +`ObjectDisposedException` on `IsDisposed || Disposing` before any container creation, with the D-15 ordering stated in-source; regression test asserts the throw and a null coordinator; `ItemViewer.Designer.cs` byte-identical (empty diff). The research §3.5 open item is discharged with evidence (`d5-faulted-task-observation.md`): the faulted task is not observed at three of four QFC call sites, the guard was not weakened, and issue **#670** was opened against the 484-owned file — verified OPEN on GitHub with the recorded title, referenced from the spec's dated amendment. + +### #475 (7/7 PASS) + +`CaptureCurrentOrTests` gone — zero `.cs` hits repository-wide (re-searched); both `CreateForCurrentThreadTests` declarations survive unmodified; both host constructor chains swap to `CaptureCurrent()` with argument order untouched and the null-factory test green; `EnsureBreadcrumbLifecycle` takes a `Func<>` evaluated only after the early return, all three call sites updated; the boundary test replaced in place retaining the controlled-context half; the seam-preservation test recorded red before laziness (`475-lazy-fail.trx`) and green after (`475-pass.trx`); the seam audit enumerates all seventeen injecting files with only the two owned ones modified. + +### Scope, ownership, 489 dependency (6/6 PASS) + +Changed-source set is exactly the permitted subset (re-derived); every forbidden file byte-identical; no public member changes and both interfaces unmodified; the `.csproj` diff is exactly one line adjacent to the `ItemViewerBreadcrumbDropDownContractTests.cs` entry with the base's eleven sibling entries intact and unreordered (raw hunk read); the three out-of-scope candidates exist as potential entries in the diff with mechanisms and triggers carried forward, and no fix for any appears in the code diff; D489-1 through D489-6 are each recorded CONFIRMED in `dependencies-489-recheck.md` with D489-4 checked explicitly by fixed-string search (and D489-2 corroborated independently by this reviewer: `ItemViewer.Breadcrumb.cs` matches zero `class` elements in both Cobertura documents). + +### File size, toolchain, coverage, document integrity (12/12 PASS) + +All seven touched files at or under 500 lines (re-measured: 425/497/489/463 production, 419/483/480 test); `BreadcrumbDropDownIntegrationTests.cs` untouched at exactly 500; new tests use MSTest+Moq+FluentAssertions with none of the four banned constructs (the retained `Task.Run` is outside the banned set — policy audit ruling 3); csharpier/analyzer/nullable/vstest gates all EXIT 0 with non-vacuity counters recorded and `/p:Nullable=enable` absent; single consecutive pass with zero restarts and SHA-stable owned files; changed-line coverage not reduced and all three measured files at or above 90 percent (independently re-aggregated: 0.909091 / 0.991342 / 0.992883); repo-wide 85.28 raw and 85.08 testable, both figures recorded with baselines and both risen; the coverage-exemption record for the `ItemViewer.Breadcrumb.cs` fixes exists with zero `[ExcludeFromCodeCoverage]` additions or removals in the diff; `user-story.md` does not exist. + +## Check-off integrity + +The spec diff against base consists of exactly the 54 checkbox flips plus one nine-line dated prose amendment (the D5 discharge recording #670); no criterion text was added, removed, reworded, or reordered (diff filtered by this reviewer). The executor's own reconciliation honestly recorded an interim 53/54 remediation-required state before the orchestrator's MCP promotion closed the final criterion — supersession recorded in place, not overwritten. + +## Acceptance Criteria Status + +- Source: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md` (work mode `full-bug`) +- Total AC items: 54 +- Checked off (delivered): 54 +- Remaining (unchecked): 0 +- Items remaining: none + +## Overall + +**GO.** All 54 acceptance criteria verify against primary evidence at HEAD with zero Blocking findings. The six Non-blocking residuals (TRX host-token sanitization, the committed raw Cobertura pair, the C6 stale-enumeration follow-up, the retained `Task.Run` note, the coordinator's 3-line headroom, and the repository threshold-wording conflict) are recorded in the policy audit and code review and transfer to fan-in/post-merge obligations; none requires a remediation cycle on this branch. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/plan.2026-08-25T09-53.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/plan.2026-08-25T09-53.md index ba6684af3..b1ca96de2 100644 --- a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/plan.2026-08-25T09-53.md +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/plan.2026-08-25T09-53.md @@ -382,103 +382,103 @@ method is a plain `[TestMethod]` with no `[DataRow]`, so each contributes exactl ### Phase 0 — Baseline capture and worktree bootstrap -- [ ] [P0-T1] Read, in this order, `CLAUDE.md`, `.claude/rules/general-code-change.md`, `.claude/rules/general-unit-test.md`, `.claude/rules/csharp.md`, `.claude/rules/plan-acceptance-gates.md`, `.claude/rules/quality-tiers.md`, and `.claude/rules/tonality.md`. Acceptance: the artifact records `Timestamp:`, a `Policy Order:` list naming those seven paths in that order, and one line per file confirming it was read. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-instructions-read.md`. -- [ ] [P0-T2] Read the four feature documents `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/issue.md`, `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`, and both files under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/research/`. Acceptance: the artifact records `Timestamp:`, the resolved work mode `full-bug`, the statement that `spec.md` is the sole acceptance-criteria source, the total acceptance-criterion count **54**, and the six defect-unit labels D1, D2, D3, D4, D5, and #475. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-feature-documents-read.md`. -- [ ] [P0-T3] Record the repository baseline by running `git rev-parse HEAD`, `git rev-parse --abbrev-ref HEAD`, and `git status --porcelain` from the worktree root. Acceptance: the artifact records the 40-character HEAD SHA under the label `BASE_SHA`, the branch name, and a `git status --porcelain` output that is empty apart from paths under `.claude/agent-memory/`, which are tolerated because they are agent-session state rather than feature output. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/repo-state.md`. -- [ ] [P0-T4] Resolve the absolute paths of `MSBuild.exe` and `vstest.console.exe` through `vswhere.exe` under the Visual Studio Installer directory, using `-latest -requires Microsoft.Component.MSBuild -find "MSBuild\**\Bin\MSBuild.exe"` and `-latest -products * -find "Common7\IDE\Extensions\TestPlatform\vstest.console.exe"`. Acceptance: the artifact records that both resolved files exist, and records no account name, home directory, or machine name beyond the resolved tool paths themselves. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/toolchain-paths.md`. -- [ ] [P0-T5] Verify the .NET SDK resolves in this worktree by running `dotnet --version` and `dotnet --list-sdks` from the worktree root. If `dotnet --version` prints the `global.json` error message instead of a version, run `pwsh -NoProfile -File .\scripts\vscode\Install-RepoDotNetSdk.ps1` from the worktree root and re-run the probe. Acceptance: `dotnet --version` exits 0 and prints a version whose major and minor components are `8` and `0` and whose remaining component is at or above `205`; `global.json` pins `8.0.205` under `rollForward: latestFeature`, so an exact string equality is not asserted. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-sdk.md`. -- [ ] [P0-T6] Restore NuGet packages by running `pwsh -NoProfile -File .\scripts\vscode\Invoke-Restore.ps1` from the worktree root; this is the `packages.config`-aware equivalent of `nuget restore TaskMaster.sln`, and `packages/` is absent in a fresh worktree. Acceptance: `EXIT_CODE: 0` and the directory `packages\MSTest.Analyzers.4.3.3` exists. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/nuget-restore.md`. -- [ ] [P0-T7] Back-fill the two analyzer packages whose versions are skewed from `packages.config` and are named by unconditional `Analyzer Include` items at `QuickFiler.Test/QuickFiler.Test.csproj:467-471`: `Meziantou.Analyzer` 3.0.156 and `Roslynator.Analyzers` 4.16.0. Use `nuget install` with an explicit version into the `packages` directory, or copy the two package folders from the primary checkout. Acceptance: both `packages\Meziantou.Analyzer.3.0.156\analyzers\dotnet\roslyn5.0\cs\Meziantou.Analyzer.dll` and `packages\Roslynator.Analyzers.4.16.0\analyzers\dotnet\roslyn4.7\cs\Roslynator.CSharp.Analyzers.dll` exist. A missing analyzer path is compile error CS0006, not a warning. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/analyzer-backfill.md`. -- [ ] [P0-T8] Run `dotnet tool restore` from the worktree root. Acceptance: `EXIT_CODE: 0` and `dotnet tool run csharpier --version` prints `1.2.6`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-tool-restore.md`. -- [ ] [P0-T9] Capture the baseline formatting state with the read-only command `dotnet tool run csharpier check .` from the worktree root. Acceptance: the artifact records `EXIT_CODE:` and the complete list of files reported as unformatted, an empty list being a valid result. This list is the comparison basis for [P8-T2]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/csharpier-check.md`. -- [ ] [P0-T10] Capture the baseline analyzer build by running, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`. Acceptance: the artifact records `EXIT_CODE:`, the total error count, the total warning count, and the warning count attributable to each of the four owned production files named in constraint C1. Those four per-file counts are the comparison basis for [P8-T3]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-analyzers.md`. -- [ ] [P0-T11] Capture the baseline nullable build by running, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true`. Do not add `/p:Nullable=enable`. Acceptance: the artifact records `EXIT_CODE:` and the error count. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-nullable.md`. -- [ ] [P0-T12] Capture the baseline `QuickFiler.Test` result by running, under `pwsh -NoProfile`, the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /Logger:trx;LogFileName=baseline-quickfiler-test.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\baseline\trx-p0-t12`. Acceptance: the artifact records `EXIT_CODE:`, the total, passed, failed, and skipped counts, the verbatim list of any failing test names as `BASELINE_FAILURE_SET`, and the presence of `baseline-quickfiler-test.trx` in that results directory. The passed count recorded here is the `BASELINE_PASSED` figure used by [P8-T5]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/quickfiler-test.md`. -- [ ] [P0-T13] Record the baseline outcome of the nine existing tests that constrain this feature's fixes, read from the [P0-T12] TRX: `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces`, `ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession`, `ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost`, `ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily`, `ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam`, `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder`, `ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks`, `SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions`, and `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory`. Acceptance: the artifact contains one result row per name, each recording its baseline outcome, and states that this set is the re-run set for [P7-T1]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/constraining-tests.md`. -- [ ] [P0-T14] Capture the baseline repository-wide coverage by running, under `pwsh -NoProfile`, `.\scripts\vscode\Invoke-MSTestWithCoverage.ps1 -SearchRoot . -Configuration Debug -CoverageOutput docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\baseline\coverage-baseline.cobertura.xml` from this worktree root. Acceptance: the Cobertura file exists; the artifact records the root `coverage` element's `line-rate` and `branch-rate` as numeric values, the total number of discovered test assemblies, and the verbatim discovered-assembly list, in which every entry is a path under this worktree root and no entry contains a `worktrees` path segment **below** this worktree root. Note that this run can take twenty minutes or more; start it with a correspondingly long timeout. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage.md`. -- [ ] [P0-T15] Record, from the [P0-T14] Cobertura file, the baseline aggregated `line-rate` for each of the three **measured** owned production files `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs`, and `QuickFiler/Viewers/BreadcrumbDropDownHost.cs`, aggregating by `filename` rather than reading a single `class` element. Acceptance: the artifact records three numeric values and states that `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` is absent from the measured set because `QuickFiler/Viewers/ItemViewer.cs:20` carries a type-level coverage exclusion. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-owned-files.md`. -- [ ] [P0-T16] Record the baseline line count of each of the seven owned files and of `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: the artifact contains eight rows and the recorded values are 319, 481, 494, 463, 382, 480, 0 (the new file does not yet exist), and 500 respectively; any deviation is recorded as a discrepancy and reported before Phase 1 begins. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/file-sizes.md`. -- [ ] [P0-T17] Record two baseline counts. First, the number of occurrences of the fixed string `ExcludeFromCodeCoverage` in each of the **seven** owned files — the four owned production files and the three owned test files — recording zero for `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`, which does not yet exist. Seven files rather than four, because the criterion [P9-T13] flips says no new attribute is introduced **anywhere** by this feature, and a test file is part of this feature. Second, the number of occurrences of the fixed string `CaptureCurrentOrTests` in tracked `.cs` files, together with the file and line of each. Acceptance: the artifact records both breakdowns; the second breakdown lists exactly the five `.cs` occurrences at `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs:86`, `QuickFiler/Viewers/BreadcrumbDropDownHost.cs:98`, `QuickFiler/Viewers/BreadcrumbDropDownHost.cs:118`, `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs:156`, and `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs:192`, plus the two call lines and one method-name line in `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/exemption-and-identifier-counts.md`. -- [ ] [P0-T18] Record the capacity budget for this feature: the per-file headroom from [P0-T16], the planned delta for each file from constraint C2, and the resulting projection. Acceptance: the artifact states each of the four numbered capacity rules of constraint C2 verbatim in substance, states the aggregate planned addition in lines, and states the projected value for `BreadcrumbItemViewerLifecycleCoordinator.cs` and `BreadcrumbPopupUiOperations.cs` explicitly as the two constrained files. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/capacity-budget.md`. +- [x] [P0-T1] Read, in this order, `CLAUDE.md`, `.claude/rules/general-code-change.md`, `.claude/rules/general-unit-test.md`, `.claude/rules/csharp.md`, `.claude/rules/plan-acceptance-gates.md`, `.claude/rules/quality-tiers.md`, and `.claude/rules/tonality.md`. Acceptance: the artifact records `Timestamp:`, a `Policy Order:` list naming those seven paths in that order, and one line per file confirming it was read. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-instructions-read.md`. +- [x] [P0-T2] Read the four feature documents `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/issue.md`, `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`, and both files under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/research/`. Acceptance: the artifact records `Timestamp:`, the resolved work mode `full-bug`, the statement that `spec.md` is the sole acceptance-criteria source, the total acceptance-criterion count **54**, and the six defect-unit labels D1, D2, D3, D4, D5, and #475. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/phase0-feature-documents-read.md`. +- [x] [P0-T3] Record the repository baseline by running `git rev-parse HEAD`, `git rev-parse --abbrev-ref HEAD`, and `git status --porcelain` from the worktree root. Acceptance: the artifact records the 40-character HEAD SHA under the label `BASE_SHA`, the branch name, and a `git status --porcelain` output that is empty apart from paths under `.claude/agent-memory/`, which are tolerated because they are agent-session state rather than feature output. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/repo-state.md`. +- [x] [P0-T4] Resolve the absolute paths of `MSBuild.exe` and `vstest.console.exe` through `vswhere.exe` under the Visual Studio Installer directory, using `-latest -requires Microsoft.Component.MSBuild -find "MSBuild\**\Bin\MSBuild.exe"` and `-latest -products * -find "Common7\IDE\Extensions\TestPlatform\vstest.console.exe"`. Acceptance: the artifact records that both resolved files exist, and records no account name, home directory, or machine name beyond the resolved tool paths themselves. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/toolchain-paths.md`. +- [x] [P0-T5] Verify the .NET SDK resolves in this worktree by running `dotnet --version` and `dotnet --list-sdks` from the worktree root. If `dotnet --version` prints the `global.json` error message instead of a version, run `pwsh -NoProfile -File .\scripts\vscode\Install-RepoDotNetSdk.ps1` from the worktree root and re-run the probe. Acceptance: `dotnet --version` exits 0 and prints a version whose major and minor components are `8` and `0` and whose remaining component is at or above `205`; `global.json` pins `8.0.205` under `rollForward: latestFeature`, so an exact string equality is not asserted. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-sdk.md`. +- [x] [P0-T6] Restore NuGet packages by running `pwsh -NoProfile -File .\scripts\vscode\Invoke-Restore.ps1` from the worktree root; this is the `packages.config`-aware equivalent of `nuget restore TaskMaster.sln`, and `packages/` is absent in a fresh worktree. Acceptance: `EXIT_CODE: 0` and the directory `packages\MSTest.Analyzers.4.3.3` exists. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/nuget-restore.md`. +- [x] [P0-T7] Back-fill the two analyzer packages whose versions are skewed from `packages.config` and are named by unconditional `Analyzer Include` items at `QuickFiler.Test/QuickFiler.Test.csproj:467-471`: `Meziantou.Analyzer` 3.0.156 and `Roslynator.Analyzers` 4.16.0. Use `nuget install` with an explicit version into the `packages` directory, or copy the two package folders from the primary checkout. Acceptance: both `packages\Meziantou.Analyzer.3.0.156\analyzers\dotnet\roslyn5.0\cs\Meziantou.Analyzer.dll` and `packages\Roslynator.Analyzers.4.16.0\analyzers\dotnet\roslyn4.7\cs\Roslynator.CSharp.Analyzers.dll` exist. A missing analyzer path is compile error CS0006, not a warning. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/analyzer-backfill.md`. +- [x] [P0-T8] Run `dotnet tool restore` from the worktree root. Acceptance: `EXIT_CODE: 0` and `dotnet tool run csharpier --version` prints `1.2.6`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/dotnet-tool-restore.md`. +- [x] [P0-T9] Capture the baseline formatting state with the read-only command `dotnet tool run csharpier check .` from the worktree root. Acceptance: the artifact records `EXIT_CODE:` and the complete list of files reported as unformatted, an empty list being a valid result. This list is the comparison basis for [P8-T2]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/csharpier-check.md`. +- [x] [P0-T10] Capture the baseline analyzer build by running, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`. Acceptance: the artifact records `EXIT_CODE:`, the total error count, the total warning count, and the warning count attributable to each of the four owned production files named in constraint C1. Those four per-file counts are the comparison basis for [P8-T3]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-analyzers.md`. +- [x] [P0-T11] Capture the baseline nullable build by running, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true`. Do not add `/p:Nullable=enable`. Acceptance: the artifact records `EXIT_CODE:` and the error count. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/msbuild-nullable.md`. +- [x] [P0-T12] Capture the baseline `QuickFiler.Test` result by running, under `pwsh -NoProfile`, the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /Logger:trx;LogFileName=baseline-quickfiler-test.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\baseline\trx-p0-t12`. Acceptance: the artifact records `EXIT_CODE:`, the total, passed, failed, and skipped counts, the verbatim list of any failing test names as `BASELINE_FAILURE_SET`, and the presence of `baseline-quickfiler-test.trx` in that results directory. The passed count recorded here is the `BASELINE_PASSED` figure used by [P8-T5]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/quickfiler-test.md`. +- [x] [P0-T13] Record the baseline outcome of the nine existing tests that constrain this feature's fixes, read from the [P0-T12] TRX: `ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces`, `ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession`, `ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost`, `ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily`, `ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam`, `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder`, `ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks`, `SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions`, and `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory`. Acceptance: the artifact contains one result row per name, each recording its baseline outcome, and states that this set is the re-run set for [P7-T1]. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/constraining-tests.md`. +- [x] [P0-T14] Capture the baseline repository-wide coverage by running, under `pwsh -NoProfile`, `.\scripts\vscode\Invoke-MSTestWithCoverage.ps1 -SearchRoot . -Configuration Debug -CoverageOutput docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\baseline\coverage-baseline.cobertura.xml` from this worktree root. Acceptance: the Cobertura file exists; the artifact records the root `coverage` element's `line-rate` and `branch-rate` as numeric values, the total number of discovered test assemblies, and the verbatim discovered-assembly list, in which every entry is a path under this worktree root and no entry contains a `worktrees` path segment **below** this worktree root. Note that this run can take twenty minutes or more; start it with a correspondingly long timeout. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage.md`. +- [x] [P0-T15] Record, from the [P0-T14] Cobertura file, the baseline aggregated `line-rate` for each of the three **measured** owned production files `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs`, and `QuickFiler/Viewers/BreadcrumbDropDownHost.cs`, aggregating by `filename` rather than reading a single `class` element. Acceptance: the artifact records three numeric values and states that `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` is absent from the measured set because `QuickFiler/Viewers/ItemViewer.cs:20` carries a type-level coverage exclusion. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage-owned-files.md`. +- [x] [P0-T16] Record the baseline line count of each of the seven owned files and of `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: the artifact contains eight rows and the recorded values are 319, 481, 494, 463, 382, 480, 0 (the new file does not yet exist), and 500 respectively; any deviation is recorded as a discrepancy and reported before Phase 1 begins. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/file-sizes.md`. +- [x] [P0-T17] Record two baseline counts. First, the number of occurrences of the fixed string `ExcludeFromCodeCoverage` in each of the **seven** owned files — the four owned production files and the three owned test files — recording zero for `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`, which does not yet exist. Seven files rather than four, because the criterion [P9-T13] flips says no new attribute is introduced **anywhere** by this feature, and a test file is part of this feature. Second, the number of occurrences of the fixed string `CaptureCurrentOrTests` in tracked `.cs` files, together with the file and line of each. Acceptance: the artifact records both breakdowns; the second breakdown lists exactly the five `.cs` occurrences at `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs:86`, `QuickFiler/Viewers/BreadcrumbDropDownHost.cs:98`, `QuickFiler/Viewers/BreadcrumbDropDownHost.cs:118`, `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs:156`, and `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs:192`, plus the two call lines and one method-name line in `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/exemption-and-identifier-counts.md`. +- [x] [P0-T18] Record the capacity budget for this feature: the per-file headroom from [P0-T16], the planned delta for each file from constraint C2, and the resulting projection. Acceptance: the artifact states each of the four numbered capacity rules of constraint C2 verbatim in substance, states the aggregate planned addition in lines, and states the projected value for `BreadcrumbItemViewerLifecycleCoordinator.cs` and `BreadcrumbPopupUiOperations.cs` explicitly as the two constrained files. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/capacity-budget.md`. ### Phase 1 — D1 outgoing-host disposal ordering -- [ ] [P1-T1] Create `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` in namespace `QuickFiler.Test.Viewers` as a `[TestClass] public sealed class ItemViewerBreadcrumbLifecycleRegressionTests`, carrying only its own private helpers and no test method yet: a viewer scope that saves `SynchronizationContext.Current`, installs a context, constructs a `QuickFiler.ItemViewer`, and restores the previous context on disposal; an accessor returning the viewer's `BreadcrumbDropDownHost` value; an accessor that assigns the viewer's private `_context` field; and an uninitialized-environment factory using `FormatterServices.GetUninitializedObject`. No helper may widen the accessibility of a member in any other test file. Acceptance: the file exists, declares that class name, contains no `[TestMethod]` attribute yet, and is at most 480 lines. -- [ ] [P1-T2] Insert exactly one `Compile Include` line for `Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs` into `QuickFiler.Test/QuickFiler.Test.csproj`, immediately after the existing entry for `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` at line 82, per constraint C4. Acceptance: `git diff --numstat -- QuickFiler.Test/QuickFiler.Test.csproj` reports exactly 1 added line and 0 deleted lines, and no existing entry is reordered. -- [ ] [P1-T3] Add the test method `ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It installs an ordinary ambient context and constructs the viewer under it; builds a **separate, never-installed** queued synchronization context and a `BreadcrumbPopupUiOperations` over a `BreadcrumbUiDispatcher` constructed against that queue, so posted work is drainable rather than inline; seeds the pipeline through `InitializeBreadcrumbPipeline(provider, operations)` with a `Mock(MockBehavior.Strict)`; calls `ConfigureBreadcrumbDropDown(env1, initializer)` with a `FormatterServices`-produced environment and a `Mock(MockBehavior.Strict)` with no setups; drains the queue; captures the host through the [P1-T1] accessor; calls `ConfigureBreadcrumbDropDown(env2, initializer)` with a second distinct `FormatterServices`-produced environment and **does not drain**; and then makes three assertions in this order, per decision D-10a: first, that calling `SetTheme` on the captured host with the value `dark` throws `ObjectDisposedException`, which is the discriminating observation; second, that `Close` on the captured host returns `false`; and third, after draining the queue to completion, that the captured host's `DropDown` reports `IsDisposed` as `true`. The method contains no second thread, no `Thread.Sleep`, no `Task.Delay`, and no wall-clock wait, and carries an XML doc comment naming issue #488 defect D1 and recording that the second and third assertions hold in the pre-fix state as well and are therefore corroborating rather than discriminating. Acceptance: the method exists with that exact name, all three assertions are present in that order, the queued context object is never installed as the ambient context, and the new file is at most 480 lines. -- [ ] [P1-T4] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement" /Logger:trx;LogFileName=488-d1-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p1-t4-d1-fail`. This build is not an analyzer or nullable gate. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` and records that the failing assertion is the first one, the `SetTheme` disposal-guard assertion, which is the discriminating observation named in decision D-10a. A failure attributed to either of the other two assertions is a defect in the test rather than evidence of the product defect and must be corrected before proceeding. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-fail.md`. -- [ ] [P1-T5] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, inside `ConfigureBreadcrumbDropDown(CoreWebView2Environment, IWebViewCoreInitializer)`, add the outgoing-host disposal **between** the same-environment early return and the `EnsureBreadcrumbLifecycle` call. The disposal is guarded by a type test for the **concrete** `BreadcrumbDropDownHost`, using a **fresh** pattern variable distinct from the one bound in the same-environment guard, because that one is not definitely assigned on the fall-through path. Do not add an equivalent disposal to the three-argument overload. Acceptance: the same-environment early return is still the first statement of the method body; the new statement is a type test naming `BreadcrumbDropDownHost` and not `IBreadcrumbDropDownHost`; the pattern variable name differs from `existing`; the file is at most 500 lines; and no new `ExcludeFromCodeCoverage` attribute is added. -- [ ] [P1-T6] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement|FullyQualifiedName~ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces|FullyQualifiedName~ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost" /Logger:trx;LogFileName=488-d1-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p1-t6-d1-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`, and additionally records that the discriminating `SetTheme` assertion now holds where [P1-T4] observed it failing. Per the unmodified-file rule the artifact also records that `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs` produces no output lines, because the two criteria [P1-T13] and [P1-T14] flip each say the test passes **unmodified** and a `Passed` outcome alone would also be produced by a test that had been edited into passing. If the post-drain `DropDown` disposal assertion is the only failing assertion, the executor must not add any wait, sleep, or delay: it records the observed state and the drain sequence in `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/d1-drain-blocker.md`, leaves this task unchecked, and reports. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md`. -- [ ] [P1-T7] Record the D1 residual dossier: after the fix the outgoing host is disposed while the coordinator's open coordinator still points at it, until `ConfigureHost`'s post runs the release, so a `SetTheme` landing inside that window reaches the host's disposal guard and throws `ObjectDisposedException` instead of silently theming the wrong host. Acceptance: the artifact states that this residual is accepted rather than fixed, states the three reasons (D4 rejects an off-boundary configure outright, D2's retained theme still reaches the newly adopted host, and the window does not exist on the production UI thread where every post runs inline), and states that D1b, the unobservable dispose failure inside the sibling-owned open coordinator, is a recorded residual that this feature does not fix. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/d1-residual-dossier.md`. -- [ ] [P1-T8] Record the D1 limitation evidence by reading the delivered source: the three-argument `ConfigureBreadcrumbDropDown` overload contains no host disposal, and `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` produces no output lines. Acceptance: the artifact records both facts, quoting the delivered three-argument overload body. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d1-limitations.md`. -- [ ] [P1-T9] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`, and `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: the first two values are at most 500, the new test file value is at most 480, and the third value is exactly 500; and, per the unmodified-file rule, the artifact records that `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` produces no output lines, which is what establishes the **byte-identity** the criterion [P1-T13] flips demands — a count of exactly 500 lines does not, since a file can be edited without changing its line count. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d1.md`. -- [ ] [P1-T10] Check off in `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md` the single criterion beginning "`ItemViewer.ConfigureBreadcrumbDropDown(CoreWebView2Environment, IWebViewCoreInitializer)` disposes". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P1-T5] outcome. -- [ ] [P1-T11] Check off the single criterion beginning "The disposal is guarded by a type test for the". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P1-T5] outcome. -- [ ] [P1-T12] Check off the single criterion beginning "A regression test configures with environment A". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md`. -- [ ] [P1-T13] Check off the single criterion beginning "`BreadcrumbDropDownIntegrationTests.ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` passes"; the word "unmodified" that continues the sentence falls on the next wrapped line of `spec.md`, so match on the single-line prefix and not on the wrapped phrase. Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md` and no other artifact. That one artifact carries both of the criterion's conjuncts: the `Passed` outcome for the named test, and the empty output of `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` that the unmodified-file rule requires [P1-T6] to record, which is what establishes byte-identity. The criterion asserts no line count, so [P1-T9]'s figure is deliberately **not** cited here — a line count does not establish byte-identity, and the exactly-500 assertion belongs to the separate criterion [P9-T4] flips. -- [ ] [P1-T14] Check off the single criterion beginning "`QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md`. -- [ ] [P1-T15] Check off the single criterion beginning "The spec's recorded D1 limitations are honoured". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d1-limitations.md`. +- [x] [P1-T1] Create `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` in namespace `QuickFiler.Test.Viewers` as a `[TestClass] public sealed class ItemViewerBreadcrumbLifecycleRegressionTests`, carrying only its own private helpers and no test method yet: a viewer scope that saves `SynchronizationContext.Current`, installs a context, constructs a `QuickFiler.ItemViewer`, and restores the previous context on disposal; an accessor returning the viewer's `BreadcrumbDropDownHost` value; an accessor that assigns the viewer's private `_context` field; and an uninitialized-environment factory using `FormatterServices.GetUninitializedObject`. No helper may widen the accessibility of a member in any other test file. Acceptance: the file exists, declares that class name, contains no `[TestMethod]` attribute yet, and is at most 480 lines. +- [x] [P1-T2] Insert exactly one `Compile Include` line for `Viewers\ItemViewerBreadcrumbLifecycleRegressionTests.cs` into `QuickFiler.Test/QuickFiler.Test.csproj`, immediately after the existing entry for `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` at line 82, per constraint C4. Acceptance: `git diff --numstat -- QuickFiler.Test/QuickFiler.Test.csproj` reports exactly 1 added line and 0 deleted lines, and no existing entry is reordered. +- [x] [P1-T3] Add the test method `ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It installs an ordinary ambient context and constructs the viewer under it; builds a **separate, never-installed** queued synchronization context and a `BreadcrumbPopupUiOperations` over a `BreadcrumbUiDispatcher` constructed against that queue, so posted work is drainable rather than inline; seeds the pipeline through `InitializeBreadcrumbPipeline(provider, operations)` with a `Mock(MockBehavior.Strict)`; calls `ConfigureBreadcrumbDropDown(env1, initializer)` with a `FormatterServices`-produced environment and a `Mock(MockBehavior.Strict)` with no setups; drains the queue; captures the host through the [P1-T1] accessor; calls `ConfigureBreadcrumbDropDown(env2, initializer)` with a second distinct `FormatterServices`-produced environment and **does not drain**; and then makes three assertions in this order, per decision D-10a: first, that calling `SetTheme` on the captured host with the value `dark` throws `ObjectDisposedException`, which is the discriminating observation; second, that `Close` on the captured host returns `false`; and third, after draining the queue to completion, that the captured host's `DropDown` reports `IsDisposed` as `true`. The method contains no second thread, no `Thread.Sleep`, no `Task.Delay`, and no wall-clock wait, and carries an XML doc comment naming issue #488 defect D1 and recording that the second and third assertions hold in the pre-fix state as well and are therefore corroborating rather than discriminating. Acceptance: the method exists with that exact name, all three assertions are present in that order, the queued context object is never installed as the ambient context, and the new file is at most 480 lines. +- [x] [P1-T4] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement" /Logger:trx;LogFileName=488-d1-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p1-t4-d1-fail`. This build is not an analyzer or nullable gate. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` and records that the failing assertion is the first one, the `SetTheme` disposal-guard assertion, which is the discriminating observation named in decision D-10a. A failure attributed to either of the other two assertions is a defect in the test rather than evidence of the product defect and must be corrected before proceeding. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-fail.md`. +- [x] [P1-T5] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, inside `ConfigureBreadcrumbDropDown(CoreWebView2Environment, IWebViewCoreInitializer)`, add the outgoing-host disposal **between** the same-environment early return and the `EnsureBreadcrumbLifecycle` call. The disposal is guarded by a type test for the **concrete** `BreadcrumbDropDownHost`, using a **fresh** pattern variable distinct from the one bound in the same-environment guard, because that one is not definitely assigned on the fall-through path. Do not add an equivalent disposal to the three-argument overload. Acceptance: the same-environment early return is still the first statement of the method body; the new statement is a type test naming `BreadcrumbDropDownHost` and not `IBreadcrumbDropDownHost`; the pattern variable name differs from `existing`; the file is at most 500 lines; and no new `ExcludeFromCodeCoverage` attribute is added. +- [x] [P1-T6] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_EnvironmentChange_DisposesOutgoingHostBeforeReplacement|FullyQualifiedName~ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces|FullyQualifiedName~ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost" /Logger:trx;LogFileName=488-d1-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p1-t6-d1-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`, and additionally records that the discriminating `SetTheme` assertion now holds where [P1-T4] observed it failing. Per the unmodified-file rule the artifact also records that `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs` produces no output lines, because the two criteria [P1-T13] and [P1-T14] flip each say the test passes **unmodified** and a `Passed` outcome alone would also be produced by a test that had been edited into passing. If the post-drain `DropDown` disposal assertion is the only failing assertion, the executor must not add any wait, sleep, or delay: it records the observed state and the drain sequence in `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/d1-drain-blocker.md`, leaves this task unchecked, and reports. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md`. +- [x] [P1-T7] Record the D1 residual dossier: after the fix the outgoing host is disposed while the coordinator's open coordinator still points at it, until `ConfigureHost`'s post runs the release, so a `SetTheme` landing inside that window reaches the host's disposal guard and throws `ObjectDisposedException` instead of silently theming the wrong host. Acceptance: the artifact states that this residual is accepted rather than fixed, states the three reasons (D4 rejects an off-boundary configure outright, D2's retained theme still reaches the newly adopted host, and the window does not exist on the production UI thread where every post runs inline), and states that D1b, the unobservable dispose failure inside the sibling-owned open coordinator, is a recorded residual that this feature does not fix. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/d1-residual-dossier.md`. +- [x] [P1-T8] Record the D1 limitation evidence by reading the delivered source: the three-argument `ConfigureBreadcrumbDropDown` overload contains no host disposal, and `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` produces no output lines. Acceptance: the artifact records both facts, quoting the delivered three-argument overload body. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d1-limitations.md`. +- [x] [P1-T9] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`, and `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: the first two values are at most 500, the new test file value is at most 480, and the third value is exactly 500; and, per the unmodified-file rule, the artifact records that `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` produces no output lines, which is what establishes the **byte-identity** the criterion [P1-T13] flips demands — a count of exactly 500 lines does not, since a file can be edited without changing its line count. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d1.md`. +- [x] [P1-T10] Check off in `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md` the single criterion beginning "`ItemViewer.ConfigureBreadcrumbDropDown(CoreWebView2Environment, IWebViewCoreInitializer)` disposes". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P1-T5] outcome. +- [x] [P1-T11] Check off the single criterion beginning "The disposal is guarded by a type test for the". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P1-T5] outcome. +- [x] [P1-T12] Check off the single criterion beginning "A regression test configures with environment A". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md`. +- [x] [P1-T13] Check off the single criterion beginning "`BreadcrumbDropDownIntegrationTests.ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` passes"; the word "unmodified" that continues the sentence falls on the next wrapped line of `spec.md`, so match on the single-line prefix and not on the wrapped phrase. Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md` and no other artifact. That one artifact carries both of the criterion's conjuncts: the `Passed` outcome for the named test, and the empty output of `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` that the unmodified-file rule requires [P1-T6] to record, which is what establishes byte-identity. The criterion asserts no line count, so [P1-T9]'s figure is deliberately **not** cited here — a line count does not establish byte-identity, and the exactly-500 assertion belongs to the separate criterion [P9-T4] flips. +- [x] [P1-T14] Check off the single criterion beginning "`QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d1-pass.md`. +- [x] [P1-T15] Check off the single criterion beginning "The spec's recorded D1 limitations are honoured". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d1-limitations.md`. ### Phase 2 — D2 retained-theme replay on the lifecycle coordinator -- [ ] [P2-T1] In `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, extend the existing private `RecordingHost` with an internal `List` property named `ThemesApplied` whose `SetTheme` implementation appends the supplied theme. Change nothing else about `RecordingHost`, and in particular leave its `Dispose` body empty so `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder` is unaffected. Acceptance: the property name `ThemesApplied` exists on `RecordingHost`, `RecordingHost.Dispose` remains an empty body, and the file is at most 500 lines. -- [ ] [P2-T2] Add the test method `ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` to `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` using the existing private `LifecycleFixture` and `QueuedCreatorThreadSynchronizationContext`. It calls `ConfigureHost` with a `RecordingHost` and does **not** drain; calls `SetTheme` with the value `dark`; drains on the creator thread; and asserts that the host's `ThemesApplied` equals exactly one entry whose value is `dark`. It contains no second thread, no `Thread.Sleep`, no `Task.Delay`, and no wall-clock wait, and carries an XML doc comment naming issue #488 defect D2. Acceptance: the method exists with that exact name, the file is at most 500 lines, and the assertion is an exact-sequence equality rather than a containment check. -- [ ] [P2-T3] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost" /Logger:trx;LogFileName=488-d2-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t3-d2-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` and records that the observed applied-theme sequence was empty, which is the defect. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-fail.md`. -- [ ] [P2-T4] In `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, add a private nullable string retained-theme field, assign it in `SetTheme` **before** the two forwarding calls, and replay it onto the newly adopted host inside `ConfigureHost`'s posted lambda in the **newly-adopted branch only**, immediately after the popup-messenger-ready subscription, guarded so that a null or whitespace value is not replayed. The `UpdateRequestProviders` branch performs no theme call. This is the only edit this feature makes to this file. Acceptance: the file is at most 500 lines; the `UpdateRequestProviders` branch contains no theme call; the replay is guarded against null and whitespace; and no new `ExcludeFromCodeCoverage` attribute is added. -- [ ] [P2-T5] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost|FullyQualifiedName~HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder|FullyQualifiedName~ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks" /Logger:trx;LogFileName=488-d2-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t5-d2-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-pass.md`. -- [ ] [P2-T6] Run the resolved `vstest.console.exe` under `pwsh -NoProfile` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession|FullyQualifiedName~ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily|FullyQualifiedName~ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam" /Logger:trx;LogFileName=488-d2-interaction.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t6-d2-interaction`. Acceptance: `EXIT_CODE: 0`, failed count 0, all three named tests record outcome `Passed`, and the artifact additionally records the explicit reasoning for why the pooled-reuse "no stale pooled theme is replayed" assertion survives the retained-theme replay, namely that the retained value is overwritten by a subsequent light-theme call before the re-attach, so the replay carries the current theme rather than a stale one. Per the unmodified-file rule the artifact also records that `git diff --name-only -- QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs` produces no output lines, because the two criteria [P2-T11] and [P2-T12] flip each say the named tests pass **unmodified**. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md`. -- [ ] [P2-T7] Record the current line count of `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` and `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`. Acceptance: both values are at most 500, and the artifact states the delivered delta for the production file against its 481-line baseline together with the nineteen-line headroom it had. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d2.md`. -- [ ] [P2-T8] Check off the single criterion beginning "`BreadcrumbItemViewerLifecycleCoordinator` carries a private retained-theme field". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P2-T4] outcome. -- [ ] [P2-T9] Check off the single criterion beginning "`ConfigureHost`'s posted lambda replays the retained theme". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P2-T4] outcome. -- [ ] [P2-T10] Check off the single criterion beginning "A regression test in `BreadcrumbItemViewerLifecycleCoordinatorTests.cs` queues `ConfigureHost`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-pass.md`. -- [ ] [P2-T11] Check off the single criterion beginning "`QfcItemControllerBreadcrumbDropDownTests.ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md`. -- [ ] [P2-T12] Check off the single criterion beginning "`QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md`. +- [x] [P2-T1] In `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, extend the existing private `RecordingHost` with an internal `List` property named `ThemesApplied` whose `SetTheme` implementation appends the supplied theme. Change nothing else about `RecordingHost`, and in particular leave its `Dispose` body empty so `HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder` is unaffected. Acceptance: the property name `ThemesApplied` exists on `RecordingHost`, `RecordingHost.Dispose` remains an empty body, and the file is at most 500 lines. +- [x] [P2-T2] Add the test method `ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost` to `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs` using the existing private `LifecycleFixture` and `QueuedCreatorThreadSynchronizationContext`. It calls `ConfigureHost` with a `RecordingHost` and does **not** drain; calls `SetTheme` with the value `dark`; drains on the creator thread; and asserts that the host's `ThemesApplied` equals exactly one entry whose value is `dark`. It contains no second thread, no `Thread.Sleep`, no `Task.Delay`, and no wall-clock wait, and carries an XML doc comment naming issue #488 defect D2. Acceptance: the method exists with that exact name, the file is at most 500 lines, and the assertion is an exact-sequence equality rather than a containment check. +- [x] [P2-T3] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost" /Logger:trx;LogFileName=488-d2-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t3-d2-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` and records that the observed applied-theme sequence was empty, which is the defect. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-fail.md`. +- [x] [P2-T4] In `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, add a private nullable string retained-theme field, assign it in `SetTheme` **before** the two forwarding calls, and replay it onto the newly adopted host inside `ConfigureHost`'s posted lambda in the **newly-adopted branch only**, immediately after the popup-messenger-ready subscription, guarded so that a null or whitespace value is not replayed. The `UpdateRequestProviders` branch performs no theme call. This is the only edit this feature makes to this file. Acceptance: the file is at most 500 lines; the `UpdateRequestProviders` branch contains no theme call; the replay is guarded against null and whitespace; and no new `ExcludeFromCodeCoverage` attribute is added. +- [x] [P2-T5] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureHostQueued_SetThemeBeforeDrain_ReplaysThemeOntoAdoptedHost|FullyQualifiedName~HostReplacement_SubscriptionsAndMessengerReplacementPreserveOrder|FullyQualifiedName~ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks" /Logger:trx;LogFileName=488-d2-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t5-d2-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-pass.md`. +- [x] [P2-T6] Run the resolved `vstest.console.exe` under `pwsh -NoProfile` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession|FullyQualifiedName~ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily|FullyQualifiedName~ConfigureBreadcrumbDropDown_LightThemeUsesSameControllerSetupSeam" /Logger:trx;LogFileName=488-d2-interaction.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p2-t6-d2-interaction`. Acceptance: `EXIT_CODE: 0`, failed count 0, all three named tests record outcome `Passed`, and the artifact additionally records the explicit reasoning for why the pooled-reuse "no stale pooled theme is replayed" assertion survives the retained-theme replay, namely that the retained value is overwritten by a subsequent light-theme call before the re-attach, so the replay carries the current theme rather than a stale one. Per the unmodified-file rule the artifact also records that `git diff --name-only -- QuickFiler.Test/Controllers/QfcItemControllerBreadcrumbDropDownTests.cs` produces no output lines, because the two criteria [P2-T11] and [P2-T12] flip each say the named tests pass **unmodified**. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md`. +- [x] [P2-T7] Record the current line count of `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` and `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`. Acceptance: both values are at most 500, and the artifact states the delivered delta for the production file against its 481-line baseline together with the nineteen-line headroom it had. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d2.md`. +- [x] [P2-T8] Check off the single criterion beginning "`BreadcrumbItemViewerLifecycleCoordinator` carries a private retained-theme field". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P2-T4] outcome. +- [x] [P2-T9] Check off the single criterion beginning "`ConfigureHost`'s posted lambda replays the retained theme". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P2-T4] outcome. +- [x] [P2-T10] Check off the single criterion beginning "A regression test in `BreadcrumbItemViewerLifecycleCoordinatorTests.cs` queues `ConfigureHost`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-pass.md`. +- [x] [P2-T11] Check off the single criterion beginning "`QfcItemControllerBreadcrumbDropDownTests.ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md`. +- [x] [P2-T12] Check off the single criterion beginning "`QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d2-interaction.md`. ### Phase 3 — D3 fail fast on a second, different provider -- [ ] [P3-T1] Add two test methods to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` seeds the pipeline with a first `Mock(MockBehavior.Strict)` and asserts that a second call with a second, distinct strict provider mock throws `InvalidOperationException` and that the thrown instance is **not** an `ObjectDisposedException`. `InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` repeats the call with the **same** provider reference, asserts it does not throw, and asserts the viewer's breadcrumb coordinator is the same instance as before the repeat call. Both carry an XML doc comment naming issue #488 defect D3. Acceptance: both method names exist, both use the strict mock behaviour, the negative case carries the `ObjectDisposedException` exclusion required by decision D-9, and the new file is at most 480 lines. -- [ ] [P3-T2] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException|FullyQualifiedName~InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator" /Logger:trx;LogFileName=488-d3-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p3-t2-d3-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` with outcome `Failed`; the positive case may already pass and its outcome is recorded as observed. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-fail.md`. -- [ ] [P3-T3] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, add a private `IFolderHierarchyProvider` field named `_breadcrumbProvider`; replace the already-initialized early return in `InitializeBreadcrumbPipeline(provider, operations)` so that a non-null breadcrumb coordinator with a reference-unequal provider throws `InvalidOperationException` and returns without effect when the provider is reference-equal; assign `_breadcrumbProvider` on the successful initialization path alongside the coordinator assignment; and null it in `DisposeBreadcrumbResources` so a pipeline re-created after disposal is not blocked by a stale reference. Add no re-initialization branch, per constraint C7. Acceptance: the field name `_breadcrumbProvider` exists in the file; the comparison is a reference comparison; `DisposeBreadcrumbResources` nulls the field; the file is at most 500 lines; and no new `ExcludeFromCodeCoverage` attribute is added. -- [ ] [P3-T4] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException|FullyQualifiedName~InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator|FullyQualifiedName~SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions" /Logger:trx;LogFileName=488-d3-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p3-t4-d3-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-pass.md`. -- [ ] [P3-T5] Record the D3 no-behaviour-change dossier and the collaborator-stability evidence. Acceptance: the artifact states that D3 changes no production behaviour, gives the reason that the only two production callers are guarded upstream on a null breadcrumb coordinator in a file this feature does not own, and records that `git diff --name-only -- QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs QuickFiler/Viewers/BreadcrumbMessengerHub.cs` produces no output lines and that `SetBridgeCoordinator` and the bridge-unsubscribe helper in `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` are unchanged from ``. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-no-behaviour-change.md`. -- [ ] [P3-T6] Verify that the fail-fast coupling is recorded in the delivered `spec.md` by reading its D3 design section. Acceptance: the artifact quotes the delivered spec sentence stating that the replace-without-dispose defect is out of scope because D3 fails fast and that adopting explicit re-initialization instead would require pulling that defect into scope, and records that no task in this plan substituted a re-initialization branch. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-coupling-recorded.md`. -- [ ] [P3-T7] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` and `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. Acceptance: the production value is at most 500 and the test value is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d3.md`. -- [ ] [P3-T8] Check off the single criterion beginning "`InitializeBreadcrumbPipeline` throws `InvalidOperationException` when `BreadcrumbCoordinator` is". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P3-T3] outcome. -- [ ] [P3-T9] Check off the single criterion beginning "The retained provider is stored in a private `ItemViewer` field". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P3-T3] outcome. -- [ ] [P3-T10] Check off the single criterion beginning "Two regression tests exist: a negative case". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-pass.md`. -- [ ] [P3-T11] Check off the single criterion beginning "No re-initialization branch is added". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-no-behaviour-change.md`. -- [ ] [P3-T12] Check off the single criterion beginning "The fail-fast/`SetBridgeCoordinator` coupling is recorded". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-coupling-recorded.md`. +- [x] [P3-T1] Add two test methods to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` seeds the pipeline with a first `Mock(MockBehavior.Strict)` and asserts that a second call with a second, distinct strict provider mock throws `InvalidOperationException` and that the thrown instance is **not** an `ObjectDisposedException`. `InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator` repeats the call with the **same** provider reference, asserts it does not throw, and asserts the viewer's breadcrumb coordinator is the same instance as before the repeat call. Both carry an XML doc comment naming issue #488 defect D3. Acceptance: both method names exist, both use the strict mock behaviour, the negative case carries the `ObjectDisposedException` exclusion required by decision D-9, and the new file is at most 480 lines. +- [x] [P3-T2] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException|FullyQualifiedName~InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator" /Logger:trx;LogFileName=488-d3-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p3-t2-d3-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records `InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException` with outcome `Failed`; the positive case may already pass and its outcome is recorded as observed. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-fail.md`. +- [x] [P3-T3] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, add a private `IFolderHierarchyProvider` field named `_breadcrumbProvider`; replace the already-initialized early return in `InitializeBreadcrumbPipeline(provider, operations)` so that a non-null breadcrumb coordinator with a reference-unequal provider throws `InvalidOperationException` and returns without effect when the provider is reference-equal; assign `_breadcrumbProvider` on the successful initialization path alongside the coordinator assignment; and null it in `DisposeBreadcrumbResources` so a pipeline re-created after disposal is not blocked by a stale reference. Add no re-initialization branch, per constraint C7. Acceptance: the field name `_breadcrumbProvider` exists in the file; the comparison is a reference comparison; `DisposeBreadcrumbResources` nulls the field; the file is at most 500 lines; and no new `ExcludeFromCodeCoverage` attribute is added. +- [x] [P3-T4] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_SecondDifferentProvider_ThrowsInvalidOperationException|FullyQualifiedName~InitializeBreadcrumbPipeline_RepeatSameProvider_DoesNotThrowAndKeepsCoordinator|FullyQualifiedName~SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions" /Logger:trx;LogFileName=488-d3-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p3-t4-d3-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-pass.md`. +- [x] [P3-T5] Record the D3 no-behaviour-change dossier and the collaborator-stability evidence. Acceptance: the artifact states that D3 changes no production behaviour, gives the reason that the only two production callers are guarded upstream on a null breadcrumb coordinator in a file this feature does not own, and records that `git diff --name-only -- QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs QuickFiler/Viewers/BreadcrumbMessengerHub.cs` produces no output lines and that `SetBridgeCoordinator` and the bridge-unsubscribe helper in `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` are unchanged from ``. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-no-behaviour-change.md`. +- [x] [P3-T6] Verify that the fail-fast coupling is recorded in the delivered `spec.md` by reading its D3 design section. Acceptance: the artifact quotes the delivered spec sentence stating that the replace-without-dispose defect is out of scope because D3 fails fast and that adopting explicit re-initialization instead would require pulling that defect into scope, and records that no task in this plan substituted a re-initialization branch. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-coupling-recorded.md`. +- [x] [P3-T7] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` and `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. Acceptance: the production value is at most 500 and the test value is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d3.md`. +- [x] [P3-T8] Check off the single criterion beginning "`InitializeBreadcrumbPipeline` throws `InvalidOperationException` when `BreadcrumbCoordinator` is". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P3-T3] outcome. +- [x] [P3-T9] Check off the single criterion beginning "The retained provider is stored in a private `ItemViewer` field". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P3-T3] outcome. +- [x] [P3-T10] Check off the single criterion beginning "Two regression tests exist: a negative case". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d3-pass.md`. +- [x] [P3-T11] Check off the single criterion beginning "No re-initialization branch is added". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-no-behaviour-change.md`. +- [x] [P3-T12] Check off the single criterion beginning "The fail-fast/`SetBridgeCoordinator` coupling is recorded". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d3-coupling-recorded.md`. ### Phase 4 — D4 declare and enforce UI-thread affinity -- [ ] [P4-T1] Add two test methods to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic` constructs the viewer under an ordinary ambient context, then invokes the **two-argument** `InitializeBreadcrumbPipeline(provider, operations)` with injected operations inside `BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull`, wrapping the call in a delegate returning a value per decision D-11, and asserts an `InvalidOperationException` whose message contains the token `InitializeBreadcrumbPipeline` and which is not an `ObjectDisposedException`. `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` performs the same call with a **different non-null** ambient context installed and restored in a `try`/`finally`, asserting the same, which proves the comparison is reference equality rather than a null check. Both carry an XML doc comment stating that this proxy **proves the guard fires and does not prove the race is absent**, and that a true two-thread data race cannot be reproduced deterministically under the repository ban on sleeps and wall-clock waits. Acceptance: both method names exist; both call the two-argument overload with injected operations per decision D-8; both assert the message token and the `ObjectDisposedException` exclusion; neither creates a second thread; and the new file is at most 480 lines. -- [ ] [P4-T2] Record the harness-order confirmation for **every** site enumerated in constraint C6, having first re-derived the enumeration independently by searching every tracked file under `QuickFiler.Test` for the fixed string `ItemViewer()` rather than by trusting the list. This covers the three harnesses the spec leaves unconfirmed (`QuickFiler.Test/Viewers/BreadcrumbCollapsedSurfaceReadinessTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbPendingOpenCloseTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbCoordinatorLifecycleTests.cs`), the six other direct-constructor files including `QuickFiler.Test/Controllers/QfcItemController.ViewerSetupTests.cs`, the two pump-thread construction sites, and the constructor-bypassing site in `QuickFiler.Test/Helper Classes/QfcThemeHelperTests.cs`. Acceptance: the artifact contains one row per site recording the source line at which the synchronization context is installed and the source line at which the `ItemViewer` is constructed, and states for each direct-constructor site that the install precedes the construction; the pump-thread rows state that the captured context is the pump's own; the `QfcThemeHelperTests` row states that the viewer is produced by `CreateUninitialized()`, that its `UiSyncContext` is therefore null, that the guard's null escape makes the guard inert there, and that the file calls none of the four guarded members. The artifact also states whether the independently re-derived site set equals the C6 enumeration, after first discarding the six non-site hits constraint C6 enumerates by path and line (two commented-out lines, two XML doc comments, and two calls to the `CreateItemViewer()` helper); those six are expected and are not discrepancies. A site present in the tree but absent from C6 — that is, an executable hit producing an `ItemViewer` instance and matching none of those six — is recorded as a discrepancy and reported before [P4-T4] proceeds. Any site that does not satisfy the install-before-construct order is recorded and reported under the constraint C6 escalation rule instead of being edited. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-harness-order.md`. -- [ ] [P4-T3] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic|FullyQualifiedName~InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic" /Logger:trx;LogFileName=488-d4-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t3-d4-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records both tests with outcome `Failed`, together with the observation that no exception was thrown, which confirms the guard does not yet exist. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-fail.md`. -- [ ] [P4-T4] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, add a private helper named `ThrowIfOffUiBoundary` taking the operation name as a string parameter. It returns without effect when `UiSyncContext` is null, and otherwise throws `InvalidOperationException` whose message names the supplied operation when `SynchronizationContext.Current` is not reference-equal to `UiSyncContext`. Introduce no `Interlocked`, `lock`, `Monitor`, `Volatile`, or `Mutex` construct. Acceptance: the member name `ThrowIfOffUiBoundary` exists in the file; the comparison is a reference comparison against `UiSyncContext` rather than a managed thread-identity comparison; the null-context escape is present; the file is at most 500 lines; and no new `ExcludeFromCodeCoverage` attribute is added. -- [ ] [P4-T5] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, invoke `ThrowIfOffUiBoundary` as the **first statement** of `InitializeBreadcrumbPipeline(provider, operations)`, of both `ConfigureBreadcrumbDropDown` overloads, and of `EnsureBreadcrumbResourceOwnership`, passing each member's own name as the operation. In the two-argument `ConfigureBreadcrumbDropDown` overload the guard precedes the same-environment early return; the early return remains the first statement that can return. Acceptance: all four members have that call as the first statement of their body, the file is at most 500 lines, and no other member receives the call. -- [ ] [P4-T6] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic|FullyQualifiedName~InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic" /Logger:trx;LogFileName=488-d4-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t6-d4-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records both tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-pass.md`. -- [ ] [P4-T7] Verify that no synchronization primitive was introduced, by inspecting the added lines of `git diff -- QuickFiler/Viewers/ItemViewer.Breadcrumb.cs QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs QuickFiler/Viewers/BreadcrumbDropDownHost.cs QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` for the whole-word tokens `Interlocked`, `lock`, `Monitor`, `Volatile`, and `Mutex`. The diff spans all **seven** owned files, not only the four production files, because the criterion [P4-T13] flips bans those constructs "by this feature" without restricting the ban to production code, and the three owned test files are part of this feature; run `git add -N` on the new test file first so its added lines appear in the diff. Matching is whole-word, so `clock` in the phrase "wall-clock" and `Interlocked` are not matches for `lock`. Acceptance: no added line in that diff contains any of the five tokens as a whole word, and the artifact records the count for each token as zero and names all seven files as having been inspected. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-no-synchronization-primitives.md`. -- [ ] [P4-T8] Run the full `QuickFiler.Test` assembly under `pwsh -NoProfile` with the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /Logger:trx;LogFileName=488-d4-full-suite.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t8-d4-full-suite`, to prove empirically that the affinity guard breaks no existing harness. Acceptance: the artifact records the total, passed, failed, and skipped counts and the verbatim failing-test-name set, and that set is a subset of the `BASELINE_FAILURE_SET` recorded in [P0-T12]. Any newly failing test name outside that baseline set triggers the constraint C6 escalation: the executor writes `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/affinity-guard-blocker.md`, leaves this task unchecked, and reports. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-full-suite.md`. -- [ ] [P4-T9] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` and `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. Acceptance: the production value is at most 500 and the test value is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d4.md`. -- [ ] [P4-T10] Check off the single criterion beginning "A private `ItemViewer` helper enforces UI-thread affinity". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P4-T4] outcome. -- [ ] [P4-T11] Check off the single criterion beginning "The helper is invoked as the first statement of `InitializeBreadcrumbPipeline(provider, operations)`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P4-T5] outcome. -- [ ] [P4-T12] Check off the single criterion beginning "A regression test invokes `InitializeBreadcrumbPipeline` through the existing". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-pass.md`. -- [ ] [P4-T13] Check off the single criterion beginning "No `Interlocked`, `lock`, `Monitor`, `Volatile`, or `Mutex` construct is introduced". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-no-synchronization-primitives.md`. -- [ ] [P4-T14] Check off the single criterion beginning "The three unconfirmed harnesses". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-harness-order.md`. +- [x] [P4-T1] Add two test methods to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. `InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic` constructs the viewer under an ordinary ambient context, then invokes the **two-argument** `InitializeBreadcrumbPipeline(provider, operations)` with injected operations inside `BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull`, wrapping the call in a delegate returning a value per decision D-11, and asserts an `InvalidOperationException` whose message contains the token `InitializeBreadcrumbPipeline` and which is not an `ObjectDisposedException`. `InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic` performs the same call with a **different non-null** ambient context installed and restored in a `try`/`finally`, asserting the same, which proves the comparison is reference equality rather than a null check. Both carry an XML doc comment stating that this proxy **proves the guard fires and does not prove the race is absent**, and that a true two-thread data race cannot be reproduced deterministically under the repository ban on sleeps and wall-clock waits. Acceptance: both method names exist; both call the two-argument overload with injected operations per decision D-8; both assert the message token and the `ObjectDisposedException` exclusion; neither creates a second thread; and the new file is at most 480 lines. +- [x] [P4-T2] Record the harness-order confirmation for **every** site enumerated in constraint C6, having first re-derived the enumeration independently by searching every tracked file under `QuickFiler.Test` for the fixed string `ItemViewer()` rather than by trusting the list. This covers the three harnesses the spec leaves unconfirmed (`QuickFiler.Test/Viewers/BreadcrumbCollapsedSurfaceReadinessTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbPendingOpenCloseTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbCoordinatorLifecycleTests.cs`), the six other direct-constructor files including `QuickFiler.Test/Controllers/QfcItemController.ViewerSetupTests.cs`, the two pump-thread construction sites, and the constructor-bypassing site in `QuickFiler.Test/Helper Classes/QfcThemeHelperTests.cs`. Acceptance: the artifact contains one row per site recording the source line at which the synchronization context is installed and the source line at which the `ItemViewer` is constructed, and states for each direct-constructor site that the install precedes the construction; the pump-thread rows state that the captured context is the pump's own; the `QfcThemeHelperTests` row states that the viewer is produced by `CreateUninitialized()`, that its `UiSyncContext` is therefore null, that the guard's null escape makes the guard inert there, and that the file calls none of the four guarded members. The artifact also states whether the independently re-derived site set equals the C6 enumeration, after first discarding the six non-site hits constraint C6 enumerates by path and line (two commented-out lines, two XML doc comments, and two calls to the `CreateItemViewer()` helper); those six are expected and are not discrepancies. A site present in the tree but absent from C6 — that is, an executable hit producing an `ItemViewer` instance and matching none of those six — is recorded as a discrepancy and reported before [P4-T4] proceeds. Any site that does not satisfy the install-before-construct order is recorded and reported under the constraint C6 escalation rule instead of being edited. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-harness-order.md`. +- [x] [P4-T3] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic|FullyQualifiedName~InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic" /Logger:trx;LogFileName=488-d4-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t3-d4-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records both tests with outcome `Failed`, together with the observation that no exception was thrown, which confirms the guard does not yet exist. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-fail.md`. +- [x] [P4-T4] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, add a private helper named `ThrowIfOffUiBoundary` taking the operation name as a string parameter. It returns without effect when `UiSyncContext` is null, and otherwise throws `InvalidOperationException` whose message names the supplied operation when `SynchronizationContext.Current` is not reference-equal to `UiSyncContext`. Introduce no `Interlocked`, `lock`, `Monitor`, `Volatile`, or `Mutex` construct. Acceptance: the member name `ThrowIfOffUiBoundary` exists in the file; the comparison is a reference comparison against `UiSyncContext` rather than a managed thread-identity comparison; the null-context escape is present; the file is at most 500 lines; and no new `ExcludeFromCodeCoverage` attribute is added. +- [x] [P4-T5] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, invoke `ThrowIfOffUiBoundary` as the **first statement** of `InitializeBreadcrumbPipeline(provider, operations)`, of both `ConfigureBreadcrumbDropDown` overloads, and of `EnsureBreadcrumbResourceOwnership`, passing each member's own name as the operation. In the two-argument `ConfigureBreadcrumbDropDown` overload the guard precedes the same-environment early return; the early return remains the first statement that can return. Acceptance: all four members have that call as the first statement of their body, the file is at most 500 lines, and no other member receives the call. +- [x] [P4-T6] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AmbientContextNull_ThrowsBoundaryDiagnostic|FullyQualifiedName~InitializeBreadcrumbPipeline_DifferentNonNullContext_ThrowsBoundaryDiagnostic" /Logger:trx;LogFileName=488-d4-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t6-d4-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records both tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-pass.md`. +- [x] [P4-T7] Verify that no synchronization primitive was introduced, by inspecting the added lines of `git diff -- QuickFiler/Viewers/ItemViewer.Breadcrumb.cs QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs QuickFiler/Viewers/BreadcrumbDropDownHost.cs QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs` for the whole-word tokens `Interlocked`, `lock`, `Monitor`, `Volatile`, and `Mutex`. The diff spans all **seven** owned files, not only the four production files, because the criterion [P4-T13] flips bans those constructs "by this feature" without restricting the ban to production code, and the three owned test files are part of this feature; run `git add -N` on the new test file first so its added lines appear in the diff. Matching is whole-word, so `clock` in the phrase "wall-clock" and `Interlocked` are not matches for `lock`. Acceptance: no added line in that diff contains any of the five tokens as a whole word, and the artifact records the count for each token as zero and names all seven files as having been inspected. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-no-synchronization-primitives.md`. +- [x] [P4-T8] Run the full `QuickFiler.Test` assembly under `pwsh -NoProfile` with the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /Logger:trx;LogFileName=488-d4-full-suite.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p4-t8-d4-full-suite`, to prove empirically that the affinity guard breaks no existing harness. Acceptance: the artifact records the total, passed, failed, and skipped counts and the verbatim failing-test-name set, and that set is a subset of the `BASELINE_FAILURE_SET` recorded in [P0-T12]. Any newly failing test name outside that baseline set triggers the constraint C6 escalation: the executor writes `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/affinity-guard-blocker.md`, leaves this task unchecked, and reports. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-full-suite.md`. +- [x] [P4-T9] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` and `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. Acceptance: the production value is at most 500 and the test value is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d4.md`. +- [x] [P4-T10] Check off the single criterion beginning "A private `ItemViewer` helper enforces UI-thread affinity". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P4-T4] outcome. +- [x] [P4-T11] Check off the single criterion beginning "The helper is invoked as the first statement of `InitializeBreadcrumbPipeline(provider, operations)`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P4-T5] outcome. +- [x] [P4-T12] Check off the single criterion beginning "A regression test invokes `InitializeBreadcrumbPipeline` through the existing". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d4-pass.md`. +- [x] [P4-T13] Check off the single criterion beginning "No `Interlocked`, `lock`, `Monitor`, `Volatile`, or `Mutex` construct is introduced". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-no-synchronization-primitives.md`. +- [x] [P4-T14] Check off the single criterion beginning "The three unconfirmed harnesses". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d4-harness-order.md`. ### Phase 5 — D5 refuse breadcrumb resource creation during teardown -- [ ] [P5-T1] Add the test method `InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It constructs the viewer under an ordinary ambient context, disposes it, then calls the two-argument `InitializeBreadcrumbPipeline(provider, operations)` on the same ambient context so the affinity guard passes, and asserts `ObjectDisposedException` and that the viewer's breadcrumb coordinator is null. It carries an XML doc comment naming issue #488 defect D5. Acceptance: the method exists with that exact name, the assertion type is `ObjectDisposedException` rather than its base type, the null-coordinator assertion is present, and the new file is at most 480 lines. -- [ ] [P5-T2] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException" /Logger:trx;LogFileName=488-d5-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p5-t2-d5-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` together with the observation that the call succeeded against a disposed viewer, which is the defect. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-fail.md`. -- [ ] [P5-T3] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, make an `ObjectDisposedException` throw the first action of `EnsureBreadcrumbResourceOwnership` when the viewer reports `IsDisposed` or `Disposing`, so that no container is created and no breadcrumb resource owner is added after teardown has begun. It precedes the existing already-owned early return. The affinity-guard call added by [P4-T5] and this throw are the only two statements added to this member, and **decision D-15 fixes their order**: the affinity guard is the first statement, the disposal throw is the second and is the first statement that acts. Do not reverse them; state their relative order explicitly in the delivered source with a short comment citing D-15. Acceptance: the affinity-guard call is the first statement of the member and the `ObjectDisposedException` throw is the statement immediately following it, so that the criterion [P4-T11] flips ("first statement") and the criterion [P5-T8] flips ("first action") are both satisfied under D-15's reading; the throw precedes the already-owned early return and precedes any container creation and any `BreadcrumbResourceOwner` addition; both `IsDisposed` and `Disposing` are tested; the delivered source states the order; the file is at most 500 lines; and `QuickFiler/Viewers/ItemViewer.Designer.cs` is not edited. -- [ ] [P5-T4] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException|FullyQualifiedName~DisposedCoordinator_SetBridgeCoordinatorThrows" /Logger:trx;LogFileName=488-d5-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p5-t4-d5-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records both named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-pass.md`. -- [ ] [P5-T5] Verify that `QuickFiler/Viewers/ItemViewer.Designer.cs` is unchanged by running `git diff --name-only -- QuickFiler/Viewers/ItemViewer.Designer.cs`. Acceptance: the command produces no output lines, establishing that the file is byte-identical to its pre-change state; the artifact also records the file's line count of 6224 and the reason D5's design avoids it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-designer-untouched.md`. -- [ ] [P5-T6] Discharge the research open item recorded under D5: read `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` and every in-repo caller of `InitializeWebViewAsync`, and determine whether the returned task is awaited, `ContinueWith`-observed, or otherwise observed by its caller, or whether it is discarded. Do not edit that file. If and only if the task is **not** observed, create the follow-up potential entry under `docs/features/potential/` against `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` **in this task**, and promote it to a GitHub issue through the repository's promotion lifecycle. The creation and the promotion are performed here rather than by [P7-T5] because [P5-T11] flips its criterion in this phase and that criterion requires the issue to exist and to be referenced; citing an issue that a later phase has not yet opened cannot be satisfied in plan order. Acceptance: the artifact names each caller with its file and member, states for each whether the task is observed, and states the overall conclusion; if the task is not observed, the artifact additionally records the created potential-entry path, **the resulting GitHub issue number and URL**, and states explicitly that the D5 guard is **not** weakened in response. The promotion to an issue is required rather than optional because the criterion [P5-T11] flips says "a new issue is opened against `QfcItemController.ViewerSetup.cs` (484-owned) and referenced here"; unlike the three-follow-up criterion [P7-T14] flips, which permits "a potential entry or GitHub issue", this criterion names an issue specifically, and a potential entry alone would not establish it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md`. -- [ ] [P5-T7] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` and `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. Acceptance: the production value is at most 500 and the test value is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d5.md`. -- [ ] [P5-T8] Check off the single criterion beginning "`EnsureBreadcrumbResourceOwnership` throws `ObjectDisposedException` as its first action". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P5-T3] outcome. -- [ ] [P5-T9] Check off the single criterion beginning "A regression test disposes a real `ItemViewer`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-pass.md`. -- [ ] [P5-T10] Check off the single criterion beginning "`QuickFiler/Viewers/ItemViewer.Designer.cs` is byte-identical". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-designer-untouched.md`. -- [ ] [P5-T11] Check off the single criterion beginning "The research §3.5 open item is discharged". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md`. +- [x] [P5-T1] Add the test method `InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It constructs the viewer under an ordinary ambient context, disposes it, then calls the two-argument `InitializeBreadcrumbPipeline(provider, operations)` on the same ambient context so the affinity guard passes, and asserts `ObjectDisposedException` and that the viewer's breadcrumb coordinator is null. It carries an XML doc comment naming issue #488 defect D5. Acceptance: the method exists with that exact name, the assertion type is `ObjectDisposedException` rather than its base type, the null-coordinator assertion is present, and the new file is at most 480 lines. +- [x] [P5-T2] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException" /Logger:trx;LogFileName=488-d5-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p5-t2-d5-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` together with the observation that the call succeeded against a disposed viewer, which is the defect. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-fail.md`. +- [x] [P5-T3] In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, make an `ObjectDisposedException` throw the first action of `EnsureBreadcrumbResourceOwnership` when the viewer reports `IsDisposed` or `Disposing`, so that no container is created and no breadcrumb resource owner is added after teardown has begun. It precedes the existing already-owned early return. The affinity-guard call added by [P4-T5] and this throw are the only two statements added to this member, and **decision D-15 fixes their order**: the affinity guard is the first statement, the disposal throw is the second and is the first statement that acts. Do not reverse them; state their relative order explicitly in the delivered source with a short comment citing D-15. Acceptance: the affinity-guard call is the first statement of the member and the `ObjectDisposedException` throw is the statement immediately following it, so that the criterion [P4-T11] flips ("first statement") and the criterion [P5-T8] flips ("first action") are both satisfied under D-15's reading; the throw precedes the already-owned early return and precedes any container creation and any `BreadcrumbResourceOwner` addition; both `IsDisposed` and `Disposing` are tested; the delivered source states the order; the file is at most 500 lines; and `QuickFiler/Viewers/ItemViewer.Designer.cs` is not edited. +- [x] [P5-T4] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~InitializeBreadcrumbPipeline_AfterViewerDisposed_ThrowsObjectDisposedException|FullyQualifiedName~DisposedCoordinator_SetBridgeCoordinatorThrows" /Logger:trx;LogFileName=488-d5-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p5-t4-d5-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records both named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-pass.md`. +- [x] [P5-T5] Verify that `QuickFiler/Viewers/ItemViewer.Designer.cs` is unchanged by running `git diff --name-only -- QuickFiler/Viewers/ItemViewer.Designer.cs`. Acceptance: the command produces no output lines, establishing that the file is byte-identical to its pre-change state; the artifact also records the file's line count of 6224 and the reason D5's design avoids it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-designer-untouched.md`. +- [x] [P5-T6] Discharge the research open item recorded under D5: read `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` and every in-repo caller of `InitializeWebViewAsync`, and determine whether the returned task is awaited, `ContinueWith`-observed, or otherwise observed by its caller, or whether it is discarded. Do not edit that file. If and only if the task is **not** observed, create the follow-up potential entry under `docs/features/potential/` against `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` **in this task**, and promote it to a GitHub issue through the repository's promotion lifecycle. The creation and the promotion are performed here rather than by [P7-T5] because [P5-T11] flips its criterion in this phase and that criterion requires the issue to exist and to be referenced; citing an issue that a later phase has not yet opened cannot be satisfied in plan order. Acceptance: the artifact names each caller with its file and member, states for each whether the task is observed, and states the overall conclusion; if the task is not observed, the artifact additionally records the created potential-entry path, **the resulting GitHub issue number and URL**, and states explicitly that the D5 guard is **not** weakened in response. The promotion to an issue is required rather than optional because the criterion [P5-T11] flips says "a new issue is opened against `QfcItemController.ViewerSetup.cs` (484-owned) and referenced here"; unlike the three-follow-up criterion [P7-T14] flips, which permits "a potential entry or GitHub issue", this criterion names an issue specifically, and a potential entry alone would not establish it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md`. +- [x] [P5-T7] Record the current line count of `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` and `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. Acceptance: the production value is at most 500 and the test value is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-d5.md`. +- [x] [P5-T8] Check off the single criterion beginning "`EnsureBreadcrumbResourceOwnership` throws `ObjectDisposedException` as its first action". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P5-T3] outcome. +- [x] [P5-T9] Check off the single criterion beginning "A regression test disposes a real `ItemViewer`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/488-d5-pass.md`. +- [x] [P5-T10] Check off the single criterion beginning "`QuickFiler/Viewers/ItemViewer.Designer.cs` is byte-identical". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-designer-untouched.md`. +- [x] [P5-T11] Check off the single criterion beginning "The research §3.5 open item is discharged". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md`. ### Phase 6 — Issue #475 removal of the ambient-probing selector @@ -496,44 +496,44 @@ two `BreadcrumbDropDownHost` references would leave `ItemViewer.Breadcrumb.cs` n which is compile error CS0117, and would make [P6-T3]'s own zero-match acceptance unreachable and [P6-T4]'s and [P6-T5]'s builds fail for a reason unrelated to the defect under test. -- [ ] [P6-T1] Add the test method `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It constructs a `BreadcrumbDropDownHost` through the `public` seven-parameter constructor inside `BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull`, supplying a **non-null** surface factory so the argument-null guard is not reached, a null anchor, a null environment, three no-op actions and a no-op show-popup delegate, mirroring the arrangement of `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory`; the constructed host is disposed inside the delegate so the pre-fix run leaks nothing. It asserts `InvalidOperationException`. It carries an XML doc comment naming issue #475. Acceptance: the method exists with that exact name, the surface factory argument is non-null, the host is disposed within the delegate, and the new file is at most 480 lines. -- [ ] [P6-T2] Add the test method `ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It constructs the viewer under an ordinary ambient context; seeds the lifecycle through `InitializeBreadcrumbPipeline(provider, operations)` with injected operations; then assigns the viewer's private `_context` field to null through the [P1-T1] accessor, per decision D-10, so the affinity guard is inert for this viewer; then calls the three-argument `ConfigureBreadcrumbDropDown(host, anchorBounds, workingArea)` inside `BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull` with a hand-written drop-down host, and asserts that the call does not throw. It carries an XML doc comment naming issue #475 part 3 and stating that the reflective field assignment is the only way to produce a viewer with a null owning context **that has run its constructor**, because the `ItemViewer` constructor captures the ambient context and then calls a scheduler factory that itself requires a non-null one. Per decision D-10 the qualifier is mandatory: the unqualified claim is false, since `CreateUninitialized()` also yields a null `_context`, and that route cannot be used here because this test needs a viewer whose pipeline has been seeded. Acceptance: the method exists with that exact name, uses the reflective accessor rather than constructing the viewer under a null context, contains no second thread and no timing construct, and the new file is at most 480 lines. -- [ ] [P6-T3] Deliver #475 parts 1 and 2 together, plus the replacement boundary test, in one edit set. In `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs`, delete the `CaptureCurrentOrTests` declaration and the blank line that separates it from the preceding member, adding nothing to that file. In `QuickFiler/Viewers/BreadcrumbDropDownHost.cs`, change the operations argument supplied by the two seven-parameter constructor chains from `CaptureCurrentOrTests` to `CaptureCurrent`, without reordering any constructor argument. In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, change the `EnsureBreadcrumbLifecycle` argument in **both** `ConfigureBreadcrumbDropDown` overloads from `BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` to `BreadcrumbPopupUiOperations.CaptureCurrent()`, resolving each site by its enclosing overload rather than by line number; both stay eagerly evaluated at this task and [P6-T7] converts them to the lazy method-group form. That swap is a pure identifier change with a zero-line delta, so it consumes none of the `ItemViewer.Breadcrumb.cs` capacity budgeted in constraint C2, and it is what makes the zero-match acceptance below reachable. In `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, delete `CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` and add `CaptureCurrent_NullAndControlledContexts_FailFastAndCapture` in its place, which uses that file's existing private context helper to assert that `CaptureCurrent` under a null ambient context throws `InvalidOperationException` and retains the controlled-context half against `CaptureCurrent`. Acceptance: the fixed string `CaptureCurrentOrTests` returns zero matches across all tracked `.cs` files; `CreateForCurrentThreadTests` still exists in both `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` and `QuickFiler/Viewers/BreadcrumbUiDispatcher.cs` and both declarations are unchanged from ``; `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` is strictly shorter than its 494-line baseline and at most 500 lines; `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` is at most 500 lines; `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` is at most 500 lines; and `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` is at most 500 lines with a line count unchanged by this task, the two swaps being identifier-for-identifier. -- [ ] [P6-T4] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow" /Logger:trx;LogFileName=475-lazy-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t4-475-lazy-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` together with the observation that the eagerly evaluated operations argument threw before the already-initialized early return could discard it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-lazy-fail.md`. -- [ ] [P6-T5] Run the resolved `vstest.console.exe` under `pwsh -NoProfile` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException|FullyQualifiedName~CaptureCurrent_NullAndControlledContexts_FailFastAndCapture|FullyQualifiedName~Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory" /Logger:trx;LogFileName=475-failfast-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t5-475-failfast-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`, together with the note that the third test passes without an ambient context because the surface-factory argument-null guard is evaluated before the operations argument, which is why [P6-T3] must not reorder constructor arguments. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md`. -- [ ] [P6-T6] [expect-fail] Record the fail-before evidence for `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException`. Because [P6-T3] delivers the deletion and the constructor swap in one compile-valid edit set, this test's failing observation must be taken by temporarily reverting only the two `BreadcrumbDropDownHost` identifier swaps, **rebuilding**, running the filter, and then restoring the swaps and rebuilding again; the deletion itself is not reverted, because the boundary test in `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` would then not compile. The reverted state must be spelled as a restored **local** `CaptureCurrentOrTests`-equivalent selector private to `BreadcrumbDropDownHost.cs`, or as a temporary restoration of the deleted declaration, whichever compiles; the point is only that the constructor chains stop failing fast. **The rebuild is load-bearing.** `vstest.console.exe` runs the compiled assembly, not the source, so reverting the source without rebuilding leaves the fail-fast swaps in the binary, the test passes, and this task's `[expect-fail]` acceptance can never be met. Under `pwsh -NoProfile`, rebuild with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"` against `QuickFiler.Test\QuickFiler.Test.csproj` in the reverted state before running the filter, and rebuild once more after restoring. Neither build is an analyzer or nullable gate. Run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException" /Logger:trx;LogFileName=475-ctor-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t6-475-ctor-fail` in the reverted state. Acceptance: the artifact records `EXIT_CODE:` non-zero with `ExpectedExitCode: 1` and the test outcome `Failed` in the reverted state; records the exit code of the reverted-state rebuild and of the restore rebuild, both of which must be 0, so that the `Failed` outcome is attributable to the reverted behaviour and not to a stale or broken assembly; records that the two identifier swaps were restored immediately afterwards; and records that `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownHost.cs` again reports the file as changed with the swaps in place and that `git diff --name-only -- QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` shows the [P6-T3] state restored unchanged. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-ctor-fail.md`. -- [ ] [P6-T7] Deliver #475 part 3 in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`: change `EnsureBreadcrumbLifecycle`'s operations parameter to a factory delegate returning `BreadcrumbPopupUiOperations`, evaluate it **only after** the already-initialized early return, and update all three call sites, passing a closure over the supplied operations at the initialization site and the `CaptureCurrent` method group at the two `ConfigureBreadcrumbDropDown` sites. Acceptance: `EnsureBreadcrumbLifecycle` takes a factory delegate; the delegate is invoked after the early return and exactly once; all three call sites are updated; `EnsureBreadcrumbLifecycle` remains private so no public member is re-signed; and the file is at most 500 lines. -- [ ] [P6-T8] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow|FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException|FullyQualifiedName~CaptureCurrent_NullAndControlledContexts_FailFastAndCapture" /Logger:trx;LogFileName=475-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t8-475-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-pass.md`. -- [ ] [P6-T9] Record the #475 seam-preservation audit: list every test file that constructs a `BreadcrumbPopupUiOperations` through its injectable constructor or through `CreateForCurrentThreadTests`, and confirm none of them was modified by this feature. Acceptance: the artifact lists each such file with the count of injection sites, and records that `git diff --name-only -- QuickFiler.Test` reports only `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`, and `QuickFiler.Test/QuickFiler.Test.csproj`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/475-seam-audit.md`. -- [ ] [P6-T10] Record the current line count of all four owned production files and all three owned test files. Acceptance: every production value is at most 500, `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` is strictly below 494, and the new test file is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-475.md`. -- [ ] [P6-T11] Check off the single criterion beginning "`BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` no longer exists". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P6-T3] outcome. -- [ ] [P6-T12] Check off the single criterion beginning "`BreadcrumbPopupUiOperations.CreateForCurrentThreadTests()` and". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P6-T3] outcome. -- [ ] [P6-T13] Check off the single criterion beginning "Both `BreadcrumbDropDownHost` constructor chains". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md`. -- [ ] [P6-T14] Check off the single criterion beginning "`ItemViewer.EnsureBreadcrumbLifecycle` takes a". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P6-T7] outcome. -- [ ] [P6-T15] Check off the single criterion beginning "`CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` is deleted". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md`. -- [ ] [P6-T16] Check off the single criterion beginning "A seam-preservation regression test calls the 3-arg `ConfigureBreadcrumbDropDown` inside". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites both `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-lazy-fail.md` for the red observation and `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-pass.md` for the green one; the citation of two artifacts for this single red-then-green criterion is one of the two multi-artifact citations decision D-12 authorizes, the other being [P9-T1]'s conjunctive Phase 0 baseline criterion. No other check-off task in this plan may cite more than one artifact. -- [ ] [P6-T17] Check off the single criterion beginning "No test file other than `BreadcrumbPopupBoundaryCoverageTests.Part2.cs`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/475-seam-audit.md`. +- [x] [P6-T1] Add the test method `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It constructs a `BreadcrumbDropDownHost` through the `public` seven-parameter constructor inside `BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull`, supplying a **non-null** surface factory so the argument-null guard is not reached, a null anchor, a null environment, three no-op actions and a no-op show-popup delegate, mirroring the arrangement of `Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory`; the constructed host is disposed inside the delegate so the pre-fix run leaks nothing. It asserts `InvalidOperationException`. It carries an XML doc comment naming issue #475. Acceptance: the method exists with that exact name, the surface factory argument is non-null, the host is disposed within the delegate, and the new file is at most 480 lines. +- [x] [P6-T2] Add the test method `ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow` to `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`. It constructs the viewer under an ordinary ambient context; seeds the lifecycle through `InitializeBreadcrumbPipeline(provider, operations)` with injected operations; then assigns the viewer's private `_context` field to null through the [P1-T1] accessor, per decision D-10, so the affinity guard is inert for this viewer; then calls the three-argument `ConfigureBreadcrumbDropDown(host, anchorBounds, workingArea)` inside `BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull` with a hand-written drop-down host, and asserts that the call does not throw. It carries an XML doc comment naming issue #475 part 3 and stating that the reflective field assignment is the only way to produce a viewer with a null owning context **that has run its constructor**, because the `ItemViewer` constructor captures the ambient context and then calls a scheduler factory that itself requires a non-null one. Per decision D-10 the qualifier is mandatory: the unqualified claim is false, since `CreateUninitialized()` also yields a null `_context`, and that route cannot be used here because this test needs a viewer whose pipeline has been seeded. Acceptance: the method exists with that exact name, uses the reflective accessor rather than constructing the viewer under a null context, contains no second thread and no timing construct, and the new file is at most 480 lines. +- [x] [P6-T3] Deliver #475 parts 1 and 2 together, plus the replacement boundary test, in one edit set. In `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs`, delete the `CaptureCurrentOrTests` declaration and the blank line that separates it from the preceding member, adding nothing to that file. In `QuickFiler/Viewers/BreadcrumbDropDownHost.cs`, change the operations argument supplied by the two seven-parameter constructor chains from `CaptureCurrentOrTests` to `CaptureCurrent`, without reordering any constructor argument. In `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`, change the `EnsureBreadcrumbLifecycle` argument in **both** `ConfigureBreadcrumbDropDown` overloads from `BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` to `BreadcrumbPopupUiOperations.CaptureCurrent()`, resolving each site by its enclosing overload rather than by line number; both stay eagerly evaluated at this task and [P6-T7] converts them to the lazy method-group form. That swap is a pure identifier change with a zero-line delta, so it consumes none of the `ItemViewer.Breadcrumb.cs` capacity budgeted in constraint C2, and it is what makes the zero-match acceptance below reachable. In `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, delete `CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` and add `CaptureCurrent_NullAndControlledContexts_FailFastAndCapture` in its place, which uses that file's existing private context helper to assert that `CaptureCurrent` under a null ambient context throws `InvalidOperationException` and retains the controlled-context half against `CaptureCurrent`. Acceptance: the fixed string `CaptureCurrentOrTests` returns zero matches across all tracked `.cs` files; `CreateForCurrentThreadTests` still exists in both `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` and `QuickFiler/Viewers/BreadcrumbUiDispatcher.cs` and both declarations are unchanged from ``; `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` is strictly shorter than its 494-line baseline and at most 500 lines; `QuickFiler/Viewers/BreadcrumbDropDownHost.cs` is at most 500 lines; `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs` is at most 500 lines; and `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` is at most 500 lines with a line count unchanged by this task, the two swaps being identifier-for-identifier. +- [x] [P6-T4] [expect-fail] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow" /Logger:trx;LogFileName=475-lazy-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t4-475-lazy-fail`. Acceptance: `EXIT_CODE:` is non-zero, `ExpectedExitCode: 1` is recorded, and the artifact records that test with outcome `Failed` together with the observation that the eagerly evaluated operations argument threw before the already-initialized early return could discard it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-lazy-fail.md`. +- [x] [P6-T5] Run the resolved `vstest.console.exe` under `pwsh -NoProfile` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException|FullyQualifiedName~CaptureCurrent_NullAndControlledContexts_FailFastAndCapture|FullyQualifiedName~Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory" /Logger:trx;LogFileName=475-failfast-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t5-475-failfast-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`, together with the note that the third test passes without an ambient context because the surface-factory argument-null guard is evaluated before the operations argument, which is why [P6-T3] must not reorder constructor arguments. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md`. +- [x] [P6-T6] [expect-fail] Record the fail-before evidence for `LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException`. Because [P6-T3] delivers the deletion and the constructor swap in one compile-valid edit set, this test's failing observation must be taken by temporarily reverting only the two `BreadcrumbDropDownHost` identifier swaps, **rebuilding**, running the filter, and then restoring the swaps and rebuilding again; the deletion itself is not reverted, because the boundary test in `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` would then not compile. The reverted state must be spelled as a restored **local** `CaptureCurrentOrTests`-equivalent selector private to `BreadcrumbDropDownHost.cs`, or as a temporary restoration of the deleted declaration, whichever compiles; the point is only that the constructor chains stop failing fast. **The rebuild is load-bearing.** `vstest.console.exe` runs the compiled assembly, not the source, so reverting the source without rebuilding leaves the fail-fast swaps in the binary, the test passes, and this task's `[expect-fail]` acceptance can never be met. Under `pwsh -NoProfile`, rebuild with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"` against `QuickFiler.Test\QuickFiler.Test.csproj` in the reverted state before running the filter, and rebuild once more after restoring. Neither build is an analyzer or nullable gate. Run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException" /Logger:trx;LogFileName=475-ctor-fail.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t6-475-ctor-fail` in the reverted state. Acceptance: the artifact records `EXIT_CODE:` non-zero with `ExpectedExitCode: 1` and the test outcome `Failed` in the reverted state; records the exit code of the reverted-state rebuild and of the restore rebuild, both of which must be 0, so that the `Failed` outcome is attributable to the reverted behaviour and not to a stale or broken assembly; records that the two identifier swaps were restored immediately afterwards; and records that `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownHost.cs` again reports the file as changed with the swaps in place and that `git diff --name-only -- QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` shows the [P6-T3] state restored unchanged. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-ctor-fail.md`. +- [x] [P6-T7] Deliver #475 part 3 in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs`: change `EnsureBreadcrumbLifecycle`'s operations parameter to a factory delegate returning `BreadcrumbPopupUiOperations`, evaluate it **only after** the already-initialized early return, and update all three call sites, passing a closure over the supplied operations at the initialization site and the `CaptureCurrent` method group at the two `ConfigureBreadcrumbDropDown` sites. Acceptance: `EnsureBreadcrumbLifecycle` takes a factory delegate; the delegate is invoked after the early return and exactly once; all three call sites are updated; `EnsureBreadcrumbLifecycle` remains private so no public member is re-signed; and the file is at most 500 lines. +- [x] [P6-T8] Build `QuickFiler.Test\QuickFiler.Test.csproj` under `pwsh -NoProfile` with `/t:Build /m /p:Configuration=Debug "/p:Platform=Any CPU"`, then run the resolved `vstest.console.exe` with `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /TestCaseFilter:"FullyQualifiedName~ConfigureBreadcrumbDropDown_SeededLifecycleNullUiContext_DoesNotThrow|FullyQualifiedName~LegacySurfaceFactoryConstructor_AmbientContextNull_ThrowsInvalidOperationException|FullyQualifiedName~CaptureCurrent_NullAndControlledContexts_FailFastAndCapture" /Logger:trx;LogFileName=475-pass.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\regression-testing\p6-t8-475-pass`. Acceptance: `EXIT_CODE: 0`, failed count 0, and the artifact records all three named tests with outcome `Passed`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-pass.md`. +- [x] [P6-T9] Record the #475 seam-preservation audit: list every test file that constructs a `BreadcrumbPopupUiOperations` through its injectable constructor or through `CreateForCurrentThreadTests`, and confirm none of them was modified by this feature. Acceptance: the artifact lists each such file with the count of injection sites, and records that `git diff --name-only -- QuickFiler.Test` reports only `QuickFiler.Test/Viewers/BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, `QuickFiler.Test/Viewers/BreadcrumbPopupBoundaryCoverageTests.Part2.cs`, `QuickFiler.Test/Viewers/ItemViewerBreadcrumbLifecycleRegressionTests.cs`, and `QuickFiler.Test/QuickFiler.Test.csproj`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/475-seam-audit.md`. +- [x] [P6-T10] Record the current line count of all four owned production files and all three owned test files. Acceptance: every production value is at most 500, `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` is strictly below 494, and the new test file is at most 480. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-after-475.md`. +- [x] [P6-T11] Check off the single criterion beginning "`BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` no longer exists". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P6-T3] outcome. +- [x] [P6-T12] Check off the single criterion beginning "`BreadcrumbPopupUiOperations.CreateForCurrentThreadTests()` and". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P6-T3] outcome. +- [x] [P6-T13] Check off the single criterion beginning "Both `BreadcrumbDropDownHost` constructor chains". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md`. +- [x] [P6-T14] Check off the single criterion beginning "`ItemViewer.EnsureBreadcrumbLifecycle` takes a". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the [P6-T7] outcome. +- [x] [P6-T15] Check off the single criterion beginning "`CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` is deleted". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-failfast-pass.md`. +- [x] [P6-T16] Check off the single criterion beginning "A seam-preservation regression test calls the 3-arg `ConfigureBreadcrumbDropDown` inside". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites both `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-lazy-fail.md` for the red observation and `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/475-pass.md` for the green one; the citation of two artifacts for this single red-then-green criterion is one of the two multi-artifact citations decision D-12 authorizes, the other being [P9-T1]'s conjunctive Phase 0 baseline criterion. No other check-off task in this plan may cite more than one artifact. +- [x] [P6-T17] Check off the single criterion beginning "No test file other than `BreadcrumbPopupBoundaryCoverageTests.Part2.cs`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/475-seam-audit.md`. ### Phase 7 — Scope, ownership, contract, and follow-up verification -- [ ] [P7-T1] Re-run the nine constraining tests recorded in [P0-T13] under `pwsh -NoProfile` with the resolved `vstest.console.exe`, `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /Logger:trx;LogFileName=constraining-tests-final.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\trx-p7-t1` and a test-case filter joining the nine fully qualified name fragments with the pipe character. The filter joins fragments with the literal `|` character; `vstest.console.exe` rejects the word `OR` in a `/TestCaseFilter:` expression. Acceptance: the artifact records one row per name with its observed outcome and its [P0-T13] baseline outcome, and **no name's outcome is worse than its baseline outcome**. The expected case is that all nine baselines were `Passed`, in which case this gate is `EXIT_CODE: 0` with failed count 0 and the artifact records it as such. The baseline-comparison form is stated because [P0-T13] is instructed to *record* each baseline outcome rather than to require it to be `Passed`; an absolute failed count 0 combined with the unchanged-from-baseline requirement is self-contradictory whenever a baseline outcome is not `Passed`. If any of the nine was not `Passed` at baseline, the executor records that fact, leaves this task **unchecked**, and reports, because a constraining test that was already red cannot constrain this fix. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/constraining-tests-final.md`. -- [ ] [P7-T2] Verify the changed-file set by running `git diff --name-only -- . ":(exclude).claude/agent-memory"` and `git status --porcelain` from the worktree root, having first run `git add -N` on any untracked file this plan created so the new test file appears in the diff. Acceptance: every path reported by the diff command is one of the four owned production files, one of the three owned test files, `QuickFiler.Test/QuickFiler.Test.csproj`, a path under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/`, or a path under `docs/features/potential/`; every path reported by `git status --porcelain` is likewise one of those or is under `.claude/agent-memory/`; no other path appears. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/changed-file-set.md`. -- [ ] [P7-T3] Verify that no forbidden file was written by running `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs QuickFiler/Viewers/BreadcrumbMessengerHub.cs QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs QuickFiler/Viewers/BreadcrumbCoordinatorUpgradeLifetime.cs QuickFiler/Viewers/ItemViewer.cs QuickFiler/Viewers/ItemViewer.Designer.cs QuickFiler/Viewers/IBreadcrumbDropDownHost.cs QuickFiler/Viewers/IItemViewer.cs QuickFiler/Controllers/QfcItemController.ViewerSetup.cs QuickFiler/QuickFiler.csproj QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: the command produces no output lines. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/forbidden-files-untouched.md`. -- [ ] [P7-T4] Verify the public-surface stability of the four owned production files by enumerating every member added, removed, or re-signed, with its declared accessibility, from `git diff ` over those four files. Acceptance: the artifact lists the added members as exactly the private helper `ThrowIfOffUiBoundary`, the private field `_breadcrumbProvider`, and the private retained-theme field on the lifecycle coordinator; records the one re-signed member as the private `EnsureBreadcrumbLifecycle`; records the one removed member as the internal static `CaptureCurrentOrTests`; and records that no `public` member was added, removed, or re-signed and that both seven-parameter `BreadcrumbDropDownHost` constructors keep their signatures. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/public-surface.md`. -- [ ] [P7-T5] Create one potential entry per out-of-scope follow-up candidate under `docs/features/potential/`, each naming the mechanism, the trigger, and the owning file or files, and each carrying the standard potential-entry front matter: the generation guard that drops the **incoming** host without disposing it in `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`; `SetBridgeCoordinator` replacing without disposing while the coordinator's `Dispose` does dispose, in the same file; and the reset-path synchrony mismatch spanning that file and `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`, whose entry must name both files. If [P5-T6] concluded that the faulted initialization task is unobserved, a fourth entry against `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` **was already created and promoted to a GitHub issue by [P5-T6]**; do not create a duplicate entry and do not open a second issue, and instead carry its path, issue number, and URL forward from [P5-T6]'s artifact into this one. The first three need only be potential entries and are created by this task. The asymmetry is deliberate and is not an oversight: the criterion [P7-T14] flips accepts "a potential entry or GitHub issue" for the three, whereas the criterion [P5-T11] flips requires that "a new issue is opened" for the fourth, which is why the fourth is created and promoted in Phase 5, where that criterion is checked off. Acceptance: the three entries this task creates exist, each names its mechanism and trigger, the artifact records that no fix for any of them appears in this feature's diff, and — when [P5-T6] so concluded — the artifact records the fourth entry's path together with the issue number and URL taken verbatim from [P5-T6]'s artifact, and states that no duplicate entry and no second issue were created. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/followup-promotions.md`. -- [ ] [P7-T6] Re-check the `## Dependencies on 489` section against the current tree. For D489-1 confirm `UiSyncContext` still exists on `QuickFiler/Viewers/ItemViewer.cs` and still returns the constructor-captured context; for D489-2 confirm the type-level coverage exclusion is still present at `QuickFiler/Viewers/ItemViewer.cs:20`; for D489-3 confirm the designer disposal shape is unchanged; for **D489-4** search every `QuickFiler/Viewers/ItemViewer` partial other than `ItemViewer.Breadcrumb.cs` for the fixed strings `ThrowIfOffUiBoundary` and `_breadcrumbProvider`; for D489-5 confirm no other entry in `QuickFiler.Test/QuickFiler.Test.csproj` names the same file name as the new test file; and for D489-6 confirm `QuickFiler/Viewers/IItemViewer.cs` is unchanged. Acceptance: the artifact records one row per dependency as confirmed or as requiring a named adjustment, the D489-4 searches each return zero matches, and the artifact states whether `docs/features/active/itemviewer-surface-defects-489/spec.md` is present on this branch and, if it is absent, that the check was made against current source instead. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/dependencies-489-recheck.md`. -- [ ] [P7-T7] Verify the `.csproj` diff shape by running `git diff --numstat -- QuickFiler.Test/QuickFiler.Test.csproj`. Acceptance: the command reports exactly 1 added line and 0 deleted lines, and the artifact records the delivered line number of the added entry together with the two entries immediately above and below it, confirming adjacency to the existing `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` entry and that no entry was reordered. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csproj-diff-shape.md`. -- [ ] [P7-T8] Verify that `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/user-story.md` does not exist, recording `SearchScope:` as that feature folder, `SearchPatterns:` as the file name, and `SearchResult:` as the outcome. Acceptance: the artifact records `SearchResult: none` and states that under `full-bug` a second checkbox-bearing document in this folder would be an integrity failure. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/user-story-absent.md`. -- [ ] [P7-T9] Write the change description for this change-set. Acceptance: the artifact states that D3 **changes no production behaviour**, with the upstream-guard reason; states that D4's regression proxy **proves the guard fires and does not prove the race is absent**, and that a true two-thread data race cannot be reproduced deterministically under the repository ban on sleeps and wall-clock waits; **quotes verbatim the corresponding sentences from the delivered XML doc comments of the two [P4-T1] test methods and from the delivered `spec.md`, so that this one artifact records all three of the statements the criterion [P7-T17] flips requires — that criterion says "The spec, the change description, and the test's own documentation each state", and a change description that states only its own half would leave two thirds of the criterion unevidenced**; states the accepted `ObjectDisposedException` residual introduced by D1; states that #475's three parts landed as one change-set; states the one publicly observable behaviour change, namely that the `public` seven-parameter `BreadcrumbDropDownHost` constructor now throws without an ambient synchronization context; and states that all fixes in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` are coverage-exempt. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md`. -- [ ] [P7-T10] Check off the single criterion beginning "The set of files changed by this feature is a subset". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/changed-file-set.md`. -- [ ] [P7-T11] Check off the single criterion beginning "`QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`,". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/forbidden-files-untouched.md`. -- [ ] [P7-T12] Check off the single criterion beginning "No public member is added, removed, or re-signed". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/public-surface.md`. -- [ ] [P7-T13] Check off the single criterion beginning "The `QuickFiler.Test.csproj` diff is exactly one added". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csproj-diff-shape.md`. -- [ ] [P7-T14] Check off the single criterion beginning "The three out-of-scope follow-up candidates". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/followup-promotions.md`. -- [ ] [P7-T15] Check off the single criterion beginning "The `## Dependencies on 489` section of this spec is re-checked". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/dependencies-489-recheck.md`. -- [ ] [P7-T16] Check off the single criterion beginning "The change description and this spec both state that D3". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md`. -- [ ] [P7-T17] Check off the single criterion beginning "The spec, the change description, and the test's own documentation each state". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md`. -- [ ] [P7-T18] Check off the single criterion beginning "`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/user-story.md`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/user-story-absent.md`. +- [x] [P7-T1] Re-run the nine constraining tests recorded in [P0-T13] under `pwsh -NoProfile` with the resolved `vstest.console.exe`, `/Settings:scripts\vscode\TaskMaster.cli.runsettings /InIsolation /Logger:trx;LogFileName=constraining-tests-final.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\trx-p7-t1` and a test-case filter joining the nine fully qualified name fragments with the pipe character. The filter joins fragments with the literal `|` character; `vstest.console.exe` rejects the word `OR` in a `/TestCaseFilter:` expression. Acceptance: the artifact records one row per name with its observed outcome and its [P0-T13] baseline outcome, and **no name's outcome is worse than its baseline outcome**. The expected case is that all nine baselines were `Passed`, in which case this gate is `EXIT_CODE: 0` with failed count 0 and the artifact records it as such. The baseline-comparison form is stated because [P0-T13] is instructed to *record* each baseline outcome rather than to require it to be `Passed`; an absolute failed count 0 combined with the unchanged-from-baseline requirement is self-contradictory whenever a baseline outcome is not `Passed`. If any of the nine was not `Passed` at baseline, the executor records that fact, leaves this task **unchecked**, and reports, because a constraining test that was already red cannot constrain this fix. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/constraining-tests-final.md`. +- [x] [P7-T2] Verify the changed-file set by running `git diff --name-only -- . ":(exclude).claude/agent-memory"` and `git status --porcelain` from the worktree root, having first run `git add -N` on any untracked file this plan created so the new test file appears in the diff. Acceptance: every path reported by the diff command is one of the four owned production files, one of the three owned test files, `QuickFiler.Test/QuickFiler.Test.csproj`, a path under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/`, or a path under `docs/features/potential/`; every path reported by `git status --porcelain` is likewise one of those or is under `.claude/agent-memory/`; no other path appears. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/changed-file-set.md`. +- [x] [P7-T3] Verify that no forbidden file was written by running `git diff --name-only -- QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs QuickFiler/Viewers/BreadcrumbMessengerHub.cs QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs QuickFiler/Viewers/BreadcrumbCoordinatorUpgradeLifetime.cs QuickFiler/Viewers/ItemViewer.cs QuickFiler/Viewers/ItemViewer.Designer.cs QuickFiler/Viewers/IBreadcrumbDropDownHost.cs QuickFiler/Viewers/IItemViewer.cs QuickFiler/Controllers/QfcItemController.ViewerSetup.cs QuickFiler/QuickFiler.csproj QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: the command produces no output lines. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/forbidden-files-untouched.md`. +- [x] [P7-T4] Verify the public-surface stability of the four owned production files by enumerating every member added, removed, or re-signed, with its declared accessibility, from `git diff ` over those four files. Acceptance: the artifact lists the added members as exactly the private helper `ThrowIfOffUiBoundary`, the private field `_breadcrumbProvider`, and the private retained-theme field on the lifecycle coordinator; records the one re-signed member as the private `EnsureBreadcrumbLifecycle`; records the one removed member as the internal static `CaptureCurrentOrTests`; and records that no `public` member was added, removed, or re-signed and that both seven-parameter `BreadcrumbDropDownHost` constructors keep their signatures. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/public-surface.md`. +- [x] [P7-T5] Create one potential entry per out-of-scope follow-up candidate under `docs/features/potential/`, each naming the mechanism, the trigger, and the owning file or files, and each carrying the standard potential-entry front matter: the generation guard that drops the **incoming** host without disposing it in `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`; `SetBridgeCoordinator` replacing without disposing while the coordinator's `Dispose` does dispose, in the same file; and the reset-path synchrony mismatch spanning that file and `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`, whose entry must name both files. If [P5-T6] concluded that the faulted initialization task is unobserved, a fourth entry against `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` **was already created and promoted to a GitHub issue by [P5-T6]**; do not create a duplicate entry and do not open a second issue, and instead carry its path, issue number, and URL forward from [P5-T6]'s artifact into this one. The first three need only be potential entries and are created by this task. The asymmetry is deliberate and is not an oversight: the criterion [P7-T14] flips accepts "a potential entry or GitHub issue" for the three, whereas the criterion [P5-T11] flips requires that "a new issue is opened" for the fourth, which is why the fourth is created and promoted in Phase 5, where that criterion is checked off. Acceptance: the three entries this task creates exist, each names its mechanism and trigger, the artifact records that no fix for any of them appears in this feature's diff, and — when [P5-T6] so concluded — the artifact records the fourth entry's path together with the issue number and URL taken verbatim from [P5-T6]'s artifact, and states that no duplicate entry and no second issue were created. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/followup-promotions.md`. +- [x] [P7-T6] Re-check the `## Dependencies on 489` section against the current tree. For D489-1 confirm `UiSyncContext` still exists on `QuickFiler/Viewers/ItemViewer.cs` and still returns the constructor-captured context; for D489-2 confirm the type-level coverage exclusion is still present at `QuickFiler/Viewers/ItemViewer.cs:20`; for D489-3 confirm the designer disposal shape is unchanged; for **D489-4** search every `QuickFiler/Viewers/ItemViewer` partial other than `ItemViewer.Breadcrumb.cs` for the fixed strings `ThrowIfOffUiBoundary` and `_breadcrumbProvider`; for D489-5 confirm no other entry in `QuickFiler.Test/QuickFiler.Test.csproj` names the same file name as the new test file; and for D489-6 confirm `QuickFiler/Viewers/IItemViewer.cs` is unchanged. Acceptance: the artifact records one row per dependency as confirmed or as requiring a named adjustment, the D489-4 searches each return zero matches, and the artifact states whether `docs/features/active/itemviewer-surface-defects-489/spec.md` is present on this branch and, if it is absent, that the check was made against current source instead. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/dependencies-489-recheck.md`. +- [x] [P7-T7] Verify the `.csproj` diff shape by running `git diff --numstat -- QuickFiler.Test/QuickFiler.Test.csproj`. Acceptance: the command reports exactly 1 added line and 0 deleted lines, and the artifact records the delivered line number of the added entry together with the two entries immediately above and below it, confirming adjacency to the existing `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` entry and that no entry was reordered. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csproj-diff-shape.md`. +- [x] [P7-T8] Verify that `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/user-story.md` does not exist, recording `SearchScope:` as that feature folder, `SearchPatterns:` as the file name, and `SearchResult:` as the outcome. Acceptance: the artifact records `SearchResult: none` and states that under `full-bug` a second checkbox-bearing document in this folder would be an integrity failure. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/user-story-absent.md`. +- [x] [P7-T9] Write the change description for this change-set. Acceptance: the artifact states that D3 **changes no production behaviour**, with the upstream-guard reason; states that D4's regression proxy **proves the guard fires and does not prove the race is absent**, and that a true two-thread data race cannot be reproduced deterministically under the repository ban on sleeps and wall-clock waits; **quotes verbatim the corresponding sentences from the delivered XML doc comments of the two [P4-T1] test methods and from the delivered `spec.md`, so that this one artifact records all three of the statements the criterion [P7-T17] flips requires — that criterion says "The spec, the change description, and the test's own documentation each state", and a change description that states only its own half would leave two thirds of the criterion unevidenced**; states the accepted `ObjectDisposedException` residual introduced by D1; states that #475's three parts landed as one change-set; states the one publicly observable behaviour change, namely that the `public` seven-parameter `BreadcrumbDropDownHost` constructor now throws without an ambient synchronization context; and states that all fixes in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` are coverage-exempt. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md`. +- [x] [P7-T10] Check off the single criterion beginning "The set of files changed by this feature is a subset". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/changed-file-set.md`. +- [x] [P7-T11] Check off the single criterion beginning "`QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`,". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/forbidden-files-untouched.md`. +- [x] [P7-T12] Check off the single criterion beginning "No public member is added, removed, or re-signed". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/public-surface.md`. +- [x] [P7-T13] Check off the single criterion beginning "The `QuickFiler.Test.csproj` diff is exactly one added". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csproj-diff-shape.md`. +- [x] [P7-T14] Check off the single criterion beginning "The three out-of-scope follow-up candidates". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/followup-promotions.md`. +- [x] [P7-T15] Check off the single criterion beginning "The `## Dependencies on 489` section of this spec is re-checked". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/dependencies-489-recheck.md`. +- [x] [P7-T16] Check off the single criterion beginning "The change description and this spec both state that D3". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md`. +- [x] [P7-T17] Check off the single criterion beginning "The spec, the change description, and the test's own documentation each state". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/change-description.md`. +- [x] [P7-T18] Check off the single criterion beginning "`docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/user-story.md`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/user-story-absent.md`. ### Phase 8 — Final QC toolchain loop @@ -541,34 +541,34 @@ The four stages run in order: format, lint, type-check, test. If any stage fails loop restarts at [P8-T1]. [P8-T11] confirms that the recorded final pass was a single consecutive pass with no intervening file modification. -- [ ] [P8-T1] Run `dotnet tool run csharpier format` with the seven owned file paths supplied explicitly as arguments, not with a repository-wide dot argument: the four owned production files and the three owned test files listed in constraint C1. Acceptance: `EXIT_CODE: 0`, and the artifact records, for each of the seven files, whether its content changed, determined by comparing its SHA-256 before and after the command; a count of files the tool reports as processed is not a substitute for that comparison. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-format.md`. -- [ ] [P8-T2] Run the read-only verification `dotnet tool run csharpier check .` from the worktree root. Acceptance: either `EXIT_CODE: 0`, or the reported unformatted-file set is exactly the baseline set recorded in [P0-T9] and contains none of the seven owned files. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-check.md`. -- [ ] [P8-T3] Run, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`. Acceptance: the analyzer warning count attributable to each of the four owned production files is no greater than the corresponding per-file baseline recorded in [P0-T10], **and** the error count is no greater than the total error count recorded in [P0-T10] with no error attributable to any file this feature changed. The expected and overwhelmingly likely case is that [P0-T10] recorded zero errors, in which case this gate is `EXIT_CODE: 0` with zero errors and the artifact records it as such. The baseline-comparison form is stated because [P0-T10] is instructed to *record* an error count rather than to *require* it to be zero: an absolute zero-error assertion over the whole solution would assert a property of files this feature does not own and would be unsatisfiable against an already-red baseline, with no path forward in the plan. If [P0-T10] recorded a non-zero error count, the executor records the discrepancy, the per-error file attribution, and the fact that no error is attributable to a changed file, leaves this task **unchecked**, and reports a scope escalation rather than treating the comparison as a pass. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-analyzers.md`. -- [ ] [P8-T4] Run, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true`. Do not add `/p:Nullable=enable` and do not substitute `/t:Build`. Acceptance: the error count is no greater than the error count recorded in [P0-T11] and no error is attributable to any file this feature changed; the artifact records the target as `Rebuild` and records that the nullable property was not supplied. The expected and overwhelmingly likely case is that [P0-T11] recorded zero errors, since this is character-for-character the CI gate command and `main` is green on it, in which case this gate is `EXIT_CODE: 0` with zero errors and the artifact records it as such. The baseline-comparison form is stated because [P0-T11] is instructed to *record* an error count rather than to *require* it to be zero, and an absolute zero over the whole solution would assert a property of files this feature does not own. If [P0-T11] recorded a non-zero error count, the executor records the discrepancy and the per-error file attribution, leaves this task **unchecked**, and reports a scope escalation rather than treating the comparison as a pass. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-nullable.md`. -- [ ] [P8-T5] Run, under `pwsh -NoProfile`, the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/EnableCodeCoverage /InIsolation /Settings:scripts\vscode\TaskMaster.cli.runsettings /Logger:trx;LogFileName=final-quickfiler-test.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\trx-p8-t5`. Acceptance: the failing-test-name set is a **subset of the `BASELINE_FAILURE_SET` recorded in [P0-T12]**, and the passed count is greater than or equal to the `BASELINE_PASSED` figure recorded in [P0-T12] plus 9, that figure being the ten added test methods minus the one deleted test method; the artifact enumerates the ten added test result names contributing to the increase and names the deleted one. This gate is a **baseline comparison, not an absolute count**: an absolute `failed count 0` over the whole `QuickFiler.Test` assembly would assert a property of tests this feature does not own and would be unsatisfiable whenever [P0-T12] recorded a non-empty baseline failure set. When `BASELINE_FAILURE_SET` is empty the subset condition reduces to failed count 0 and `EXIT_CODE: 0`; when it is non-empty the artifact records the observed exit code, states the baseline set verbatim alongside the observed set, and states that the two sets are equal or that the observed set is a proper subset. Any failing name outside the baseline set fails this task, and no name added by this feature may appear in the observed set under any circumstances. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/quickfiler-test-final.md`. -- [ ] [P8-T6] Run, under `pwsh -NoProfile`, `.\scripts\vscode\Invoke-MSTestWithCoverage.ps1 -SearchRoot . -Configuration Debug -CoverageOutput docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\coverage-final.cobertura.xml` from this worktree root. Acceptance: the Cobertura file exists and the artifact records the root `coverage` element's `line-rate` and `branch-rate` as numeric values together with the verbatim discovered-assembly list, in which every entry is a path under this worktree root and no entry contains a `worktrees` path segment below it. This run can take twenty minutes or more. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.md`. -- [ ] [P8-T7] Compare coverage against the baseline. Acceptance: the artifact records **four** repository-wide figures — the baseline raw uninstrumented line rate and the baseline testable-denominator line rate, both computed from the retained [P0-T14] Cobertura file, and the post-change raw and testable-denominator line rates from [P8-T6] — and states that the post-change figure is not lower than the baseline **for each of the two denominators separately**, and that the post-change testable-denominator figure is at least 80 percent against the testable denominator defined in CLAUDE.md. All four figures are required because the criterion [P9-T12] flips says both figures are recorded "together with the Phase 0 baseline values" and that the change "does not lower either"; with only a baseline raw figure recorded, the no-regression claim could not be evaluated for the testable-denominator figure at all. The baseline testable figure is recomputed from the [P0-T14] artifact rather than re-running coverage, so this task starts no new twenty-minute run. It records the post-change aggregated line rate for each of the three measured owned production files against the [P0-T15] baseline values, states that each newly added or changed measured member reaches at least 90 percent line coverage, and states that coverage for the changed lines is not reduced. It records explicitly that `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` contributes no coverage movement because `QuickFiler/Viewers/ItemViewer.cs:20` carries a type-level exclusion on the partial type, so D1, D3, D4, D5, and #475 part 3 are coverage-exempt by construction and their regression tests are required by the Bugfix Workflow rather than by a coverage delta. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md`. -- [ ] [P8-T8] Audit file size after the final formatting pass by recording the line count of each of the seven owned files and of `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: every recorded value is at most 500; `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` is exactly 500; `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` and `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` are each named explicitly with their delivered values; and each value is obtained by counting the file's lines rather than by a word-count line switch, which reports a different number for a file without a trailing newline. Per the unmodified-file rule the artifact additionally records that `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` produces no output lines: the criterion [P9-T4] flips says that file "remains at exactly 500 lines **and is unmodified**", and a line count establishes only the first conjunct. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md`. -- [ ] [P8-T9] Audit the test policy across the three owned test files: search each for the fixed strings `Thread.Sleep` and `Task.Delay`, and record the assertion and mocking libraries used by every test this feature added. Acceptance: both searches return zero matching lines across all three files, and the artifact records that every added test uses MSTest attributes, Moq mocks, and FluentAssertions assertions, creates no temporary file, and starts no second thread. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/test-policy-audit.md`. -- [ ] [P8-T10] Audit coverage exemptions by counting occurrences of the fixed string `ExcludeFromCodeCoverage` in the **seven** owned files — the four owned production files and the three owned test files — and comparing against the seven-file [P0-T17] baseline. Seven rather than four, because the criterion [P9-T13] flips says no new attribute is introduced "**anywhere** by this feature". Acceptance: the per-file counts equal the baseline counts exactly, so no attribute was added and none was removed; **and the artifact additionally states, in its own text, that all fixes in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` (D1, D3, D4, D5, and #475 part 3) are coverage-exempt because `QuickFiler/Viewers/ItemViewer.cs:20` carries `[ExcludeFromCodeCoverage]` on the partial type, so their regression tests move no coverage number.** That statement is required here, and not left to [P8-T7]'s `coverage-delta.md`, because [P9-T13] cites this artifact alone and the criterion it flips opens on exactly that exemption claim; an artifact holding only attribute counts could not carry it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/exemption-audit.md`. -- [ ] [P8-T11] Confirm the four stages completed as one consecutive clean pass. Acceptance: the artifact records the ordered timestamps of [P8-T1] through [P8-T5] for the final pass, records that no owned file's SHA-256 changed between the [P8-T1] format pass and the [P8-T5] test run, and records the number of loop restarts that occurred before the final pass. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/toolchain-consecutive-pass.md`. +- [x] [P8-T1] Run `dotnet tool run csharpier format` with the seven owned file paths supplied explicitly as arguments, not with a repository-wide dot argument: the four owned production files and the three owned test files listed in constraint C1. Acceptance: `EXIT_CODE: 0`, and the artifact records, for each of the seven files, whether its content changed, determined by comparing its SHA-256 before and after the command; a count of files the tool reports as processed is not a substitute for that comparison. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-format.md`. +- [x] [P8-T2] Run the read-only verification `dotnet tool run csharpier check .` from the worktree root. Acceptance: either `EXIT_CODE: 0`, or the reported unformatted-file set is exactly the baseline set recorded in [P0-T9] and contains none of the seven owned files. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-check.md`. +- [x] [P8-T3] Run, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`. Acceptance: the analyzer warning count attributable to each of the four owned production files is no greater than the corresponding per-file baseline recorded in [P0-T10], **and** the error count is no greater than the total error count recorded in [P0-T10] with no error attributable to any file this feature changed. The expected and overwhelmingly likely case is that [P0-T10] recorded zero errors, in which case this gate is `EXIT_CODE: 0` with zero errors and the artifact records it as such. The baseline-comparison form is stated because [P0-T10] is instructed to *record* an error count rather than to *require* it to be zero: an absolute zero-error assertion over the whole solution would assert a property of files this feature does not own and would be unsatisfiable against an already-red baseline, with no path forward in the plan. If [P0-T10] recorded a non-zero error count, the executor records the discrepancy, the per-error file attribution, and the fact that no error is attributable to a changed file, leaves this task **unchecked**, and reports a scope escalation rather than treating the comparison as a pass. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-analyzers.md`. +- [x] [P8-T4] Run, under `pwsh -NoProfile`, the resolved MSBuild against `TaskMaster.sln` with `/t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true`. Do not add `/p:Nullable=enable` and do not substitute `/t:Build`. Acceptance: the error count is no greater than the error count recorded in [P0-T11] and no error is attributable to any file this feature changed; the artifact records the target as `Rebuild` and records that the nullable property was not supplied. The expected and overwhelmingly likely case is that [P0-T11] recorded zero errors, since this is character-for-character the CI gate command and `main` is green on it, in which case this gate is `EXIT_CODE: 0` with zero errors and the artifact records it as such. The baseline-comparison form is stated because [P0-T11] is instructed to *record* an error count rather than to *require* it to be zero, and an absolute zero over the whole solution would assert a property of files this feature does not own. If [P0-T11] recorded a non-zero error count, the executor records the discrepancy and the per-error file attribution, leaves this task **unchecked**, and reports a scope escalation rather than treating the comparison as a pass. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-nullable.md`. +- [x] [P8-T5] Run, under `pwsh -NoProfile`, the resolved `vstest.console.exe` against `QuickFiler.Test\bin\Debug\QuickFiler.Test.dll` with `/EnableCodeCoverage /InIsolation /Settings:scripts\vscode\TaskMaster.cli.runsettings /Logger:trx;LogFileName=final-quickfiler-test.trx /ResultsDirectory:docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\trx-p8-t5`. Acceptance: the failing-test-name set is a **subset of the `BASELINE_FAILURE_SET` recorded in [P0-T12]**, and the passed count is greater than or equal to the `BASELINE_PASSED` figure recorded in [P0-T12] plus 9, that figure being the ten added test methods minus the one deleted test method; the artifact enumerates the ten added test result names contributing to the increase and names the deleted one. This gate is a **baseline comparison, not an absolute count**: an absolute `failed count 0` over the whole `QuickFiler.Test` assembly would assert a property of tests this feature does not own and would be unsatisfiable whenever [P0-T12] recorded a non-empty baseline failure set. When `BASELINE_FAILURE_SET` is empty the subset condition reduces to failed count 0 and `EXIT_CODE: 0`; when it is non-empty the artifact records the observed exit code, states the baseline set verbatim alongside the observed set, and states that the two sets are equal or that the observed set is a proper subset. Any failing name outside the baseline set fails this task, and no name added by this feature may appear in the observed set under any circumstances. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/quickfiler-test-final.md`. +- [x] [P8-T6] Run, under `pwsh -NoProfile`, `.\scripts\vscode\Invoke-MSTestWithCoverage.ps1 -SearchRoot . -Configuration Debug -CoverageOutput docs\features\active\itemviewer-breadcrumb-lifecycle-defects-488\evidence\qa-gates\coverage-final.cobertura.xml` from this worktree root. Acceptance: the Cobertura file exists and the artifact records the root `coverage` element's `line-rate` and `branch-rate` as numeric values together with the verbatim discovered-assembly list, in which every entry is a path under this worktree root and no entry contains a `worktrees` path segment below it. This run can take twenty minutes or more. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-final.md`. +- [x] [P8-T7] Compare coverage against the baseline. Acceptance: the artifact records **four** repository-wide figures — the baseline raw uninstrumented line rate and the baseline testable-denominator line rate, both computed from the retained [P0-T14] Cobertura file, and the post-change raw and testable-denominator line rates from [P8-T6] — and states that the post-change figure is not lower than the baseline **for each of the two denominators separately**, and that the post-change testable-denominator figure is at least 80 percent against the testable denominator defined in CLAUDE.md. All four figures are required because the criterion [P9-T12] flips says both figures are recorded "together with the Phase 0 baseline values" and that the change "does not lower either"; with only a baseline raw figure recorded, the no-regression claim could not be evaluated for the testable-denominator figure at all. The baseline testable figure is recomputed from the [P0-T14] artifact rather than re-running coverage, so this task starts no new twenty-minute run. It records the post-change aggregated line rate for each of the three measured owned production files against the [P0-T15] baseline values, states that each newly added or changed measured member reaches at least 90 percent line coverage, and states that coverage for the changed lines is not reduced. It records explicitly that `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` contributes no coverage movement because `QuickFiler/Viewers/ItemViewer.cs:20` carries a type-level exclusion on the partial type, so D1, D3, D4, D5, and #475 part 3 are coverage-exempt by construction and their regression tests are required by the Bugfix Workflow rather than by a coverage delta. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md`. +- [x] [P8-T8] Audit file size after the final formatting pass by recording the line count of each of the seven owned files and of `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs`. Acceptance: every recorded value is at most 500; `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` is exactly 500; `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` and `QuickFiler/Viewers/BreadcrumbPopupUiOperations.cs` are each named explicitly with their delivered values; and each value is obtained by counting the file's lines rather than by a word-count line switch, which reports a different number for a file without a trailing newline. Per the unmodified-file rule the artifact additionally records that `git diff --name-only -- QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` produces no output lines: the criterion [P9-T4] flips says that file "remains at exactly 500 lines **and is unmodified**", and a line count establishes only the first conjunct. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md`. +- [x] [P8-T9] Audit the test policy across the three owned test files: search each for the fixed strings `Thread.Sleep` and `Task.Delay`, and record the assertion and mocking libraries used by every test this feature added. Acceptance: both searches return zero matching lines across all three files, and the artifact records that every added test uses MSTest attributes, Moq mocks, and FluentAssertions assertions, creates no temporary file, and starts no second thread. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/test-policy-audit.md`. +- [x] [P8-T10] Audit coverage exemptions by counting occurrences of the fixed string `ExcludeFromCodeCoverage` in the **seven** owned files — the four owned production files and the three owned test files — and comparing against the seven-file [P0-T17] baseline. Seven rather than four, because the criterion [P9-T13] flips says no new attribute is introduced "**anywhere** by this feature". Acceptance: the per-file counts equal the baseline counts exactly, so no attribute was added and none was removed; **and the artifact additionally states, in its own text, that all fixes in `QuickFiler/Viewers/ItemViewer.Breadcrumb.cs` (D1, D3, D4, D5, and #475 part 3) are coverage-exempt because `QuickFiler/Viewers/ItemViewer.cs:20` carries `[ExcludeFromCodeCoverage]` on the partial type, so their regression tests move no coverage number.** That statement is required here, and not left to [P8-T7]'s `coverage-delta.md`, because [P9-T13] cites this artifact alone and the criterion it flips opens on exactly that exemption claim; an artifact holding only attribute counts could not carry it. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/exemption-audit.md`. +- [x] [P8-T11] Confirm the four stages completed as one consecutive clean pass. Acceptance: the artifact records the ordered timestamps of [P8-T1] through [P8-T5] for the final pass, records that no owned file's SHA-256 changed between the [P8-T1] format pass and the [P8-T5] test run, and records the number of loop restarts that occurred before the final pass. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/toolchain-consecutive-pass.md`. ### Phase 9 — Acceptance-criteria completion and handoff -- [ ] [P9-T1] Check off the single criterion beginning "Phase 0 evidence records the pre-change `QuickFiler.Test` pass/fail counts". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites **both** `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/quickfiler-test.md` for the pass/fail counts and `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage.md` for the pre-change coverage figures, and records that both were written before any production file was edited. This is the second of the two multi-artifact citations decision D-12 authorizes: the criterion conjoins the pass/fail counts **and the pre-change coverage figures**, which are produced by two different Phase 0 command steps ([P0-T12] and [P0-T14]), and the test-run artifact is defined by [P0-T12] to contain test counts only, so it could not carry the coverage half. -- [ ] [P9-T2] Write the fail-before index for the six defect units. This task produces the index **before** the criterion that cites it is flipped, because a check-off task may not cite an artifact a later task has not yet written. Acceptance: the artifact contains one row per unit naming the unit, the regression test name, and the fail-before artifact path, citing `488-d1-fail.md`, `488-d2-fail.md`, `488-d3-fail.md`, `488-d4-fail.md`, `488-d5-fail.md`, and, for #475, both `475-ctor-fail.md` and `475-lazy-fail.md`, all under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/`; each cited artifact records a non-zero `EXIT_CODE:` with `ExpectedExitCode: 1`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/fail-before-index.md`. -- [ ] [P9-T3] Check off the single criterion beginning "Every production and test file touched by this feature is at most". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md`. -- [ ] [P9-T4] Check off the single criterion beginning "`QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` remains at exactly 500 lines". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md`. -- [ ] [P9-T5] Check off the single criterion beginning "Every new test uses MSTest, Moq, and FluentAssertions". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/test-policy-audit.md`. -- [ ] [P9-T6] Check off the single criterion beginning "`dotnet tool run csharpier check .` reports no formatting differences". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-check.md`. If the [P0-T9] baseline unformatted set was non-empty, record the pre-existing set in that artifact, leave this criterion unchecked, and document the gap in [P9-T15]'s reconciliation artifact instead of checking it off. -- [ ] [P9-T7] Check off the single criterion whose first line begins with the backticked `msbuild TaskMaster.sln` command and whose text contains `EnableNETAnalyzers`; it is the only criterion containing that token. Its text continues past the first line and closes on the analyzer-warning-count comparison against the Phase 0 baseline, so do not identify it by a trailing phrase. Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-analyzers.md`. -- [ ] [P9-T8] Check off the single criterion whose first line begins with the backticked `msbuild TaskMaster.sln` command and whose text contains `TreatWarningsAsErrors`; it is the only criterion containing that token. Its text continues past the first line and closes on the statement that the nullable property is not added, so do not identify it by a trailing phrase. Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-nullable.md`. -- [ ] [P9-T9] Check off the single criterion beginning "`vstest.console.exe QuickFiler.Test". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/quickfiler-test-final.md`. This check-off requires the criterion's own literal condition, **zero failures**, and not merely [P8-T5]'s subset-of-baseline condition: [P8-T5] is deliberately a baseline comparison so that a pre-existing red test this feature does not own cannot make its gate unsatisfiable, but the criterion text asserts an absolute zero and checking it off against a non-empty observed failure set would be a check-off without evidence. Therefore, if the `BASELINE_FAILURE_SET` recorded in [P0-T12] was non-empty and the [P8-T5] observed failing-test-name set is likewise non-empty, record the observed set verbatim in this task's citation, leave this criterion **unchecked**, and document the gap in [P9-T15]'s reconciliation artifact. That gap is **not** the single authorized exception named in [P9-T15]; under [P9-T15]'s rule it is remediation-required, and the executor reports it as such rather than treating it as a pass. -- [ ] [P9-T10] Check off the single criterion beginning "All four toolchain stages pass in a single consecutive pass". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/toolchain-consecutive-pass.md`. -- [ ] [P9-T11] Check off the single criterion beginning "Coverage for the changed lines is not reduced". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md`. -- [ ] [P9-T12] Check off the single criterion beginning "Repository-wide line coverage is". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md`. -- [ ] [P9-T13] Check off the single criterion beginning "Evidence records that all fixes in `ItemViewer.Breadcrumb.cs`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/exemption-audit.md`. -- [ ] [P9-T14] Check off the single criterion beginning "For each of the six defect units". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the fail-before index artifact `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/fail-before-index.md` written by [P9-T2], which by then exists. -- [ ] [P9-T15] Reconcile the acceptance-criteria state in `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`. Acceptance: the file contains exactly 54 acceptance-criterion checkboxes and no criterion text was modified. The pass outcome for this task is all 54 reading `- [x]`, with exactly one authorized exception, stated below. A criterion whose evidence is incomplete is left unchecked, never checked without evidence, and the artifact records its verbatim text, the reason, and the evidence artifact documenting the gap; in that case this task's outcome is recorded as remediation-required and must not be reported as a pass. The single authorized exception is the pre-existing-unformatted-file branch stated in [P9-T6]: if and only if the [P0-T9] baseline unformatted set was non-empty and the [P8-T2] reported set is exactly that same baseline set and contains none of the seven owned files, then the one criterion beginning "`dotnet tool run csharpier check .` reports no formatting differences" is left unchecked, this task's outcome is 53 of 54 checked, and that outcome is a pass rather than remediation-required, because the gap is a pre-existing repository condition this feature neither caused nor is permitted to fix. Any other unchecked criterion is remediation-required. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-reconciliation.md`. -- [ ] [P9-T16] Write the acceptance-criteria status summary. Acceptance: the artifact records the source file `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`, the total acceptance-criterion count of 54, the checked-off count, the remaining count, and the verbatim text of any remaining item. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-status-summary.md`. -- [ ] [P9-T17] Commit every source, documentation, and evidence change produced by this plan on the working branch. `.claude/agent-memory/**` is excluded from both the changed-file-set criterion and the clean-tree criterion because it is agent-session state rather than feature output. Acceptance: `git status --porcelain` produces no output lines other than paths under `.claude/agent-memory/`, and `git diff --name-only -- . ":(exclude).claude/agent-memory"` lists only the four owned production files, the three owned test files, `QuickFiler.Test/QuickFiler.Test.csproj`, paths under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/`, and paths under `docs/features/potential/`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/final-commit.md`. +- [x] [P9-T1] Check off the single criterion beginning "Phase 0 evidence records the pre-change `QuickFiler.Test` pass/fail counts". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites **both** `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/quickfiler-test.md` for the pass/fail counts and `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/coverage.md` for the pre-change coverage figures, and records that both were written before any production file was edited. This is the second of the two multi-artifact citations decision D-12 authorizes: the criterion conjoins the pass/fail counts **and the pre-change coverage figures**, which are produced by two different Phase 0 command steps ([P0-T12] and [P0-T14]), and the test-run artifact is defined by [P0-T12] to contain test counts only, so it could not carry the coverage half. +- [x] [P9-T2] Write the fail-before index for the six defect units. This task produces the index **before** the criterion that cites it is flipped, because a check-off task may not cite an artifact a later task has not yet written. Acceptance: the artifact contains one row per unit naming the unit, the regression test name, and the fail-before artifact path, citing `488-d1-fail.md`, `488-d2-fail.md`, `488-d3-fail.md`, `488-d4-fail.md`, `488-d5-fail.md`, and, for #475, both `475-ctor-fail.md` and `475-lazy-fail.md`, all under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/`; each cited artifact records a non-zero `EXIT_CODE:` with `ExpectedExitCode: 1`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/fail-before-index.md`. +- [x] [P9-T3] Check off the single criterion beginning "Every production and test file touched by this feature is at most". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md`. +- [x] [P9-T4] Check off the single criterion beginning "`QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` remains at exactly 500 lines". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/file-sizes-final.md`. +- [x] [P9-T5] Check off the single criterion beginning "Every new test uses MSTest, Moq, and FluentAssertions". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/test-policy-audit.md`. +- [x] [P9-T6] Check off the single criterion beginning "`dotnet tool run csharpier check .` reports no formatting differences". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/csharpier-check.md`. If the [P0-T9] baseline unformatted set was non-empty, record the pre-existing set in that artifact, leave this criterion unchecked, and document the gap in [P9-T15]'s reconciliation artifact instead of checking it off. +- [x] [P9-T7] Check off the single criterion whose first line begins with the backticked `msbuild TaskMaster.sln` command and whose text contains `EnableNETAnalyzers`; it is the only criterion containing that token. Its text continues past the first line and closes on the analyzer-warning-count comparison against the Phase 0 baseline, so do not identify it by a trailing phrase. Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-analyzers.md`. +- [x] [P9-T8] Check off the single criterion whose first line begins with the backticked `msbuild TaskMaster.sln` command and whose text contains `TreatWarningsAsErrors`; it is the only criterion containing that token. Its text continues past the first line and closes on the statement that the nullable property is not added, so do not identify it by a trailing phrase. Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/msbuild-nullable.md`. +- [x] [P9-T9] Check off the single criterion beginning "`vstest.console.exe QuickFiler.Test". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/quickfiler-test-final.md`. This check-off requires the criterion's own literal condition, **zero failures**, and not merely [P8-T5]'s subset-of-baseline condition: [P8-T5] is deliberately a baseline comparison so that a pre-existing red test this feature does not own cannot make its gate unsatisfiable, but the criterion text asserts an absolute zero and checking it off against a non-empty observed failure set would be a check-off without evidence. Therefore, if the `BASELINE_FAILURE_SET` recorded in [P0-T12] was non-empty and the [P8-T5] observed failing-test-name set is likewise non-empty, record the observed set verbatim in this task's citation, leave this criterion **unchecked**, and document the gap in [P9-T15]'s reconciliation artifact. That gap is **not** the single authorized exception named in [P9-T15]; under [P9-T15]'s rule it is remediation-required, and the executor reports it as such rather than treating it as a pass. +- [x] [P9-T10] Check off the single criterion beginning "All four toolchain stages pass in a single consecutive pass". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/toolchain-consecutive-pass.md`. +- [x] [P9-T11] Check off the single criterion beginning "Coverage for the changed lines is not reduced". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md`. +- [x] [P9-T12] Check off the single criterion beginning "Repository-wide line coverage is". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/coverage-delta.md`. +- [x] [P9-T13] Check off the single criterion beginning "Evidence records that all fixes in `ItemViewer.Breadcrumb.cs`". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/exemption-audit.md`. +- [x] [P9-T14] Check off the single criterion beginning "For each of the six defect units". Acceptance: that one checkbox reads `- [x]`, its text is unmodified, and the task cites the fail-before index artifact `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/regression-testing/fail-before-index.md` written by [P9-T2], which by then exists. +- [x] [P9-T15] Reconcile the acceptance-criteria state in `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`. Acceptance: the file contains exactly 54 acceptance-criterion checkboxes and no criterion text was modified. The pass outcome for this task is all 54 reading `- [x]`, with exactly one authorized exception, stated below. A criterion whose evidence is incomplete is left unchecked, never checked without evidence, and the artifact records its verbatim text, the reason, and the evidence artifact documenting the gap; in that case this task's outcome is recorded as remediation-required and must not be reported as a pass. The single authorized exception is the pre-existing-unformatted-file branch stated in [P9-T6]: if and only if the [P0-T9] baseline unformatted set was non-empty and the [P8-T2] reported set is exactly that same baseline set and contains none of the seven owned files, then the one criterion beginning "`dotnet tool run csharpier check .` reports no formatting differences" is left unchecked, this task's outcome is 53 of 54 checked, and that outcome is a pass rather than remediation-required, because the gap is a pre-existing repository condition this feature neither caused nor is permitted to fix. Any other unchecked criterion is remediation-required. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-reconciliation.md`. +- [x] [P9-T16] Write the acceptance-criteria status summary. Acceptance: the artifact records the source file `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md`, the total acceptance-criterion count of 54, the checked-off count, the remaining count, and the verbatim text of any remaining item. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/ac-status-summary.md`. +- [x] [P9-T17] Commit every source, documentation, and evidence change produced by this plan on the working branch. `.claude/agent-memory/**` is excluded from both the changed-file-set criterion and the clean-tree criterion because it is agent-session state rather than feature output. Acceptance: `git status --porcelain` produces no output lines other than paths under `.claude/agent-memory/`, and `git diff --name-only -- . ":(exclude).claude/agent-memory"` lists only the four owned production files, the three owned test files, `QuickFiler.Test/QuickFiler.Test.csproj`, paths under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/`, and paths under `docs/features/potential/`. Evidence: `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/other/final-commit.md`. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/policy-audit.2026-08-28T06-44.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/policy-audit.2026-08-28T06-44.md new file mode 100644 index 000000000..300ac9859 --- /dev/null +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/policy-audit.2026-08-28T06-44.md @@ -0,0 +1,124 @@ +# Policy Audit — itemviewer-breadcrumb-lifecycle-defects (Issue #488; also closes #475) + +- Timestamp: 2026-08-28T06-44 (UTC) +- Branch: `bug/itemviewer-breadcrumb-lifecycle-defects-488` at `d9ed9eb2` +- Base: `epic/quickfiler-bug-family-integration`, merge base `12465043` (re-verified by this reviewer with `git merge-base`; the caller-supplied base SHA is the true merge base, not stale) +- Work mode: `full-bug` (from `issue.md`) — `spec.md` is the sole acceptance-criteria source; `user-story.md` is absent, as required (verified on disk) +- Audit scope: the full branch diff `12465043..d9ed9eb2` — 106 files (8 code/project paths, 94 evidence/documentation paths under the feature folder, 4 potential entries), 12 commits. PR context artifacts were regenerated at this HEAD before review (`artifacts/pr_context.summary.txt`, `artifacts/pr_context.appendix.txt`, hand-authored from `git diff --numstat` because the MCP collector is unavailable in this environment). + +## Verdict + +**PASS — zero Blocking findings.** All eight production/test paths conform to the general and C# code-change policies, the Bugfix Workflow is verified RED-first at commit granularity for all six defect units, all toolchain gates are verified non-vacuous from committed evidence, and the C# coverage verdict is PASS from figures this reviewer re-derived independently from the committed Cobertura documents. Six Non-blocking findings are recorded (§ 8). + +## Rejected Scope Narrowing + +None detected. The caller briefing supplied the full production diff, directed the audit at the full branch diff against `12465043`, and attempted no narrowing to a plan, task, phase, or file subset. The full diff scope was independently re-derived from `git diff --numstat 12465043..HEAD` and matches the caller's enumeration exactly. + +## 1. Scope integrity + +- **Production/test path set (8 paths), verified equal to the spec's permitted subset:** `ItemViewer.Breadcrumb.cs` (+110/−4), `BreadcrumbItemViewerLifecycleCoordinator.cs` (+16/−0), `BreadcrumbPopupUiOperations.cs` (+0/−5), `BreadcrumbDropDownHost.cs` (+2/−2), `BreadcrumbItemViewerLifecycleCoordinatorTests.cs` (+38/−1), `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` (+15/−12), new `ItemViewerBreadcrumbLifecycleRegressionTests.cs` (+480), `QuickFiler.Test/QuickFiler.Test.csproj` (+1/−0). Nothing else outside `docs/features/` changed. +- **Every explicitly excluded file is byte-identical to `12465043`** — verified by this reviewer with an empty `git diff` over: the six 489-owned `ItemViewer` partials (including `ItemViewer.cs`, `ItemViewer.Designer.cs`), the four 501-owned coordinator/hub files, all `QfcItemController.*` partials (484-owned), `QuickFiler/QuickFiler.csproj`, `IBreadcrumbDropDownHost.cs`, `IItemViewer.cs`, and `BreadcrumbDropDownIntegrationTests.cs` (which remains at exactly 500 lines). +- **`QuickFiler.Test.csproj` diff shape:** exactly one added `` line, inserted immediately after the existing `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` entry, zero deletions, zero reordering — the eleven merged-sibling entries carried by the base are all intact (verified from the raw diff hunk: context lines only above and below the insertion). +- The working tree at HEAD is clean. + +## 2. Toolchain gates (verified from committed evidence; figures re-derived where cheap) + +| Gate | Result | Verified how | +|---|---|---| +| csharpier check | EXIT 0; 1554 files, zero unformatted | `evidence/qa-gates/csharpier-check.md`; empty baseline unformatted set makes the gate absolute | +| MSBuild analyzers `/t:Rebuild` | EXIT 0; 0 errors, 5 warnings (= baseline); `Skipping target "CoreCompile"` count 0 against 83 `CoreCompile:` executions | `evidence/qa-gates/msbuild-analyzers.md`; non-vacuity counters recorded per the anti-warm-build rule | +| MSBuild nullable `/t:Rebuild` | EXIT 0; 0 errors; zero CS86xx; `/p:Nullable=enable` correctly not supplied; CoreCompile skip count 0 | `evidence/qa-gates/msbuild-nullable.md` | +| `QuickFiler.Test` vstest | 1201/1201 passed, 0 failed (baseline 1192; +9 = ten added tests minus one deleted) | Counters re-parsed by this reviewer from the committed TRX: `total="1201" passed="1201" failed="0"` | +| Full-suite coverage run | 9 assemblies, 6821/6821 passed, 0 failed (baseline 6812) | `evidence/qa-gates/coverage-final.md`; discovery list excludes sibling worktrees | +| Consecutive clean pass | Four stages at 06-20/06-21/06-22/06-25 UTC, zero restarts; all seven owned files SHA-identical across the pass | `evidence/qa-gates/toolchain-consecutive-pass.md` | + +**Bugfix Workflow (RED-first) verified at commit granularity for all six defect units.** The branch is structured as baseline commit `b61faddc` first, then one commit per unit (D1 `26b91875`, D2 `b210ceb2`, D3 `a52fb2ba`, D4 `5c841d1f`, D5 `fbdd78d1`, #475 all three parts together `9a0bd44e`). Every fail-before TRX was re-parsed by this reviewer and shows a genuine failure: D1 1/1 failed ("no exception was thrown" on the disposal assertion), D2 1/1, D3 1 of 2 failed (negative case red, positive green — the correct pre-fix shape), D4 2/2, D5 1/1, #475 lazy 1/1 (throws pre-laziness), #475 ctor 1/1 (ArgumentNullException instead of the fail-fast throw in the reverted state). Every pass-after TRX is green, and the failing test names are exactly the delivered test names. + +## 3. Coverage (C#) + +C# coverage verdict: **PASS** — repository-wide line coverage 85.2830 percent raw and 85.0799 percent on the CLAUDE.md § UT2 testable denominator (both at or above the 85 percent uniform floor and the 80 percent § UT2 floor), branch coverage 79.2255 percent raw (above the 75 percent floor), re-parsed by this reviewer from the root `coverage` element of the committed `evidence/qa-gates/coverage-final.cobertura.xml` (`line-rate="0.85283"`, `branch-rate="0.792255"`, 54692/64130 lines, 13012/16424 branches). + +- **No-regression:** baseline (`evidence/baseline/coverage-baseline.cobertura.xml`, root `line-rate="0.852607"`) to final moved +0.000223 raw and +0.000237 testable — both denominators rose. Verified from both committed documents, not from the markdown alone. +- **Per-file coverage for the three measured owned production files, independently re-aggregated by this reviewer** (deduplicating `(filename, line)` across `class` elements, the executor's stated method, which this reviewer's parse reproduces exactly): `BreadcrumbItemViewerLifecycleCoordinator.cs` 300/330 = 0.909091 (baseline 288/318 = 0.905660, rose); `BreadcrumbPopupUiOperations.cs` 229/231 = 0.991342 (uncovered-line count unchanged at 2; the −0.000111 delta is the arithmetic of deleting three fully-covered lines, not a regression); `BreadcrumbDropDownHost.cs` 279/281 = 0.992883 (identical uncovered lines 318, 360 in both documents). All three are at or above the 90 percent new/changed-member target, and none of D2's or #475's added measured lines appears in the uncovered-line sets. +- **`ItemViewer.Breadcrumb.cs` matches zero `class` elements in both Cobertura documents** — independently confirmed by this reviewer's parse. `ItemViewer.cs:18-20` carries `[ExcludeFromCodeCoverage]` on the partial type (re-read at HEAD), so D1, D3, D4, D5, and #475 part 3 are coverage-exempt by construction; their regression tests are required by the Bugfix Workflow, and flat coverage there is not a testing gap. No new `[ExcludeFromCodeCoverage]` is introduced and none is removed (zero occurrences of the token in the full branch diff). +- **Coverage artifact status:** the C# coverage artifact is present at the canonical evidence location, `evidence/qa-gates/coverage-final.cobertura.xml` (with its baseline counterpart), and verification was performed from it. The hook-conventional path `artifacts/csharp/coverage.xml` was deliberately not materialized: `artifacts/` is gitignored so a file there is not evidence, and a stale or shape-mismatched file at that path is a known source of false gate failures in this repository. The committed feature-evidence Cobertura is the authoritative artifact for this review. +- TypeScript, Python, and PowerShell each have zero changed files on this branch (verified from the regenerated PR context summary and `git diff --numstat`), so no coverage row is mandatory for them. + +## 4. Evidence Location Compliance + +- All 94 evidence/documentation paths in the branch diff live under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/` (evidence in `baseline/`, `qa-gates/`, `regression-testing/`, `other/`) or under `docs/features/potential/` (the three follow-up entries plus the promoted #670 entry) — the canonical locations. Zero violations. +- The branch diff was scanned for files under `artifacts/baselines/`, `artifacts/qa/`, `artifacts/evidence/`, and `artifacts/coverage/`: none exist. The repository does not carry `validate_evidence_locations.py`; the scan was performed manually against `git diff --name-only 12465043..HEAD`. +- No helper script (`.ps1`, `.py`, `.sh`) exists anywhere under `evidence/` — verified by extension search; none forces a spurious validator outcome. +- No `EVIDENCE_LOCATION_OVERRIDE_REJECTED` events: no instruction supplied a non-canonical evidence path. + +## 5. General code change policy + +- **Bugfix Workflow:** followed for all six units — failing regression test first with committed failing TRX, minimal targeted fix second, full toolchain loop third (one iteration, zero restarts). #475's three parts land in a single commit as the spec requires. +- **Minimality:** each production change is exactly the spec's design: D1 +4 core lines (type-tested concrete dispose with a fresh pattern variable), D2 field + assignment + guarded replay in the newly-adopted branch only, D3 field + reference-equality fail-fast + disposal clear, D4 one private guard called from four entry points, D5 a two-property disposal throw, #475 deletion + two identifier swaps + the lazy `Func<>` parameter. No opportunistic refactor. The three genuinely out-of-scope defects were promoted as potential entries instead of absorbed (D-14). +- **File size:** every touched file is at or under 500 lines at HEAD, re-measured by this reviewer: `ItemViewer.Breadcrumb.cs` 425, `BreadcrumbItemViewerLifecycleCoordinator.cs` 497, `BreadcrumbPopupUiOperations.cs` 489, `BreadcrumbDropDownHost.cs` 463, `BreadcrumbItemViewerLifecycleCoordinatorTests.cs` 419, `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` 483, new regression file 480. The constrained coordinator absorbed +16 against its 19-line headroom (R1 respected); `BreadcrumbDropDownIntegrationTests.cs` untouched at exactly 500. +- **Error handling:** all three new failure modes are fail-fast diagnostics (`InvalidOperationException` naming the operation for D3/D4, `ObjectDisposedException` for D5); #475 restores a fail-fast contract the production dispatcher already documented. No silent path is introduced; no log statement added or removed, matching the spec. +- **Public surface:** no public member added, removed, or re-signed. The deleted selector and the re-signed lazy helper are `internal`/`private` respectively. The one observable behavior change (the public 7-param host constructor now failing fast without an ambient context) is the spec-mandated #475 outcome with no in-repo production caller. + +## 6. C# and unit test policy + +- All ten added tests use MSTest attributes, Moq (`MockBehavior.Strict` where a collaborator must not be touched), and FluentAssertions, with explicit Arrange/Act/Assert sections and doc comments stating scenario and expected outcome, including the D3 negative test's deliberate `NotBeOfType()` exclusion (ODE derives from IOE) and both D4 tests' explicit "proves the guard fires and does not prove the race is absent" limitation. +- Determinism: the new `DrainableSynchronizationContext` makes "posted but not drained" a first-class state with no second thread and no timing construct; the #475 seam test nulls `_context` reflectively with the documented justification. No `Thread.Sleep`, `Task.Delay`, wall-clock wait, or temporary file appears anywhere in the branch diff (scanned). One pre-existing `Task.Run` is retained in the controlled-context half of the replacement boundary test — adjudicated acceptable in § 7 ruling 3. +- No `Interlocked`, `lock`, `Monitor`, `Volatile`, or `Mutex` construct is introduced (scanned; the D4 criterion requires their absence). +- Test placement follows the repository's established MSTest project layout (`QuickFiler.Test/Viewers/`), matching every sibling. + +## 7. Rulings requested by the caller + +1. **Committed raw Cobertura (2 × 10.7 MB): acceptable to retain for this cycle; Non-blocking (PA-2).** The approved plan's P0-T14/P8-T6 named those exact evidence paths, so the executor was plan-faithful, and the retained documents are what made this review's independent verification possible — the per-file and repo-wide figures above were re-derived from them, not taken from the markdown. The cost is 21.4 MB of permanent history growth against a maintainer preference for compact summaries. Disposition: raise at epic fan-in for a maintainer decision. If removal is chosen, the replacement is (a) the already-committed derived documents `coverage-final.md` and `coverage-delta.md`, plus (b) a compact extract holding the root `coverage` element and the per-`(filename, line)` hit tables for the three measured owned files — that is the exact subset this review consumed. Note that deleting the XMLs in a later commit does not shrink history; the decision is really about whether future features keep committing full raw documents. +2. **`EfcItemController.CleanupTests.cs:41` (C6 site 18) left unedited: correct.** Constraint C6's escalation rule mandates record-and-report, not edit; the file is outside this feature's seven owned paths, so editing it would itself have been a scope violation. The executor's risk bounding is sound and was spot-checked: the file names no guarded member, the guard's null escape covers the null-ambient case, and the empirical settlement (full `QuickFiler.Test` at 1198/1198 during Phase 4 and 6821/6821 repo-wide at the end) is green. The executor's independent re-derivation of 19 executable sites against C6's 13, and the Part 4 correction of C6's stale reachability premise (the constructor no longer calls `TaskScheduler.FromCurrentSynchronizationContext()` after 489's consolidation), are exactly the conduct the constraint asked for. Residual: the site's ambient-context dependence is a latent test-hygiene wrinkle in a file owned elsewhere — recorded as PA-3, promotion recommended, no action in this branch. +3. **The retained `Task.Run`: acceptable under `.claude/rules/general-unit-test.md`.** The banned-API list is `setTimeout`, `Thread.Sleep`, `Task.Delay`, real wall-clock waits, and `Date.now()` outside a clock interface; `Task.Run` is not on it, and the relevant acceptance criterion bans exactly the four constructs verified absent. The construct is carried over verbatim from the pre-change test as plan task P6-T3 instructs, and its completion is signal-based (`context.Drain(post)` pumps until the posted work completes) with no timeout and no wall-clock dependence; it passed in every recorded run including the baseline. Recorded as CR-4 (Info) only. +4. **D4 proxy honesty: confirmed, no overclaim.** The statement that the test "proves the guard fires and does not prove the race is absent" appears verbatim in the spec (Test Strategy, D4 design rationale, and the D4 acceptance criterion), in `evidence/other/change-description.md` (six occurrences including a dedicated section), and in both D4 test methods' own `` — all verified by direct read. No acceptance criterion asserts race elimination; the D4 criterion set explicitly says so. +5. **AC honesty: no criterion is checked without support.** Findings of the spot-check are in `feature-audit.2026-08-28T06-44.md`; the named high-risk claims all verify: the byte-identical set (including `QuickFiler.csproj`, `ItemViewer.Designer.cs`, and the 500-line `BreadcrumbDropDownIntegrationTests.cs`) produces empty diffs against `12465043`; the >= 90 percent per-measured-member criterion holds on this reviewer's independent re-aggregation; and all six defect units have genuine committed fail-before TRX with the delivered test names. The one criterion an executor could not close alone (the #670 issue for the D5 faulted-task finding) was closed by the orchestrator through the MCP promotion path, honestly recorded in `evidence/other/ac-reconciliation.md` as remediation-then-supersession rather than papered over, and #670 is verified OPEN on GitHub with the recorded title. + +## 8. Findings + +**Blocking: 0.** + +### Non-blocking + +- **PA-1 (Minor) — host tokens in committed TRX evidence.** All 19 committed `.trx` files embed the absolute assembly path `c:\users\\repos\taskmaster\...` in their `storage`/`codeBase` attributes, and `runUser` retains the machine token (a `` domain token), although the run name, user, and `computerName` were sanitized to placeholder form. This is partial compliance with the artifact-hygiene rule the sibling 489 evidence meets fully (489's committed evidence carries zero such tokens). Adjudicated Non-blocking because the identical tokens are already present throughout the integration branch in previously merged sibling evidence (501, 608, 439), so this branch neither introduces the exposure class nor can cure it alone. Recommendation: one mechanical sanitization pass over `evidence/**/*.trx` before fan-in, and a repo-wide cleanup entry for the pre-existing instances. + **PA-1 REMEDIATED by the orchestrator at 2026-08-28T07-03**, before fan-in, exactly as this finding + recommends. One mechanical pass over all 19 `evidence/**/*.trx` replaced the absolute worktree path + with `REDACTED-WORKTREE-ROOT` and the `runUser` domain token with `REDACTED-DOMAIN-USER`. A + case-insensitive sweep of the feature folder for the account and machine names now returns **0** + files. The sweep also confirmed that the only remaining occurrences anywhere in the repository sit in + four previously-merged promoted potential entries and in untracked `bin/Debug` build outputs, none of + which is in this branch's 108-file diff — consistent with this finding's assessment that the branch + neither introduced the class nor could cure it alone. The repo-wide cleanup entry this finding + recommends is still owed. + + **A second, undetected defect was found and fixed during that pass.** The executor's original scrub + substituted the placeholder `` into `storage` and `codeBase` XML *attribute values*. + A raw `<` is not legal in an XML attribute value, so **all 19 committed TRX files were not + well-formed XML** and would not parse — verified against the committed blobs at `HEAD`, so the defect + predates this remediation and was not introduced by it. This audit did not catch it because the + coverage figures were re-parsed from the Cobertura documents rather than from the TRX. Replacing the + 7,306 occurrences with the bracket-free `REDACTED-WORKTREE-ROOT` restored well-formedness: **all 19 + files now parse, 0 failures.** Only path and identity attributes changed; every counter is preserved, + and re-parsing them independently corroborates the delivered result — baseline `total=1192 passed=1192 + failed=0`, final `total=1201 passed=1201 failed=0`, the D4 full-suite run `1198/1198`, and genuine red + fail-before runs for all six defect units (`488-d1-fail` 0/1, `488-d2-fail` 0/1, `488-d3-fail` 1 of 2, + `488-d4-fail` 0/2, `488-d5-fail` 0/1, `475-lazy-fail` 0/1, `475-ctor-fail` 0/1). The evidence is + strictly better after remediation than before: previously unparseable, now machine-readable. + + **The repo-wide half of PA-1, and PA-2, are now tracked as issue + [#671](https://github.com/drmoisan/TaskMaster/issues/671)** — "Bug: + trx-evidence-host-tokens-and-malformed-xml" — covering the pre-existing tokens in features 501, 608 + and 439, the angle-bracket placeholder trap that breaks TRX well-formedness, and the raw-Cobertura + size convention. It is filed rather than left as prose because a finding recorded only in a feature + folder stops being visible once the feature merges. **#671 is a follow-up and is deliberately NOT in + this pull request's `Closes` list.** + +- **PA-2 (Info) — 21.4 MB of committed raw Cobertura.** Ruling 1 above; maintainer decision owed at fan-in. +- **PA-3 (Info) — C6 enumeration stale; one construction site installs no context.** Ruling 2 above; recorded and reported per the constraint's own rule; recommend promoting the `EfcItemController.CleanupTests.cs` ambient-context dependence as a test-hygiene note to that surface's owner. +- **PA-4 (Info) — repository threshold-wording conflict persists.** CLAUDE.md § UT2 states 80 percent repo-wide / 90 percent new-code line floors while `.claude/rules/quality-tiers.md` states uniform 85 line / 75 branch. This branch clears the stricter of each pair (85.28 line, 79.23 branch, per-measured-file >= 90), so no gate outcome depends on the conflict. Carried from the sibling reviews; owed to the governance sync, not this feature. +- **CR-4 (Info) — retained `Task.Run`** (ruling 3; recorded in the code review). +- **CR-5 (Info) — coordinator file at 497/500** (three lines of headroom remain; recorded in the code review). + +## 9. Acceptance criteria cross-check + +All 54 `spec.md` criteria are checked (`- [x]` 54, `- [ ]` 0, re-counted at HEAD), the spec diff against base consists solely of the 54 checkbox flips plus the nine-line dated D5-discharge amendment (verified by filtering the diff), and no criterion text was modified. Detail in `feature-audit.2026-08-28T06-44.md`. No criterion was checked off or altered by this reviewer. diff --git a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md index d5b20311f..4085e20f6 100644 --- a/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md +++ b/docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md @@ -414,6 +414,15 @@ faulted `InitializeWebViewAsync` task is observed by its caller** and does not b `TaskException`. If it is not observed, the correct response is a new issue against `ViewerSetup.cs` (484-owned), **not** a weakening of this guard. This is a blocking acceptance criterion below. +**Discharged (2026-08-28).** The task is **not** observed: three of its four production call sites +discard it (`QfcItemController.Initialization.cs:192`, `:288`, `:324`); only `:256` awaits it. The two +`EfcItemController` sites discard theirs as well. Per the rule above, the response is a new issue and +not a weakened guard, so the D5 guard is delivered unweakened and the defect is filed as +**issue [#670](https://github.com/drmoisan/TaskMaster/issues/670)** — "Bug: +qfc-initializewebviewasync-fault-is-unobserved", filed against +`QuickFiler/Controllers/QfcItemController.ViewerSetup.cs`. Evidence: +`evidence/qa-gates/d5-faulted-task-observation.md`. + ### #475 — delete the ambient-probing selector, in three parts All three parts are **required** and must land as one change-set. @@ -778,159 +787,159 @@ against the Phase 0 baseline rather than as an absolute count. ### Process (applies to every defect unit) -- [ ] Phase 0 evidence records the pre-change `QuickFiler.Test` pass/fail counts and the pre-change +- [x] Phase 0 evidence records the pre-change `QuickFiler.Test` pass/fail counts and the pre-change coverage figures, captured before any production file is edited, under `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/baseline/`. -- [ ] For each of the six defect units (D1, D2, D3, D4, D5, #475), evidence records the unit's regression +- [x] For each of the six defect units (D1, D2, D3, D4, D5, #475), evidence records the unit's regression test **failing against the unfixed code** before the corresponding production change lands, per the CLAUDE.md Bugfix Workflow. ### D1 — host replacement on WebView2 environment change -- [ ] `ItemViewer.ConfigureBreadcrumbDropDown(CoreWebView2Environment, IWebViewCoreInitializer)` disposes +- [x] `ItemViewer.ConfigureBreadcrumbDropDown(CoreWebView2Environment, IWebViewCoreInitializer)` disposes the outgoing host **between** the same-environment early return and the construction of the replacement, so that the ordering is guaranteed by statement order and not by dispatcher behaviour. -- [ ] The disposal is guarded by a type test for the **concrete** `BreadcrumbDropDownHost` (not for +- [x] The disposal is guarded by a type test for the **concrete** `BreadcrumbDropDownHost` (not for `IBreadcrumbDropDownHost`), using a pattern variable distinct from the one bound in the same-environment guard. -- [ ] A regression test configures with environment A, captures the host, configures with environment B +- [x] A regression test configures with environment A, captures the host, configures with environment B under a **drainable** (non-inline) synchronization context, and asserts the first host is disposed — observing `host1.DropDown.IsDisposed` and, as a secondary assertion, that `host1.Close(reason)` returns `false`. -- [ ] `BreadcrumbDropDownIntegrationTests.ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` passes +- [x] `BreadcrumbDropDownIntegrationTests.ItemViewerDisposal_OwnsHostAndDetachesBothSurfaces` passes unmodified, with its `host.Dispose()` `Times.Once()` assertion intact, and `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` is byte-identical to its pre-change state. -- [ ] `QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost` +- [x] `QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_RepeatedSameEnvironmentReusesPopupHost` passes unmodified. -- [ ] The spec's recorded D1 limitations are honoured in the delivered source: the 3-arg injected +- [x] The spec's recorded D1 limitations are honoured in the delivered source: the 3-arg injected `ConfigureBreadcrumbDropDown` overload is **not** given an equivalent disposal, and `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` is unmodified. ### D2 — `SetBreadcrumbTheme` lost when the host post is deferred -- [ ] `BreadcrumbItemViewerLifecycleCoordinator` carries a private retained-theme field that `SetTheme` +- [x] `BreadcrumbItemViewerLifecycleCoordinator` carries a private retained-theme field that `SetTheme` assigns before forwarding to the bridge coordinator and the drop-down host. -- [ ] `ConfigureHost`'s posted lambda replays the retained theme onto the host **in the newly-adopted +- [x] `ConfigureHost`'s posted lambda replays the retained theme onto the host **in the newly-adopted branch only**, guarded against null or whitespace. The `UpdateRequestProviders` branch performs no `SetTheme` call. -- [ ] A regression test in `BreadcrumbItemViewerLifecycleCoordinatorTests.cs` queues `ConfigureHost` +- [x] A regression test in `BreadcrumbItemViewerLifecycleCoordinatorTests.cs` queues `ConfigureHost` without draining, calls `SetTheme("dark")`, drains, and asserts the recording host received exactly `"dark"`. The test contains no second thread, no `Thread.Sleep`, no `Task.Delay`, and no wall-clock wait. -- [ ] `QfcItemControllerBreadcrumbDropDownTests.ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession` +- [x] `QfcItemControllerBreadcrumbDropDownTests.ConfigureAndAttachBreadcrumbAsync_CachesCurrentThemeAndCreatesOneCandidatePerSession` passes unmodified, and evidence records the explicit reasoning for why its "no stale pooled theme is replayed" assertion survives the retained-theme replay. -- [ ] `QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily` +- [x] `QfcItemControllerBreadcrumbDropDownTests.ConfigureBreadcrumbDropDown_PassesExistingEnvironmentAndDarkThemeLazily` and `..._LightThemeUsesSameControllerSetupSeam` both pass unmodified. ### D3 — a second, different `IFolderHierarchyProvider` -- [ ] `InitializeBreadcrumbPipeline` throws `InvalidOperationException` when `BreadcrumbCoordinator` is +- [x] `InitializeBreadcrumbPipeline` throws `InvalidOperationException` when `BreadcrumbCoordinator` is non-null and the supplied provider is not reference-equal to the retained one, and returns without effect when it is reference-equal — matching `BreadcrumbItemViewerLifecycleCoordinator.SetBridgeCoordinator`'s reference comparison. -- [ ] The retained provider is stored in a private `ItemViewer` field assigned on the successful +- [x] The retained provider is stored in a private `ItemViewer` field assigned on the successful initialization path, and is nulled by `DisposeBreadcrumbResources` so a pipeline re-created after disposal is not blocked by a stale reference. -- [ ] Two regression tests exist: a negative case asserting `InvalidOperationException` for a second, +- [x] Two regression tests exist: a negative case asserting `InvalidOperationException` for a second, distinct `Mock(MockBehavior.Strict)`, and a positive case asserting `NotThrow` and an unchanged `BreadcrumbCoordinator` (`BeSameAs`) for a repeat call with the same provider. -- [ ] No re-initialization branch is added. `BreadcrumbBridgeCoordinator`, +- [x] No re-initialization branch is added. `BreadcrumbBridgeCoordinator`, `BreadcrumbItemViewerLifecycleCoordinator.SetBridgeCoordinator`, and `UnsubscribeBridge` are unmodified. -- [ ] The change description and this spec both state that D3 **changes no production behaviour**, with +- [x] The change description and this spec both state that D3 **changes no production behaviour**, with the reason (`QfcItemController.ViewerSetup.cs:143` guards the only two production callers on `viewer.BreadcrumbCoordinator == null`), so no reviewer expects a user-visible repair. -- [ ] The fail-fast/`SetBridgeCoordinator` coupling is recorded in the delivered spec: the +- [x] The fail-fast/`SetBridgeCoordinator` coupling is recorded in the delivered spec: the `SetBridgeCoordinator` replace-without-dispose defect is out of scope **because** D3 fails fast, and adopting explicit re-initialization instead would require pulling that defect into scope. ### D4 — UI-thread affinity -- [ ] A private `ItemViewer` helper enforces UI-thread affinity by comparing +- [x] A private `ItemViewer` helper enforces UI-thread affinity by comparing `SynchronizationContext.Current` for **reference equality** against `UiSyncContext`, throwing `InvalidOperationException` whose message names the operation, and returning without effect when `UiSyncContext` is null. -- [ ] The helper is invoked as the first statement of `InitializeBreadcrumbPipeline(provider, operations)`, +- [x] The helper is invoked as the first statement of `InitializeBreadcrumbPipeline(provider, operations)`, of both `ConfigureBreadcrumbDropDown` overloads, and of `EnsureBreadcrumbResourceOwnership`. -- [ ] A regression test invokes `InitializeBreadcrumbPipeline` through the existing +- [x] A regression test invokes `InitializeBreadcrumbPipeline` through the existing `BreadcrumbSelectorToggleUiBoundaryTests.InvokeAmbientNull` helper — **same thread, ambient context nulled, no second thread and no timing construct** — and asserts `InvalidOperationException`. A second case installs a *different non-null* context and asserts the same, proving the comparison is reference equality rather than a null check. -- [ ] The spec, the change description, and the test's own documentation each state that this proxy +- [x] The spec, the change description, and the test's own documentation each state that this proxy **proves the guard fires and does not prove the race is absent**, and that a true two-thread data race cannot be reproduced deterministically under the repository's ban on sleeps and wall-clock waits. **No criterion in this document asserts that the race is eliminated.** -- [ ] No `Interlocked`, `lock`, `Monitor`, `Volatile`, or `Mutex` construct is introduced by this feature. -- [ ] The three unconfirmed harnesses (`BreadcrumbCollapsedSurfaceReadinessTests.cs`, +- [x] No `Interlocked`, `lock`, `Monitor`, `Volatile`, or `Mutex` construct is introduced by this feature. +- [x] The three unconfirmed harnesses (`BreadcrumbCollapsedSurfaceReadinessTests.cs`, `BreadcrumbPendingOpenCloseTests.cs`, `BreadcrumbCoordinatorLifecycleTests.cs`) are each confirmed to install their synchronization context **before** constructing the `ItemViewer`, and the confirmation is recorded in evidence. ### D5 — `Container` created during teardown -- [ ] `EnsureBreadcrumbResourceOwnership` throws `ObjectDisposedException` as its first action when the +- [x] `EnsureBreadcrumbResourceOwnership` throws `ObjectDisposedException` as its first action when the viewer `IsDisposed` **or** `Disposing`, so no `Container` is created and no `BreadcrumbResourceOwner` is added after teardown has begun. -- [ ] A regression test disposes a real `ItemViewer`, calls `InitializeBreadcrumbPipeline`, asserts +- [x] A regression test disposes a real `ItemViewer`, calls `InitializeBreadcrumbPipeline`, asserts `ObjectDisposedException`, and additionally asserts `viewer.BreadcrumbCoordinator` is null. -- [ ] `QuickFiler/Viewers/ItemViewer.Designer.cs` is byte-identical to its pre-change state. -- [ ] The research §3.5 open item is discharged with recorded evidence: it is confirmed whether a faulted +- [x] `QuickFiler/Viewers/ItemViewer.Designer.cs` is byte-identical to its pre-change state. +- [x] The research §3.5 open item is discharged with recorded evidence: it is confirmed whether a faulted `QfcItemController.InitializeWebViewAsync` task is observed by its caller. If it is not observed, a new issue is opened against `QfcItemController.ViewerSetup.cs` (484-owned) and referenced here — **the guard is not weakened in response.** ### #475 — `CaptureCurrentOrTests()` -- [ ] `BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` no longer exists, and a repository-wide search +- [x] `BreadcrumbPopupUiOperations.CaptureCurrentOrTests()` no longer exists, and a repository-wide search for the identifier returns no hit in any `.cs` file. -- [ ] `BreadcrumbPopupUiOperations.CreateForCurrentThreadTests()` and +- [x] `BreadcrumbPopupUiOperations.CreateForCurrentThreadTests()` and `BreadcrumbUiDispatcher.CreateForCurrentThreadTests()` both still exist and are unmodified; only the ambient-probing selector is removed. -- [ ] Both `BreadcrumbDropDownHost` constructor chains that previously supplied +- [x] Both `BreadcrumbDropDownHost` constructor chains that previously supplied `CaptureCurrentOrTests()` now supply `CaptureCurrent()`, and the constructor argument order is unchanged, so `BreadcrumbDropDownIntegrationTests.Constructor_NullLegacySurfaceFactory_ThrowsForSurfaceFactory` still passes without an ambient context. -- [ ] `ItemViewer.EnsureBreadcrumbLifecycle` takes a `Func` and evaluates it +- [x] `ItemViewer.EnsureBreadcrumbLifecycle` takes a `Func` and evaluates it **only after** the already-initialized early return, and all three of its call sites are updated accordingly. -- [ ] `CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` is deleted and replaced +- [x] `CaptureCurrentOrTests_NullAndControlledContexts_SelectExpectedBoundaries` is deleted and replaced in `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` with a test asserting that `CaptureCurrent` under a null ambient context throws `InvalidOperationException`, retaining the controlled-context half against `CaptureCurrent`. -- [ ] A seam-preservation regression test calls the 3-arg `ConfigureBreadcrumbDropDown` inside +- [x] A seam-preservation regression test calls the 3-arg `ConfigureBreadcrumbDropDown` inside `InvokeAmbientNull` on a viewer whose lifecycle was already seeded with injected operations, and asserts `NotThrow`. Evidence records this test red before the laziness change and green after. -- [ ] No test file other than `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` and the new regression file +- [x] No test file other than `BreadcrumbPopupBoundaryCoverageTests.Part2.cs` and the new regression file is modified in service of #475; specifically, no existing test's injected `BreadcrumbPopupUiOperations` seam is removed or replaced. ### Scope, ownership, and the 489 dependency -- [ ] The set of files changed by this feature is a subset of: the four owned production files +- [x] The set of files changed by this feature is a subset of: the four owned production files (`ItemViewer.Breadcrumb.cs`, `BreadcrumbItemViewerLifecycleCoordinator.cs`, `BreadcrumbPopupUiOperations.cs`, `BreadcrumbDropDownHost.cs`), the two owned test files (`BreadcrumbItemViewerLifecycleCoordinatorTests.cs`, `BreadcrumbPopupBoundaryCoverageTests.Part2.cs`), the one new test file, and `QuickFiler.Test/QuickFiler.Test.csproj`. -- [ ] `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`, +- [x] `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`, `QuickFiler/Viewers/BreadcrumbMessengerHub.cs`, `QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs`, `QuickFiler/Viewers/ItemViewer.cs`, `QuickFiler/Viewers/ItemViewer.Designer.cs`, `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs`, and `QuickFiler/QuickFiler.csproj` are all byte-identical to their pre-change state. -- [ ] No public member is added, removed, or re-signed in any changed file, and +- [x] No public member is added, removed, or re-signed in any changed file, and `QuickFiler/Viewers/IBreadcrumbDropDownHost.cs` and `QuickFiler/Viewers/IItemViewer.cs` are unmodified. -- [ ] The `QuickFiler.Test.csproj` diff is exactly one added `` line for the new test +- [x] The `QuickFiler.Test.csproj` diff is exactly one added `` line for the new test file, positioned adjacent to the existing `Viewers\ItemViewerBreadcrumbDropDownContractTests.cs` entry, with no reordering of any other entry. -- [ ] The three out-of-scope follow-up candidates (D1c; `SetBridgeCoordinator` replace-without-dispose; +- [x] The three out-of-scope follow-up candidates (D1c; `SetBridgeCoordinator` replace-without-dispose; `Reset()` surface-detach synchrony) are each recorded as a potential entry or GitHub issue, with the mechanism and triggers carried forward so the follow-up does not have to re-derive them. No fix for any of the three appears in this feature's diff. -- [ ] The `## Dependencies on 489` section of this spec is re-checked against 489's finalised spec before +- [x] The `## Dependencies on 489` section of this spec is re-checked against 489's finalised spec before integration, and each of D489-1 through D489-6 is recorded as confirmed or as requiring a named adjustment. **D489-4 is checked explicitly**, because a member-name collision across `ItemViewer` partials is a compile error at integration rather than a merge conflict and will not surface at @@ -938,37 +947,37 @@ against the Phase 0 baseline rather than as an absolute count. ### File size, toolchain, coverage, and document integrity -- [ ] Every production and test file touched by this feature is at most **500 lines** after the change. +- [x] Every production and test file touched by this feature is at most **500 lines** after the change. The post-change line counts of all four owned production files, both owned test files, and the new test file are recorded in evidence. In particular `BreadcrumbItemViewerLifecycleCoordinator.cs` (pre-change 481) and `BreadcrumbPopupUiOperations.cs` (pre-change 494) are each verified at or under 500. -- [ ] `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` remains at exactly 500 lines and is +- [x] `QuickFiler.Test/Viewers/BreadcrumbDropDownIntegrationTests.cs` remains at exactly 500 lines and is unmodified. -- [ ] Every new test uses MSTest, Moq, and FluentAssertions, and no new test contains `Thread.Sleep`, +- [x] Every new test uses MSTest, Moq, and FluentAssertions, and no new test contains `Thread.Sleep`, `Task.Delay`, a wall-clock wait, or a temporary file. -- [ ] `dotnet tool run csharpier check .` reports no formatting differences. -- [ ] `msbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true` +- [x] `dotnet tool run csharpier check .` reports no formatting differences. +- [x] `msbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true` completes with zero errors, and the analyzer warning count for the four owned production files is no greater than the Phase 0 baseline count for those same files. -- [ ] `msbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true` +- [x] `msbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true` completes with zero errors. `/p:Nullable=enable` is **not** added to this command. -- [ ] `vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /EnableCodeCoverage /InIsolation` +- [x] `vstest.console.exe QuickFiler.Test\bin\Debug\QuickFiler.Test.dll /EnableCodeCoverage /InIsolation` reports zero failures, and the pass count is greater than or equal to the Phase 0 baseline pass count plus the number of tests added, minus the one deleted test. -- [ ] All four toolchain stages pass in a single consecutive pass with no intervening file modification. -- [ ] Coverage for the changed lines is not reduced relative to the Phase 0 baseline, and each new or +- [x] All four toolchain stages pass in a single consecutive pass with no intervening file modification. +- [x] Coverage for the changed lines is not reduced relative to the Phase 0 baseline, and each new or changed **measured** production member — that is, members in `BreadcrumbItemViewerLifecycleCoordinator.cs`, `BreadcrumbPopupUiOperations.cs`, and `BreadcrumbDropDownHost.cs` — reaches `>= 90%` line coverage. -- [ ] Repository-wide line coverage is `>= 80%` against the testable denominator defined in CLAUDE.md +- [x] Repository-wide line coverage is `>= 80%` against the testable denominator defined in CLAUDE.md § UT2. Both the testable-denominator figure and the raw uninstrumented figure are recorded in evidence together with the Phase 0 baseline values, and the delivered change does not lower either. -- [ ] Evidence records that all fixes in `ItemViewer.Breadcrumb.cs` (D1, D3, D4, D5, and #475 part 3) are +- [x] Evidence records that all fixes in `ItemViewer.Breadcrumb.cs` (D1, D3, D4, D5, and #475 part 3) are **coverage-exempt** because `ItemViewer.cs:20` carries `[ExcludeFromCodeCoverage]` on the partial type, so their regression tests move no coverage number. **No new `[ExcludeFromCodeCoverage]` attribute is introduced anywhere by this feature, and none is removed.** -- [ ] `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/user-story.md` **does not exist**. +- [x] `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/user-story.md` **does not exist**. This is a `full-bug` feature; `spec.md` is the sole acceptance-criteria source, and a second checkbox-bearing document in this folder is an integrity failure. diff --git a/docs/features/potential/2026-08-28-configurehost-generation-guard-drops-incoming-host.md b/docs/features/potential/2026-08-28-configurehost-generation-guard-drops-incoming-host.md new file mode 100644 index 000000000..2f575a9b0 --- /dev/null +++ b/docs/features/potential/2026-08-28-configurehost-generation-guard-drops-incoming-host.md @@ -0,0 +1,88 @@ +# configurehost-generation-guard-drops-incoming-host (Potential Bug) + +- Date captured: 2026-08-28 +- Author: Dan Moisan +- Status: Draft + +> Automation note: Keep the section headings below unchanged; the promotion tooling maps each of them into the GitHub bug issue template. + +## Summary + +`BreadcrumbItemViewerLifecycleCoordinator.ConfigureHost` posts its adoption work through the UI +dispatcher and opens that posted lambda with a generation guard. When `_generation` advanced between the +schedule and the run, the lambda returns early and the **incoming** host — already constructed by +`ItemViewer.ConfigureBreadcrumbDropDown` — is dropped without being disposed. This is defect D1c from +the #488 research, out of scope for #488 and recorded here so the follow-up does not have to re-derive +it. + +## Environment + +- OS/version: Windows 11 Pro 10.0.26200 +- Python version: n/a (.NET Framework 4.8.1, VSTO / WinForms) +- Command/flags used: n/a — identified by source reading during issue #488 research and execution +- Data source or fixture: `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` + +## Steps to Reproduce + +1. Drive `BreadcrumbItemViewerLifecycleCoordinator.ConfigureHost` with a queued, non-inline + synchronization context so the posted lambda is observable before it runs. +2. Advance the coordinator's generation before draining — through `Reset()` or `Dispose()`, per the two + triggers below. +3. Drain the queue and observe that the generation guard returns early, leaving the host constructed for + this call unreferenced and undisposed. + +## Expected Behavior + +A host the coordinator declined to adopt should be disposed on the early-return path, since nothing +else holds a reference to it. + +## Actual Behavior + +The posted lambda returns without disposing the incoming host. The host owns a `ToolStripDropDown` and, +once opened, a WebView2-backed surface, so the drop is a real resource leak rather than a bookkeeping +gap. + +## Logs / Screenshots + +- [ ] Attached minimal logs or screenshot +- Snippet: no captured log; identified by code reading, recorded in the #488 research §3.6 and in + `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/spec.md` under + "Out of scope / non-goals" item 1. + +## Impact / Severity + +- [ ] Blocker +- [ ] High +- [x] Medium +- [ ] Low + +The window requires a generation advance between the schedule and the run, which on the production UI +thread does not arise because every post runs inline. The severity comes from what leaks — a native +popup and potentially a WebView2 surface — rather than from the likelihood. + +## Suspected Cause / Notes + +**Mechanism.** The generation guard exists to discard stale adoption work after a reset or disposal. It +correctly declines to adopt, but the host it declines was constructed by the caller and handed over on +the assumption that the coordinator would take ownership. Nothing else disposes it. + +**Triggers.** Two paths advance the generation: +- `Reset()`, reached from `QfcItemController.Cleanup()` through the viewer-setup teardown path. +- `Dispose()`. + +**Why it was out of scope for #488.** It leaks the **incoming** host, which is a different defect from +the one #488 defect D1 filed — D1 concerns the **outgoing** host's disposal ordering. Adding a +`host.Dispose()` to a branch no current test exercises would have been an unpinned behaviour change +inside a bugfix change-set. + +Files to inspect: `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`. + +## Proposed Fix / Validation Ideas + +- [ ] Unit coverage areas: a test that queues `ConfigureHost`, advances the generation before draining, and asserts the incoming host was disposed +- [ ] Integration scenario to retest: reset-then-reconfigure and dispose-then-reconfigure sequences +- [ ] Manual verification notes: confirm the fix does not double-dispose a host that was adopted normally + +## Next Step + +Promote to a GitHub issue against `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`. diff --git a/docs/features/potential/2026-08-28-reset-detaches-collapsed-and-popup-surfaces-with-different-synchrony.md b/docs/features/potential/2026-08-28-reset-detaches-collapsed-and-popup-surfaces-with-different-synchrony.md new file mode 100644 index 000000000..07470a83d --- /dev/null +++ b/docs/features/potential/2026-08-28-reset-detaches-collapsed-and-popup-surfaces-with-different-synchrony.md @@ -0,0 +1,92 @@ +# reset-detaches-collapsed-and-popup-surfaces-with-different-synchrony (Potential Bug) + +- Date captured: 2026-08-28 +- Author: Dan Moisan +- Status: Draft + +> Automation note: Keep the section headings below unchanged; the promotion tooling maps each of them into the GitHub bug issue template. + +## Summary + +`BreadcrumbItemViewerLifecycleCoordinator.Reset()` detaches the **collapsed** surface synchronously but +the **popup** surface only through a posted lambda. The two surfaces therefore come apart at different +times, and a caller that treats `Reset()` as complete on return is correct about one surface and wrong +about the other. This is the same class of defect as #488's D2, and it spans two files owned by +different features, which is why #488 could not fix it. + +## Environment + +- OS/version: Windows 11 Pro 10.0.26200 +- Python version: n/a (.NET Framework 4.8.1, VSTO / WinForms) +- Command/flags used: n/a — identified by source reading during the #488 orchestrator comment cross-check +- Data source or fixture: `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` and + `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` + +## Steps to Reproduce + +1. Attach both a collapsed messenger and a popup messenger to a coordinator, using a queued, non-inline + synchronization context. +2. Call `Reset()`. +3. Before draining the queue, observe that the collapsed surface is already detached while the popup + surface is not. + +## Expected Behavior + +`Reset()` should apply one ordering rule to both surfaces, so that on return either both are detached or +neither is, and a caller can reason about the post-reset state without knowing which dispatcher path +each surface takes. + +## Actual Behavior + +`Reset()` calls `DetachCollapsedMessenger()` inline. It never calls `DetachPopupMessenger()` directly; +the popup detach reaches `_detachPopupMessenger()` inside the `PostAsync` lambda opened by +`BreadcrumbDropDownOpenCoordinator.Reset()`. On any non-inline context the two detaches land at +different times. + +## Logs / Screenshots + +- [ ] Attached minimal logs or screenshot +- Snippet: no captured log; verified against source in + `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/research/2026-08-25T10-20-orchestrator-comment-crosscheck.md` + under "Claim 3". + +## Impact / Severity + +- [ ] Blocker +- [ ] High +- [x] Medium +- [ ] Low + +On the production UI thread every post runs inline, so the two detaches coincide and no user is +affected today. The severity is in the contract rather than the current symptom: the asymmetry is +invisible at the call site and will surface the first time a caller reaches `Reset()` from off the +boundary. + +## Suspected Cause / Notes + +**This entry names two files, and both halves must be changed together.** + +- `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` holds the synchronous collapsed-side + detach inside `Reset()`. +- `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs` holds the asynchronous popup-side detach + inside its own `Reset()`'s posted lambda. + +**Why #488 could not fix it.** The #488 correction comment proposed folding this into D2's fix so the +ordering rule is applied once rather than per call site. That was unavailable: the asynchronous half +lives in `BreadcrumbDropDownOpenCoordinator.cs`, owned by sibling feature +`breadcrumb-coordinator-hub-defects-501` for issue #462, whose spec cedes #488's four production files +to #488 and correspondingly retains the open-coordinator file. Changing only the collapsed half does not +fix a synchrony mismatch and would have been an opportunistic refactor of a path neither #488 nor #475 +filed. + +## Proposed Fix / Validation Ideas + +- [ ] Unit coverage areas: a test that resets under a queued context and asserts both surfaces detach on the same side of the drain +- [ ] Integration scenario to retest: `ResetAndPooledReuse_DetachPopupAndDoNotDuplicateCallbacks`, which must stay green +- [ ] Manual verification notes: confirm pooled viewer reuse still reattaches both surfaces correctly + +## Next Step + +Promote to a GitHub issue naming **both** `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` +and `QuickFiler/Viewers/BreadcrumbDropDownOpenCoordinator.cs`, so whoever owns it can change both halves +together. diff --git a/docs/features/potential/2026-08-28-setbridgecoordinator-replaces-without-disposing.md b/docs/features/potential/2026-08-28-setbridgecoordinator-replaces-without-disposing.md new file mode 100644 index 000000000..284f18700 --- /dev/null +++ b/docs/features/potential/2026-08-28-setbridgecoordinator-replaces-without-disposing.md @@ -0,0 +1,89 @@ +# setbridgecoordinator-replaces-without-disposing (Potential Bug) + +- Date captured: 2026-08-28 +- Author: Dan Moisan +- Status: Draft + +> Automation note: Keep the section headings below unchanged; the promotion tooling maps each of them into the GitHub bug issue template. + +## Summary + +`BreadcrumbItemViewerLifecycleCoordinator.SetBridgeCoordinator` replaces its bridge coordinator without +disposing the outgoing instance, while the same type's `Dispose()` **does** dispose it. The type +therefore owns the bridge coordinator at teardown but not at replacement. The path is dormant today +only because of the method's reference-equality guard, and because #488's D3 fix was deliberately +implemented as **fail-fast** rather than as explicit re-initialization. + +## Environment + +- OS/version: Windows 11 Pro 10.0.26200 +- Python version: n/a (.NET Framework 4.8.1, VSTO / WinForms) +- Command/flags used: n/a — identified by source reading during the #488 orchestrator comment cross-check +- Data source or fixture: `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs` + +## Steps to Reproduce + +1. Obtain a coordinator whose `_bridgeCoordinator` is already set. +2. Call `SetBridgeCoordinator` with a genuinely different instance, so the reference-equality guard does + not short-circuit. +3. Observe that `UnsubscribeBridge()` runs and the field is overwritten, but the outgoing coordinator is + never disposed. + +## Expected Behavior + +Replacement and teardown should agree on ownership. If `Dispose()` disposes the bridge coordinator, so +should the replacement path — or neither should, and ownership should sit with the caller. + +## Actual Behavior + +`SetBridgeCoordinator` calls `UnsubscribeBridge()`, which only detaches four event handlers and disposes +nothing, then assigns the new instance. `Dispose()` by contrast calls `_bridgeCoordinator?.Dispose()` +and then nulls the field. On replacement the outgoing coordinator's `BreadcrumbMessengerHub` and its +four event subscriptions leak. + +## Logs / Screenshots + +- [ ] Attached minimal logs or screenshot +- Snippet: no captured log; verified against source in + `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/research/2026-08-25T10-20-orchestrator-comment-crosscheck.md` + under "Claim 2". + +## Impact / Severity + +- [ ] Blocker +- [ ] High +- [x] Medium +- [ ] Low + +Unreachable in the delivered code, so no user is affected today. The severity is latent: it becomes live +the moment any change lets a second, different bridge coordinator be installed. + +## Suspected Cause / Notes + +**The dormancy is contingent and must not be assumed permanent.** #488's D3 fix makes +`ItemViewer.InitializeBreadcrumbPipeline` throw `InvalidOperationException` on a second, different +`IFolderHierarchyProvider` rather than re-initializing. Under fail-fast, `InitializeBreadcrumbPipeline` +never constructs a second `BreadcrumbBridgeCoordinator`, so nothing new ever reaches +`SetBridgeCoordinator`'s replacement branch. + +**If D3 were ever amended to adopt explicit re-initialization instead, this defect becomes live and MUST +be pulled into scope in the same change-set.** #488's `spec.md` records that coupling under its D3 +design section, in a paragraph headed "Load-bearing coupling — do not lose this", and #488's constraint +C7 forbids substituting a re-initialization branch for the throw. + +Whoever picks this up should decide the ownership question outright rather than only patching the +replacement branch: either the coordinator owns the bridge coordinator on both paths, or on neither. + +Files to inspect: `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, +`QuickFiler/Viewers/BreadcrumbBridgeCoordinator.cs`. + +## Proposed Fix / Validation Ideas + +- [ ] Unit coverage areas: a test installing a genuinely different bridge coordinator and asserting the outgoing one is disposed exactly once +- [ ] Integration scenario to retest: `SetBridgeCoordinator_SameReference_DoesNotDuplicateSubscriptions`, which must stay green +- [ ] Manual verification notes: confirm no double-dispose when replacement is followed by `Dispose()` + +## Next Step + +Promote to a GitHub issue against `QuickFiler/Viewers/BreadcrumbItemViewerLifecycleCoordinator.cs`, +cross-referencing #488's D3 fail-fast decision as the reason it is currently dormant. diff --git a/docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md b/docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md new file mode 100644 index 000000000..73d47233c --- /dev/null +++ b/docs/features/potential/promoted/2026-08-28-qfc-initializewebviewasync-fault-is-unobserved.md @@ -0,0 +1,108 @@ +# qfc-initializewebviewasync-fault-is-unobserved (Issue #670) + +- Date captured: 2026-08-28 +- Author: Dan Moisan +- Status: Promoted -> docs/features/active/qfc-initializewebviewasync-fault-is-unobserved/ (Issue #670) + +> Automation note: Keep the section headings below unchanged; the promotion tooling maps each of them into the GitHub bug issue template. + +- Issue: #670 +- Issue URL: https://github.com/drmoisan/TaskMaster/issues/670 +- Last Updated: 2026-08-28 +## Summary + +`QfcItemController.InitializeWebViewAsync` (`QuickFiler/Controllers/QfcItemController.ViewerSetup.cs:48`) +returns a `Task` that **three of its four production call sites discard**, so any exception it raises becomes an +unobserved task exception rather than a diagnostic anyone sees. The method is the sole entry point for WebView2 +environment creation, core initialization, and — at `ViewerSetup.cs:112` — the call to `EnsureBreadcrumbPipeline()`. +Issue #488's D5 fix makes that path newly capable of throwing `ObjectDisposedException` when the pipeline is built +against a viewer whose teardown has begun, which converts a previously silent leak into a fault that is itself +silently swallowed. + +## Environment + +- OS/version: Windows 11 Pro 10.0.26200 +- Python version: n/a (.NET Framework 4.8.1, VSTO / WinForms) +- Command/flags used: n/a — identified by source reading during issue #488 execution, discharging research §3.5 +- Data source or fixture: `QuickFiler/Controllers/QfcItemController.Initialization.cs` call sites + +## Steps to Reproduce + +1. Drive a `QfcItemController` through any of the three fire-and-forget initialization paths listed under + "Suspected Cause / Notes". +2. Arrange for `InitializeWebViewAsync` to fault — for example by disposing the `ItemViewer` before the posted + continuation reaches `EnsureBreadcrumbPipeline()`, which after #488's D5 fix throws `ObjectDisposedException`. +3. Observe that no exception surfaces to the caller, no log entry is written by the call site, and initialization + silently completes as far as any observer can tell. + +## Expected Behavior + +A faulted `InitializeWebViewAsync` should be observed by its caller — awaited, `ContinueWith`-observed, or routed to +the repository's logging pattern — so that a failure during WebView2 initialization is diagnosable rather than +invisible. + +## Actual Behavior + +The task is discarded at three of the four call sites, so the fault is never observed: + +| Call site | Form | Observed? | +| --- | --- | --- | +| `QfcItemController.Initialization.cs:192` | `_ = _itemViewer.UiDispatcher.InvokeAsync(InitializeWebViewAsync);` | **no** — discarded, and additionally wrapped in a WPF `DispatcherOperation` | +| `QfcItemController.Initialization.cs:256` | `await InitializeWebViewAsync();` | yes — awaited into the enclosing async method's task | +| `QfcItemController.Initialization.cs:288` | `_ = InitializeWebViewAsync();` | **no** — discarded | +| `QfcItemController.Initialization.cs:324` | `_ = InitializeWebViewAsync();` | **no** — discarded | + +On .NET Framework 4.5 and later an unobserved task exception no longer terminates the process by default, so the +fault is finalized away with no observable effect at all. + +## Logs / Screenshots + +- [ ] Attached minimal logs or screenshot +- Snippet: no captured log — that is the defect. Identified by source reading, recorded in + `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/evidence/qa-gates/d5-faulted-task-observation.md`. + +## Impact / Severity + +- [ ] Blocker +- [ ] High +- [x] Medium +- [ ] Low + +The severity comes from the failure mode rather than the likelihood. A WebView2 initialization failure — a missing +runtime, a locked cache directory, a disposed viewer — produces no diagnostic on three of four paths, so the +breadcrumb surface simply never appears and the cause is unavailable to anyone triaging it. + +## Suspected Cause / Notes + +The three discarding sites were written as deliberate fire-and-forget dispatches, with the comment "Fire and forget +WebView initialization" at `Initialization.cs:191`. The intent — not blocking initialization on a WebView2 round trip +— is sound; discarding the fault is the part that is not. + +`QuickFiler/Controllers/QfcItemController.ViewerSetup.cs` and +`QuickFiler/Controllers/QfcItemController.Initialization.cs` are owned by feature +`qfc-item-controller-defects-484`, so this was **not** fixed inside #488. Research §3.5 required that if the task +proves unobserved the correct response is a new issue against `ViewerSetup.cs`, **not** a weakening of D5's guard. +D5's guard is delivered unweakened. + +`EfcItemController.cs:97` and `:153` use `Task.Run(() => InitializeWebViewAsync());` against that class's own +same-named method and discard the returned task too; whether that belongs in the same fix is worth evaluating. + +Options worth evaluating: + +- Attach a continuation at each fire-and-forget site that routes a fault to the project's logging pattern. +- Introduce a small `FireAndForget(Task, ILogger)` helper so the three sites share one observation policy. +- Subscribe `TaskScheduler.UnobservedTaskException` at the add-in boundary as a backstop only. + +Files to inspect: `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs`, +`QuickFiler/Controllers/QfcItemController.Initialization.cs`, `QuickFiler/Controllers/EfcItemController.cs`. + +## Proposed Fix / Validation Ideas + +- [ ] Unit coverage areas: a test that forces `InitializeWebViewAsync` to fault at the mocked web-view seam and asserts the fault is observed and logged rather than discarded +- [ ] Integration scenario to retest: dispose an `ItemViewer` mid-initialization and confirm the resulting `ObjectDisposedException` reaches a log +- [ ] Manual verification notes: confirm the three fire-and-forget sites still do not block initialization after the change + +## Next Step + +Promote to a GitHub issue against `QuickFiler/Controllers/QfcItemController.ViewerSetup.cs`, referenced from issue +#488's D5 acceptance criterion. diff --git a/docs/features/potential/promoted/2026-08-28-trx-evidence-host-tokens-and-malformed-xml.md b/docs/features/potential/promoted/2026-08-28-trx-evidence-host-tokens-and-malformed-xml.md new file mode 100644 index 000000000..9052647da --- /dev/null +++ b/docs/features/potential/promoted/2026-08-28-trx-evidence-host-tokens-and-malformed-xml.md @@ -0,0 +1,110 @@ +# trx-evidence-host-tokens-and-malformed-xml (Issue #671) + +- Date captured: 2026-08-28 +- Author: Dan Moisan +- Status: Promoted -> docs/features/active/trx-evidence-host-tokens-and-malformed-xml/ (Issue #671) + +> Automation note: Keep the section headings below unchanged; the promotion tooling maps each of them into the GitHub bug issue template. + +- Issue: #671 +- Issue URL: https://github.com/drmoisan/TaskMaster/issues/671 +- Last Updated: 2026-08-28 +## Summary + +Committed `.trx` test evidence across the repository carries host identity tokens, and the ad-hoc +redaction agents apply to remove them silently produces **XML that is not well-formed**, because the +placeholder is written with angle brackets directly into an XML attribute value. Separately, the coverage +step commits raw Cobertura documents at roughly 10.7 MB each. All three problems come from the same gap: +there is no defined convention for what test-run evidence should look like once it is committed. + +## Environment + +- OS/version: Windows 11 Pro 10.0.26200 +- Python version: n/a (.NET Framework 4.8.1; vstest.console.exe TRX logger, AltCover/Cobertura output) +- Command/flags used: `vstest.console.exe ... /Logger:trx;LogFileName=.trx`, and + `scripts/vscode/Invoke-MSTestWithCoverage.ps1 -CoverageOutput .cobertura.xml` +- Data source or fixture: committed evidence trees under `docs/features/active/*/evidence/` + +## Steps to Reproduce + +1. Run any repository test gate that writes a TRX under a feature's `evidence/` tree. +2. Inspect the emitted file: `runUser` carries `\`, `computerName` carries the host + name, and `storage`/`codeBase` carry the absolute checkout path including the account name. Note that + vstest **lowercases** the `storage` path, so a case-sensitive search for the account name misses it. +3. Apply the redaction agents have been applying, substituting a placeholder written as + `` into those attributes. +4. Parse the result with any XML parser. It fails. + +## Expected Behavior + +Committed test evidence should carry no host, account, or absolute-path token, and should remain +well-formed XML so that a reviewer or a gate can parse it and read its counters. Committed coverage +evidence should be small enough that retaining it is not a repository-size decision. + +## Actual Behavior + +Three distinct failures, all observed on `epic/quickfiler-bug-family-integration`: + +1. **Host tokens survive.** Feature 488's review (`policy-audit.2026-08-28T06-44.md`, finding PA-1) found + the absolute path and the `runUser` domain token in all 19 of its committed TRX files, and noted the + same tokens are already present in previously merged sibling evidence (features 501, 608, 439). +2. **Redaction breaks the XML.** A raw `<` is not legal in an XML attribute value. Substituting + `` into `storage`/`codeBase` made **all 19 of feature 488's committed TRX files + unparseable**. This was verified against the committed blobs and went undetected through a full + feature review, because the review re-derived its coverage figures from the Cobertura documents rather + than from the TRX. Evidence that cannot be parsed cannot be audited mechanically. +3. **Raw Cobertura is large.** Feature 488 committed `coverage-baseline.cobertura.xml` and + `coverage-final.cobertura.xml` at roughly 10.7 MB each, 21.4 MB for one feature. Deleting them later + does not reclaim the space, because the blobs are already in history; the decision is only ever + prospective. + +## Logs / Screenshots + +- [ ] Attached minimal logs or screenshot +- Snippet: the two token forms, as observed before remediation — + `storage="c:\users\\repos\taskmaster\...\quickfiler.test.dll"` (note the lowercasing) and + `runUser="\"`. Remediation for 488 is recorded under finding PA-1 in + `docs/features/active/itemviewer-breadcrumb-lifecycle-defects-488/policy-audit.2026-08-28T06-44.md`. + +## Impact / Severity + +- [ ] Blocker +- [ ] High +- [x] Medium +- [ ] Low + +Medium rather than High: the leaked tokens are a developer account and machine name in a private +repository, not a credential. The parseability defect is the more consequential half, because it silently +degrades the audit trail every gate depends on, and it defeats exactly the mechanical verification that +would otherwise catch a fabricated result. + +## Suspected Cause / Notes + +There is no convention, so each agent invents one under time pressure, and the two obvious placeholder +spellings are both wrong: an angle-bracket token breaks XML, and a bare account name is easy to miss +because vstest lowercases one of the three attributes that carries it. + +The durable fix is to stop relying on after-the-fact redaction: + +- vstest's TRX logger already accepts an explicit `/ResultsDirectory:` and `LogFileName=`; controlling + those removes the default `__.trx` naming at the source. +- A tiny sanitizer used by every gate would be better than per-agent `sed`, and it must emit + bracket-free placeholders and re-parse the file afterwards to prove it is still well-formed. +- For coverage, commit a compact package-level summary rather than the full per-line Cobertura document. + The 488 review identified the exact subset a reviewer actually consumes: the root `coverage` element + plus per-file hit tables for the measured files. + +Files to inspect: `scripts/vscode/Invoke-MSTest.ps1`, +`scripts/vscode/Invoke-MSTestWithCoverage.ps1`, `.claude/skills/evidence-and-timestamp-conventions/SKILL.md`, +and the committed evidence trees under `docs/features/active/*/evidence/`. + +## Proposed Fix / Validation Ideas + +- [ ] Unit coverage areas: a test asserting the sanitizer leaves the document well-formed and preserves every `Counters` attribute +- [ ] Integration scenario to retest: run a gate end to end and assert the committed artifact parses and contains no host, account, or absolute-path token under either casing +- [ ] Manual verification notes: sweep the existing committed evidence for the pre-existing instances in features 501, 608, and 439, and decide whether to rewrite them or leave them and fix the convention going forward + +## Next Step + +- [ ] Promote to GitHub issue (bug-report template) +- [ ] Move to active fix folder / branch